aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-09-23 12:09:27 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-23 12:09:27 -0400
commit1f6d80358dc9bbbeb56cb43384fa11fd645d9289 (patch)
tree152bfa5165292a8e4f06d536b6d222a68480e573 /drivers
parenta2aeb02a8e6a9fef397c344245a54eeae67341f6 (diff)
parent98f75b8291a89ba6bf73e322ee467ce0bfeb91c1 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: arch/mips/net/bpf_jit.c drivers/net/can/flexcan.c Both the flexcan and MIPS bpf_jit conflicts were cases of simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/acpi_cmos_rtc.c2
-rw-r--r--drivers/acpi/acpi_lpss.c10
-rw-r--r--drivers/acpi/battery.c14
-rw-r--r--drivers/acpi/bus.c10
-rw-r--r--drivers/base/regmap/regmap-debugfs.c9
-rw-r--r--drivers/block/mtip32xx/mtip32xx.c1
-rw-r--r--drivers/block/null_blk.c29
-rw-r--r--drivers/block/rbd.c6
-rw-r--r--drivers/char/hw_random/virtio-rng.c7
-rw-r--r--drivers/clk/at91/clk-slow.c2
-rw-r--r--drivers/clk/clk-efm32gg.c6
-rw-r--r--drivers/clk/clk.c7
-rw-r--r--drivers/clk/qcom/gcc-ipq806x.c2
-rw-r--r--drivers/clk/rockchip/clk-rk3288.c4
-rw-r--r--drivers/clk/ti/clk-dra7-atl.c6
-rw-r--r--drivers/clk/ti/divider.c7
-rw-r--r--drivers/cpufreq/cpufreq_opp.c2
-rw-r--r--drivers/dma/dma-jz4740.c3
-rw-r--r--drivers/firmware/efi/libstub/fdt.c10
-rw-r--r--drivers/gpu/drm/ast/ast_main.c3
-rw-r--r--drivers/gpu/drm/bochs/bochs_kms.c1
-rw-r--r--drivers/gpu/drm/cirrus/cirrus_mode.c1
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c9
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h10
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c11
-rw-r--r--drivers/gpu/drm/i915/i915_gem_userptr.c409
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h12
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c4
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c7
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c66
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c4
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi.c46
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c15
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c2
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/bar/nvc0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/fb/nvc0.c1
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/ltc/gf100.c2
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/ltc/gk104.c2
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/ltc/gm107.c2
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_acpi.c16
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_drm.c1
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_vga.c9
-rw-r--r--drivers/gpu/drm/radeon/atombios_dp.c7
-rw-r--r--drivers/gpu/drm/radeon/cik_sdma.c7
-rw-r--r--drivers/gpu/drm/radeon/kv_dpm.c28
-rw-r--r--drivers/gpu/drm/radeon/ni_dma.c6
-rw-r--r--drivers/gpu/drm/radeon/r100.c28
-rw-r--r--drivers/gpu/drm/radeon/r600.c4
-rw-r--r--drivers/gpu/drm/radeon/r600_dma.c9
-rw-r--r--drivers/gpu/drm/radeon/r600d.h7
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.h3
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c33
-rw-r--r--drivers/gpu/drm/radeon/radeon_atpx_handler.c16
-rw-r--r--drivers/gpu/drm/radeon/radeon_device.c11
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c3
-rw-r--r--drivers/gpu/drm/radeon/radeon_semaphore.c2
-rw-r--r--drivers/gpu/drm/radeon/rs400.c4
-rw-r--r--drivers/gpu/drm/sti/sti_hdmi.c1
-rw-r--r--drivers/gpu/vga/vga_switcheroo.c6
-rw-r--r--drivers/gpu/vga/vgaarb.c46
-rw-r--r--drivers/iio/accel/bma180.c2
-rw-r--r--drivers/iio/adc/ad_sigma_delta.c2
-rw-r--r--drivers/iio/adc/at91_adc.c12
-rw-r--r--drivers/iio/adc/xilinx-xadc-core.c2
-rw-r--r--drivers/iio/common/hid-sensors/hid-sensor-trigger.c3
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_trigger.c2
-rw-r--r--drivers/iio/gyro/itg3200_buffer.c2
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c2
-rw-r--r--drivers/iio/inkern.c2
-rw-r--r--drivers/iio/magnetometer/st_magn_core.c52
-rw-r--r--drivers/infiniband/hw/mlx4/main.c2
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c2
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib.h6
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c4
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.c20
-rw-r--r--drivers/input/keyboard/atkbd.c8
-rw-r--r--drivers/input/keyboard/cap1106.c4
-rw-r--r--drivers/input/keyboard/matrix_keypad.c9
-rw-r--r--drivers/input/mouse/alps.c4
-rw-r--r--drivers/input/mouse/elantech.c11
-rw-r--r--drivers/input/mouse/psmouse-base.c2
-rw-r--r--drivers/input/mouse/synaptics.c68
-rw-r--r--drivers/input/mouse/synaptics.h11
-rw-r--r--drivers/input/mouse/synaptics_usb.c6
-rw-r--r--drivers/input/mouse/trackpoint.c3
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h15
-rw-r--r--drivers/input/serio/i8042.c2
-rw-r--r--drivers/input/serio/serport.c45
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c25
-rw-r--r--drivers/input/touchscreen/wm9712.c2
-rw-r--r--drivers/input/touchscreen/wm9713.c2
-rw-r--r--drivers/iommu/arm-smmu.c127
-rw-r--r--drivers/iommu/dmar.c3
-rw-r--r--drivers/iommu/fsl_pamu_domain.c10
-rw-r--r--drivers/iommu/iommu.c8
-rw-r--r--drivers/irqchip/exynos-combiner.c1
-rw-r--r--drivers/irqchip/irq-crossbar.c4
-rw-r--r--drivers/irqchip/irq-gic-v3.c38
-rw-r--r--drivers/irqchip/irq-gic.c2
-rw-r--r--drivers/md/dm-cache-target.c4
-rw-r--r--drivers/media/Kconfig1
-rw-r--r--drivers/media/dvb-core/dvb-usb-ids.h2
-rw-r--r--drivers/media/dvb-frontends/af9033.c13
-rw-r--r--drivers/media/dvb-frontends/af9033_priv.h20
-rw-r--r--drivers/media/i2c/smiapp/smiapp-core.c13
-rw-r--r--drivers/media/pci/cx18/cx18-driver.c1
-rw-r--r--drivers/media/tuners/tuner_it913x.c6
-rw-r--r--drivers/media/usb/dvb-usb-v2/af9035.c4
-rw-r--r--drivers/message/fusion/Kconfig2
-rw-r--r--drivers/misc/lattice-ecp3-config.c5
-rw-r--r--drivers/net/bonding/bond_main.c19
-rw-r--r--drivers/net/can/at91_can.c8
-rw-r--r--drivers/net/can/c_can/c_can_platform.c4
-rw-r--r--drivers/net/can/flexcan.c54
-rw-r--r--drivers/net/can/sja1000/peak_pci.c6
-rw-r--r--drivers/net/ethernet/3com/3c59x.c50
-rw-r--r--drivers/net/ethernet/arc/emac_main.c53
-rw-r--r--drivers/net/ethernet/broadcom/b44.c2
-rw-r--r--drivers/net/ethernet/broadcom/bcmsysport.c31
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmgenet.c143
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c20
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c49
-rw-r--r--drivers/net/ethernet/davicom/dm9000.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c21
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/qp.c12
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/resource_tracker.c38
-rw-r--r--drivers/net/ethernet/octeon/octeon_mgmt.c4
-rw-r--r--drivers/net/ethernet/oki-semi/pch_gbe/Kconfig1
-rw-r--r--drivers/net/ethernet/realtek/r8169.c67
-rw-r--r--drivers/net/ethernet/sfc/farch.c3
-rw-r--r--drivers/net/ethernet/sun/sunvnet.c7
-rw-r--r--drivers/net/ethernet/ti/cpsw.c52
-rw-r--r--drivers/net/macvlan.c4
-rw-r--r--drivers/net/phy/micrel.c3
-rw-r--r--drivers/net/usb/r8152.c62
-rw-r--r--drivers/net/wireless/ath/ath9k/common-beacon.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_txrx.c2
-rw-r--r--drivers/net/wireless/brcm80211/Kconfig10
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/Makefile10
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/bcdc.h7
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fweh.c12
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fweh.h2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h11
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c9
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/power.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-7000.c16
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-config.h3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-nvm-parse.c4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex.c9
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c3
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api.h4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c10
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c25
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/power.c5
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/rx.c6
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/sf.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/tx.c8
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/drv.c7
-rw-r--r--drivers/ntb/ntb_transport.c17
-rw-r--r--drivers/parisc/dino.c2
-rw-r--r--drivers/pci/host/pci-imx6.c38
-rw-r--r--drivers/pci/hotplug/acpiphp_glue.c16
-rw-r--r--drivers/pci/hotplug/pciehp_hpc.c12
-rw-r--r--drivers/pci/hotplug/pcihp_slot.c6
-rw-r--r--drivers/phy/Kconfig4
-rw-r--r--drivers/phy/phy-exynos5-usbdrd.c1
-rw-r--r--drivers/phy/phy-miphy365x.c1
-rw-r--r--drivers/phy/phy-twl4030-usb.c121
-rw-r--r--drivers/pinctrl/pinctrl-baytrail.c1
-rw-r--r--drivers/regulator/88pm8607.c2
-rw-r--r--drivers/regulator/da9052-regulator.c4
-rw-r--r--drivers/regulator/max8907-regulator.c2
-rw-r--r--drivers/regulator/max8925-regulator.c2
-rw-r--r--drivers/regulator/max8997.c2
-rw-r--r--drivers/regulator/palmas-regulator.c1
-rw-r--r--drivers/regulator/tps65910-regulator.c2
-rw-r--r--drivers/s390/block/dasd_devmap.c2
-rw-r--r--drivers/scsi/Kconfig20
-rw-r--r--drivers/scsi/bnx2fc/Kconfig5
-rw-r--r--drivers/scsi/bnx2i/Kconfig1
-rw-r--r--drivers/scsi/csiostor/Kconfig2
-rw-r--r--drivers/scsi/libiscsi.c10
-rw-r--r--drivers/scsi/qla2xxx/Kconfig4
-rw-r--r--drivers/scsi/scsi_lib.c5
-rw-r--r--drivers/spi/spi-davinci.c39
-rw-r--r--drivers/spi/spi-dw.c12
-rw-r--r--drivers/spi/spi-fsl-espi.c15
-rw-r--r--drivers/spi/spi-fsl-spi.c10
-rw-r--r--drivers/spi/spi-pl022.c2
-rw-r--r--drivers/spi/spi-rockchip.c5
-rw-r--r--drivers/spi/spi-sirf.c5
-rw-r--r--drivers/staging/android/sync.c1
-rw-r--r--drivers/staging/iio/meter/ade7758_trigger.c2
-rw-r--r--drivers/staging/imx-drm/imx-ldb.c3
-rw-r--r--drivers/staging/imx-drm/ipuv3-plane.c3
-rw-r--r--drivers/staging/lustre/lustre/llite/llite_lib.c2
-rw-r--r--drivers/staging/vt6655/hostap.c3
-rw-r--r--drivers/target/iscsi/iscsi_target.c4
-rw-r--r--drivers/target/iscsi/iscsi_target_parameters.c2
-rw-r--r--drivers/target/iscsi/iscsi_target_util.c2
-rw-r--r--drivers/target/target_core_configfs.c2
-rw-r--r--drivers/target/target_core_spc.c2
-rw-r--r--drivers/tty/serial/8250/8250_dw.c1
-rw-r--r--drivers/tty/serial/atmel_serial.c43
-rw-r--r--drivers/tty/serial/xilinx_uartps.c2
-rw-r--r--drivers/usb/chipidea/ci_hdrc_msm.c7
-rw-r--r--drivers/usb/core/hub.c4
-rw-r--r--drivers/usb/dwc2/gadget.c52
-rw-r--r--drivers/usb/dwc3/core.c13
-rw-r--r--drivers/usb/dwc3/dwc3-omap.c2
-rw-r--r--drivers/usb/dwc3/gadget.c11
-rw-r--r--drivers/usb/gadget/function/f_fs.c66
-rw-r--r--drivers/usb/gadget/function/u_fs.h2
-rw-r--r--drivers/usb/gadget/udc/fusb300_udc.h2
-rw-r--r--drivers/usb/gadget/udc/net2280.c2
-rw-r--r--drivers/usb/host/ehci-hcd.c2
-rw-r--r--drivers/usb/host/xhci-hub.c8
-rw-r--r--drivers/usb/host/xhci-mem.c3
-rw-r--r--drivers/usb/host/xhci.c12
-rw-r--r--drivers/usb/musb/musb_cppi41.c17
-rw-r--r--drivers/usb/phy/phy-mxs-usb.c8
-rw-r--r--drivers/usb/phy/phy-tegra-usb.c4
-rw-r--r--drivers/usb/renesas_usbhs/fifo.c72
-rw-r--r--drivers/usb/renesas_usbhs/mod.c5
-rw-r--r--drivers/usb/renesas_usbhs/pipe.c13
-rw-r--r--drivers/usb/renesas_usbhs/pipe.h4
-rw-r--r--drivers/usb/serial/ftdi_sio.c3
-rw-r--r--drivers/usb/serial/ftdi_sio_ids.h12
-rw-r--r--drivers/usb/serial/sierra.c9
-rw-r--r--drivers/usb/serial/zte_ev.c8
-rw-r--r--drivers/usb/storage/uas-detect.h27
-rw-r--r--drivers/usb/storage/unusual_devs.h38
-rw-r--r--drivers/uwb/lc-dev.c13
-rw-r--r--drivers/video/fbdev/amba-clcd.c4
-rw-r--r--drivers/xen/balloon.c4
-rw-r--r--drivers/xen/gntalloc.c16
-rw-r--r--drivers/xen/manage.c7
239 files changed, 2235 insertions, 1138 deletions
diff --git a/drivers/acpi/acpi_cmos_rtc.c b/drivers/acpi/acpi_cmos_rtc.c
index 2da8660262e5..81dc75033f15 100644
--- a/drivers/acpi/acpi_cmos_rtc.c
+++ b/drivers/acpi/acpi_cmos_rtc.c
@@ -33,7 +33,7 @@ acpi_cmos_rtc_space_handler(u32 function, acpi_physical_address address,
33 void *handler_context, void *region_context) 33 void *handler_context, void *region_context)
34{ 34{
35 int i; 35 int i;
36 u8 *value = (u8 *)&value64; 36 u8 *value = (u8 *)value64;
37 37
38 if (address > 0xff || !value64) 38 if (address > 0xff || !value64)
39 return AE_BAD_PARAMETER; 39 return AE_BAD_PARAMETER;
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 9dfec48dd4e5..fddc1e86f9d0 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -610,7 +610,7 @@ static int acpi_lpss_suspend_late(struct device *dev)
610 return acpi_dev_suspend_late(dev); 610 return acpi_dev_suspend_late(dev);
611} 611}
612 612
613static int acpi_lpss_restore_early(struct device *dev) 613static int acpi_lpss_resume_early(struct device *dev)
614{ 614{
615 int ret = acpi_dev_resume_early(dev); 615 int ret = acpi_dev_resume_early(dev);
616 616
@@ -650,15 +650,15 @@ static int acpi_lpss_runtime_resume(struct device *dev)
650static struct dev_pm_domain acpi_lpss_pm_domain = { 650static struct dev_pm_domain acpi_lpss_pm_domain = {
651 .ops = { 651 .ops = {
652#ifdef CONFIG_PM_SLEEP 652#ifdef CONFIG_PM_SLEEP
653 .suspend_late = acpi_lpss_suspend_late,
654 .restore_early = acpi_lpss_restore_early,
655 .prepare = acpi_subsys_prepare, 653 .prepare = acpi_subsys_prepare,
656 .complete = acpi_subsys_complete, 654 .complete = acpi_subsys_complete,
657 .suspend = acpi_subsys_suspend, 655 .suspend = acpi_subsys_suspend,
658 .resume_early = acpi_subsys_resume_early, 656 .suspend_late = acpi_lpss_suspend_late,
657 .resume_early = acpi_lpss_resume_early,
659 .freeze = acpi_subsys_freeze, 658 .freeze = acpi_subsys_freeze,
660 .poweroff = acpi_subsys_suspend, 659 .poweroff = acpi_subsys_suspend,
661 .poweroff_late = acpi_subsys_suspend_late, 660 .poweroff_late = acpi_lpss_suspend_late,
661 .restore_early = acpi_lpss_resume_early,
662#endif 662#endif
663#ifdef CONFIG_PM_RUNTIME 663#ifdef CONFIG_PM_RUNTIME
664 .runtime_suspend = acpi_lpss_runtime_suspend, 664 .runtime_suspend = acpi_lpss_runtime_suspend,
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 1c162e7be045..5fdfe65fe165 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -534,20 +534,6 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
534 " invalid.\n"); 534 " invalid.\n");
535 } 535 }
536 536
537 /*
538 * When fully charged, some batteries wrongly report
539 * capacity_now = design_capacity instead of = full_charge_capacity
540 */
541 if (battery->capacity_now > battery->full_charge_capacity
542 && battery->full_charge_capacity != ACPI_BATTERY_VALUE_UNKNOWN) {
543 if (battery->capacity_now != battery->design_capacity)
544 printk_once(KERN_WARNING FW_BUG
545 "battery: reported current charge level (%d) "
546 "is higher than reported maximum charge level (%d).\n",
547 battery->capacity_now, battery->full_charge_capacity);
548 battery->capacity_now = battery->full_charge_capacity;
549 }
550
551 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags) 537 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)
552 && battery->capacity_now >= 0 && battery->capacity_now <= 100) 538 && battery->capacity_now >= 0 && battery->capacity_now <= 100)
553 battery->capacity_now = (battery->capacity_now * 539 battery->capacity_now = (battery->capacity_now *
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 8581f5b84f48..8b67bd0f6bb5 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -177,16 +177,6 @@ void acpi_bus_detach_private_data(acpi_handle handle)
177} 177}
178EXPORT_SYMBOL_GPL(acpi_bus_detach_private_data); 178EXPORT_SYMBOL_GPL(acpi_bus_detach_private_data);
179 179
180void acpi_bus_no_hotplug(acpi_handle handle)
181{
182 struct acpi_device *adev = NULL;
183
184 acpi_bus_get_device(handle, &adev);
185 if (adev)
186 adev->flags.no_hotplug = true;
187}
188EXPORT_SYMBOL_GPL(acpi_bus_no_hotplug);
189
190static void acpi_print_osc_error(acpi_handle handle, 180static void acpi_print_osc_error(acpi_handle handle,
191 struct acpi_osc_context *context, char *error) 181 struct acpi_osc_context *context, char *error)
192{ 182{
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
index 65ea7b256b3e..0c94b661c16f 100644
--- a/drivers/base/regmap/regmap-debugfs.c
+++ b/drivers/base/regmap/regmap-debugfs.c
@@ -512,7 +512,14 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
512 map, &regmap_reg_ranges_fops); 512 map, &regmap_reg_ranges_fops);
513 513
514 if (map->max_register || regmap_readable(map, 0)) { 514 if (map->max_register || regmap_readable(map, 0)) {
515 debugfs_create_file("registers", 0400, map->debugfs, 515 umode_t registers_mode;
516
517 if (IS_ENABLED(REGMAP_ALLOW_WRITE_DEBUGFS))
518 registers_mode = 0600;
519 else
520 registers_mode = 0400;
521
522 debugfs_create_file("registers", registers_mode, map->debugfs,
516 map, &regmap_map_fops); 523 map, &regmap_map_fops);
517 debugfs_create_file("access", 0400, map->debugfs, 524 debugfs_create_file("access", 0400, map->debugfs,
518 map, &regmap_access_fops); 525 map, &regmap_access_fops);
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index db1e9560d8a7..5c8e7fe07745 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -3918,7 +3918,6 @@ skip_create_disk:
3918 if (rv) { 3918 if (rv) {
3919 dev_err(&dd->pdev->dev, 3919 dev_err(&dd->pdev->dev,
3920 "Unable to allocate request queue\n"); 3920 "Unable to allocate request queue\n");
3921 rv = -ENOMEM;
3922 goto block_queue_alloc_init_error; 3921 goto block_queue_alloc_init_error;
3923 } 3922 }
3924 3923
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
index a3b042c4d448..00d469c7f9f7 100644
--- a/drivers/block/null_blk.c
+++ b/drivers/block/null_blk.c
@@ -462,17 +462,21 @@ static int null_add_dev(void)
462 struct gendisk *disk; 462 struct gendisk *disk;
463 struct nullb *nullb; 463 struct nullb *nullb;
464 sector_t size; 464 sector_t size;
465 int rv;
465 466
466 nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, home_node); 467 nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, home_node);
467 if (!nullb) 468 if (!nullb) {
469 rv = -ENOMEM;
468 goto out; 470 goto out;
471 }
469 472
470 spin_lock_init(&nullb->lock); 473 spin_lock_init(&nullb->lock);
471 474
472 if (queue_mode == NULL_Q_MQ && use_per_node_hctx) 475 if (queue_mode == NULL_Q_MQ && use_per_node_hctx)
473 submit_queues = nr_online_nodes; 476 submit_queues = nr_online_nodes;
474 477
475 if (setup_queues(nullb)) 478 rv = setup_queues(nullb);
479 if (rv)
476 goto out_free_nullb; 480 goto out_free_nullb;
477 481
478 if (queue_mode == NULL_Q_MQ) { 482 if (queue_mode == NULL_Q_MQ) {
@@ -484,22 +488,29 @@ static int null_add_dev(void)
484 nullb->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; 488 nullb->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
485 nullb->tag_set.driver_data = nullb; 489 nullb->tag_set.driver_data = nullb;
486 490
487 if (blk_mq_alloc_tag_set(&nullb->tag_set)) 491 rv = blk_mq_alloc_tag_set(&nullb->tag_set);
492 if (rv)
488 goto out_cleanup_queues; 493 goto out_cleanup_queues;
489 494
490 nullb->q = blk_mq_init_queue(&nullb->tag_set); 495 nullb->q = blk_mq_init_queue(&nullb->tag_set);
491 if (!nullb->q) 496 if (!nullb->q) {
497 rv = -ENOMEM;
492 goto out_cleanup_tags; 498 goto out_cleanup_tags;
499 }
493 } else if (queue_mode == NULL_Q_BIO) { 500 } else if (queue_mode == NULL_Q_BIO) {
494 nullb->q = blk_alloc_queue_node(GFP_KERNEL, home_node); 501 nullb->q = blk_alloc_queue_node(GFP_KERNEL, home_node);
495 if (!nullb->q) 502 if (!nullb->q) {
503 rv = -ENOMEM;
496 goto out_cleanup_queues; 504 goto out_cleanup_queues;
505 }
497 blk_queue_make_request(nullb->q, null_queue_bio); 506 blk_queue_make_request(nullb->q, null_queue_bio);
498 init_driver_queues(nullb); 507 init_driver_queues(nullb);
499 } else { 508 } else {
500 nullb->q = blk_init_queue_node(null_request_fn, &nullb->lock, home_node); 509 nullb->q = blk_init_queue_node(null_request_fn, &nullb->lock, home_node);
501 if (!nullb->q) 510 if (!nullb->q) {
511 rv = -ENOMEM;
502 goto out_cleanup_queues; 512 goto out_cleanup_queues;
513 }
503 blk_queue_prep_rq(nullb->q, null_rq_prep_fn); 514 blk_queue_prep_rq(nullb->q, null_rq_prep_fn);
504 blk_queue_softirq_done(nullb->q, null_softirq_done_fn); 515 blk_queue_softirq_done(nullb->q, null_softirq_done_fn);
505 init_driver_queues(nullb); 516 init_driver_queues(nullb);
@@ -509,8 +520,10 @@ static int null_add_dev(void)
509 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, nullb->q); 520 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, nullb->q);
510 521
511 disk = nullb->disk = alloc_disk_node(1, home_node); 522 disk = nullb->disk = alloc_disk_node(1, home_node);
512 if (!disk) 523 if (!disk) {
524 rv = -ENOMEM;
513 goto out_cleanup_blk_queue; 525 goto out_cleanup_blk_queue;
526 }
514 527
515 mutex_lock(&lock); 528 mutex_lock(&lock);
516 list_add_tail(&nullb->list, &nullb_list); 529 list_add_tail(&nullb->list, &nullb_list);
@@ -544,7 +557,7 @@ out_cleanup_queues:
544out_free_nullb: 557out_free_nullb:
545 kfree(nullb); 558 kfree(nullb);
546out: 559out:
547 return -ENOMEM; 560 return rv;
548} 561}
549 562
550static int __init null_init(void) 563static int __init null_init(void)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 623c84145b79..4b97baf8afa3 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -5087,9 +5087,11 @@ static int rbd_dev_device_setup(struct rbd_device *rbd_dev)
5087 set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE); 5087 set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE);
5088 set_disk_ro(rbd_dev->disk, rbd_dev->mapping.read_only); 5088 set_disk_ro(rbd_dev->disk, rbd_dev->mapping.read_only);
5089 5089
5090 rbd_dev->rq_wq = alloc_workqueue(rbd_dev->disk->disk_name, 0, 0); 5090 rbd_dev->rq_wq = alloc_workqueue("%s", 0, 0, rbd_dev->disk->disk_name);
5091 if (!rbd_dev->rq_wq) 5091 if (!rbd_dev->rq_wq) {
5092 ret = -ENOMEM;
5092 goto err_out_mapping; 5093 goto err_out_mapping;
5094 }
5093 5095
5094 ret = rbd_bus_add_dev(rbd_dev); 5096 ret = rbd_bus_add_dev(rbd_dev);
5095 if (ret) 5097 if (ret)
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
index 2e3139eda93b..132c9ccfdc62 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -36,6 +36,7 @@ struct virtrng_info {
36 int index; 36 int index;
37 bool busy; 37 bool busy;
38 bool hwrng_register_done; 38 bool hwrng_register_done;
39 bool hwrng_removed;
39}; 40};
40 41
41 42
@@ -68,6 +69,9 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
68 int ret; 69 int ret;
69 struct virtrng_info *vi = (struct virtrng_info *)rng->priv; 70 struct virtrng_info *vi = (struct virtrng_info *)rng->priv;
70 71
72 if (vi->hwrng_removed)
73 return -ENODEV;
74
71 if (!vi->busy) { 75 if (!vi->busy) {
72 vi->busy = true; 76 vi->busy = true;
73 init_completion(&vi->have_data); 77 init_completion(&vi->have_data);
@@ -137,6 +141,9 @@ static void remove_common(struct virtio_device *vdev)
137{ 141{
138 struct virtrng_info *vi = vdev->priv; 142 struct virtrng_info *vi = vdev->priv;
139 143
144 vi->hwrng_removed = true;
145 vi->data_avail = 0;
146 complete(&vi->have_data);
140 vdev->config->reset(vdev); 147 vdev->config->reset(vdev);
141 vi->busy = false; 148 vi->busy = false;
142 if (vi->hwrng_register_done) 149 if (vi->hwrng_register_done)
diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
index 0300c46ee247..32f7c1b36204 100644
--- a/drivers/clk/at91/clk-slow.c
+++ b/drivers/clk/at91/clk-slow.c
@@ -447,7 +447,7 @@ void __init of_at91sam9260_clk_slow_setup(struct device_node *np,
447 int i; 447 int i;
448 448
449 num_parents = of_count_phandle_with_args(np, "clocks", "#clock-cells"); 449 num_parents = of_count_phandle_with_args(np, "clocks", "#clock-cells");
450 if (num_parents <= 0 || num_parents > 1) 450 if (num_parents != 2)
451 return; 451 return;
452 452
453 for (i = 0; i < num_parents; ++i) { 453 for (i = 0; i < num_parents; ++i) {
diff --git a/drivers/clk/clk-efm32gg.c b/drivers/clk/clk-efm32gg.c
index bac2ddf49d02..73a8d0ff530c 100644
--- a/drivers/clk/clk-efm32gg.c
+++ b/drivers/clk/clk-efm32gg.c
@@ -22,7 +22,7 @@ static struct clk_onecell_data clk_data = {
22 .clk_num = ARRAY_SIZE(clk), 22 .clk_num = ARRAY_SIZE(clk),
23}; 23};
24 24
25static int __init efm32gg_cmu_init(struct device_node *np) 25static void __init efm32gg_cmu_init(struct device_node *np)
26{ 26{
27 int i; 27 int i;
28 void __iomem *base; 28 void __iomem *base;
@@ -33,7 +33,7 @@ static int __init efm32gg_cmu_init(struct device_node *np)
33 base = of_iomap(np, 0); 33 base = of_iomap(np, 0);
34 if (!base) { 34 if (!base) {
35 pr_warn("Failed to map address range for efm32gg,cmu node\n"); 35 pr_warn("Failed to map address range for efm32gg,cmu node\n");
36 return -EADDRNOTAVAIL; 36 return;
37 } 37 }
38 38
39 clk[clk_HFXO] = clk_register_fixed_rate(NULL, "HFXO", NULL, 39 clk[clk_HFXO] = clk_register_fixed_rate(NULL, "HFXO", NULL,
@@ -76,6 +76,6 @@ static int __init efm32gg_cmu_init(struct device_node *np)
76 clk[clk_HFPERCLKDAC0] = clk_register_gate(NULL, "HFPERCLK.DAC0", 76 clk[clk_HFPERCLKDAC0] = clk_register_gate(NULL, "HFPERCLK.DAC0",
77 "HFXO", 0, base + CMU_HFPERCLKEN0, 17, 0, NULL); 77 "HFXO", 0, base + CMU_HFPERCLKEN0, 17, 0, NULL);
78 78
79 return of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); 79 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
80} 80}
81CLK_OF_DECLARE(efm32ggcmu, "efm32gg,cmu", efm32gg_cmu_init); 81CLK_OF_DECLARE(efm32ggcmu, "efm32gg,cmu", efm32gg_cmu_init);
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index b76fa69b44cb..bacc06ff939b 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1467,6 +1467,7 @@ static struct clk *clk_propagate_rate_change(struct clk *clk, unsigned long even
1467static void clk_change_rate(struct clk *clk) 1467static void clk_change_rate(struct clk *clk)
1468{ 1468{
1469 struct clk *child; 1469 struct clk *child;
1470 struct hlist_node *tmp;
1470 unsigned long old_rate; 1471 unsigned long old_rate;
1471 unsigned long best_parent_rate = 0; 1472 unsigned long best_parent_rate = 0;
1472 bool skip_set_rate = false; 1473 bool skip_set_rate = false;
@@ -1502,7 +1503,11 @@ static void clk_change_rate(struct clk *clk)
1502 if (clk->notifier_count && old_rate != clk->rate) 1503 if (clk->notifier_count && old_rate != clk->rate)
1503 __clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate); 1504 __clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate);
1504 1505
1505 hlist_for_each_entry(child, &clk->children, child_node) { 1506 /*
1507 * Use safe iteration, as change_rate can actually swap parents
1508 * for certain clock types.
1509 */
1510 hlist_for_each_entry_safe(child, tmp, &clk->children, child_node) {
1506 /* Skip children who will be reparented to another clock */ 1511 /* Skip children who will be reparented to another clock */
1507 if (child->new_parent && child->new_parent != clk) 1512 if (child->new_parent && child->new_parent != clk)
1508 continue; 1513 continue;
diff --git a/drivers/clk/qcom/gcc-ipq806x.c b/drivers/clk/qcom/gcc-ipq806x.c
index 4032e510d9aa..3b83b7dd78c7 100644
--- a/drivers/clk/qcom/gcc-ipq806x.c
+++ b/drivers/clk/qcom/gcc-ipq806x.c
@@ -1095,7 +1095,7 @@ static struct clk_branch prng_clk = {
1095}; 1095};
1096 1096
1097static const struct freq_tbl clk_tbl_sdc[] = { 1097static const struct freq_tbl clk_tbl_sdc[] = {
1098 { 144000, P_PXO, 5, 18,625 }, 1098 { 200000, P_PXO, 2, 2, 125 },
1099 { 400000, P_PLL8, 4, 1, 240 }, 1099 { 400000, P_PLL8, 4, 1, 240 },
1100 { 16000000, P_PLL8, 4, 1, 6 }, 1100 { 16000000, P_PLL8, 4, 1, 6 },
1101 { 17070000, P_PLL8, 1, 2, 45 }, 1101 { 17070000, P_PLL8, 1, 2, 45 },
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
index 0d8c6c59a75e..b22a2d2f21e9 100644
--- a/drivers/clk/rockchip/clk-rk3288.c
+++ b/drivers/clk/rockchip/clk-rk3288.c
@@ -545,7 +545,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
545 GATE(PCLK_PWM, "pclk_pwm", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 0, GFLAGS), 545 GATE(PCLK_PWM, "pclk_pwm", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 0, GFLAGS),
546 GATE(PCLK_TIMER, "pclk_timer", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 1, GFLAGS), 546 GATE(PCLK_TIMER, "pclk_timer", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 1, GFLAGS),
547 GATE(PCLK_I2C0, "pclk_i2c0", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 2, GFLAGS), 547 GATE(PCLK_I2C0, "pclk_i2c0", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 2, GFLAGS),
548 GATE(PCLK_I2C1, "pclk_i2c1", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 3, GFLAGS), 548 GATE(PCLK_I2C2, "pclk_i2c2", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 3, GFLAGS),
549 GATE(0, "pclk_ddrupctl0", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 14, GFLAGS), 549 GATE(0, "pclk_ddrupctl0", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 14, GFLAGS),
550 GATE(0, "pclk_publ0", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 15, GFLAGS), 550 GATE(0, "pclk_publ0", "pclk_cpu", 0, RK3288_CLKGATE_CON(10), 15, GFLAGS),
551 GATE(0, "pclk_ddrupctl1", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 0, GFLAGS), 551 GATE(0, "pclk_ddrupctl1", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 0, GFLAGS),
@@ -603,7 +603,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
603 GATE(PCLK_I2C4, "pclk_i2c4", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 15, GFLAGS), 603 GATE(PCLK_I2C4, "pclk_i2c4", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 15, GFLAGS),
604 GATE(PCLK_UART3, "pclk_uart3", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 11, GFLAGS), 604 GATE(PCLK_UART3, "pclk_uart3", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 11, GFLAGS),
605 GATE(PCLK_UART4, "pclk_uart4", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 12, GFLAGS), 605 GATE(PCLK_UART4, "pclk_uart4", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 12, GFLAGS),
606 GATE(PCLK_I2C2, "pclk_i2c2", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 13, GFLAGS), 606 GATE(PCLK_I2C1, "pclk_i2c1", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 13, GFLAGS),
607 GATE(PCLK_I2C3, "pclk_i2c3", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 14, GFLAGS), 607 GATE(PCLK_I2C3, "pclk_i2c3", "pclk_peri", 0, RK3288_CLKGATE_CON(6), 14, GFLAGS),
608 GATE(PCLK_SARADC, "pclk_saradc", "pclk_peri", 0, RK3288_CLKGATE_CON(7), 1, GFLAGS), 608 GATE(PCLK_SARADC, "pclk_saradc", "pclk_peri", 0, RK3288_CLKGATE_CON(7), 1, GFLAGS),
609 GATE(PCLK_TSADC, "pclk_tsadc", "pclk_peri", 0, RK3288_CLKGATE_CON(7), 2, GFLAGS), 609 GATE(PCLK_TSADC, "pclk_tsadc", "pclk_peri", 0, RK3288_CLKGATE_CON(7), 2, GFLAGS),
diff --git a/drivers/clk/ti/clk-dra7-atl.c b/drivers/clk/ti/clk-dra7-atl.c
index 4a65b410e4d5..af29359677da 100644
--- a/drivers/clk/ti/clk-dra7-atl.c
+++ b/drivers/clk/ti/clk-dra7-atl.c
@@ -139,9 +139,13 @@ static long atl_clk_round_rate(struct clk_hw *hw, unsigned long rate,
139static int atl_clk_set_rate(struct clk_hw *hw, unsigned long rate, 139static int atl_clk_set_rate(struct clk_hw *hw, unsigned long rate,
140 unsigned long parent_rate) 140 unsigned long parent_rate)
141{ 141{
142 struct dra7_atl_desc *cdesc = to_atl_desc(hw); 142 struct dra7_atl_desc *cdesc;
143 u32 divider; 143 u32 divider;
144 144
145 if (!hw || !rate)
146 return -EINVAL;
147
148 cdesc = to_atl_desc(hw);
145 divider = ((parent_rate + rate / 2) / rate) - 1; 149 divider = ((parent_rate + rate / 2) / rate) - 1;
146 if (divider > DRA7_ATL_DIVIDER_MASK) 150 if (divider > DRA7_ATL_DIVIDER_MASK)
147 divider = DRA7_ATL_DIVIDER_MASK; 151 divider = DRA7_ATL_DIVIDER_MASK;
diff --git a/drivers/clk/ti/divider.c b/drivers/clk/ti/divider.c
index e6aa10db7bba..a837f703be65 100644
--- a/drivers/clk/ti/divider.c
+++ b/drivers/clk/ti/divider.c
@@ -211,11 +211,16 @@ static long ti_clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
211static int ti_clk_divider_set_rate(struct clk_hw *hw, unsigned long rate, 211static int ti_clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
212 unsigned long parent_rate) 212 unsigned long parent_rate)
213{ 213{
214 struct clk_divider *divider = to_clk_divider(hw); 214 struct clk_divider *divider;
215 unsigned int div, value; 215 unsigned int div, value;
216 unsigned long flags = 0; 216 unsigned long flags = 0;
217 u32 val; 217 u32 val;
218 218
219 if (!hw || !rate)
220 return -EINVAL;
221
222 divider = to_clk_divider(hw);
223
219 div = DIV_ROUND_UP(parent_rate, rate); 224 div = DIV_ROUND_UP(parent_rate, rate);
220 value = _get_val(divider, div); 225 value = _get_val(divider, div);
221 226
diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c
index f7a32d2326c6..773bcde893c0 100644
--- a/drivers/cpufreq/cpufreq_opp.c
+++ b/drivers/cpufreq/cpufreq_opp.c
@@ -60,7 +60,7 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev,
60 goto out; 60 goto out;
61 } 61 }
62 62
63 freq_table = kcalloc(sizeof(*freq_table), (max_opps + 1), GFP_ATOMIC); 63 freq_table = kcalloc((max_opps + 1), sizeof(*freq_table), GFP_ATOMIC);
64 if (!freq_table) { 64 if (!freq_table) {
65 ret = -ENOMEM; 65 ret = -ENOMEM;
66 goto out; 66 goto out;
diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c
index 6a9d89c93b1f..ae2ab14e64b3 100644
--- a/drivers/dma/dma-jz4740.c
+++ b/drivers/dma/dma-jz4740.c
@@ -362,8 +362,9 @@ static void jz4740_dma_chan_irq(struct jz4740_dmaengine_chan *chan)
362 vchan_cyclic_callback(&chan->desc->vdesc); 362 vchan_cyclic_callback(&chan->desc->vdesc);
363 } else { 363 } else {
364 if (chan->next_sg == chan->desc->num_sgs) { 364 if (chan->next_sg == chan->desc->num_sgs) {
365 chan->desc = NULL; 365 list_del(&chan->desc->vdesc.node);
366 vchan_cookie_complete(&chan->desc->vdesc); 366 vchan_cookie_complete(&chan->desc->vdesc);
367 chan->desc = NULL;
367 } 368 }
368 } 369 }
369 } 370 }
diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c
index a56bb3528755..c846a9608cbd 100644
--- a/drivers/firmware/efi/libstub/fdt.c
+++ b/drivers/firmware/efi/libstub/fdt.c
@@ -22,7 +22,7 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt,
22 unsigned long map_size, unsigned long desc_size, 22 unsigned long map_size, unsigned long desc_size,
23 u32 desc_ver) 23 u32 desc_ver)
24{ 24{
25 int node, prev; 25 int node, prev, num_rsv;
26 int status; 26 int status;
27 u32 fdt_val32; 27 u32 fdt_val32;
28 u64 fdt_val64; 28 u64 fdt_val64;
@@ -73,6 +73,14 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt,
73 prev = node; 73 prev = node;
74 } 74 }
75 75
76 /*
77 * Delete all memory reserve map entries. When booting via UEFI,
78 * kernel will use the UEFI memory map to find reserved regions.
79 */
80 num_rsv = fdt_num_mem_rsv(fdt);
81 while (num_rsv-- > 0)
82 fdt_del_mem_rsv(fdt, num_rsv);
83
76 node = fdt_subnode_offset(fdt, 0, "chosen"); 84 node = fdt_subnode_offset(fdt, 0, "chosen");
77 if (node < 0) { 85 if (node < 0) {
78 node = fdt_add_subnode(fdt, 0, "chosen"); 86 node = fdt_add_subnode(fdt, 0, "chosen");
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index a2cc6be97983..b792194e0d9c 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -67,6 +67,7 @@ static int ast_detect_chip(struct drm_device *dev)
67{ 67{
68 struct ast_private *ast = dev->dev_private; 68 struct ast_private *ast = dev->dev_private;
69 uint32_t data, jreg; 69 uint32_t data, jreg;
70 ast_open_key(ast);
70 71
71 if (dev->pdev->device == PCI_CHIP_AST1180) { 72 if (dev->pdev->device == PCI_CHIP_AST1180) {
72 ast->chip = AST1100; 73 ast->chip = AST1100;
@@ -104,7 +105,7 @@ static int ast_detect_chip(struct drm_device *dev)
104 } 105 }
105 ast->vga2_clone = false; 106 ast->vga2_clone = false;
106 } else { 107 } else {
107 ast->chip = 2000; 108 ast->chip = AST2000;
108 DRM_INFO("AST 2000 detected\n"); 109 DRM_INFO("AST 2000 detected\n");
109 } 110 }
110 } 111 }
diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
index 9d7346b92653..6b7efcf363d6 100644
--- a/drivers/gpu/drm/bochs/bochs_kms.c
+++ b/drivers/gpu/drm/bochs/bochs_kms.c
@@ -250,6 +250,7 @@ static void bochs_connector_init(struct drm_device *dev)
250 DRM_MODE_CONNECTOR_VIRTUAL); 250 DRM_MODE_CONNECTOR_VIRTUAL);
251 drm_connector_helper_add(connector, 251 drm_connector_helper_add(connector,
252 &bochs_connector_connector_helper_funcs); 252 &bochs_connector_connector_helper_funcs);
253 drm_connector_register(connector);
253} 254}
254 255
255 256
diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
index e1c5c3222129..c7c5a9d91fa0 100644
--- a/drivers/gpu/drm/cirrus/cirrus_mode.c
+++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
@@ -555,6 +555,7 @@ static struct drm_connector *cirrus_vga_init(struct drm_device *dev)
555 555
556 drm_connector_helper_add(connector, &cirrus_vga_connector_helper_funcs); 556 drm_connector_helper_add(connector, &cirrus_vga_connector_helper_funcs);
557 557
558 drm_connector_register(connector);
558 return connector; 559 return connector;
559} 560}
560 561
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 2e7f03ad5ee2..9933c26017ed 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1336,12 +1336,17 @@ static int i915_load_modeset_init(struct drm_device *dev)
1336 1336
1337 intel_power_domains_init_hw(dev_priv); 1337 intel_power_domains_init_hw(dev_priv);
1338 1338
1339 /*
1340 * We enable some interrupt sources in our postinstall hooks, so mark
1341 * interrupts as enabled _before_ actually enabling them to avoid
1342 * special cases in our ordering checks.
1343 */
1344 dev_priv->pm._irqs_disabled = false;
1345
1339 ret = drm_irq_install(dev, dev->pdev->irq); 1346 ret = drm_irq_install(dev, dev->pdev->irq);
1340 if (ret) 1347 if (ret)
1341 goto cleanup_gem_stolen; 1348 goto cleanup_gem_stolen;
1342 1349
1343 dev_priv->pm._irqs_disabled = false;
1344
1345 /* Important: The output setup functions called by modeset_init need 1350 /* Important: The output setup functions called by modeset_init need
1346 * working irqs for e.g. gmbus and dp aux transfers. */ 1351 * working irqs for e.g. gmbus and dp aux transfers. */
1347 intel_modeset_init(dev); 1352 intel_modeset_init(dev);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 7a830eac5ba3..3524306d8cfb 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -184,6 +184,7 @@ enum hpd_pin {
184 if ((1 << (domain)) & (mask)) 184 if ((1 << (domain)) & (mask))
185 185
186struct drm_i915_private; 186struct drm_i915_private;
187struct i915_mm_struct;
187struct i915_mmu_object; 188struct i915_mmu_object;
188 189
189enum intel_dpll_id { 190enum intel_dpll_id {
@@ -1506,9 +1507,8 @@ struct drm_i915_private {
1506 struct i915_gtt gtt; /* VM representing the global address space */ 1507 struct i915_gtt gtt; /* VM representing the global address space */
1507 1508
1508 struct i915_gem_mm mm; 1509 struct i915_gem_mm mm;
1509#if defined(CONFIG_MMU_NOTIFIER) 1510 DECLARE_HASHTABLE(mm_structs, 7);
1510 DECLARE_HASHTABLE(mmu_notifiers, 7); 1511 struct mutex mm_lock;
1511#endif
1512 1512
1513 /* Kernel Modesetting */ 1513 /* Kernel Modesetting */
1514 1514
@@ -1814,8 +1814,8 @@ struct drm_i915_gem_object {
1814 unsigned workers :4; 1814 unsigned workers :4;
1815#define I915_GEM_USERPTR_MAX_WORKERS 15 1815#define I915_GEM_USERPTR_MAX_WORKERS 15
1816 1816
1817 struct mm_struct *mm; 1817 struct i915_mm_struct *mm;
1818 struct i915_mmu_object *mn; 1818 struct i915_mmu_object *mmu_object;
1819 struct work_struct *work; 1819 struct work_struct *work;
1820 } userptr; 1820 } userptr;
1821 }; 1821 };
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ba7f5c6bb50d..ad55b06a3cb1 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1590,10 +1590,13 @@ unlock:
1590out: 1590out:
1591 switch (ret) { 1591 switch (ret) {
1592 case -EIO: 1592 case -EIO:
1593 /* If this -EIO is due to a gpu hang, give the reset code a 1593 /*
1594 * chance to clean up the mess. Otherwise return the proper 1594 * We eat errors when the gpu is terminally wedged to avoid
1595 * SIGBUS. */ 1595 * userspace unduly crashing (gl has no provisions for mmaps to
1596 if (i915_terminally_wedged(&dev_priv->gpu_error)) { 1596 * fail). But any other -EIO isn't ours (e.g. swap in failure)
1597 * and so needs to be reported.
1598 */
1599 if (!i915_terminally_wedged(&dev_priv->gpu_error)) {
1597 ret = VM_FAULT_SIGBUS; 1600 ret = VM_FAULT_SIGBUS;
1598 break; 1601 break;
1599 } 1602 }
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
index fe69fc837d9e..d38413997379 100644
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
@@ -32,6 +32,15 @@
32#include <linux/mempolicy.h> 32#include <linux/mempolicy.h>
33#include <linux/swap.h> 33#include <linux/swap.h>
34 34
35struct i915_mm_struct {
36 struct mm_struct *mm;
37 struct drm_device *dev;
38 struct i915_mmu_notifier *mn;
39 struct hlist_node node;
40 struct kref kref;
41 struct work_struct work;
42};
43
35#if defined(CONFIG_MMU_NOTIFIER) 44#if defined(CONFIG_MMU_NOTIFIER)
36#include <linux/interval_tree.h> 45#include <linux/interval_tree.h>
37 46
@@ -41,16 +50,12 @@ struct i915_mmu_notifier {
41 struct mmu_notifier mn; 50 struct mmu_notifier mn;
42 struct rb_root objects; 51 struct rb_root objects;
43 struct list_head linear; 52 struct list_head linear;
44 struct drm_device *dev;
45 struct mm_struct *mm;
46 struct work_struct work;
47 unsigned long count;
48 unsigned long serial; 53 unsigned long serial;
49 bool has_linear; 54 bool has_linear;
50}; 55};
51 56
52struct i915_mmu_object { 57struct i915_mmu_object {
53 struct i915_mmu_notifier *mmu; 58 struct i915_mmu_notifier *mn;
54 struct interval_tree_node it; 59 struct interval_tree_node it;
55 struct list_head link; 60 struct list_head link;
56 struct drm_i915_gem_object *obj; 61 struct drm_i915_gem_object *obj;
@@ -96,18 +101,18 @@ static void *invalidate_range__linear(struct i915_mmu_notifier *mn,
96 unsigned long start, 101 unsigned long start,
97 unsigned long end) 102 unsigned long end)
98{ 103{
99 struct i915_mmu_object *mmu; 104 struct i915_mmu_object *mo;
100 unsigned long serial; 105 unsigned long serial;
101 106
102restart: 107restart:
103 serial = mn->serial; 108 serial = mn->serial;
104 list_for_each_entry(mmu, &mn->linear, link) { 109 list_for_each_entry(mo, &mn->linear, link) {
105 struct drm_i915_gem_object *obj; 110 struct drm_i915_gem_object *obj;
106 111
107 if (mmu->it.last < start || mmu->it.start > end) 112 if (mo->it.last < start || mo->it.start > end)
108 continue; 113 continue;
109 114
110 obj = mmu->obj; 115 obj = mo->obj;
111 drm_gem_object_reference(&obj->base); 116 drm_gem_object_reference(&obj->base);
112 spin_unlock(&mn->lock); 117 spin_unlock(&mn->lock);
113 118
@@ -160,130 +165,47 @@ static const struct mmu_notifier_ops i915_gem_userptr_notifier = {
160}; 165};
161 166
162static struct i915_mmu_notifier * 167static struct i915_mmu_notifier *
163__i915_mmu_notifier_lookup(struct drm_device *dev, struct mm_struct *mm) 168i915_mmu_notifier_create(struct mm_struct *mm)
164{
165 struct drm_i915_private *dev_priv = to_i915(dev);
166 struct i915_mmu_notifier *mmu;
167
168 /* Protected by dev->struct_mutex */
169 hash_for_each_possible(dev_priv->mmu_notifiers, mmu, node, (unsigned long)mm)
170 if (mmu->mm == mm)
171 return mmu;
172
173 return NULL;
174}
175
176static struct i915_mmu_notifier *
177i915_mmu_notifier_get(struct drm_device *dev, struct mm_struct *mm)
178{ 169{
179 struct drm_i915_private *dev_priv = to_i915(dev); 170 struct i915_mmu_notifier *mn;
180 struct i915_mmu_notifier *mmu;
181 int ret; 171 int ret;
182 172
183 lockdep_assert_held(&dev->struct_mutex); 173 mn = kmalloc(sizeof(*mn), GFP_KERNEL);
184 174 if (mn == NULL)
185 mmu = __i915_mmu_notifier_lookup(dev, mm);
186 if (mmu)
187 return mmu;
188
189 mmu = kmalloc(sizeof(*mmu), GFP_KERNEL);
190 if (mmu == NULL)
191 return ERR_PTR(-ENOMEM); 175 return ERR_PTR(-ENOMEM);
192 176
193 spin_lock_init(&mmu->lock); 177 spin_lock_init(&mn->lock);
194 mmu->dev = dev; 178 mn->mn.ops = &i915_gem_userptr_notifier;
195 mmu->mn.ops = &i915_gem_userptr_notifier; 179 mn->objects = RB_ROOT;
196 mmu->mm = mm; 180 mn->serial = 1;
197 mmu->objects = RB_ROOT; 181 INIT_LIST_HEAD(&mn->linear);
198 mmu->count = 0; 182 mn->has_linear = false;
199 mmu->serial = 1; 183
200 INIT_LIST_HEAD(&mmu->linear); 184 /* Protected by mmap_sem (write-lock) */
201 mmu->has_linear = false; 185 ret = __mmu_notifier_register(&mn->mn, mm);
202
203 /* Protected by mmap_sem (write-lock) */
204 ret = __mmu_notifier_register(&mmu->mn, mm);
205 if (ret) { 186 if (ret) {
206 kfree(mmu); 187 kfree(mn);
207 return ERR_PTR(ret); 188 return ERR_PTR(ret);
208 } 189 }
209 190
210 /* Protected by dev->struct_mutex */ 191 return mn;
211 hash_add(dev_priv->mmu_notifiers, &mmu->node, (unsigned long)mm);
212 return mmu;
213} 192}
214 193
215static void 194static void __i915_mmu_notifier_update_serial(struct i915_mmu_notifier *mn)
216__i915_mmu_notifier_destroy_worker(struct work_struct *work)
217{ 195{
218 struct i915_mmu_notifier *mmu = container_of(work, typeof(*mmu), work); 196 if (++mn->serial == 0)
219 mmu_notifier_unregister(&mmu->mn, mmu->mm); 197 mn->serial = 1;
220 kfree(mmu);
221}
222
223static void
224__i915_mmu_notifier_destroy(struct i915_mmu_notifier *mmu)
225{
226 lockdep_assert_held(&mmu->dev->struct_mutex);
227
228 /* Protected by dev->struct_mutex */
229 hash_del(&mmu->node);
230
231 /* Our lock ordering is: mmap_sem, mmu_notifier_scru, struct_mutex.
232 * We enter the function holding struct_mutex, therefore we need
233 * to drop our mutex prior to calling mmu_notifier_unregister in
234 * order to prevent lock inversion (and system-wide deadlock)
235 * between the mmap_sem and struct-mutex. Hence we defer the
236 * unregistration to a workqueue where we hold no locks.
237 */
238 INIT_WORK(&mmu->work, __i915_mmu_notifier_destroy_worker);
239 schedule_work(&mmu->work);
240}
241
242static void __i915_mmu_notifier_update_serial(struct i915_mmu_notifier *mmu)
243{
244 if (++mmu->serial == 0)
245 mmu->serial = 1;
246}
247
248static bool i915_mmu_notifier_has_linear(struct i915_mmu_notifier *mmu)
249{
250 struct i915_mmu_object *mn;
251
252 list_for_each_entry(mn, &mmu->linear, link)
253 if (mn->is_linear)
254 return true;
255
256 return false;
257}
258
259static void
260i915_mmu_notifier_del(struct i915_mmu_notifier *mmu,
261 struct i915_mmu_object *mn)
262{
263 lockdep_assert_held(&mmu->dev->struct_mutex);
264
265 spin_lock(&mmu->lock);
266 list_del(&mn->link);
267 if (mn->is_linear)
268 mmu->has_linear = i915_mmu_notifier_has_linear(mmu);
269 else
270 interval_tree_remove(&mn->it, &mmu->objects);
271 __i915_mmu_notifier_update_serial(mmu);
272 spin_unlock(&mmu->lock);
273
274 /* Protected against _add() by dev->struct_mutex */
275 if (--mmu->count == 0)
276 __i915_mmu_notifier_destroy(mmu);
277} 198}
278 199
279static int 200static int
280i915_mmu_notifier_add(struct i915_mmu_notifier *mmu, 201i915_mmu_notifier_add(struct drm_device *dev,
281 struct i915_mmu_object *mn) 202 struct i915_mmu_notifier *mn,
203 struct i915_mmu_object *mo)
282{ 204{
283 struct interval_tree_node *it; 205 struct interval_tree_node *it;
284 int ret; 206 int ret;
285 207
286 ret = i915_mutex_lock_interruptible(mmu->dev); 208 ret = i915_mutex_lock_interruptible(dev);
287 if (ret) 209 if (ret)
288 return ret; 210 return ret;
289 211
@@ -291,11 +213,11 @@ i915_mmu_notifier_add(struct i915_mmu_notifier *mmu,
291 * remove the objects from the interval tree) before we do 213 * remove the objects from the interval tree) before we do
292 * the check for overlapping objects. 214 * the check for overlapping objects.
293 */ 215 */
294 i915_gem_retire_requests(mmu->dev); 216 i915_gem_retire_requests(dev);
295 217
296 spin_lock(&mmu->lock); 218 spin_lock(&mn->lock);
297 it = interval_tree_iter_first(&mmu->objects, 219 it = interval_tree_iter_first(&mn->objects,
298 mn->it.start, mn->it.last); 220 mo->it.start, mo->it.last);
299 if (it) { 221 if (it) {
300 struct drm_i915_gem_object *obj; 222 struct drm_i915_gem_object *obj;
301 223
@@ -312,86 +234,122 @@ i915_mmu_notifier_add(struct i915_mmu_notifier *mmu,
312 234
313 obj = container_of(it, struct i915_mmu_object, it)->obj; 235 obj = container_of(it, struct i915_mmu_object, it)->obj;
314 if (!obj->userptr.workers) 236 if (!obj->userptr.workers)
315 mmu->has_linear = mn->is_linear = true; 237 mn->has_linear = mo->is_linear = true;
316 else 238 else
317 ret = -EAGAIN; 239 ret = -EAGAIN;
318 } else 240 } else
319 interval_tree_insert(&mn->it, &mmu->objects); 241 interval_tree_insert(&mo->it, &mn->objects);
320 242
321 if (ret == 0) { 243 if (ret == 0) {
322 list_add(&mn->link, &mmu->linear); 244 list_add(&mo->link, &mn->linear);
323 __i915_mmu_notifier_update_serial(mmu); 245 __i915_mmu_notifier_update_serial(mn);
324 } 246 }
325 spin_unlock(&mmu->lock); 247 spin_unlock(&mn->lock);
326 mutex_unlock(&mmu->dev->struct_mutex); 248 mutex_unlock(&dev->struct_mutex);
327 249
328 return ret; 250 return ret;
329} 251}
330 252
253static bool i915_mmu_notifier_has_linear(struct i915_mmu_notifier *mn)
254{
255 struct i915_mmu_object *mo;
256
257 list_for_each_entry(mo, &mn->linear, link)
258 if (mo->is_linear)
259 return true;
260
261 return false;
262}
263
264static void
265i915_mmu_notifier_del(struct i915_mmu_notifier *mn,
266 struct i915_mmu_object *mo)
267{
268 spin_lock(&mn->lock);
269 list_del(&mo->link);
270 if (mo->is_linear)
271 mn->has_linear = i915_mmu_notifier_has_linear(mn);
272 else
273 interval_tree_remove(&mo->it, &mn->objects);
274 __i915_mmu_notifier_update_serial(mn);
275 spin_unlock(&mn->lock);
276}
277
331static void 278static void
332i915_gem_userptr_release__mmu_notifier(struct drm_i915_gem_object *obj) 279i915_gem_userptr_release__mmu_notifier(struct drm_i915_gem_object *obj)
333{ 280{
334 struct i915_mmu_object *mn; 281 struct i915_mmu_object *mo;
335 282
336 mn = obj->userptr.mn; 283 mo = obj->userptr.mmu_object;
337 if (mn == NULL) 284 if (mo == NULL)
338 return; 285 return;
339 286
340 i915_mmu_notifier_del(mn->mmu, mn); 287 i915_mmu_notifier_del(mo->mn, mo);
341 obj->userptr.mn = NULL; 288 kfree(mo);
289
290 obj->userptr.mmu_object = NULL;
291}
292
293static struct i915_mmu_notifier *
294i915_mmu_notifier_find(struct i915_mm_struct *mm)
295{
296 if (mm->mn == NULL) {
297 down_write(&mm->mm->mmap_sem);
298 mutex_lock(&to_i915(mm->dev)->mm_lock);
299 if (mm->mn == NULL)
300 mm->mn = i915_mmu_notifier_create(mm->mm);
301 mutex_unlock(&to_i915(mm->dev)->mm_lock);
302 up_write(&mm->mm->mmap_sem);
303 }
304 return mm->mn;
342} 305}
343 306
344static int 307static int
345i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj, 308i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj,
346 unsigned flags) 309 unsigned flags)
347{ 310{
348 struct i915_mmu_notifier *mmu; 311 struct i915_mmu_notifier *mn;
349 struct i915_mmu_object *mn; 312 struct i915_mmu_object *mo;
350 int ret; 313 int ret;
351 314
352 if (flags & I915_USERPTR_UNSYNCHRONIZED) 315 if (flags & I915_USERPTR_UNSYNCHRONIZED)
353 return capable(CAP_SYS_ADMIN) ? 0 : -EPERM; 316 return capable(CAP_SYS_ADMIN) ? 0 : -EPERM;
354 317
355 down_write(&obj->userptr.mm->mmap_sem); 318 if (WARN_ON(obj->userptr.mm == NULL))
356 ret = i915_mutex_lock_interruptible(obj->base.dev); 319 return -EINVAL;
357 if (ret == 0) {
358 mmu = i915_mmu_notifier_get(obj->base.dev, obj->userptr.mm);
359 if (!IS_ERR(mmu))
360 mmu->count++; /* preemptive add to act as a refcount */
361 else
362 ret = PTR_ERR(mmu);
363 mutex_unlock(&obj->base.dev->struct_mutex);
364 }
365 up_write(&obj->userptr.mm->mmap_sem);
366 if (ret)
367 return ret;
368 320
369 mn = kzalloc(sizeof(*mn), GFP_KERNEL); 321 mn = i915_mmu_notifier_find(obj->userptr.mm);
370 if (mn == NULL) { 322 if (IS_ERR(mn))
371 ret = -ENOMEM; 323 return PTR_ERR(mn);
372 goto destroy_mmu;
373 }
374 324
375 mn->mmu = mmu; 325 mo = kzalloc(sizeof(*mo), GFP_KERNEL);
376 mn->it.start = obj->userptr.ptr; 326 if (mo == NULL)
377 mn->it.last = mn->it.start + obj->base.size - 1; 327 return -ENOMEM;
378 mn->obj = obj;
379 328
380 ret = i915_mmu_notifier_add(mmu, mn); 329 mo->mn = mn;
381 if (ret) 330 mo->it.start = obj->userptr.ptr;
382 goto free_mn; 331 mo->it.last = mo->it.start + obj->base.size - 1;
332 mo->obj = obj;
383 333
384 obj->userptr.mn = mn; 334 ret = i915_mmu_notifier_add(obj->base.dev, mn, mo);
335 if (ret) {
336 kfree(mo);
337 return ret;
338 }
339
340 obj->userptr.mmu_object = mo;
385 return 0; 341 return 0;
342}
343
344static void
345i915_mmu_notifier_free(struct i915_mmu_notifier *mn,
346 struct mm_struct *mm)
347{
348 if (mn == NULL)
349 return;
386 350
387free_mn: 351 mmu_notifier_unregister(&mn->mn, mm);
388 kfree(mn); 352 kfree(mn);
389destroy_mmu:
390 mutex_lock(&obj->base.dev->struct_mutex);
391 if (--mmu->count == 0)
392 __i915_mmu_notifier_destroy(mmu);
393 mutex_unlock(&obj->base.dev->struct_mutex);
394 return ret;
395} 353}
396 354
397#else 355#else
@@ -413,15 +371,114 @@ i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj,
413 371
414 return 0; 372 return 0;
415} 373}
374
375static void
376i915_mmu_notifier_free(struct i915_mmu_notifier *mn,
377 struct mm_struct *mm)
378{
379}
380
416#endif 381#endif
417 382
383static struct i915_mm_struct *
384__i915_mm_struct_find(struct drm_i915_private *dev_priv, struct mm_struct *real)
385{
386 struct i915_mm_struct *mm;
387
388 /* Protected by dev_priv->mm_lock */
389 hash_for_each_possible(dev_priv->mm_structs, mm, node, (unsigned long)real)
390 if (mm->mm == real)
391 return mm;
392
393 return NULL;
394}
395
396static int
397i915_gem_userptr_init__mm_struct(struct drm_i915_gem_object *obj)
398{
399 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
400 struct i915_mm_struct *mm;
401 int ret = 0;
402
403 /* During release of the GEM object we hold the struct_mutex. This
404 * precludes us from calling mmput() at that time as that may be
405 * the last reference and so call exit_mmap(). exit_mmap() will
406 * attempt to reap the vma, and if we were holding a GTT mmap
407 * would then call drm_gem_vm_close() and attempt to reacquire
408 * the struct mutex. So in order to avoid that recursion, we have
409 * to defer releasing the mm reference until after we drop the
410 * struct_mutex, i.e. we need to schedule a worker to do the clean
411 * up.
412 */
413 mutex_lock(&dev_priv->mm_lock);
414 mm = __i915_mm_struct_find(dev_priv, current->mm);
415 if (mm == NULL) {
416 mm = kmalloc(sizeof(*mm), GFP_KERNEL);
417 if (mm == NULL) {
418 ret = -ENOMEM;
419 goto out;
420 }
421
422 kref_init(&mm->kref);
423 mm->dev = obj->base.dev;
424
425 mm->mm = current->mm;
426 atomic_inc(&current->mm->mm_count);
427
428 mm->mn = NULL;
429
430 /* Protected by dev_priv->mm_lock */
431 hash_add(dev_priv->mm_structs,
432 &mm->node, (unsigned long)mm->mm);
433 } else
434 kref_get(&mm->kref);
435
436 obj->userptr.mm = mm;
437out:
438 mutex_unlock(&dev_priv->mm_lock);
439 return ret;
440}
441
442static void
443__i915_mm_struct_free__worker(struct work_struct *work)
444{
445 struct i915_mm_struct *mm = container_of(work, typeof(*mm), work);
446 i915_mmu_notifier_free(mm->mn, mm->mm);
447 mmdrop(mm->mm);
448 kfree(mm);
449}
450
451static void
452__i915_mm_struct_free(struct kref *kref)
453{
454 struct i915_mm_struct *mm = container_of(kref, typeof(*mm), kref);
455
456 /* Protected by dev_priv->mm_lock */
457 hash_del(&mm->node);
458 mutex_unlock(&to_i915(mm->dev)->mm_lock);
459
460 INIT_WORK(&mm->work, __i915_mm_struct_free__worker);
461 schedule_work(&mm->work);
462}
463
464static void
465i915_gem_userptr_release__mm_struct(struct drm_i915_gem_object *obj)
466{
467 if (obj->userptr.mm == NULL)
468 return;
469
470 kref_put_mutex(&obj->userptr.mm->kref,
471 __i915_mm_struct_free,
472 &to_i915(obj->base.dev)->mm_lock);
473 obj->userptr.mm = NULL;
474}
475
418struct get_pages_work { 476struct get_pages_work {
419 struct work_struct work; 477 struct work_struct work;
420 struct drm_i915_gem_object *obj; 478 struct drm_i915_gem_object *obj;
421 struct task_struct *task; 479 struct task_struct *task;
422}; 480};
423 481
424
425#if IS_ENABLED(CONFIG_SWIOTLB) 482#if IS_ENABLED(CONFIG_SWIOTLB)
426#define swiotlb_active() swiotlb_nr_tbl() 483#define swiotlb_active() swiotlb_nr_tbl()
427#else 484#else
@@ -479,7 +536,7 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
479 if (pvec == NULL) 536 if (pvec == NULL)
480 pvec = drm_malloc_ab(num_pages, sizeof(struct page *)); 537 pvec = drm_malloc_ab(num_pages, sizeof(struct page *));
481 if (pvec != NULL) { 538 if (pvec != NULL) {
482 struct mm_struct *mm = obj->userptr.mm; 539 struct mm_struct *mm = obj->userptr.mm->mm;
483 540
484 down_read(&mm->mmap_sem); 541 down_read(&mm->mmap_sem);
485 while (pinned < num_pages) { 542 while (pinned < num_pages) {
@@ -545,7 +602,7 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
545 602
546 pvec = NULL; 603 pvec = NULL;
547 pinned = 0; 604 pinned = 0;
548 if (obj->userptr.mm == current->mm) { 605 if (obj->userptr.mm->mm == current->mm) {
549 pvec = kmalloc(num_pages*sizeof(struct page *), 606 pvec = kmalloc(num_pages*sizeof(struct page *),
550 GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY); 607 GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);
551 if (pvec == NULL) { 608 if (pvec == NULL) {
@@ -651,17 +708,13 @@ static void
651i915_gem_userptr_release(struct drm_i915_gem_object *obj) 708i915_gem_userptr_release(struct drm_i915_gem_object *obj)
652{ 709{
653 i915_gem_userptr_release__mmu_notifier(obj); 710 i915_gem_userptr_release__mmu_notifier(obj);
654 711 i915_gem_userptr_release__mm_struct(obj);
655 if (obj->userptr.mm) {
656 mmput(obj->userptr.mm);
657 obj->userptr.mm = NULL;
658 }
659} 712}
660 713
661static int 714static int
662i915_gem_userptr_dmabuf_export(struct drm_i915_gem_object *obj) 715i915_gem_userptr_dmabuf_export(struct drm_i915_gem_object *obj)
663{ 716{
664 if (obj->userptr.mn) 717 if (obj->userptr.mmu_object)
665 return 0; 718 return 0;
666 719
667 return i915_gem_userptr_init__mmu_notifier(obj, 0); 720 return i915_gem_userptr_init__mmu_notifier(obj, 0);
@@ -736,7 +789,6 @@ i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file
736 return -ENODEV; 789 return -ENODEV;
737 } 790 }
738 791
739 /* Allocate the new object */
740 obj = i915_gem_object_alloc(dev); 792 obj = i915_gem_object_alloc(dev);
741 if (obj == NULL) 793 if (obj == NULL)
742 return -ENOMEM; 794 return -ENOMEM;
@@ -754,8 +806,8 @@ i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file
754 * at binding. This means that we need to hook into the mmu_notifier 806 * at binding. This means that we need to hook into the mmu_notifier
755 * in order to detect if the mmu is destroyed. 807 * in order to detect if the mmu is destroyed.
756 */ 808 */
757 ret = -ENOMEM; 809 ret = i915_gem_userptr_init__mm_struct(obj);
758 if ((obj->userptr.mm = get_task_mm(current))) 810 if (ret == 0)
759 ret = i915_gem_userptr_init__mmu_notifier(obj, args->flags); 811 ret = i915_gem_userptr_init__mmu_notifier(obj, args->flags);
760 if (ret == 0) 812 if (ret == 0)
761 ret = drm_gem_handle_create(file, &obj->base, &handle); 813 ret = drm_gem_handle_create(file, &obj->base, &handle);
@@ -772,9 +824,8 @@ i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file
772int 824int
773i915_gem_init_userptr(struct drm_device *dev) 825i915_gem_init_userptr(struct drm_device *dev)
774{ 826{
775#if defined(CONFIG_MMU_NOTIFIER)
776 struct drm_i915_private *dev_priv = to_i915(dev); 827 struct drm_i915_private *dev_priv = to_i915(dev);
777 hash_init(dev_priv->mmu_notifiers); 828 mutex_init(&dev_priv->mm_lock);
778#endif 829 hash_init(dev_priv->mm_structs);
779 return 0; 830 return 0;
780} 831}
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index e4d7607da2c4..f29b44c86a2f 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -334,16 +334,20 @@
334#define GFX_OP_DESTBUFFER_INFO ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1) 334#define GFX_OP_DESTBUFFER_INFO ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
335#define GFX_OP_DRAWRECT_INFO ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3)) 335#define GFX_OP_DRAWRECT_INFO ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
336#define GFX_OP_DRAWRECT_INFO_I965 ((0x7900<<16)|0x2) 336#define GFX_OP_DRAWRECT_INFO_I965 ((0x7900<<16)|0x2)
337#define SRC_COPY_BLT_CMD ((2<<29)|(0x43<<22)|4) 337
338#define COLOR_BLT_CMD (2<<29 | 0x40<<22 | (5-2))
339#define SRC_COPY_BLT_CMD ((2<<29)|(0x43<<22)|4)
338#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6) 340#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6)
339#define XY_MONO_SRC_COPY_IMM_BLT ((2<<29)|(0x71<<22)|5) 341#define XY_MONO_SRC_COPY_IMM_BLT ((2<<29)|(0x71<<22)|5)
340#define XY_SRC_COPY_BLT_WRITE_ALPHA (1<<21) 342#define BLT_WRITE_A (2<<20)
341#define XY_SRC_COPY_BLT_WRITE_RGB (1<<20) 343#define BLT_WRITE_RGB (1<<20)
344#define BLT_WRITE_RGBA (BLT_WRITE_RGB | BLT_WRITE_A)
342#define BLT_DEPTH_8 (0<<24) 345#define BLT_DEPTH_8 (0<<24)
343#define BLT_DEPTH_16_565 (1<<24) 346#define BLT_DEPTH_16_565 (1<<24)
344#define BLT_DEPTH_16_1555 (2<<24) 347#define BLT_DEPTH_16_1555 (2<<24)
345#define BLT_DEPTH_32 (3<<24) 348#define BLT_DEPTH_32 (3<<24)
346#define BLT_ROP_GXCOPY (0xcc<<16) 349#define BLT_ROP_SRC_COPY (0xcc<<16)
350#define BLT_ROP_COLOR_COPY (0xf0<<16)
347#define XY_SRC_COPY_BLT_SRC_TILED (1<<15) /* 965+ only */ 351#define XY_SRC_COPY_BLT_SRC_TILED (1<<15) /* 965+ only */
348#define XY_SRC_COPY_BLT_DST_TILED (1<<11) /* 965+ only */ 352#define XY_SRC_COPY_BLT_DST_TILED (1<<11) /* 965+ only */
349#define CMD_OP_DISPLAYBUFFER_INFO ((0x0<<29)|(0x14<<23)|2) 353#define CMD_OP_DISPLAYBUFFER_INFO ((0x0<<29)|(0x14<<23)|2)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 81d7681faa63..fdff1d420c14 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1631,6 +1631,10 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
1631 1631
1632 pipe_config->adjusted_mode.flags |= flags; 1632 pipe_config->adjusted_mode.flags |= flags;
1633 1633
1634 if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev) &&
1635 tmp & DP_COLOR_RANGE_16_235)
1636 pipe_config->limited_color_range = true;
1637
1634 pipe_config->has_dp_encoder = true; 1638 pipe_config->has_dp_encoder = true;
1635 1639
1636 intel_dp_get_m_n(crtc, pipe_config); 1640 intel_dp_get_m_n(crtc, pipe_config);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index f9151f6641d9..ca34de7f6a7b 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -712,7 +712,8 @@ static void intel_hdmi_get_config(struct intel_encoder *encoder,
712 struct intel_crtc_config *pipe_config) 712 struct intel_crtc_config *pipe_config)
713{ 713{
714 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); 714 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
715 struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; 715 struct drm_device *dev = encoder->base.dev;
716 struct drm_i915_private *dev_priv = dev->dev_private;
716 u32 tmp, flags = 0; 717 u32 tmp, flags = 0;
717 int dotclock; 718 int dotclock;
718 719
@@ -734,6 +735,10 @@ static void intel_hdmi_get_config(struct intel_encoder *encoder,
734 if (tmp & HDMI_MODE_SELECT_HDMI) 735 if (tmp & HDMI_MODE_SELECT_HDMI)
735 pipe_config->has_audio = true; 736 pipe_config->has_audio = true;
736 737
738 if (!HAS_PCH_SPLIT(dev) &&
739 tmp & HDMI_COLOR_RANGE_16_235)
740 pipe_config->limited_color_range = true;
741
737 pipe_config->adjusted_mode.flags |= flags; 742 pipe_config->adjusted_mode.flags |= flags;
738 743
739 if ((tmp & SDVO_COLOR_FORMAT_MASK) == HDMI_COLOR_FORMAT_12bpc) 744 if ((tmp & SDVO_COLOR_FORMAT_MASK) == HDMI_COLOR_FORMAT_12bpc)
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 16371a444426..47a126a0493f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1363,54 +1363,66 @@ i965_dispatch_execbuffer(struct intel_engine_cs *ring,
1363 1363
1364/* Just userspace ABI convention to limit the wa batch bo to a resonable size */ 1364/* Just userspace ABI convention to limit the wa batch bo to a resonable size */
1365#define I830_BATCH_LIMIT (256*1024) 1365#define I830_BATCH_LIMIT (256*1024)
1366#define I830_TLB_ENTRIES (2)
1367#define I830_WA_SIZE max(I830_TLB_ENTRIES*4096, I830_BATCH_LIMIT)
1366static int 1368static int
1367i830_dispatch_execbuffer(struct intel_engine_cs *ring, 1369i830_dispatch_execbuffer(struct intel_engine_cs *ring,
1368 u64 offset, u32 len, 1370 u64 offset, u32 len,
1369 unsigned flags) 1371 unsigned flags)
1370{ 1372{
1373 u32 cs_offset = ring->scratch.gtt_offset;
1371 int ret; 1374 int ret;
1372 1375
1373 if (flags & I915_DISPATCH_PINNED) { 1376 ret = intel_ring_begin(ring, 6);
1374 ret = intel_ring_begin(ring, 4); 1377 if (ret)
1375 if (ret) 1378 return ret;
1376 return ret;
1377 1379
1378 intel_ring_emit(ring, MI_BATCH_BUFFER); 1380 /* Evict the invalid PTE TLBs */
1379 intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE)); 1381 intel_ring_emit(ring, COLOR_BLT_CMD | BLT_WRITE_RGBA);
1380 intel_ring_emit(ring, offset + len - 8); 1382 intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_COLOR_COPY | 4096);
1381 intel_ring_emit(ring, MI_NOOP); 1383 intel_ring_emit(ring, I830_TLB_ENTRIES << 16 | 4); /* load each page */
1382 intel_ring_advance(ring); 1384 intel_ring_emit(ring, cs_offset);
1383 } else { 1385 intel_ring_emit(ring, 0xdeadbeef);
1384 u32 cs_offset = ring->scratch.gtt_offset; 1386 intel_ring_emit(ring, MI_NOOP);
1387 intel_ring_advance(ring);
1385 1388
1389 if ((flags & I915_DISPATCH_PINNED) == 0) {
1386 if (len > I830_BATCH_LIMIT) 1390 if (len > I830_BATCH_LIMIT)
1387 return -ENOSPC; 1391 return -ENOSPC;
1388 1392
1389 ret = intel_ring_begin(ring, 9+3); 1393 ret = intel_ring_begin(ring, 6 + 2);
1390 if (ret) 1394 if (ret)
1391 return ret; 1395 return ret;
1392 /* Blit the batch (which has now all relocs applied) to the stable batch 1396
1393 * scratch bo area (so that the CS never stumbles over its tlb 1397 /* Blit the batch (which has now all relocs applied) to the
1394 * invalidation bug) ... */ 1398 * stable batch scratch bo area (so that the CS never
1395 intel_ring_emit(ring, XY_SRC_COPY_BLT_CMD | 1399 * stumbles over its tlb invalidation bug) ...
1396 XY_SRC_COPY_BLT_WRITE_ALPHA | 1400 */
1397 XY_SRC_COPY_BLT_WRITE_RGB); 1401 intel_ring_emit(ring, SRC_COPY_BLT_CMD | BLT_WRITE_RGBA);
1398 intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_GXCOPY | 4096); 1402 intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_SRC_COPY | 4096);
1399 intel_ring_emit(ring, 0); 1403 intel_ring_emit(ring, DIV_ROUND_UP(len, 4096) << 16 | 4096);
1400 intel_ring_emit(ring, (DIV_ROUND_UP(len, 4096) << 16) | 1024);
1401 intel_ring_emit(ring, cs_offset); 1404 intel_ring_emit(ring, cs_offset);
1402 intel_ring_emit(ring, 0);
1403 intel_ring_emit(ring, 4096); 1405 intel_ring_emit(ring, 4096);
1404 intel_ring_emit(ring, offset); 1406 intel_ring_emit(ring, offset);
1407
1405 intel_ring_emit(ring, MI_FLUSH); 1408 intel_ring_emit(ring, MI_FLUSH);
1409 intel_ring_emit(ring, MI_NOOP);
1410 intel_ring_advance(ring);
1406 1411
1407 /* ... and execute it. */ 1412 /* ... and execute it. */
1408 intel_ring_emit(ring, MI_BATCH_BUFFER); 1413 offset = cs_offset;
1409 intel_ring_emit(ring, cs_offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1410 intel_ring_emit(ring, cs_offset + len - 8);
1411 intel_ring_advance(ring);
1412 } 1414 }
1413 1415
1416 ret = intel_ring_begin(ring, 4);
1417 if (ret)
1418 return ret;
1419
1420 intel_ring_emit(ring, MI_BATCH_BUFFER);
1421 intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1422 intel_ring_emit(ring, offset + len - 8);
1423 intel_ring_emit(ring, MI_NOOP);
1424 intel_ring_advance(ring);
1425
1414 return 0; 1426 return 0;
1415} 1427}
1416 1428
@@ -2200,7 +2212,7 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
2200 2212
2201 /* Workaround batchbuffer to combat CS tlb bug. */ 2213 /* Workaround batchbuffer to combat CS tlb bug. */
2202 if (HAS_BROKEN_CS_TLB(dev)) { 2214 if (HAS_BROKEN_CS_TLB(dev)) {
2203 obj = i915_gem_alloc_object(dev, I830_BATCH_LIMIT); 2215 obj = i915_gem_alloc_object(dev, I830_WA_SIZE);
2204 if (obj == NULL) { 2216 if (obj == NULL) {
2205 DRM_ERROR("Failed to allocate batch bo\n"); 2217 DRM_ERROR("Failed to allocate batch bo\n");
2206 return -ENOMEM; 2218 return -ENOMEM;
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index c69d3ce1b3d6..c14341ca3ef9 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -854,6 +854,10 @@ intel_enable_tv(struct intel_encoder *encoder)
854 struct drm_device *dev = encoder->base.dev; 854 struct drm_device *dev = encoder->base.dev;
855 struct drm_i915_private *dev_priv = dev->dev_private; 855 struct drm_i915_private *dev_priv = dev->dev_private;
856 856
857 /* Prevents vblank waits from timing out in intel_tv_detect_type() */
858 intel_wait_for_vblank(encoder->base.dev,
859 to_intel_crtc(encoder->base.crtc)->pipe);
860
857 I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE); 861 I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE);
858} 862}
859 863
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdmi.c
index a125a7e32742..c6c9b02e0ada 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi.c
@@ -258,28 +258,30 @@ static void set_hdmi_pdev(struct drm_device *dev,
258 priv->hdmi_pdev = pdev; 258 priv->hdmi_pdev = pdev;
259} 259}
260 260
261#ifdef CONFIG_OF
262static int get_gpio(struct device *dev, struct device_node *of_node, const char *name)
263{
264 int gpio = of_get_named_gpio(of_node, name, 0);
265 if (gpio < 0) {
266 char name2[32];
267 snprintf(name2, sizeof(name2), "%s-gpio", name);
268 gpio = of_get_named_gpio(of_node, name2, 0);
269 if (gpio < 0) {
270 dev_err(dev, "failed to get gpio: %s (%d)\n",
271 name, gpio);
272 gpio = -1;
273 }
274 }
275 return gpio;
276}
277#endif
278
261static int hdmi_bind(struct device *dev, struct device *master, void *data) 279static int hdmi_bind(struct device *dev, struct device *master, void *data)
262{ 280{
263 static struct hdmi_platform_config config = {}; 281 static struct hdmi_platform_config config = {};
264#ifdef CONFIG_OF 282#ifdef CONFIG_OF
265 struct device_node *of_node = dev->of_node; 283 struct device_node *of_node = dev->of_node;
266 284
267 int get_gpio(const char *name)
268 {
269 int gpio = of_get_named_gpio(of_node, name, 0);
270 if (gpio < 0) {
271 char name2[32];
272 snprintf(name2, sizeof(name2), "%s-gpio", name);
273 gpio = of_get_named_gpio(of_node, name2, 0);
274 if (gpio < 0) {
275 dev_err(dev, "failed to get gpio: %s (%d)\n",
276 name, gpio);
277 gpio = -1;
278 }
279 }
280 return gpio;
281 }
282
283 if (of_device_is_compatible(of_node, "qcom,hdmi-tx-8074")) { 285 if (of_device_is_compatible(of_node, "qcom,hdmi-tx-8074")) {
284 static const char *hpd_reg_names[] = {"hpd-gdsc", "hpd-5v"}; 286 static const char *hpd_reg_names[] = {"hpd-gdsc", "hpd-5v"};
285 static const char *pwr_reg_names[] = {"core-vdda", "core-vcc"}; 287 static const char *pwr_reg_names[] = {"core-vdda", "core-vcc"};
@@ -312,12 +314,12 @@ static int hdmi_bind(struct device *dev, struct device *master, void *data)
312 } 314 }
313 315
314 config.mmio_name = "core_physical"; 316 config.mmio_name = "core_physical";
315 config.ddc_clk_gpio = get_gpio("qcom,hdmi-tx-ddc-clk"); 317 config.ddc_clk_gpio = get_gpio(dev, of_node, "qcom,hdmi-tx-ddc-clk");
316 config.ddc_data_gpio = get_gpio("qcom,hdmi-tx-ddc-data"); 318 config.ddc_data_gpio = get_gpio(dev, of_node, "qcom,hdmi-tx-ddc-data");
317 config.hpd_gpio = get_gpio("qcom,hdmi-tx-hpd"); 319 config.hpd_gpio = get_gpio(dev, of_node, "qcom,hdmi-tx-hpd");
318 config.mux_en_gpio = get_gpio("qcom,hdmi-tx-mux-en"); 320 config.mux_en_gpio = get_gpio(dev, of_node, "qcom,hdmi-tx-mux-en");
319 config.mux_sel_gpio = get_gpio("qcom,hdmi-tx-mux-sel"); 321 config.mux_sel_gpio = get_gpio(dev, of_node, "qcom,hdmi-tx-mux-sel");
320 config.mux_lpm_gpio = get_gpio("qcom,hdmi-tx-mux-lpm"); 322 config.mux_lpm_gpio = get_gpio(dev, of_node, "qcom,hdmi-tx-mux-lpm");
321 323
322#else 324#else
323 static const char *hpd_clk_names[] = { 325 static const char *hpd_clk_names[] = {
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c b/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c
index 902d7685d441..f408b69486a8 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c
@@ -15,19 +15,25 @@
15 * this program. If not, see <http://www.gnu.org/licenses/>. 15 * this program. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18#ifdef CONFIG_COMMON_CLK
18#include <linux/clk.h> 19#include <linux/clk.h>
19#include <linux/clk-provider.h> 20#include <linux/clk-provider.h>
21#endif
20 22
21#include "hdmi.h" 23#include "hdmi.h"
22 24
23struct hdmi_phy_8960 { 25struct hdmi_phy_8960 {
24 struct hdmi_phy base; 26 struct hdmi_phy base;
25 struct hdmi *hdmi; 27 struct hdmi *hdmi;
28#ifdef CONFIG_COMMON_CLK
26 struct clk_hw pll_hw; 29 struct clk_hw pll_hw;
27 struct clk *pll; 30 struct clk *pll;
28 unsigned long pixclk; 31 unsigned long pixclk;
32#endif
29}; 33};
30#define to_hdmi_phy_8960(x) container_of(x, struct hdmi_phy_8960, base) 34#define to_hdmi_phy_8960(x) container_of(x, struct hdmi_phy_8960, base)
35
36#ifdef CONFIG_COMMON_CLK
31#define clk_to_phy(x) container_of(x, struct hdmi_phy_8960, pll_hw) 37#define clk_to_phy(x) container_of(x, struct hdmi_phy_8960, pll_hw)
32 38
33/* 39/*
@@ -374,7 +380,7 @@ static struct clk_init_data pll_init = {
374 .parent_names = hdmi_pll_parents, 380 .parent_names = hdmi_pll_parents,
375 .num_parents = ARRAY_SIZE(hdmi_pll_parents), 381 .num_parents = ARRAY_SIZE(hdmi_pll_parents),
376}; 382};
377 383#endif
378 384
379/* 385/*
380 * HDMI Phy: 386 * HDMI Phy:
@@ -480,12 +486,15 @@ struct hdmi_phy *hdmi_phy_8960_init(struct hdmi *hdmi)
480{ 486{
481 struct hdmi_phy_8960 *phy_8960; 487 struct hdmi_phy_8960 *phy_8960;
482 struct hdmi_phy *phy = NULL; 488 struct hdmi_phy *phy = NULL;
483 int ret, i; 489 int ret;
490#ifdef CONFIG_COMMON_CLK
491 int i;
484 492
485 /* sanity check: */ 493 /* sanity check: */
486 for (i = 0; i < (ARRAY_SIZE(freqtbl) - 1); i++) 494 for (i = 0; i < (ARRAY_SIZE(freqtbl) - 1); i++)
487 if (WARN_ON(freqtbl[i].rate < freqtbl[i+1].rate)) 495 if (WARN_ON(freqtbl[i].rate < freqtbl[i+1].rate))
488 return ERR_PTR(-EINVAL); 496 return ERR_PTR(-EINVAL);
497#endif
489 498
490 phy_8960 = kzalloc(sizeof(*phy_8960), GFP_KERNEL); 499 phy_8960 = kzalloc(sizeof(*phy_8960), GFP_KERNEL);
491 if (!phy_8960) { 500 if (!phy_8960) {
@@ -499,6 +508,7 @@ struct hdmi_phy *hdmi_phy_8960_init(struct hdmi *hdmi)
499 508
500 phy_8960->hdmi = hdmi; 509 phy_8960->hdmi = hdmi;
501 510
511#ifdef CONFIG_COMMON_CLK
502 phy_8960->pll_hw.init = &pll_init; 512 phy_8960->pll_hw.init = &pll_init;
503 phy_8960->pll = devm_clk_register(hdmi->dev->dev, &phy_8960->pll_hw); 513 phy_8960->pll = devm_clk_register(hdmi->dev->dev, &phy_8960->pll_hw);
504 if (IS_ERR(phy_8960->pll)) { 514 if (IS_ERR(phy_8960->pll)) {
@@ -506,6 +516,7 @@ struct hdmi_phy *hdmi_phy_8960_init(struct hdmi *hdmi)
506 phy_8960->pll = NULL; 516 phy_8960->pll = NULL;
507 goto fail; 517 goto fail;
508 } 518 }
519#endif
509 520
510 return phy; 521 return phy;
511 522
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 26ee80db17af..fcf95680413d 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -52,7 +52,7 @@ module_param(reglog, bool, 0600);
52#define reglog 0 52#define reglog 0
53#endif 53#endif
54 54
55static char *vram; 55static char *vram = "16m";
56MODULE_PARM_DESC(vram, "Configure VRAM size (for devices without IOMMU/GPUMMU"); 56MODULE_PARM_DESC(vram, "Configure VRAM size (for devices without IOMMU/GPUMMU");
57module_param(vram, charp, 0); 57module_param(vram, charp, 0);
58 58
diff --git a/drivers/gpu/drm/nouveau/core/subdev/bar/nvc0.c b/drivers/gpu/drm/nouveau/core/subdev/bar/nvc0.c
index 0a44459844e3..05a278bab247 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/bar/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/bar/nvc0.c
@@ -200,7 +200,6 @@ nvc0_bar_init(struct nouveau_object *object)
200 200
201 nv_mask(priv, 0x000200, 0x00000100, 0x00000000); 201 nv_mask(priv, 0x000200, 0x00000100, 0x00000000);
202 nv_mask(priv, 0x000200, 0x00000100, 0x00000100); 202 nv_mask(priv, 0x000200, 0x00000100, 0x00000100);
203 nv_mask(priv, 0x100c80, 0x00000001, 0x00000000);
204 203
205 nv_wr32(priv, 0x001704, 0x80000000 | priv->bar[1].mem->addr >> 12); 204 nv_wr32(priv, 0x001704, 0x80000000 | priv->bar[1].mem->addr >> 12);
206 if (priv->bar[0].mem) 205 if (priv->bar[0].mem)
diff --git a/drivers/gpu/drm/nouveau/core/subdev/fb/nvc0.c b/drivers/gpu/drm/nouveau/core/subdev/fb/nvc0.c
index b19a2b3c1081..32f28dc73ef2 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/fb/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/fb/nvc0.c
@@ -60,6 +60,7 @@ nvc0_fb_init(struct nouveau_object *object)
60 60
61 if (priv->r100c10_page) 61 if (priv->r100c10_page)
62 nv_wr32(priv, 0x100c10, priv->r100c10 >> 8); 62 nv_wr32(priv, 0x100c10, priv->r100c10 >> 8);
63 nv_mask(priv, 0x100c80, 0x00000001, 0x00000000); /* 128KiB lpg */
63 return 0; 64 return 0;
64} 65}
65 66
diff --git a/drivers/gpu/drm/nouveau/core/subdev/ltc/gf100.c b/drivers/gpu/drm/nouveau/core/subdev/ltc/gf100.c
index b54b582e72c4..d5d65285efe5 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/ltc/gf100.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/ltc/gf100.c
@@ -98,6 +98,7 @@ static int
98gf100_ltc_init(struct nouveau_object *object) 98gf100_ltc_init(struct nouveau_object *object)
99{ 99{
100 struct nvkm_ltc_priv *priv = (void *)object; 100 struct nvkm_ltc_priv *priv = (void *)object;
101 u32 lpg128 = !(nv_rd32(priv, 0x100c80) & 0x00000001);
101 int ret; 102 int ret;
102 103
103 ret = nvkm_ltc_init(priv); 104 ret = nvkm_ltc_init(priv);
@@ -107,6 +108,7 @@ gf100_ltc_init(struct nouveau_object *object)
107 nv_mask(priv, 0x17e820, 0x00100000, 0x00000000); /* INTR_EN &= ~0x10 */ 108 nv_mask(priv, 0x17e820, 0x00100000, 0x00000000); /* INTR_EN &= ~0x10 */
108 nv_wr32(priv, 0x17e8d8, priv->ltc_nr); 109 nv_wr32(priv, 0x17e8d8, priv->ltc_nr);
109 nv_wr32(priv, 0x17e8d4, priv->tag_base); 110 nv_wr32(priv, 0x17e8d4, priv->tag_base);
111 nv_mask(priv, 0x17e8c0, 0x00000002, lpg128 ? 0x00000002 : 0x00000000);
110 return 0; 112 return 0;
111} 113}
112 114
diff --git a/drivers/gpu/drm/nouveau/core/subdev/ltc/gk104.c b/drivers/gpu/drm/nouveau/core/subdev/ltc/gk104.c
index ea716569745d..b39b5d0eb8f9 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/ltc/gk104.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/ltc/gk104.c
@@ -28,6 +28,7 @@ static int
28gk104_ltc_init(struct nouveau_object *object) 28gk104_ltc_init(struct nouveau_object *object)
29{ 29{
30 struct nvkm_ltc_priv *priv = (void *)object; 30 struct nvkm_ltc_priv *priv = (void *)object;
31 u32 lpg128 = !(nv_rd32(priv, 0x100c80) & 0x00000001);
31 int ret; 32 int ret;
32 33
33 ret = nvkm_ltc_init(priv); 34 ret = nvkm_ltc_init(priv);
@@ -37,6 +38,7 @@ gk104_ltc_init(struct nouveau_object *object)
37 nv_wr32(priv, 0x17e8d8, priv->ltc_nr); 38 nv_wr32(priv, 0x17e8d8, priv->ltc_nr);
38 nv_wr32(priv, 0x17e000, priv->ltc_nr); 39 nv_wr32(priv, 0x17e000, priv->ltc_nr);
39 nv_wr32(priv, 0x17e8d4, priv->tag_base); 40 nv_wr32(priv, 0x17e8d4, priv->tag_base);
41 nv_mask(priv, 0x17e8c0, 0x00000002, lpg128 ? 0x00000002 : 0x00000000);
40 return 0; 42 return 0;
41} 43}
42 44
diff --git a/drivers/gpu/drm/nouveau/core/subdev/ltc/gm107.c b/drivers/gpu/drm/nouveau/core/subdev/ltc/gm107.c
index 4761b2e9af00..a4de64289762 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/ltc/gm107.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/ltc/gm107.c
@@ -98,6 +98,7 @@ static int
98gm107_ltc_init(struct nouveau_object *object) 98gm107_ltc_init(struct nouveau_object *object)
99{ 99{
100 struct nvkm_ltc_priv *priv = (void *)object; 100 struct nvkm_ltc_priv *priv = (void *)object;
101 u32 lpg128 = !(nv_rd32(priv, 0x100c80) & 0x00000001);
101 int ret; 102 int ret;
102 103
103 ret = nvkm_ltc_init(priv); 104 ret = nvkm_ltc_init(priv);
@@ -106,6 +107,7 @@ gm107_ltc_init(struct nouveau_object *object)
106 107
107 nv_wr32(priv, 0x17e27c, priv->ltc_nr); 108 nv_wr32(priv, 0x17e27c, priv->ltc_nr);
108 nv_wr32(priv, 0x17e278, priv->tag_base); 109 nv_wr32(priv, 0x17e278, priv->tag_base);
110 nv_mask(priv, 0x17e264, 0x00000002, lpg128 ? 0x00000002 : 0x00000000);
109 return 0; 111 return 0;
110} 112}
111 113
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
index 279206997e5c..622424692b3b 100644
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
@@ -46,7 +46,6 @@ static struct nouveau_dsm_priv {
46 bool dsm_detected; 46 bool dsm_detected;
47 bool optimus_detected; 47 bool optimus_detected;
48 acpi_handle dhandle; 48 acpi_handle dhandle;
49 acpi_handle other_handle;
50 acpi_handle rom_handle; 49 acpi_handle rom_handle;
51} nouveau_dsm_priv; 50} nouveau_dsm_priv;
52 51
@@ -222,10 +221,9 @@ static int nouveau_dsm_pci_probe(struct pci_dev *pdev)
222 if (!dhandle) 221 if (!dhandle)
223 return false; 222 return false;
224 223
225 if (!acpi_has_method(dhandle, "_DSM")) { 224 if (!acpi_has_method(dhandle, "_DSM"))
226 nouveau_dsm_priv.other_handle = dhandle;
227 return false; 225 return false;
228 } 226
229 if (acpi_check_dsm(dhandle, nouveau_dsm_muid, 0x00000102, 227 if (acpi_check_dsm(dhandle, nouveau_dsm_muid, 0x00000102,
230 1 << NOUVEAU_DSM_POWER)) 228 1 << NOUVEAU_DSM_POWER))
231 retval |= NOUVEAU_DSM_HAS_MUX; 229 retval |= NOUVEAU_DSM_HAS_MUX;
@@ -301,16 +299,6 @@ static bool nouveau_dsm_detect(void)
301 printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n", 299 printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n",
302 acpi_method_name); 300 acpi_method_name);
303 nouveau_dsm_priv.dsm_detected = true; 301 nouveau_dsm_priv.dsm_detected = true;
304 /*
305 * On some systems hotplug events are generated for the device
306 * being switched off when _DSM is executed. They cause ACPI
307 * hotplug to trigger and attempt to remove the device from
308 * the system, which causes it to break down. Prevent that from
309 * happening by setting the no_hotplug flag for the involved
310 * ACPI device objects.
311 */
312 acpi_bus_no_hotplug(nouveau_dsm_priv.dhandle);
313 acpi_bus_no_hotplug(nouveau_dsm_priv.other_handle);
314 ret = true; 302 ret = true;
315 } 303 }
316 304
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 250a5e88c751..9c3af96a7153 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -627,6 +627,7 @@ int nouveau_pmops_suspend(struct device *dev)
627 627
628 pci_save_state(pdev); 628 pci_save_state(pdev);
629 pci_disable_device(pdev); 629 pci_disable_device(pdev);
630 pci_ignore_hotplug(pdev);
630 pci_set_power_state(pdev, PCI_D3hot); 631 pci_set_power_state(pdev, PCI_D3hot);
631 return 0; 632 return 0;
632} 633}
diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index 18d55d447248..c7592ec8ecb8 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -108,7 +108,16 @@ void
108nouveau_vga_fini(struct nouveau_drm *drm) 108nouveau_vga_fini(struct nouveau_drm *drm)
109{ 109{
110 struct drm_device *dev = drm->dev; 110 struct drm_device *dev = drm->dev;
111 bool runtime = false;
112
113 if (nouveau_runtime_pm == 1)
114 runtime = true;
115 if ((nouveau_runtime_pm == -1) && (nouveau_is_optimus() || nouveau_is_v1_dsm()))
116 runtime = true;
117
111 vga_switcheroo_unregister_client(dev->pdev); 118 vga_switcheroo_unregister_client(dev->pdev);
119 if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus())
120 vga_switcheroo_fini_domain_pm_ops(drm->dev->dev);
112 vga_client_register(dev->pdev, NULL, NULL, NULL); 121 vga_client_register(dev->pdev, NULL, NULL, NULL);
113} 122}
114 123
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
index b1e11f8434e2..ac14b67621d3 100644
--- a/drivers/gpu/drm/radeon/atombios_dp.c
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
@@ -405,16 +405,13 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector)
405 u8 msg[DP_DPCD_SIZE]; 405 u8 msg[DP_DPCD_SIZE];
406 int ret; 406 int ret;
407 407
408 char dpcd_hex_dump[DP_DPCD_SIZE * 3];
409
410 ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, 408 ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg,
411 DP_DPCD_SIZE); 409 DP_DPCD_SIZE);
412 if (ret > 0) { 410 if (ret > 0) {
413 memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); 411 memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE);
414 412
415 hex_dump_to_buffer(dig_connector->dpcd, sizeof(dig_connector->dpcd), 413 DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd),
416 32, 1, dpcd_hex_dump, sizeof(dpcd_hex_dump), false); 414 dig_connector->dpcd);
417 DRM_DEBUG_KMS("DPCD: %s\n", dpcd_hex_dump);
418 415
419 radeon_dp_probe_oui(radeon_connector); 416 radeon_dp_probe_oui(radeon_connector);
420 417
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
index 192278bc993c..c4ffa54b1e3d 100644
--- a/drivers/gpu/drm/radeon/cik_sdma.c
+++ b/drivers/gpu/drm/radeon/cik_sdma.c
@@ -489,13 +489,6 @@ int cik_sdma_resume(struct radeon_device *rdev)
489{ 489{
490 int r; 490 int r;
491 491
492 /* Reset dma */
493 WREG32(SRBM_SOFT_RESET, SOFT_RESET_SDMA | SOFT_RESET_SDMA1);
494 RREG32(SRBM_SOFT_RESET);
495 udelay(50);
496 WREG32(SRBM_SOFT_RESET, 0);
497 RREG32(SRBM_SOFT_RESET);
498
499 r = cik_sdma_load_microcode(rdev); 492 r = cik_sdma_load_microcode(rdev);
500 if (r) 493 if (r)
501 return r; 494 return r;
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
index 8b58e11b64fa..67cb472d188c 100644
--- a/drivers/gpu/drm/radeon/kv_dpm.c
+++ b/drivers/gpu/drm/radeon/kv_dpm.c
@@ -33,6 +33,8 @@
33#define KV_MINIMUM_ENGINE_CLOCK 800 33#define KV_MINIMUM_ENGINE_CLOCK 800
34#define SMC_RAM_END 0x40000 34#define SMC_RAM_END 0x40000
35 35
36static int kv_enable_nb_dpm(struct radeon_device *rdev,
37 bool enable);
36static void kv_init_graphics_levels(struct radeon_device *rdev); 38static void kv_init_graphics_levels(struct radeon_device *rdev);
37static int kv_calculate_ds_divider(struct radeon_device *rdev); 39static int kv_calculate_ds_divider(struct radeon_device *rdev);
38static int kv_calculate_nbps_level_settings(struct radeon_device *rdev); 40static int kv_calculate_nbps_level_settings(struct radeon_device *rdev);
@@ -1295,6 +1297,9 @@ void kv_dpm_disable(struct radeon_device *rdev)
1295{ 1297{
1296 kv_smc_bapm_enable(rdev, false); 1298 kv_smc_bapm_enable(rdev, false);
1297 1299
1300 if (rdev->family == CHIP_MULLINS)
1301 kv_enable_nb_dpm(rdev, false);
1302
1298 /* powerup blocks */ 1303 /* powerup blocks */
1299 kv_dpm_powergate_acp(rdev, false); 1304 kv_dpm_powergate_acp(rdev, false);
1300 kv_dpm_powergate_samu(rdev, false); 1305 kv_dpm_powergate_samu(rdev, false);
@@ -1769,15 +1774,24 @@ static int kv_update_dfs_bypass_settings(struct radeon_device *rdev,
1769 return ret; 1774 return ret;
1770} 1775}
1771 1776
1772static int kv_enable_nb_dpm(struct radeon_device *rdev) 1777static int kv_enable_nb_dpm(struct radeon_device *rdev,
1778 bool enable)
1773{ 1779{
1774 struct kv_power_info *pi = kv_get_pi(rdev); 1780 struct kv_power_info *pi = kv_get_pi(rdev);
1775 int ret = 0; 1781 int ret = 0;
1776 1782
1777 if (pi->enable_nb_dpm && !pi->nb_dpm_enabled) { 1783 if (enable) {
1778 ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Enable); 1784 if (pi->enable_nb_dpm && !pi->nb_dpm_enabled) {
1779 if (ret == 0) 1785 ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Enable);
1780 pi->nb_dpm_enabled = true; 1786 if (ret == 0)
1787 pi->nb_dpm_enabled = true;
1788 }
1789 } else {
1790 if (pi->enable_nb_dpm && pi->nb_dpm_enabled) {
1791 ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Disable);
1792 if (ret == 0)
1793 pi->nb_dpm_enabled = false;
1794 }
1781 } 1795 }
1782 1796
1783 return ret; 1797 return ret;
@@ -1864,7 +1878,7 @@ int kv_dpm_set_power_state(struct radeon_device *rdev)
1864 } 1878 }
1865 kv_update_sclk_t(rdev); 1879 kv_update_sclk_t(rdev);
1866 if (rdev->family == CHIP_MULLINS) 1880 if (rdev->family == CHIP_MULLINS)
1867 kv_enable_nb_dpm(rdev); 1881 kv_enable_nb_dpm(rdev, true);
1868 } 1882 }
1869 } else { 1883 } else {
1870 if (pi->enable_dpm) { 1884 if (pi->enable_dpm) {
@@ -1889,7 +1903,7 @@ int kv_dpm_set_power_state(struct radeon_device *rdev)
1889 } 1903 }
1890 kv_update_acp_boot_level(rdev); 1904 kv_update_acp_boot_level(rdev);
1891 kv_update_sclk_t(rdev); 1905 kv_update_sclk_t(rdev);
1892 kv_enable_nb_dpm(rdev); 1906 kv_enable_nb_dpm(rdev, true);
1893 } 1907 }
1894 } 1908 }
1895 1909
diff --git a/drivers/gpu/drm/radeon/ni_dma.c b/drivers/gpu/drm/radeon/ni_dma.c
index 8a3e6221cece..f26f0a9fb522 100644
--- a/drivers/gpu/drm/radeon/ni_dma.c
+++ b/drivers/gpu/drm/radeon/ni_dma.c
@@ -191,12 +191,6 @@ int cayman_dma_resume(struct radeon_device *rdev)
191 u32 reg_offset, wb_offset; 191 u32 reg_offset, wb_offset;
192 int i, r; 192 int i, r;
193 193
194 /* Reset dma */
195 WREG32(SRBM_SOFT_RESET, SOFT_RESET_DMA | SOFT_RESET_DMA1);
196 RREG32(SRBM_SOFT_RESET);
197 udelay(50);
198 WREG32(SRBM_SOFT_RESET, 0);
199
200 for (i = 0; i < 2; i++) { 194 for (i = 0; i < 2; i++) {
201 if (i == 0) { 195 if (i == 0) {
202 ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX]; 196 ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 4c5ec44ff328..b0098e792e62 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -821,6 +821,20 @@ u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc)
821 return RREG32(RADEON_CRTC2_CRNT_FRAME); 821 return RREG32(RADEON_CRTC2_CRNT_FRAME);
822} 822}
823 823
824/**
825 * r100_ring_hdp_flush - flush Host Data Path via the ring buffer
826 * rdev: radeon device structure
827 * ring: ring buffer struct for emitting packets
828 */
829static void r100_ring_hdp_flush(struct radeon_device *rdev, struct radeon_ring *ring)
830{
831 radeon_ring_write(ring, PACKET0(RADEON_HOST_PATH_CNTL, 0));
832 radeon_ring_write(ring, rdev->config.r100.hdp_cntl |
833 RADEON_HDP_READ_BUFFER_INVALIDATE);
834 radeon_ring_write(ring, PACKET0(RADEON_HOST_PATH_CNTL, 0));
835 radeon_ring_write(ring, rdev->config.r100.hdp_cntl);
836}
837
824/* Who ever call radeon_fence_emit should call ring_lock and ask 838/* Who ever call radeon_fence_emit should call ring_lock and ask
825 * for enough space (today caller are ib schedule and buffer move) */ 839 * for enough space (today caller are ib schedule and buffer move) */
826void r100_fence_ring_emit(struct radeon_device *rdev, 840void r100_fence_ring_emit(struct radeon_device *rdev,
@@ -1056,20 +1070,6 @@ void r100_gfx_set_wptr(struct radeon_device *rdev,
1056 (void)RREG32(RADEON_CP_RB_WPTR); 1070 (void)RREG32(RADEON_CP_RB_WPTR);
1057} 1071}
1058 1072
1059/**
1060 * r100_ring_hdp_flush - flush Host Data Path via the ring buffer
1061 * rdev: radeon device structure
1062 * ring: ring buffer struct for emitting packets
1063 */
1064void r100_ring_hdp_flush(struct radeon_device *rdev, struct radeon_ring *ring)
1065{
1066 radeon_ring_write(ring, PACKET0(RADEON_HOST_PATH_CNTL, 0));
1067 radeon_ring_write(ring, rdev->config.r100.hdp_cntl |
1068 RADEON_HDP_READ_BUFFER_INVALIDATE);
1069 radeon_ring_write(ring, PACKET0(RADEON_HOST_PATH_CNTL, 0));
1070 radeon_ring_write(ring, rdev->config.r100.hdp_cntl);
1071}
1072
1073static void r100_cp_load_microcode(struct radeon_device *rdev) 1073static void r100_cp_load_microcode(struct radeon_device *rdev)
1074{ 1074{
1075 const __be32 *fw_data; 1075 const __be32 *fw_data;
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index e616eb5f6e7a..3cfb50056f7a 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2769,8 +2769,8 @@ bool r600_semaphore_ring_emit(struct radeon_device *rdev,
2769 radeon_ring_write(ring, lower_32_bits(addr)); 2769 radeon_ring_write(ring, lower_32_bits(addr));
2770 radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel); 2770 radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel);
2771 2771
2772 /* PFP_SYNC_ME packet only exists on 7xx+ */ 2772 /* PFP_SYNC_ME packet only exists on 7xx+, only enable it on eg+ */
2773 if (emit_wait && (rdev->family >= CHIP_RV770)) { 2773 if (emit_wait && (rdev->family >= CHIP_CEDAR)) {
2774 /* Prevent the PFP from running ahead of the semaphore wait */ 2774 /* Prevent the PFP from running ahead of the semaphore wait */
2775 radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0)); 2775 radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0));
2776 radeon_ring_write(ring, 0x0); 2776 radeon_ring_write(ring, 0x0);
diff --git a/drivers/gpu/drm/radeon/r600_dma.c b/drivers/gpu/drm/radeon/r600_dma.c
index 51fd98553eaf..a908daa006d2 100644
--- a/drivers/gpu/drm/radeon/r600_dma.c
+++ b/drivers/gpu/drm/radeon/r600_dma.c
@@ -124,15 +124,6 @@ int r600_dma_resume(struct radeon_device *rdev)
124 u32 rb_bufsz; 124 u32 rb_bufsz;
125 int r; 125 int r;
126 126
127 /* Reset dma */
128 if (rdev->family >= CHIP_RV770)
129 WREG32(SRBM_SOFT_RESET, RV770_SOFT_RESET_DMA);
130 else
131 WREG32(SRBM_SOFT_RESET, SOFT_RESET_DMA);
132 RREG32(SRBM_SOFT_RESET);
133 udelay(50);
134 WREG32(SRBM_SOFT_RESET, 0);
135
136 WREG32(DMA_SEM_INCOMPLETE_TIMER_CNTL, 0); 127 WREG32(DMA_SEM_INCOMPLETE_TIMER_CNTL, 0);
137 WREG32(DMA_SEM_WAIT_FAIL_TIMER_CNTL, 0); 128 WREG32(DMA_SEM_WAIT_FAIL_TIMER_CNTL, 0);
138 129
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
index 0c4a7d8d93e0..31e1052ad3e3 100644
--- a/drivers/gpu/drm/radeon/r600d.h
+++ b/drivers/gpu/drm/radeon/r600d.h
@@ -44,13 +44,6 @@
44#define R6XX_MAX_PIPES 8 44#define R6XX_MAX_PIPES 8
45#define R6XX_MAX_PIPES_MASK 0xff 45#define R6XX_MAX_PIPES_MASK 0xff
46 46
47/* PTE flags */
48#define PTE_VALID (1 << 0)
49#define PTE_SYSTEM (1 << 1)
50#define PTE_SNOOPED (1 << 2)
51#define PTE_READABLE (1 << 5)
52#define PTE_WRITEABLE (1 << 6)
53
54/* tiling bits */ 47/* tiling bits */
55#define ARRAY_LINEAR_GENERAL 0x00000000 48#define ARRAY_LINEAR_GENERAL 0x00000000
56#define ARRAY_LINEAR_ALIGNED 0x00000001 49#define ARRAY_LINEAR_ALIGNED 0x00000001
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index eeeeabe09758..2dd5847f9b98 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -185,7 +185,6 @@ static struct radeon_asic_ring r100_gfx_ring = {
185 .get_rptr = &r100_gfx_get_rptr, 185 .get_rptr = &r100_gfx_get_rptr,
186 .get_wptr = &r100_gfx_get_wptr, 186 .get_wptr = &r100_gfx_get_wptr,
187 .set_wptr = &r100_gfx_set_wptr, 187 .set_wptr = &r100_gfx_set_wptr,
188 .hdp_flush = &r100_ring_hdp_flush,
189}; 188};
190 189
191static struct radeon_asic r100_asic = { 190static struct radeon_asic r100_asic = {
@@ -332,7 +331,6 @@ static struct radeon_asic_ring r300_gfx_ring = {
332 .get_rptr = &r100_gfx_get_rptr, 331 .get_rptr = &r100_gfx_get_rptr,
333 .get_wptr = &r100_gfx_get_wptr, 332 .get_wptr = &r100_gfx_get_wptr,
334 .set_wptr = &r100_gfx_set_wptr, 333 .set_wptr = &r100_gfx_set_wptr,
335 .hdp_flush = &r100_ring_hdp_flush,
336}; 334};
337 335
338static struct radeon_asic r300_asic = { 336static struct radeon_asic r300_asic = {
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
index 275a5dc01780..7756bc1e1cd3 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.h
+++ b/drivers/gpu/drm/radeon/radeon_asic.h
@@ -148,8 +148,7 @@ u32 r100_gfx_get_wptr(struct radeon_device *rdev,
148 struct radeon_ring *ring); 148 struct radeon_ring *ring);
149void r100_gfx_set_wptr(struct radeon_device *rdev, 149void r100_gfx_set_wptr(struct radeon_device *rdev,
150 struct radeon_ring *ring); 150 struct radeon_ring *ring);
151void r100_ring_hdp_flush(struct radeon_device *rdev, 151
152 struct radeon_ring *ring);
153/* 152/*
154 * r200,rv250,rs300,rv280 153 * r200,rv250,rs300,rv280
155 */ 154 */
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 92b2d8dd4735..e74c7e387dde 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -447,6 +447,13 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
447 } 447 }
448 } 448 }
449 449
450 /* Fujitsu D3003-S2 board lists DVI-I as DVI-I and VGA */
451 if ((dev->pdev->device == 0x9805) &&
452 (dev->pdev->subsystem_vendor == 0x1734) &&
453 (dev->pdev->subsystem_device == 0x11bd)) {
454 if (*connector_type == DRM_MODE_CONNECTOR_VGA)
455 return false;
456 }
450 457
451 return true; 458 return true;
452} 459}
@@ -2281,19 +2288,31 @@ static void radeon_atombios_add_pplib_thermal_controller(struct radeon_device *r
2281 (controller->ucFanParameters & 2288 (controller->ucFanParameters &
2282 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); 2289 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with");
2283 rdev->pm.int_thermal_type = THERMAL_TYPE_KV; 2290 rdev->pm.int_thermal_type = THERMAL_TYPE_KV;
2284 } else if ((controller->ucType == 2291 } else if (controller->ucType ==
2285 ATOM_PP_THERMALCONTROLLER_EXTERNAL_GPIO) || 2292 ATOM_PP_THERMALCONTROLLER_EXTERNAL_GPIO) {
2286 (controller->ucType == 2293 DRM_INFO("External GPIO thermal controller %s fan control\n",
2287 ATOM_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL) || 2294 (controller->ucFanParameters &
2288 (controller->ucType == 2295 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with");
2289 ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL)) { 2296 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL_GPIO;
2290 DRM_INFO("Special thermal controller config\n"); 2297 } else if (controller->ucType ==
2298 ATOM_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL) {
2299 DRM_INFO("ADT7473 with internal thermal controller %s fan control\n",
2300 (controller->ucFanParameters &
2301 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with");
2302 rdev->pm.int_thermal_type = THERMAL_TYPE_ADT7473_WITH_INTERNAL;
2303 } else if (controller->ucType ==
2304 ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL) {
2305 DRM_INFO("EMC2103 with internal thermal controller %s fan control\n",
2306 (controller->ucFanParameters &
2307 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with");
2308 rdev->pm.int_thermal_type = THERMAL_TYPE_EMC2103_WITH_INTERNAL;
2291 } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) { 2309 } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) {
2292 DRM_INFO("Possible %s thermal controller at 0x%02x %s fan control\n", 2310 DRM_INFO("Possible %s thermal controller at 0x%02x %s fan control\n",
2293 pp_lib_thermal_controller_names[controller->ucType], 2311 pp_lib_thermal_controller_names[controller->ucType],
2294 controller->ucI2cAddress >> 1, 2312 controller->ucI2cAddress >> 1,
2295 (controller->ucFanParameters & 2313 (controller->ucFanParameters &
2296 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); 2314 ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with");
2315 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL;
2297 i2c_bus = radeon_lookup_i2c_gpio(rdev, controller->ucI2cLine); 2316 i2c_bus = radeon_lookup_i2c_gpio(rdev, controller->ucI2cLine);
2298 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); 2317 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus);
2299 if (rdev->pm.i2c_bus) { 2318 if (rdev->pm.i2c_bus) {
diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
index a9fb0d016d38..8bc7d0bbd3c8 100644
--- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c
+++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
@@ -33,7 +33,6 @@ static struct radeon_atpx_priv {
33 bool atpx_detected; 33 bool atpx_detected;
34 /* handle for device - and atpx */ 34 /* handle for device - and atpx */
35 acpi_handle dhandle; 35 acpi_handle dhandle;
36 acpi_handle other_handle;
37 struct radeon_atpx atpx; 36 struct radeon_atpx atpx;
38} radeon_atpx_priv; 37} radeon_atpx_priv;
39 38
@@ -453,10 +452,9 @@ static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)
453 return false; 452 return false;
454 453
455 status = acpi_get_handle(dhandle, "ATPX", &atpx_handle); 454 status = acpi_get_handle(dhandle, "ATPX", &atpx_handle);
456 if (ACPI_FAILURE(status)) { 455 if (ACPI_FAILURE(status))
457 radeon_atpx_priv.other_handle = dhandle;
458 return false; 456 return false;
459 } 457
460 radeon_atpx_priv.dhandle = dhandle; 458 radeon_atpx_priv.dhandle = dhandle;
461 radeon_atpx_priv.atpx.handle = atpx_handle; 459 radeon_atpx_priv.atpx.handle = atpx_handle;
462 return true; 460 return true;
@@ -540,16 +538,6 @@ static bool radeon_atpx_detect(void)
540 printk(KERN_INFO "VGA switcheroo: detected switching method %s handle\n", 538 printk(KERN_INFO "VGA switcheroo: detected switching method %s handle\n",
541 acpi_method_name); 539 acpi_method_name);
542 radeon_atpx_priv.atpx_detected = true; 540 radeon_atpx_priv.atpx_detected = true;
543 /*
544 * On some systems hotplug events are generated for the device
545 * being switched off when ATPX is executed. They cause ACPI
546 * hotplug to trigger and attempt to remove the device from
547 * the system, which causes it to break down. Prevent that from
548 * happening by setting the no_hotplug flag for the involved
549 * ACPI device objects.
550 */
551 acpi_bus_no_hotplug(radeon_atpx_priv.dhandle);
552 acpi_bus_no_hotplug(radeon_atpx_priv.other_handle);
553 return true; 541 return true;
554 } 542 }
555 return false; 543 return false;
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 6a219bcee66d..75223dd3a8a3 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1393,7 +1393,7 @@ int radeon_device_init(struct radeon_device *rdev,
1393 1393
1394 r = radeon_init(rdev); 1394 r = radeon_init(rdev);
1395 if (r) 1395 if (r)
1396 return r; 1396 goto failed;
1397 1397
1398 r = radeon_ib_ring_tests(rdev); 1398 r = radeon_ib_ring_tests(rdev);
1399 if (r) 1399 if (r)
@@ -1413,7 +1413,7 @@ int radeon_device_init(struct radeon_device *rdev,
1413 radeon_agp_disable(rdev); 1413 radeon_agp_disable(rdev);
1414 r = radeon_init(rdev); 1414 r = radeon_init(rdev);
1415 if (r) 1415 if (r)
1416 return r; 1416 goto failed;
1417 } 1417 }
1418 1418
1419 if ((radeon_testing & 1)) { 1419 if ((radeon_testing & 1)) {
@@ -1435,6 +1435,11 @@ int radeon_device_init(struct radeon_device *rdev,
1435 DRM_INFO("radeon: acceleration disabled, skipping benchmarks\n"); 1435 DRM_INFO("radeon: acceleration disabled, skipping benchmarks\n");
1436 } 1436 }
1437 return 0; 1437 return 0;
1438
1439failed:
1440 if (runtime)
1441 vga_switcheroo_fini_domain_pm_ops(rdev->dev);
1442 return r;
1438} 1443}
1439 1444
1440static void radeon_debugfs_remove_files(struct radeon_device *rdev); 1445static void radeon_debugfs_remove_files(struct radeon_device *rdev);
@@ -1455,6 +1460,8 @@ void radeon_device_fini(struct radeon_device *rdev)
1455 radeon_bo_evict_vram(rdev); 1460 radeon_bo_evict_vram(rdev);
1456 radeon_fini(rdev); 1461 radeon_fini(rdev);
1457 vga_switcheroo_unregister_client(rdev->pdev); 1462 vga_switcheroo_unregister_client(rdev->pdev);
1463 if (rdev->flags & RADEON_IS_PX)
1464 vga_switcheroo_fini_domain_pm_ops(rdev->dev);
1458 vga_client_register(rdev->pdev, NULL, NULL, NULL); 1465 vga_client_register(rdev->pdev, NULL, NULL, NULL);
1459 if (rdev->rio_mem) 1466 if (rdev->rio_mem)
1460 pci_iounmap(rdev->pdev, rdev->rio_mem); 1467 pci_iounmap(rdev->pdev, rdev->rio_mem);
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 8df888908833..4126fd0937a2 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -83,7 +83,7 @@
83 * CIK: 1D and linear tiling modes contain valid PIPE_CONFIG 83 * CIK: 1D and linear tiling modes contain valid PIPE_CONFIG
84 * 2.39.0 - Add INFO query for number of active CUs 84 * 2.39.0 - Add INFO query for number of active CUs
85 * 2.40.0 - Add RADEON_GEM_GTT_WC/UC, flush HDP cache before submitting 85 * 2.40.0 - Add RADEON_GEM_GTT_WC/UC, flush HDP cache before submitting
86 * CS to GPU 86 * CS to GPU on >= r600
87 */ 87 */
88#define KMS_DRIVER_MAJOR 2 88#define KMS_DRIVER_MAJOR 2
89#define KMS_DRIVER_MINOR 40 89#define KMS_DRIVER_MINOR 40
@@ -440,6 +440,7 @@ static int radeon_pmops_runtime_suspend(struct device *dev)
440 ret = radeon_suspend_kms(drm_dev, false, false); 440 ret = radeon_suspend_kms(drm_dev, false, false);
441 pci_save_state(pdev); 441 pci_save_state(pdev);
442 pci_disable_device(pdev); 442 pci_disable_device(pdev);
443 pci_ignore_hotplug(pdev);
443 pci_set_power_state(pdev, PCI_D3cold); 444 pci_set_power_state(pdev, PCI_D3cold);
444 drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; 445 drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
445 446
diff --git a/drivers/gpu/drm/radeon/radeon_semaphore.c b/drivers/gpu/drm/radeon/radeon_semaphore.c
index 56d9fd66d8ae..abd6753a570a 100644
--- a/drivers/gpu/drm/radeon/radeon_semaphore.c
+++ b/drivers/gpu/drm/radeon/radeon_semaphore.c
@@ -34,7 +34,7 @@
34int radeon_semaphore_create(struct radeon_device *rdev, 34int radeon_semaphore_create(struct radeon_device *rdev,
35 struct radeon_semaphore **semaphore) 35 struct radeon_semaphore **semaphore)
36{ 36{
37 uint32_t *cpu_addr; 37 uint64_t *cpu_addr;
38 int i, r; 38 int i, r;
39 39
40 *semaphore = kmalloc(sizeof(struct radeon_semaphore), GFP_KERNEL); 40 *semaphore = kmalloc(sizeof(struct radeon_semaphore), GFP_KERNEL);
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
index 6c1fc339d228..c5799f16aa4b 100644
--- a/drivers/gpu/drm/radeon/rs400.c
+++ b/drivers/gpu/drm/radeon/rs400.c
@@ -221,9 +221,9 @@ void rs400_gart_set_page(struct radeon_device *rdev, unsigned i,
221 entry = (lower_32_bits(addr) & PAGE_MASK) | 221 entry = (lower_32_bits(addr) & PAGE_MASK) |
222 ((upper_32_bits(addr) & 0xff) << 4); 222 ((upper_32_bits(addr) & 0xff) << 4);
223 if (flags & RADEON_GART_PAGE_READ) 223 if (flags & RADEON_GART_PAGE_READ)
224 addr |= RS400_PTE_READABLE; 224 entry |= RS400_PTE_READABLE;
225 if (flags & RADEON_GART_PAGE_WRITE) 225 if (flags & RADEON_GART_PAGE_WRITE)
226 addr |= RS400_PTE_WRITEABLE; 226 entry |= RS400_PTE_WRITEABLE;
227 if (!(flags & RADEON_GART_PAGE_SNOOP)) 227 if (!(flags & RADEON_GART_PAGE_SNOOP))
228 entry |= RS400_PTE_UNSNOOPED; 228 entry |= RS400_PTE_UNSNOOPED;
229 entry = cpu_to_le32(entry); 229 entry = cpu_to_le32(entry);
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
index ef93156a69c6..b22968c08d1f 100644
--- a/drivers/gpu/drm/sti/sti_hdmi.c
+++ b/drivers/gpu/drm/sti/sti_hdmi.c
@@ -298,7 +298,6 @@ static int hdmi_avi_infoframe_config(struct sti_hdmi *hdmi)
298 hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD2(HDMI_IFRAME_SLOT_AVI)); 298 hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD2(HDMI_IFRAME_SLOT_AVI));
299 299
300 val = frame[0xC]; 300 val = frame[0xC];
301 val |= frame[0xD] << 8;
302 hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD3(HDMI_IFRAME_SLOT_AVI)); 301 hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD3(HDMI_IFRAME_SLOT_AVI));
303 302
304 /* Enable transmission slot for AVI infoframe 303 /* Enable transmission slot for AVI infoframe
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 6866448083b2..37ac7b5dbd06 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -660,6 +660,12 @@ int vga_switcheroo_init_domain_pm_ops(struct device *dev, struct dev_pm_domain *
660} 660}
661EXPORT_SYMBOL(vga_switcheroo_init_domain_pm_ops); 661EXPORT_SYMBOL(vga_switcheroo_init_domain_pm_ops);
662 662
663void vga_switcheroo_fini_domain_pm_ops(struct device *dev)
664{
665 dev->pm_domain = NULL;
666}
667EXPORT_SYMBOL(vga_switcheroo_fini_domain_pm_ops);
668
663static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev) 669static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev)
664{ 670{
665 struct pci_dev *pdev = to_pci_dev(dev); 671 struct pci_dev *pdev = to_pci_dev(dev);
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c
index d2077f040f3e..77711623b973 100644
--- a/drivers/gpu/vga/vgaarb.c
+++ b/drivers/gpu/vga/vgaarb.c
@@ -41,6 +41,7 @@
41#include <linux/poll.h> 41#include <linux/poll.h>
42#include <linux/miscdevice.h> 42#include <linux/miscdevice.h>
43#include <linux/slab.h> 43#include <linux/slab.h>
44#include <linux/screen_info.h>
44 45
45#include <linux/uaccess.h> 46#include <linux/uaccess.h>
46 47
@@ -112,10 +113,8 @@ both:
112 return 1; 113 return 1;
113} 114}
114 115
115#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
116/* this is only used a cookie - it should not be dereferenced */ 116/* this is only used a cookie - it should not be dereferenced */
117static struct pci_dev *vga_default; 117static struct pci_dev *vga_default;
118#endif
119 118
120static void vga_arb_device_card_gone(struct pci_dev *pdev); 119static void vga_arb_device_card_gone(struct pci_dev *pdev);
121 120
@@ -131,7 +130,6 @@ static struct vga_device *vgadev_find(struct pci_dev *pdev)
131} 130}
132 131
133/* Returns the default VGA device (vgacon's babe) */ 132/* Returns the default VGA device (vgacon's babe) */
134#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
135struct pci_dev *vga_default_device(void) 133struct pci_dev *vga_default_device(void)
136{ 134{
137 return vga_default; 135 return vga_default;
@@ -147,7 +145,6 @@ void vga_set_default_device(struct pci_dev *pdev)
147 pci_dev_put(vga_default); 145 pci_dev_put(vga_default);
148 vga_default = pci_dev_get(pdev); 146 vga_default = pci_dev_get(pdev);
149} 147}
150#endif
151 148
152static inline void vga_irq_set_state(struct vga_device *vgadev, bool state) 149static inline void vga_irq_set_state(struct vga_device *vgadev, bool state)
153{ 150{
@@ -583,11 +580,12 @@ static bool vga_arbiter_add_pci_device(struct pci_dev *pdev)
583 /* Deal with VGA default device. Use first enabled one 580 /* Deal with VGA default device. Use first enabled one
584 * by default if arch doesn't have it's own hook 581 * by default if arch doesn't have it's own hook
585 */ 582 */
586#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
587 if (vga_default == NULL && 583 if (vga_default == NULL &&
588 ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) 584 ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) {
585 pr_info("vgaarb: setting as boot device: PCI:%s\n",
586 pci_name(pdev));
589 vga_set_default_device(pdev); 587 vga_set_default_device(pdev);
590#endif 588 }
591 589
592 vga_arbiter_check_bridge_sharing(vgadev); 590 vga_arbiter_check_bridge_sharing(vgadev);
593 591
@@ -621,10 +619,8 @@ static bool vga_arbiter_del_pci_device(struct pci_dev *pdev)
621 goto bail; 619 goto bail;
622 } 620 }
623 621
624#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
625 if (vga_default == pdev) 622 if (vga_default == pdev)
626 vga_set_default_device(NULL); 623 vga_set_default_device(NULL);
627#endif
628 624
629 if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM)) 625 if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM))
630 vga_decode_count--; 626 vga_decode_count--;
@@ -1320,6 +1316,38 @@ static int __init vga_arb_device_init(void)
1320 pr_info("vgaarb: loaded\n"); 1316 pr_info("vgaarb: loaded\n");
1321 1317
1322 list_for_each_entry(vgadev, &vga_list, list) { 1318 list_for_each_entry(vgadev, &vga_list, list) {
1319#if defined(CONFIG_X86) || defined(CONFIG_IA64)
1320 /* Override I/O based detection done by vga_arbiter_add_pci_device()
1321 * as it may take the wrong device (e.g. on Apple system under EFI).
1322 *
1323 * Select the device owning the boot framebuffer if there is one.
1324 */
1325 resource_size_t start, end;
1326 int i;
1327
1328 /* Does firmware framebuffer belong to us? */
1329 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
1330 if (!(pci_resource_flags(vgadev->pdev, i) & IORESOURCE_MEM))
1331 continue;
1332
1333 start = pci_resource_start(vgadev->pdev, i);
1334 end = pci_resource_end(vgadev->pdev, i);
1335
1336 if (!start || !end)
1337 continue;
1338
1339 if (screen_info.lfb_base < start ||
1340 (screen_info.lfb_base + screen_info.lfb_size) >= end)
1341 continue;
1342 if (!vga_default_device())
1343 pr_info("vgaarb: setting as boot device: PCI:%s\n",
1344 pci_name(vgadev->pdev));
1345 else if (vgadev->pdev != vga_default_device())
1346 pr_info("vgaarb: overriding boot device: PCI:%s\n",
1347 pci_name(vgadev->pdev));
1348 vga_set_default_device(vgadev->pdev);
1349 }
1350#endif
1323 if (vgadev->bridge_has_one_vga) 1351 if (vgadev->bridge_has_one_vga)
1324 pr_info("vgaarb: bridge control possible %s\n", pci_name(vgadev->pdev)); 1352 pr_info("vgaarb: bridge control possible %s\n", pci_name(vgadev->pdev));
1325 else 1353 else
diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c
index a077cc86421b..19100fddd2ed 100644
--- a/drivers/iio/accel/bma180.c
+++ b/drivers/iio/accel/bma180.c
@@ -571,7 +571,7 @@ static int bma180_probe(struct i2c_client *client,
571 trig->ops = &bma180_trigger_ops; 571 trig->ops = &bma180_trigger_ops;
572 iio_trigger_set_drvdata(trig, indio_dev); 572 iio_trigger_set_drvdata(trig, indio_dev);
573 data->trig = trig; 573 data->trig = trig;
574 indio_dev->trig = trig; 574 indio_dev->trig = iio_trigger_get(trig);
575 575
576 ret = iio_trigger_register(trig); 576 ret = iio_trigger_register(trig);
577 if (ret) 577 if (ret)
diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
index c55b81f7f970..d10bd0c97233 100644
--- a/drivers/iio/adc/ad_sigma_delta.c
+++ b/drivers/iio/adc/ad_sigma_delta.c
@@ -472,7 +472,7 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
472 goto error_free_irq; 472 goto error_free_irq;
473 473
474 /* select default trigger */ 474 /* select default trigger */
475 indio_dev->trig = sigma_delta->trig; 475 indio_dev->trig = iio_trigger_get(sigma_delta->trig);
476 476
477 return 0; 477 return 0;
478 478
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
index 772e869c280e..7eadaf16adc1 100644
--- a/drivers/iio/adc/at91_adc.c
+++ b/drivers/iio/adc/at91_adc.c
@@ -196,6 +196,7 @@ struct at91_adc_state {
196 bool done; 196 bool done;
197 int irq; 197 int irq;
198 u16 last_value; 198 u16 last_value;
199 int chnb;
199 struct mutex lock; 200 struct mutex lock;
200 u8 num_channels; 201 u8 num_channels;
201 void __iomem *reg_base; 202 void __iomem *reg_base;
@@ -274,7 +275,7 @@ void handle_adc_eoc_trigger(int irq, struct iio_dev *idev)
274 disable_irq_nosync(irq); 275 disable_irq_nosync(irq);
275 iio_trigger_poll(idev->trig); 276 iio_trigger_poll(idev->trig);
276 } else { 277 } else {
277 st->last_value = at91_adc_readl(st, AT91_ADC_LCDR); 278 st->last_value = at91_adc_readl(st, AT91_ADC_CHAN(st, st->chnb));
278 st->done = true; 279 st->done = true;
279 wake_up_interruptible(&st->wq_data_avail); 280 wake_up_interruptible(&st->wq_data_avail);
280 } 281 }
@@ -351,7 +352,7 @@ static irqreturn_t at91_adc_rl_interrupt(int irq, void *private)
351 unsigned int reg; 352 unsigned int reg;
352 353
353 status &= at91_adc_readl(st, AT91_ADC_IMR); 354 status &= at91_adc_readl(st, AT91_ADC_IMR);
354 if (status & st->registers->drdy_mask) 355 if (status & GENMASK(st->num_channels - 1, 0))
355 handle_adc_eoc_trigger(irq, idev); 356 handle_adc_eoc_trigger(irq, idev);
356 357
357 if (status & AT91RL_ADC_IER_PEN) { 358 if (status & AT91RL_ADC_IER_PEN) {
@@ -418,7 +419,7 @@ static irqreturn_t at91_adc_9x5_interrupt(int irq, void *private)
418 AT91_ADC_IER_YRDY | 419 AT91_ADC_IER_YRDY |
419 AT91_ADC_IER_PRDY; 420 AT91_ADC_IER_PRDY;
420 421
421 if (status & st->registers->drdy_mask) 422 if (status & GENMASK(st->num_channels - 1, 0))
422 handle_adc_eoc_trigger(irq, idev); 423 handle_adc_eoc_trigger(irq, idev);
423 424
424 if (status & AT91_ADC_IER_PEN) { 425 if (status & AT91_ADC_IER_PEN) {
@@ -689,9 +690,10 @@ static int at91_adc_read_raw(struct iio_dev *idev,
689 case IIO_CHAN_INFO_RAW: 690 case IIO_CHAN_INFO_RAW:
690 mutex_lock(&st->lock); 691 mutex_lock(&st->lock);
691 692
693 st->chnb = chan->channel;
692 at91_adc_writel(st, AT91_ADC_CHER, 694 at91_adc_writel(st, AT91_ADC_CHER,
693 AT91_ADC_CH(chan->channel)); 695 AT91_ADC_CH(chan->channel));
694 at91_adc_writel(st, AT91_ADC_IER, st->registers->drdy_mask); 696 at91_adc_writel(st, AT91_ADC_IER, BIT(chan->channel));
695 at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_START); 697 at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_START);
696 698
697 ret = wait_event_interruptible_timeout(st->wq_data_avail, 699 ret = wait_event_interruptible_timeout(st->wq_data_avail,
@@ -708,7 +710,7 @@ static int at91_adc_read_raw(struct iio_dev *idev,
708 710
709 at91_adc_writel(st, AT91_ADC_CHDR, 711 at91_adc_writel(st, AT91_ADC_CHDR,
710 AT91_ADC_CH(chan->channel)); 712 AT91_ADC_CH(chan->channel));
711 at91_adc_writel(st, AT91_ADC_IDR, st->registers->drdy_mask); 713 at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel));
712 714
713 st->last_value = 0; 715 st->last_value = 0;
714 st->done = false; 716 st->done = false;
diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index fd2745c62943..626b39749767 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -1126,7 +1126,7 @@ static int xadc_parse_dt(struct iio_dev *indio_dev, struct device_node *np,
1126 chan->address = XADC_REG_VPVN; 1126 chan->address = XADC_REG_VPVN;
1127 } else { 1127 } else {
1128 chan->scan_index = 15 + reg; 1128 chan->scan_index = 15 + reg;
1129 chan->scan_index = XADC_REG_VAUX(reg - 1); 1129 chan->address = XADC_REG_VAUX(reg - 1);
1130 } 1130 }
1131 num_channels++; 1131 num_channels++;
1132 chan++; 1132 chan++;
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
index a3109a6f4d86..92068cdbf8c7 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
@@ -122,7 +122,8 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
122 dev_err(&indio_dev->dev, "Trigger Register Failed\n"); 122 dev_err(&indio_dev->dev, "Trigger Register Failed\n");
123 goto error_free_trig; 123 goto error_free_trig;
124 } 124 }
125 indio_dev->trig = attrb->trigger = trig; 125 attrb->trigger = trig;
126 indio_dev->trig = iio_trigger_get(trig);
126 127
127 return ret; 128 return ret;
128 129
diff --git a/drivers/iio/common/st_sensors/st_sensors_trigger.c b/drivers/iio/common/st_sensors/st_sensors_trigger.c
index 8fc3a97eb266..8d8ca6f1e16a 100644
--- a/drivers/iio/common/st_sensors/st_sensors_trigger.c
+++ b/drivers/iio/common/st_sensors/st_sensors_trigger.c
@@ -49,7 +49,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
49 dev_err(&indio_dev->dev, "failed to register iio trigger.\n"); 49 dev_err(&indio_dev->dev, "failed to register iio trigger.\n");
50 goto iio_trigger_register_error; 50 goto iio_trigger_register_error;
51 } 51 }
52 indio_dev->trig = sdata->trig; 52 indio_dev->trig = iio_trigger_get(sdata->trig);
53 53
54 return 0; 54 return 0;
55 55
diff --git a/drivers/iio/gyro/itg3200_buffer.c b/drivers/iio/gyro/itg3200_buffer.c
index e3b3c5084070..eef50e91f17c 100644
--- a/drivers/iio/gyro/itg3200_buffer.c
+++ b/drivers/iio/gyro/itg3200_buffer.c
@@ -132,7 +132,7 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
132 goto error_free_irq; 132 goto error_free_irq;
133 133
134 /* select default trigger */ 134 /* select default trigger */
135 indio_dev->trig = st->trig; 135 indio_dev->trig = iio_trigger_get(st->trig);
136 136
137 return 0; 137 return 0;
138 138
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
index 03b9372c1212..926fccea8de0 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
@@ -135,7 +135,7 @@ int inv_mpu6050_probe_trigger(struct iio_dev *indio_dev)
135 ret = iio_trigger_register(st->trig); 135 ret = iio_trigger_register(st->trig);
136 if (ret) 136 if (ret)
137 goto error_free_irq; 137 goto error_free_irq;
138 indio_dev->trig = st->trig; 138 indio_dev->trig = iio_trigger_get(st->trig);
139 139
140 return 0; 140 return 0;
141 141
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index c7497009d60a..f0846108d006 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -178,7 +178,7 @@ static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np,
178 index = of_property_match_string(np, "io-channel-names", 178 index = of_property_match_string(np, "io-channel-names",
179 name); 179 name);
180 chan = of_iio_channel_get(np, index); 180 chan = of_iio_channel_get(np, index);
181 if (!IS_ERR(chan)) 181 if (!IS_ERR(chan) || PTR_ERR(chan) == -EPROBE_DEFER)
182 break; 182 break;
183 else if (name && index >= 0) { 183 else if (name && index >= 0) {
184 pr_err("ERROR: could not get IIO channel %s:%s(%i)\n", 184 pr_err("ERROR: could not get IIO channel %s:%s(%i)\n",
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
index a4b64130ac2f..68cae86dbd29 100644
--- a/drivers/iio/magnetometer/st_magn_core.c
+++ b/drivers/iio/magnetometer/st_magn_core.c
@@ -42,7 +42,8 @@
42#define ST_MAGN_FS_AVL_5600MG 5600 42#define ST_MAGN_FS_AVL_5600MG 5600
43#define ST_MAGN_FS_AVL_8000MG 8000 43#define ST_MAGN_FS_AVL_8000MG 8000
44#define ST_MAGN_FS_AVL_8100MG 8100 44#define ST_MAGN_FS_AVL_8100MG 8100
45#define ST_MAGN_FS_AVL_10000MG 10000 45#define ST_MAGN_FS_AVL_12000MG 12000
46#define ST_MAGN_FS_AVL_16000MG 16000
46 47
47/* CUSTOM VALUES FOR SENSOR 1 */ 48/* CUSTOM VALUES FOR SENSOR 1 */
48#define ST_MAGN_1_WAI_EXP 0x3c 49#define ST_MAGN_1_WAI_EXP 0x3c
@@ -69,20 +70,20 @@
69#define ST_MAGN_1_FS_AVL_4700_VAL 0x05 70#define ST_MAGN_1_FS_AVL_4700_VAL 0x05
70#define ST_MAGN_1_FS_AVL_5600_VAL 0x06 71#define ST_MAGN_1_FS_AVL_5600_VAL 0x06
71#define ST_MAGN_1_FS_AVL_8100_VAL 0x07 72#define ST_MAGN_1_FS_AVL_8100_VAL 0x07
72#define ST_MAGN_1_FS_AVL_1300_GAIN_XY 1100 73#define ST_MAGN_1_FS_AVL_1300_GAIN_XY 909
73#define ST_MAGN_1_FS_AVL_1900_GAIN_XY 855 74#define ST_MAGN_1_FS_AVL_1900_GAIN_XY 1169
74#define ST_MAGN_1_FS_AVL_2500_GAIN_XY 670 75#define ST_MAGN_1_FS_AVL_2500_GAIN_XY 1492
75#define ST_MAGN_1_FS_AVL_4000_GAIN_XY 450 76#define ST_MAGN_1_FS_AVL_4000_GAIN_XY 2222
76#define ST_MAGN_1_FS_AVL_4700_GAIN_XY 400 77#define ST_MAGN_1_FS_AVL_4700_GAIN_XY 2500
77#define ST_MAGN_1_FS_AVL_5600_GAIN_XY 330 78#define ST_MAGN_1_FS_AVL_5600_GAIN_XY 3030
78#define ST_MAGN_1_FS_AVL_8100_GAIN_XY 230 79#define ST_MAGN_1_FS_AVL_8100_GAIN_XY 4347
79#define ST_MAGN_1_FS_AVL_1300_GAIN_Z 980 80#define ST_MAGN_1_FS_AVL_1300_GAIN_Z 1020
80#define ST_MAGN_1_FS_AVL_1900_GAIN_Z 760 81#define ST_MAGN_1_FS_AVL_1900_GAIN_Z 1315
81#define ST_MAGN_1_FS_AVL_2500_GAIN_Z 600 82#define ST_MAGN_1_FS_AVL_2500_GAIN_Z 1666
82#define ST_MAGN_1_FS_AVL_4000_GAIN_Z 400 83#define ST_MAGN_1_FS_AVL_4000_GAIN_Z 2500
83#define ST_MAGN_1_FS_AVL_4700_GAIN_Z 355 84#define ST_MAGN_1_FS_AVL_4700_GAIN_Z 2816
84#define ST_MAGN_1_FS_AVL_5600_GAIN_Z 295 85#define ST_MAGN_1_FS_AVL_5600_GAIN_Z 3389
85#define ST_MAGN_1_FS_AVL_8100_GAIN_Z 205 86#define ST_MAGN_1_FS_AVL_8100_GAIN_Z 4878
86#define ST_MAGN_1_MULTIREAD_BIT false 87#define ST_MAGN_1_MULTIREAD_BIT false
87 88
88/* CUSTOM VALUES FOR SENSOR 2 */ 89/* CUSTOM VALUES FOR SENSOR 2 */
@@ -105,10 +106,12 @@
105#define ST_MAGN_2_FS_MASK 0x60 106#define ST_MAGN_2_FS_MASK 0x60
106#define ST_MAGN_2_FS_AVL_4000_VAL 0x00 107#define ST_MAGN_2_FS_AVL_4000_VAL 0x00
107#define ST_MAGN_2_FS_AVL_8000_VAL 0x01 108#define ST_MAGN_2_FS_AVL_8000_VAL 0x01
108#define ST_MAGN_2_FS_AVL_10000_VAL 0x02 109#define ST_MAGN_2_FS_AVL_12000_VAL 0x02
109#define ST_MAGN_2_FS_AVL_4000_GAIN 430 110#define ST_MAGN_2_FS_AVL_16000_VAL 0x03
110#define ST_MAGN_2_FS_AVL_8000_GAIN 230 111#define ST_MAGN_2_FS_AVL_4000_GAIN 146
111#define ST_MAGN_2_FS_AVL_10000_GAIN 230 112#define ST_MAGN_2_FS_AVL_8000_GAIN 292
113#define ST_MAGN_2_FS_AVL_12000_GAIN 438
114#define ST_MAGN_2_FS_AVL_16000_GAIN 584
112#define ST_MAGN_2_MULTIREAD_BIT false 115#define ST_MAGN_2_MULTIREAD_BIT false
113#define ST_MAGN_2_OUT_X_L_ADDR 0x28 116#define ST_MAGN_2_OUT_X_L_ADDR 0x28
114#define ST_MAGN_2_OUT_Y_L_ADDR 0x2a 117#define ST_MAGN_2_OUT_Y_L_ADDR 0x2a
@@ -266,9 +269,14 @@ static const struct st_sensors st_magn_sensors[] = {
266 .gain = ST_MAGN_2_FS_AVL_8000_GAIN, 269 .gain = ST_MAGN_2_FS_AVL_8000_GAIN,
267 }, 270 },
268 [2] = { 271 [2] = {
269 .num = ST_MAGN_FS_AVL_10000MG, 272 .num = ST_MAGN_FS_AVL_12000MG,
270 .value = ST_MAGN_2_FS_AVL_10000_VAL, 273 .value = ST_MAGN_2_FS_AVL_12000_VAL,
271 .gain = ST_MAGN_2_FS_AVL_10000_GAIN, 274 .gain = ST_MAGN_2_FS_AVL_12000_GAIN,
275 },
276 [3] = {
277 .num = ST_MAGN_FS_AVL_16000MG,
278 .value = ST_MAGN_2_FS_AVL_16000_VAL,
279 .gain = ST_MAGN_2_FS_AVL_16000_GAIN,
272 }, 280 },
273 }, 281 },
274 }, 282 },
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index af8256353c7d..162b82c1dde4 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -1680,7 +1680,7 @@ static void mlx4_ib_update_qps(struct mlx4_ib_dev *ibdev,
1680 goto unlock; 1680 goto unlock;
1681 1681
1682 update_params.smac_index = new_smac_index; 1682 update_params.smac_index = new_smac_index;
1683 if (mlx4_update_qp(ibdev->dev, &qp->mqp, MLX4_UPDATE_QP_SMAC, 1683 if (mlx4_update_qp(ibdev->dev, qp->mqp.qpn, MLX4_UPDATE_QP_SMAC,
1684 &update_params)) { 1684 &update_params)) {
1685 release_mac = new_smac; 1685 release_mac = new_smac;
1686 goto unlock; 1686 goto unlock;
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index efb9eff8906c..836503927dea 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1682,7 +1682,7 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
1682 MLX4_IB_LINK_TYPE_ETH; 1682 MLX4_IB_LINK_TYPE_ETH;
1683 if (dev->dev->caps.tunnel_offload_mode == MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) { 1683 if (dev->dev->caps.tunnel_offload_mode == MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) {
1684 /* set QP to receive both tunneled & non-tunneled packets */ 1684 /* set QP to receive both tunneled & non-tunneled packets */
1685 if (!(context->flags & (1 << MLX4_RSS_QPC_FLAG_OFFSET))) 1685 if (!(context->flags & cpu_to_be32(1 << MLX4_RSS_QPC_FLAG_OFFSET)))
1686 context->srqn = cpu_to_be32(7 << 28); 1686 context->srqn = cpu_to_be32(7 << 28);
1687 } 1687 }
1688 } 1688 }
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 3edce617c31b..d7562beb5423 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -131,6 +131,12 @@ struct ipoib_cb {
131 u8 hwaddr[INFINIBAND_ALEN]; 131 u8 hwaddr[INFINIBAND_ALEN];
132}; 132};
133 133
134static inline struct ipoib_cb *ipoib_skb_cb(const struct sk_buff *skb)
135{
136 BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct ipoib_cb));
137 return (struct ipoib_cb *)skb->cb;
138}
139
134/* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */ 140/* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */
135struct ipoib_mcast { 141struct ipoib_mcast {
136 struct ib_sa_mcmember_rec mcmember; 142 struct ib_sa_mcmember_rec mcmember;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 1310acf6bf92..13e6e0431592 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -716,7 +716,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
716{ 716{
717 struct ipoib_dev_priv *priv = netdev_priv(dev); 717 struct ipoib_dev_priv *priv = netdev_priv(dev);
718 struct ipoib_neigh *neigh; 718 struct ipoib_neigh *neigh;
719 struct ipoib_cb *cb = (struct ipoib_cb *) skb->cb; 719 struct ipoib_cb *cb = ipoib_skb_cb(skb);
720 struct ipoib_header *header; 720 struct ipoib_header *header;
721 unsigned long flags; 721 unsigned long flags;
722 722
@@ -813,7 +813,7 @@ static int ipoib_hard_header(struct sk_buff *skb,
813 const void *daddr, const void *saddr, unsigned len) 813 const void *daddr, const void *saddr, unsigned len)
814{ 814{
815 struct ipoib_header *header; 815 struct ipoib_header *header;
816 struct ipoib_cb *cb = (struct ipoib_cb *) skb->cb; 816 struct ipoib_cb *cb = ipoib_skb_cb(skb);
817 817
818 header = (struct ipoib_header *) skb_push(skb, sizeof *header); 818 header = (struct ipoib_header *) skb_push(skb, sizeof *header);
819 819
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index d4c7928a0f36..da8ff124762a 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -586,17 +586,12 @@ isert_connect_request(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
586 init_completion(&isert_conn->conn_wait); 586 init_completion(&isert_conn->conn_wait);
587 init_completion(&isert_conn->conn_wait_comp_err); 587 init_completion(&isert_conn->conn_wait_comp_err);
588 kref_init(&isert_conn->conn_kref); 588 kref_init(&isert_conn->conn_kref);
589 kref_get(&isert_conn->conn_kref);
590 mutex_init(&isert_conn->conn_mutex); 589 mutex_init(&isert_conn->conn_mutex);
591 spin_lock_init(&isert_conn->conn_lock); 590 spin_lock_init(&isert_conn->conn_lock);
592 INIT_LIST_HEAD(&isert_conn->conn_fr_pool); 591 INIT_LIST_HEAD(&isert_conn->conn_fr_pool);
593 592
594 cma_id->context = isert_conn; 593 cma_id->context = isert_conn;
595 isert_conn->conn_cm_id = cma_id; 594 isert_conn->conn_cm_id = cma_id;
596 isert_conn->responder_resources = event->param.conn.responder_resources;
597 isert_conn->initiator_depth = event->param.conn.initiator_depth;
598 pr_debug("Using responder_resources: %u initiator_depth: %u\n",
599 isert_conn->responder_resources, isert_conn->initiator_depth);
600 595
601 isert_conn->login_buf = kzalloc(ISCSI_DEF_MAX_RECV_SEG_LEN + 596 isert_conn->login_buf = kzalloc(ISCSI_DEF_MAX_RECV_SEG_LEN +
602 ISER_RX_LOGIN_SIZE, GFP_KERNEL); 597 ISER_RX_LOGIN_SIZE, GFP_KERNEL);
@@ -643,6 +638,12 @@ isert_connect_request(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
643 goto out_rsp_dma_map; 638 goto out_rsp_dma_map;
644 } 639 }
645 640
641 /* Set max inflight RDMA READ requests */
642 isert_conn->initiator_depth = min_t(u8,
643 event->param.conn.initiator_depth,
644 device->dev_attr.max_qp_init_rd_atom);
645 pr_debug("Using initiator_depth: %u\n", isert_conn->initiator_depth);
646
646 isert_conn->conn_device = device; 647 isert_conn->conn_device = device;
647 isert_conn->conn_pd = ib_alloc_pd(isert_conn->conn_device->ib_device); 648 isert_conn->conn_pd = ib_alloc_pd(isert_conn->conn_device->ib_device);
648 if (IS_ERR(isert_conn->conn_pd)) { 649 if (IS_ERR(isert_conn->conn_pd)) {
@@ -746,7 +747,9 @@ isert_connect_release(struct isert_conn *isert_conn)
746static void 747static void
747isert_connected_handler(struct rdma_cm_id *cma_id) 748isert_connected_handler(struct rdma_cm_id *cma_id)
748{ 749{
749 return; 750 struct isert_conn *isert_conn = cma_id->context;
751
752 kref_get(&isert_conn->conn_kref);
750} 753}
751 754
752static void 755static void
@@ -798,7 +801,6 @@ isert_disconnect_work(struct work_struct *work)
798 801
799wake_up: 802wake_up:
800 complete(&isert_conn->conn_wait); 803 complete(&isert_conn->conn_wait);
801 isert_put_conn(isert_conn);
802} 804}
803 805
804static void 806static void
@@ -3067,7 +3069,6 @@ isert_rdma_accept(struct isert_conn *isert_conn)
3067 int ret; 3069 int ret;
3068 3070
3069 memset(&cp, 0, sizeof(struct rdma_conn_param)); 3071 memset(&cp, 0, sizeof(struct rdma_conn_param));
3070 cp.responder_resources = isert_conn->responder_resources;
3071 cp.initiator_depth = isert_conn->initiator_depth; 3072 cp.initiator_depth = isert_conn->initiator_depth;
3072 cp.retry_count = 7; 3073 cp.retry_count = 7;
3073 cp.rnr_retry_count = 7; 3074 cp.rnr_retry_count = 7;
@@ -3215,7 +3216,7 @@ static void isert_wait_conn(struct iscsi_conn *conn)
3215 pr_debug("isert_wait_conn: Starting \n"); 3216 pr_debug("isert_wait_conn: Starting \n");
3216 3217
3217 mutex_lock(&isert_conn->conn_mutex); 3218 mutex_lock(&isert_conn->conn_mutex);
3218 if (isert_conn->conn_cm_id) { 3219 if (isert_conn->conn_cm_id && !isert_conn->disconnect) {
3219 pr_debug("Calling rdma_disconnect from isert_wait_conn\n"); 3220 pr_debug("Calling rdma_disconnect from isert_wait_conn\n");
3220 rdma_disconnect(isert_conn->conn_cm_id); 3221 rdma_disconnect(isert_conn->conn_cm_id);
3221 } 3222 }
@@ -3234,6 +3235,7 @@ static void isert_wait_conn(struct iscsi_conn *conn)
3234 wait_for_completion(&isert_conn->conn_wait_comp_err); 3235 wait_for_completion(&isert_conn->conn_wait_comp_err);
3235 3236
3236 wait_for_completion(&isert_conn->conn_wait); 3237 wait_for_completion(&isert_conn->conn_wait);
3238 isert_put_conn(isert_conn);
3237} 3239}
3238 3240
3239static void isert_free_conn(struct iscsi_conn *conn) 3241static void isert_free_conn(struct iscsi_conn *conn)
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 2dd1d0dd4f7d..6f5d79569136 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -1791,14 +1791,6 @@ static const struct dmi_system_id atkbd_dmi_quirk_table[] __initconst = {
1791 { 1791 {
1792 .matches = { 1792 .matches = {
1793 DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"), 1793 DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
1794 DMI_MATCH(DMI_PRODUCT_NAME, "LW25-B7HV"),
1795 },
1796 .callback = atkbd_deactivate_fixup,
1797 },
1798 {
1799 .matches = {
1800 DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
1801 DMI_MATCH(DMI_PRODUCT_NAME, "P1-J273B"),
1802 }, 1794 },
1803 .callback = atkbd_deactivate_fixup, 1795 .callback = atkbd_deactivate_fixup,
1804 }, 1796 },
diff --git a/drivers/input/keyboard/cap1106.c b/drivers/input/keyboard/cap1106.c
index 180b184ab90f..d70b65a14ced 100644
--- a/drivers/input/keyboard/cap1106.c
+++ b/drivers/input/keyboard/cap1106.c
@@ -33,8 +33,8 @@
33#define CAP1106_REG_SENSOR_CONFIG 0x22 33#define CAP1106_REG_SENSOR_CONFIG 0x22
34#define CAP1106_REG_SENSOR_CONFIG2 0x23 34#define CAP1106_REG_SENSOR_CONFIG2 0x23
35#define CAP1106_REG_SAMPLING_CONFIG 0x24 35#define CAP1106_REG_SAMPLING_CONFIG 0x24
36#define CAP1106_REG_CALIBRATION 0x25 36#define CAP1106_REG_CALIBRATION 0x26
37#define CAP1106_REG_INT_ENABLE 0x26 37#define CAP1106_REG_INT_ENABLE 0x27
38#define CAP1106_REG_REPEAT_RATE 0x28 38#define CAP1106_REG_REPEAT_RATE 0x28
39#define CAP1106_REG_MT_CONFIG 0x2a 39#define CAP1106_REG_MT_CONFIG 0x2a
40#define CAP1106_REG_MT_PATTERN_CONFIG 0x2b 40#define CAP1106_REG_MT_PATTERN_CONFIG 0x2b
diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c
index 8d2e19e81e1e..e651fa692afe 100644
--- a/drivers/input/keyboard/matrix_keypad.c
+++ b/drivers/input/keyboard/matrix_keypad.c
@@ -332,23 +332,24 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
332 } 332 }
333 333
334 if (pdata->clustered_irq > 0) { 334 if (pdata->clustered_irq > 0) {
335 err = request_irq(pdata->clustered_irq, 335 err = request_any_context_irq(pdata->clustered_irq,
336 matrix_keypad_interrupt, 336 matrix_keypad_interrupt,
337 pdata->clustered_irq_flags, 337 pdata->clustered_irq_flags,
338 "matrix-keypad", keypad); 338 "matrix-keypad", keypad);
339 if (err) { 339 if (err < 0) {
340 dev_err(&pdev->dev, 340 dev_err(&pdev->dev,
341 "Unable to acquire clustered interrupt\n"); 341 "Unable to acquire clustered interrupt\n");
342 goto err_free_rows; 342 goto err_free_rows;
343 } 343 }
344 } else { 344 } else {
345 for (i = 0; i < pdata->num_row_gpios; i++) { 345 for (i = 0; i < pdata->num_row_gpios; i++) {
346 err = request_irq(gpio_to_irq(pdata->row_gpios[i]), 346 err = request_any_context_irq(
347 gpio_to_irq(pdata->row_gpios[i]),
347 matrix_keypad_interrupt, 348 matrix_keypad_interrupt,
348 IRQF_TRIGGER_RISING | 349 IRQF_TRIGGER_RISING |
349 IRQF_TRIGGER_FALLING, 350 IRQF_TRIGGER_FALLING,
350 "matrix-keypad", keypad); 351 "matrix-keypad", keypad);
351 if (err) { 352 if (err < 0) {
352 dev_err(&pdev->dev, 353 dev_err(&pdev->dev,
353 "Unable to acquire interrupt for GPIO line %i\n", 354 "Unable to acquire interrupt for GPIO line %i\n",
354 pdata->row_gpios[i]); 355 pdata->row_gpios[i]);
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index a956b980ee73..35a49bf57227 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -2373,6 +2373,10 @@ int alps_init(struct psmouse *psmouse)
2373 dev2->keybit[BIT_WORD(BTN_LEFT)] = 2373 dev2->keybit[BIT_WORD(BTN_LEFT)] =
2374 BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); 2374 BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT);
2375 2375
2376 __set_bit(INPUT_PROP_POINTER, dev2->propbit);
2377 if (priv->flags & ALPS_DUALPOINT)
2378 __set_bit(INPUT_PROP_POINTING_STICK, dev2->propbit);
2379
2376 if (input_register_device(priv->dev2)) 2380 if (input_register_device(priv->dev2))
2377 goto init_fail; 2381 goto init_fail;
2378 2382
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index da51738eb59e..06fc6e76ffbe 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1331,6 +1331,13 @@ static bool elantech_is_signature_valid(const unsigned char *param)
1331 if (param[1] == 0) 1331 if (param[1] == 0)
1332 return true; 1332 return true;
1333 1333
1334 /*
1335 * Some models have a revision higher then 20. Meaning param[2] may
1336 * be 10 or 20, skip the rates check for these.
1337 */
1338 if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
1339 return true;
1340
1334 for (i = 0; i < ARRAY_SIZE(rates); i++) 1341 for (i = 0; i < ARRAY_SIZE(rates); i++)
1335 if (param[2] == rates[i]) 1342 if (param[2] == rates[i])
1336 return false; 1343 return false;
@@ -1607,6 +1614,10 @@ int elantech_init(struct psmouse *psmouse)
1607 tp_dev->keybit[BIT_WORD(BTN_LEFT)] = 1614 tp_dev->keybit[BIT_WORD(BTN_LEFT)] =
1608 BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE) | 1615 BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE) |
1609 BIT_MASK(BTN_RIGHT); 1616 BIT_MASK(BTN_RIGHT);
1617
1618 __set_bit(INPUT_PROP_POINTER, tp_dev->propbit);
1619 __set_bit(INPUT_PROP_POINTING_STICK, tp_dev->propbit);
1620
1610 error = input_register_device(etd->tp_dev); 1621 error = input_register_device(etd->tp_dev);
1611 if (error < 0) 1622 if (error < 0)
1612 goto init_fail_tp_reg; 1623 goto init_fail_tp_reg;
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index cff065f6261c..b4e1f014ddc2 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -670,6 +670,8 @@ static void psmouse_apply_defaults(struct psmouse *psmouse)
670 __set_bit(REL_X, input_dev->relbit); 670 __set_bit(REL_X, input_dev->relbit);
671 __set_bit(REL_Y, input_dev->relbit); 671 __set_bit(REL_Y, input_dev->relbit);
672 672
673 __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
674
673 psmouse->set_rate = psmouse_set_rate; 675 psmouse->set_rate = psmouse_set_rate;
674 psmouse->set_resolution = psmouse_set_resolution; 676 psmouse->set_resolution = psmouse_set_resolution;
675 psmouse->poll = psmouse_poll; 677 psmouse->poll = psmouse_poll;
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index e8573c68f77e..fd23181c1fb7 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -629,10 +629,61 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
629 ((buf[0] & 0x04) >> 1) | 629 ((buf[0] & 0x04) >> 1) |
630 ((buf[3] & 0x04) >> 2)); 630 ((buf[3] & 0x04) >> 2));
631 631
632 if ((SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) ||
633 SYN_CAP_IMAGE_SENSOR(priv->ext_cap_0c)) &&
634 hw->w == 2) {
635 synaptics_parse_agm(buf, priv, hw);
636 return 1;
637 }
638
639 hw->x = (((buf[3] & 0x10) << 8) |
640 ((buf[1] & 0x0f) << 8) |
641 buf[4]);
642 hw->y = (((buf[3] & 0x20) << 7) |
643 ((buf[1] & 0xf0) << 4) |
644 buf[5]);
645 hw->z = buf[2];
646
632 hw->left = (buf[0] & 0x01) ? 1 : 0; 647 hw->left = (buf[0] & 0x01) ? 1 : 0;
633 hw->right = (buf[0] & 0x02) ? 1 : 0; 648 hw->right = (buf[0] & 0x02) ? 1 : 0;
634 649
635 if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) { 650 if (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) {
651 /*
652 * ForcePads, like Clickpads, use middle button
653 * bits to report primary button clicks.
654 * Unfortunately they report primary button not
655 * only when user presses on the pad above certain
656 * threshold, but also when there are more than one
657 * finger on the touchpad, which interferes with
658 * out multi-finger gestures.
659 */
660 if (hw->z == 0) {
661 /* No contacts */
662 priv->press = priv->report_press = false;
663 } else if (hw->w >= 4 && ((buf[0] ^ buf[3]) & 0x01)) {
664 /*
665 * Single-finger touch with pressure above
666 * the threshold. If pressure stays long
667 * enough, we'll start reporting primary
668 * button. We rely on the device continuing
669 * sending data even if finger does not
670 * move.
671 */
672 if (!priv->press) {
673 priv->press_start = jiffies;
674 priv->press = true;
675 } else if (time_after(jiffies,
676 priv->press_start +
677 msecs_to_jiffies(50))) {
678 priv->report_press = true;
679 }
680 } else {
681 priv->press = false;
682 }
683
684 hw->left = priv->report_press;
685
686 } else if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) {
636 /* 687 /*
637 * Clickpad's button is transmitted as middle button, 688 * Clickpad's button is transmitted as middle button,
638 * however, since it is primary button, we will report 689 * however, since it is primary button, we will report
@@ -651,21 +702,6 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
651 hw->down = ((buf[0] ^ buf[3]) & 0x02) ? 1 : 0; 702 hw->down = ((buf[0] ^ buf[3]) & 0x02) ? 1 : 0;
652 } 703 }
653 704
654 if ((SYN_CAP_ADV_GESTURE(priv->ext_cap_0c) ||
655 SYN_CAP_IMAGE_SENSOR(priv->ext_cap_0c)) &&
656 hw->w == 2) {
657 synaptics_parse_agm(buf, priv, hw);
658 return 1;
659 }
660
661 hw->x = (((buf[3] & 0x10) << 8) |
662 ((buf[1] & 0x0f) << 8) |
663 buf[4]);
664 hw->y = (((buf[3] & 0x20) << 7) |
665 ((buf[1] & 0xf0) << 4) |
666 buf[5]);
667 hw->z = buf[2];
668
669 if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) && 705 if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) &&
670 ((buf[0] ^ buf[3]) & 0x02)) { 706 ((buf[0] ^ buf[3]) & 0x02)) {
671 switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) { 707 switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) {
diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
index e594af0b264b..fb2e076738ae 100644
--- a/drivers/input/mouse/synaptics.h
+++ b/drivers/input/mouse/synaptics.h
@@ -78,6 +78,11 @@
78 * 2 0x08 image sensor image sensor tracks 5 fingers, but only 78 * 2 0x08 image sensor image sensor tracks 5 fingers, but only
79 * reports 2. 79 * reports 2.
80 * 2 0x20 report min query 0x0f gives min coord reported 80 * 2 0x20 report min query 0x0f gives min coord reported
81 * 2 0x80 forcepad forcepad is a variant of clickpad that
82 * does not have physical buttons but rather
83 * uses pressure above certain threshold to
84 * report primary clicks. Forcepads also have
85 * clickpad bit set.
81 */ 86 */
82#define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */ 87#define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */
83#define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */ 88#define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */
@@ -86,6 +91,7 @@
86#define SYN_CAP_ADV_GESTURE(ex0c) ((ex0c) & 0x080000) 91#define SYN_CAP_ADV_GESTURE(ex0c) ((ex0c) & 0x080000)
87#define SYN_CAP_REDUCED_FILTERING(ex0c) ((ex0c) & 0x000400) 92#define SYN_CAP_REDUCED_FILTERING(ex0c) ((ex0c) & 0x000400)
88#define SYN_CAP_IMAGE_SENSOR(ex0c) ((ex0c) & 0x000800) 93#define SYN_CAP_IMAGE_SENSOR(ex0c) ((ex0c) & 0x000800)
94#define SYN_CAP_FORCEPAD(ex0c) ((ex0c) & 0x008000)
89 95
90/* synaptics modes query bits */ 96/* synaptics modes query bits */
91#define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7)) 97#define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7))
@@ -177,6 +183,11 @@ struct synaptics_data {
177 */ 183 */
178 struct synaptics_hw_state agm; 184 struct synaptics_hw_state agm;
179 bool agm_pending; /* new AGM packet received */ 185 bool agm_pending; /* new AGM packet received */
186
187 /* ForcePad handling */
188 unsigned long press_start;
189 bool press;
190 bool report_press;
180}; 191};
181 192
182void synaptics_module_init(void); 193void synaptics_module_init(void);
diff --git a/drivers/input/mouse/synaptics_usb.c b/drivers/input/mouse/synaptics_usb.c
index e122bda16aab..6bcc0189c1c9 100644
--- a/drivers/input/mouse/synaptics_usb.c
+++ b/drivers/input/mouse/synaptics_usb.c
@@ -387,6 +387,7 @@ static int synusb_probe(struct usb_interface *intf,
387 __set_bit(EV_REL, input_dev->evbit); 387 __set_bit(EV_REL, input_dev->evbit);
388 __set_bit(REL_X, input_dev->relbit); 388 __set_bit(REL_X, input_dev->relbit);
389 __set_bit(REL_Y, input_dev->relbit); 389 __set_bit(REL_Y, input_dev->relbit);
390 __set_bit(INPUT_PROP_POINTING_STICK, input_dev->propbit);
390 input_set_abs_params(input_dev, ABS_PRESSURE, 0, 127, 0, 0); 391 input_set_abs_params(input_dev, ABS_PRESSURE, 0, 127, 0, 0);
391 } else { 392 } else {
392 input_set_abs_params(input_dev, ABS_X, 393 input_set_abs_params(input_dev, ABS_X,
@@ -401,6 +402,11 @@ static int synusb_probe(struct usb_interface *intf,
401 __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit); 402 __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
402 } 403 }
403 404
405 if (synusb->flags & SYNUSB_TOUCHSCREEN)
406 __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
407 else
408 __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
409
404 __set_bit(BTN_LEFT, input_dev->keybit); 410 __set_bit(BTN_LEFT, input_dev->keybit);
405 __set_bit(BTN_RIGHT, input_dev->keybit); 411 __set_bit(BTN_RIGHT, input_dev->keybit);
406 __set_bit(BTN_MIDDLE, input_dev->keybit); 412 __set_bit(BTN_MIDDLE, input_dev->keybit);
diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c
index ca843b6cf6bd..30c8b6998808 100644
--- a/drivers/input/mouse/trackpoint.c
+++ b/drivers/input/mouse/trackpoint.c
@@ -393,6 +393,9 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties)
393 if ((button_info & 0x0f) >= 3) 393 if ((button_info & 0x0f) >= 3)
394 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); 394 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
395 395
396 __set_bit(INPUT_PROP_POINTER, psmouse->dev->propbit);
397 __set_bit(INPUT_PROP_POINTING_STICK, psmouse->dev->propbit);
398
396 trackpoint_defaults(psmouse->private); 399 trackpoint_defaults(psmouse->private);
397 400
398 error = trackpoint_power_on_reset(&psmouse->ps2dev); 401 error = trackpoint_power_on_reset(&psmouse->ps2dev);
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 136b7b204f56..713e3ddb43bd 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -465,6 +465,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
465 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), 465 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
466 }, 466 },
467 }, 467 },
468 {
469 /* Avatar AVIU-145A6 */
470 .matches = {
471 DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
472 DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
473 },
474 },
468 { } 475 { }
469}; 476};
470 477
@@ -608,6 +615,14 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
608 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), 615 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
609 }, 616 },
610 }, 617 },
618 {
619 /* Fujitsu U574 laptop */
620 /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
621 .matches = {
622 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
623 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
624 },
625 },
611 { } 626 { }
612}; 627};
613 628
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 3807c3e971cc..f5a98af3b325 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -1254,6 +1254,8 @@ static int __init i8042_create_aux_port(int idx)
1254 } else { 1254 } else {
1255 snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx); 1255 snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx);
1256 snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1); 1256 snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1);
1257 strlcpy(serio->firmware_id, i8042_aux_firmware_id,
1258 sizeof(serio->firmware_id));
1257 } 1259 }
1258 1260
1259 port->serio = serio; 1261 port->serio = serio;
diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
index 0cb7ef59071b..69175b825346 100644
--- a/drivers/input/serio/serport.c
+++ b/drivers/input/serio/serport.c
@@ -21,6 +21,7 @@
21#include <linux/init.h> 21#include <linux/init.h>
22#include <linux/serio.h> 22#include <linux/serio.h>
23#include <linux/tty.h> 23#include <linux/tty.h>
24#include <linux/compat.h>
24 25
25MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); 26MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
26MODULE_DESCRIPTION("Input device TTY line discipline"); 27MODULE_DESCRIPTION("Input device TTY line discipline");
@@ -198,28 +199,55 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
198 return 0; 199 return 0;
199} 200}
200 201
202static void serport_set_type(struct tty_struct *tty, unsigned long type)
203{
204 struct serport *serport = tty->disc_data;
205
206 serport->id.proto = type & 0x000000ff;
207 serport->id.id = (type & 0x0000ff00) >> 8;
208 serport->id.extra = (type & 0x00ff0000) >> 16;
209}
210
201/* 211/*
202 * serport_ldisc_ioctl() allows to set the port protocol, and device ID 212 * serport_ldisc_ioctl() allows to set the port protocol, and device ID
203 */ 213 */
204 214
205static int serport_ldisc_ioctl(struct tty_struct * tty, struct file * file, unsigned int cmd, unsigned long arg) 215static int serport_ldisc_ioctl(struct tty_struct *tty, struct file *file,
216 unsigned int cmd, unsigned long arg)
206{ 217{
207 struct serport *serport = (struct serport*) tty->disc_data;
208 unsigned long type;
209
210 if (cmd == SPIOCSTYPE) { 218 if (cmd == SPIOCSTYPE) {
219 unsigned long type;
220
211 if (get_user(type, (unsigned long __user *) arg)) 221 if (get_user(type, (unsigned long __user *) arg))
212 return -EFAULT; 222 return -EFAULT;
213 223
214 serport->id.proto = type & 0x000000ff; 224 serport_set_type(tty, type);
215 serport->id.id = (type & 0x0000ff00) >> 8; 225 return 0;
216 serport->id.extra = (type & 0x00ff0000) >> 16; 226 }
227
228 return -EINVAL;
229}
230
231#ifdef CONFIG_COMPAT
232#define COMPAT_SPIOCSTYPE _IOW('q', 0x01, compat_ulong_t)
233static long serport_ldisc_compat_ioctl(struct tty_struct *tty,
234 struct file *file,
235 unsigned int cmd, unsigned long arg)
236{
237 if (cmd == COMPAT_SPIOCSTYPE) {
238 void __user *uarg = compat_ptr(arg);
239 compat_ulong_t compat_type;
240
241 if (get_user(compat_type, (compat_ulong_t __user *)uarg))
242 return -EFAULT;
217 243
244 serport_set_type(tty, compat_type);
218 return 0; 245 return 0;
219 } 246 }
220 247
221 return -EINVAL; 248 return -EINVAL;
222} 249}
250#endif
223 251
224static void serport_ldisc_write_wakeup(struct tty_struct * tty) 252static void serport_ldisc_write_wakeup(struct tty_struct * tty)
225{ 253{
@@ -243,6 +271,9 @@ static struct tty_ldisc_ops serport_ldisc = {
243 .close = serport_ldisc_close, 271 .close = serport_ldisc_close,
244 .read = serport_ldisc_read, 272 .read = serport_ldisc_read,
245 .ioctl = serport_ldisc_ioctl, 273 .ioctl = serport_ldisc_ioctl,
274#ifdef CONFIG_COMPAT
275 .compat_ioctl = serport_ldisc_compat_ioctl,
276#endif
246 .receive_buf = serport_ldisc_receive, 277 .receive_buf = serport_ldisc_receive,
247 .write_wakeup = serport_ldisc_write_wakeup 278 .write_wakeup = serport_ldisc_write_wakeup
248}; 279};
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index db178ed2b47e..aaacf8bfa61f 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -837,7 +837,12 @@ static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
837 count = data->msg_buf[0]; 837 count = data->msg_buf[0];
838 838
839 if (count == 0) { 839 if (count == 0) {
840 dev_warn(dev, "Interrupt triggered but zero messages\n"); 840 /*
841 * This condition is caused by the CHG line being configured
842 * in Mode 0. It results in unnecessary I2C operations but it
843 * is benign.
844 */
845 dev_dbg(dev, "Interrupt triggered but zero messages\n");
841 return IRQ_NONE; 846 return IRQ_NONE;
842 } else if (count > data->max_reportid) { 847 } else if (count > data->max_reportid) {
843 dev_err(dev, "T44 count %d exceeded max report id\n", count); 848 dev_err(dev, "T44 count %d exceeded max report id\n", count);
@@ -1374,11 +1379,16 @@ static int mxt_get_info(struct mxt_data *data)
1374 return 0; 1379 return 0;
1375} 1380}
1376 1381
1377static void mxt_free_object_table(struct mxt_data *data) 1382static void mxt_free_input_device(struct mxt_data *data)
1378{ 1383{
1379 input_unregister_device(data->input_dev); 1384 if (data->input_dev) {
1380 data->input_dev = NULL; 1385 input_unregister_device(data->input_dev);
1386 data->input_dev = NULL;
1387 }
1388}
1381 1389
1390static void mxt_free_object_table(struct mxt_data *data)
1391{
1382 kfree(data->object_table); 1392 kfree(data->object_table);
1383 data->object_table = NULL; 1393 data->object_table = NULL;
1384 kfree(data->msg_buf); 1394 kfree(data->msg_buf);
@@ -1957,11 +1967,13 @@ static int mxt_load_fw(struct device *dev, const char *fn)
1957 ret = mxt_lookup_bootloader_address(data, 0); 1967 ret = mxt_lookup_bootloader_address(data, 0);
1958 if (ret) 1968 if (ret)
1959 goto release_firmware; 1969 goto release_firmware;
1970
1971 mxt_free_input_device(data);
1972 mxt_free_object_table(data);
1960 } else { 1973 } else {
1961 enable_irq(data->irq); 1974 enable_irq(data->irq);
1962 } 1975 }
1963 1976
1964 mxt_free_object_table(data);
1965 reinit_completion(&data->bl_completion); 1977 reinit_completion(&data->bl_completion);
1966 1978
1967 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false); 1979 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
@@ -2210,6 +2222,7 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
2210 return 0; 2222 return 0;
2211 2223
2212err_free_object: 2224err_free_object:
2225 mxt_free_input_device(data);
2213 mxt_free_object_table(data); 2226 mxt_free_object_table(data);
2214err_free_irq: 2227err_free_irq:
2215 free_irq(client->irq, data); 2228 free_irq(client->irq, data);
@@ -2224,7 +2237,7 @@ static int mxt_remove(struct i2c_client *client)
2224 2237
2225 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group); 2238 sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
2226 free_irq(data->irq, data); 2239 free_irq(data->irq, data);
2227 input_unregister_device(data->input_dev); 2240 mxt_free_input_device(data);
2228 mxt_free_object_table(data); 2241 mxt_free_object_table(data);
2229 kfree(data); 2242 kfree(data);
2230 2243
diff --git a/drivers/input/touchscreen/wm9712.c b/drivers/input/touchscreen/wm9712.c
index 16b52115c27f..705ffa1e064a 100644
--- a/drivers/input/touchscreen/wm9712.c
+++ b/drivers/input/touchscreen/wm9712.c
@@ -41,7 +41,7 @@
41 */ 41 */
42static int rpu = 8; 42static int rpu = 8;
43module_param(rpu, int, 0); 43module_param(rpu, int, 0);
44MODULE_PARM_DESC(rpu, "Set internal pull up resitor for pen detect."); 44MODULE_PARM_DESC(rpu, "Set internal pull up resistor for pen detect.");
45 45
46/* 46/*
47 * Set current used for pressure measurement. 47 * Set current used for pressure measurement.
diff --git a/drivers/input/touchscreen/wm9713.c b/drivers/input/touchscreen/wm9713.c
index 7405353199d7..572a5a64face 100644
--- a/drivers/input/touchscreen/wm9713.c
+++ b/drivers/input/touchscreen/wm9713.c
@@ -41,7 +41,7 @@
41 */ 41 */
42static int rpu = 8; 42static int rpu = 8;
43module_param(rpu, int, 0); 43module_param(rpu, int, 0);
44MODULE_PARM_DESC(rpu, "Set internal pull up resitor for pen detect."); 44MODULE_PARM_DESC(rpu, "Set internal pull up resistor for pen detect.");
45 45
46/* 46/*
47 * Set current used for pressure measurement. 47 * Set current used for pressure measurement.
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index ca18d6d42a9b..a83cc2a2a2ca 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -146,6 +146,8 @@
146#define ID0_CTTW (1 << 14) 146#define ID0_CTTW (1 << 14)
147#define ID0_NUMIRPT_SHIFT 16 147#define ID0_NUMIRPT_SHIFT 16
148#define ID0_NUMIRPT_MASK 0xff 148#define ID0_NUMIRPT_MASK 0xff
149#define ID0_NUMSIDB_SHIFT 9
150#define ID0_NUMSIDB_MASK 0xf
149#define ID0_NUMSMRG_SHIFT 0 151#define ID0_NUMSMRG_SHIFT 0
150#define ID0_NUMSMRG_MASK 0xff 152#define ID0_NUMSMRG_MASK 0xff
151 153
@@ -524,9 +526,18 @@ static int register_smmu_master(struct arm_smmu_device *smmu,
524 master->of_node = masterspec->np; 526 master->of_node = masterspec->np;
525 master->cfg.num_streamids = masterspec->args_count; 527 master->cfg.num_streamids = masterspec->args_count;
526 528
527 for (i = 0; i < master->cfg.num_streamids; ++i) 529 for (i = 0; i < master->cfg.num_streamids; ++i) {
528 master->cfg.streamids[i] = masterspec->args[i]; 530 u16 streamid = masterspec->args[i];
529 531
532 if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
533 (streamid >= smmu->num_mapping_groups)) {
534 dev_err(dev,
535 "stream ID for master device %s greater than maximum allowed (%d)\n",
536 masterspec->np->name, smmu->num_mapping_groups);
537 return -ERANGE;
538 }
539 master->cfg.streamids[i] = streamid;
540 }
530 return insert_smmu_master(smmu, master); 541 return insert_smmu_master(smmu, master);
531} 542}
532 543
@@ -623,7 +634,7 @@ static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
623 634
624 if (fsr & FSR_IGN) 635 if (fsr & FSR_IGN)
625 dev_err_ratelimited(smmu->dev, 636 dev_err_ratelimited(smmu->dev,
626 "Unexpected context fault (fsr 0x%u)\n", 637 "Unexpected context fault (fsr 0x%x)\n",
627 fsr); 638 fsr);
628 639
629 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0); 640 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
@@ -752,6 +763,7 @@ static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain)
752 reg = (TTBCR2_ADDR_36 << TTBCR2_SEP_SHIFT); 763 reg = (TTBCR2_ADDR_36 << TTBCR2_SEP_SHIFT);
753 break; 764 break;
754 case 39: 765 case 39:
766 case 40:
755 reg = (TTBCR2_ADDR_40 << TTBCR2_SEP_SHIFT); 767 reg = (TTBCR2_ADDR_40 << TTBCR2_SEP_SHIFT);
756 break; 768 break;
757 case 42: 769 case 42:
@@ -773,6 +785,7 @@ static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain)
773 reg |= (TTBCR2_ADDR_36 << TTBCR2_PASIZE_SHIFT); 785 reg |= (TTBCR2_ADDR_36 << TTBCR2_PASIZE_SHIFT);
774 break; 786 break;
775 case 39: 787 case 39:
788 case 40:
776 reg |= (TTBCR2_ADDR_40 << TTBCR2_PASIZE_SHIFT); 789 reg |= (TTBCR2_ADDR_40 << TTBCR2_PASIZE_SHIFT);
777 break; 790 break;
778 case 42: 791 case 42:
@@ -843,8 +856,11 @@ static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain)
843 reg |= TTBCR_EAE | 856 reg |= TTBCR_EAE |
844 (TTBCR_SH_IS << TTBCR_SH0_SHIFT) | 857 (TTBCR_SH_IS << TTBCR_SH0_SHIFT) |
845 (TTBCR_RGN_WBWA << TTBCR_ORGN0_SHIFT) | 858 (TTBCR_RGN_WBWA << TTBCR_ORGN0_SHIFT) |
846 (TTBCR_RGN_WBWA << TTBCR_IRGN0_SHIFT) | 859 (TTBCR_RGN_WBWA << TTBCR_IRGN0_SHIFT);
847 (TTBCR_SL0_LVL_1 << TTBCR_SL0_SHIFT); 860
861 if (!stage1)
862 reg |= (TTBCR_SL0_LVL_1 << TTBCR_SL0_SHIFT);
863
848 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR); 864 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
849 865
850 /* MAIR0 (stage-1 only) */ 866 /* MAIR0 (stage-1 only) */
@@ -868,10 +884,15 @@ static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain)
868static int arm_smmu_init_domain_context(struct iommu_domain *domain, 884static int arm_smmu_init_domain_context(struct iommu_domain *domain,
869 struct arm_smmu_device *smmu) 885 struct arm_smmu_device *smmu)
870{ 886{
871 int irq, ret, start; 887 int irq, start, ret = 0;
888 unsigned long flags;
872 struct arm_smmu_domain *smmu_domain = domain->priv; 889 struct arm_smmu_domain *smmu_domain = domain->priv;
873 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 890 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
874 891
892 spin_lock_irqsave(&smmu_domain->lock, flags);
893 if (smmu_domain->smmu)
894 goto out_unlock;
895
875 if (smmu->features & ARM_SMMU_FEAT_TRANS_NESTED) { 896 if (smmu->features & ARM_SMMU_FEAT_TRANS_NESTED) {
876 /* 897 /*
877 * We will likely want to change this if/when KVM gets 898 * We will likely want to change this if/when KVM gets
@@ -890,7 +911,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
890 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start, 911 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
891 smmu->num_context_banks); 912 smmu->num_context_banks);
892 if (IS_ERR_VALUE(ret)) 913 if (IS_ERR_VALUE(ret))
893 return ret; 914 goto out_unlock;
894 915
895 cfg->cbndx = ret; 916 cfg->cbndx = ret;
896 if (smmu->version == 1) { 917 if (smmu->version == 1) {
@@ -900,6 +921,10 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
900 cfg->irptndx = cfg->cbndx; 921 cfg->irptndx = cfg->cbndx;
901 } 922 }
902 923
924 ACCESS_ONCE(smmu_domain->smmu) = smmu;
925 arm_smmu_init_context_bank(smmu_domain);
926 spin_unlock_irqrestore(&smmu_domain->lock, flags);
927
903 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx]; 928 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
904 ret = request_irq(irq, arm_smmu_context_fault, IRQF_SHARED, 929 ret = request_irq(irq, arm_smmu_context_fault, IRQF_SHARED,
905 "arm-smmu-context-fault", domain); 930 "arm-smmu-context-fault", domain);
@@ -907,15 +932,12 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
907 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n", 932 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
908 cfg->irptndx, irq); 933 cfg->irptndx, irq);
909 cfg->irptndx = INVALID_IRPTNDX; 934 cfg->irptndx = INVALID_IRPTNDX;
910 goto out_free_context;
911 } 935 }
912 936
913 smmu_domain->smmu = smmu;
914 arm_smmu_init_context_bank(smmu_domain);
915 return 0; 937 return 0;
916 938
917out_free_context: 939out_unlock:
918 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); 940 spin_unlock_irqrestore(&smmu_domain->lock, flags);
919 return ret; 941 return ret;
920} 942}
921 943
@@ -975,7 +997,6 @@ static void arm_smmu_free_ptes(pmd_t *pmd)
975{ 997{
976 pgtable_t table = pmd_pgtable(*pmd); 998 pgtable_t table = pmd_pgtable(*pmd);
977 999
978 pgtable_page_dtor(table);
979 __free_page(table); 1000 __free_page(table);
980} 1001}
981 1002
@@ -1108,6 +1129,9 @@ static void arm_smmu_master_free_smrs(struct arm_smmu_device *smmu,
1108 void __iomem *gr0_base = ARM_SMMU_GR0(smmu); 1129 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1109 struct arm_smmu_smr *smrs = cfg->smrs; 1130 struct arm_smmu_smr *smrs = cfg->smrs;
1110 1131
1132 if (!smrs)
1133 return;
1134
1111 /* Invalidate the SMRs before freeing back to the allocator */ 1135 /* Invalidate the SMRs before freeing back to the allocator */
1112 for (i = 0; i < cfg->num_streamids; ++i) { 1136 for (i = 0; i < cfg->num_streamids; ++i) {
1113 u8 idx = smrs[i].idx; 1137 u8 idx = smrs[i].idx;
@@ -1120,20 +1144,6 @@ static void arm_smmu_master_free_smrs(struct arm_smmu_device *smmu,
1120 kfree(smrs); 1144 kfree(smrs);
1121} 1145}
1122 1146
1123static void arm_smmu_bypass_stream_mapping(struct arm_smmu_device *smmu,
1124 struct arm_smmu_master_cfg *cfg)
1125{
1126 int i;
1127 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1128
1129 for (i = 0; i < cfg->num_streamids; ++i) {
1130 u16 sid = cfg->streamids[i];
1131
1132 writel_relaxed(S2CR_TYPE_BYPASS,
1133 gr0_base + ARM_SMMU_GR0_S2CR(sid));
1134 }
1135}
1136
1137static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain, 1147static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1138 struct arm_smmu_master_cfg *cfg) 1148 struct arm_smmu_master_cfg *cfg)
1139{ 1149{
@@ -1160,23 +1170,30 @@ static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1160static void arm_smmu_domain_remove_master(struct arm_smmu_domain *smmu_domain, 1170static void arm_smmu_domain_remove_master(struct arm_smmu_domain *smmu_domain,
1161 struct arm_smmu_master_cfg *cfg) 1171 struct arm_smmu_master_cfg *cfg)
1162{ 1172{
1173 int i;
1163 struct arm_smmu_device *smmu = smmu_domain->smmu; 1174 struct arm_smmu_device *smmu = smmu_domain->smmu;
1175 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1164 1176
1165 /* 1177 /*
1166 * We *must* clear the S2CR first, because freeing the SMR means 1178 * We *must* clear the S2CR first, because freeing the SMR means
1167 * that it can be re-allocated immediately. 1179 * that it can be re-allocated immediately.
1168 */ 1180 */
1169 arm_smmu_bypass_stream_mapping(smmu, cfg); 1181 for (i = 0; i < cfg->num_streamids; ++i) {
1182 u32 idx = cfg->smrs ? cfg->smrs[i].idx : cfg->streamids[i];
1183
1184 writel_relaxed(S2CR_TYPE_BYPASS,
1185 gr0_base + ARM_SMMU_GR0_S2CR(idx));
1186 }
1187
1170 arm_smmu_master_free_smrs(smmu, cfg); 1188 arm_smmu_master_free_smrs(smmu, cfg);
1171} 1189}
1172 1190
1173static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) 1191static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1174{ 1192{
1175 int ret = -EINVAL; 1193 int ret;
1176 struct arm_smmu_domain *smmu_domain = domain->priv; 1194 struct arm_smmu_domain *smmu_domain = domain->priv;
1177 struct arm_smmu_device *smmu; 1195 struct arm_smmu_device *smmu, *dom_smmu;
1178 struct arm_smmu_master_cfg *cfg; 1196 struct arm_smmu_master_cfg *cfg;
1179 unsigned long flags;
1180 1197
1181 smmu = dev_get_master_dev(dev)->archdata.iommu; 1198 smmu = dev_get_master_dev(dev)->archdata.iommu;
1182 if (!smmu) { 1199 if (!smmu) {
@@ -1188,20 +1205,22 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1188 * Sanity check the domain. We don't support domains across 1205 * Sanity check the domain. We don't support domains across
1189 * different SMMUs. 1206 * different SMMUs.
1190 */ 1207 */
1191 spin_lock_irqsave(&smmu_domain->lock, flags); 1208 dom_smmu = ACCESS_ONCE(smmu_domain->smmu);
1192 if (!smmu_domain->smmu) { 1209 if (!dom_smmu) {
1193 /* Now that we have a master, we can finalise the domain */ 1210 /* Now that we have a master, we can finalise the domain */
1194 ret = arm_smmu_init_domain_context(domain, smmu); 1211 ret = arm_smmu_init_domain_context(domain, smmu);
1195 if (IS_ERR_VALUE(ret)) 1212 if (IS_ERR_VALUE(ret))
1196 goto err_unlock; 1213 return ret;
1197 } else if (smmu_domain->smmu != smmu) { 1214
1215 dom_smmu = smmu_domain->smmu;
1216 }
1217
1218 if (dom_smmu != smmu) {
1198 dev_err(dev, 1219 dev_err(dev,
1199 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n", 1220 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
1200 dev_name(smmu_domain->smmu->dev), 1221 dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1201 dev_name(smmu->dev)); 1222 return -EINVAL;
1202 goto err_unlock;
1203 } 1223 }
1204 spin_unlock_irqrestore(&smmu_domain->lock, flags);
1205 1224
1206 /* Looks ok, so add the device to the domain */ 1225 /* Looks ok, so add the device to the domain */
1207 cfg = find_smmu_master_cfg(smmu_domain->smmu, dev); 1226 cfg = find_smmu_master_cfg(smmu_domain->smmu, dev);
@@ -1209,10 +1228,6 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1209 return -ENODEV; 1228 return -ENODEV;
1210 1229
1211 return arm_smmu_domain_add_master(smmu_domain, cfg); 1230 return arm_smmu_domain_add_master(smmu_domain, cfg);
1212
1213err_unlock:
1214 spin_unlock_irqrestore(&smmu_domain->lock, flags);
1215 return ret;
1216} 1231}
1217 1232
1218static void arm_smmu_detach_dev(struct iommu_domain *domain, struct device *dev) 1233static void arm_smmu_detach_dev(struct iommu_domain *domain, struct device *dev)
@@ -1247,10 +1262,6 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd,
1247 return -ENOMEM; 1262 return -ENOMEM;
1248 1263
1249 arm_smmu_flush_pgtable(smmu, page_address(table), PAGE_SIZE); 1264 arm_smmu_flush_pgtable(smmu, page_address(table), PAGE_SIZE);
1250 if (!pgtable_page_ctor(table)) {
1251 __free_page(table);
1252 return -ENOMEM;
1253 }
1254 pmd_populate(NULL, pmd, table); 1265 pmd_populate(NULL, pmd, table);
1255 arm_smmu_flush_pgtable(smmu, pmd, sizeof(*pmd)); 1266 arm_smmu_flush_pgtable(smmu, pmd, sizeof(*pmd));
1256 } 1267 }
@@ -1626,7 +1637,7 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1626 1637
1627 /* Mark all SMRn as invalid and all S2CRn as bypass */ 1638 /* Mark all SMRn as invalid and all S2CRn as bypass */
1628 for (i = 0; i < smmu->num_mapping_groups; ++i) { 1639 for (i = 0; i < smmu->num_mapping_groups; ++i) {
1629 writel_relaxed(~SMR_VALID, gr0_base + ARM_SMMU_GR0_SMR(i)); 1640 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_SMR(i));
1630 writel_relaxed(S2CR_TYPE_BYPASS, 1641 writel_relaxed(S2CR_TYPE_BYPASS,
1631 gr0_base + ARM_SMMU_GR0_S2CR(i)); 1642 gr0_base + ARM_SMMU_GR0_S2CR(i));
1632 } 1643 }
@@ -1761,6 +1772,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1761 dev_notice(smmu->dev, 1772 dev_notice(smmu->dev,
1762 "\tstream matching with %u register groups, mask 0x%x", 1773 "\tstream matching with %u register groups, mask 0x%x",
1763 smmu->num_mapping_groups, mask); 1774 smmu->num_mapping_groups, mask);
1775 } else {
1776 smmu->num_mapping_groups = (id >> ID0_NUMSIDB_SHIFT) &
1777 ID0_NUMSIDB_MASK;
1764 } 1778 }
1765 1779
1766 /* ID1 */ 1780 /* ID1 */
@@ -1794,11 +1808,16 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1794 * Stage-1 output limited by stage-2 input size due to pgd 1808 * Stage-1 output limited by stage-2 input size due to pgd
1795 * allocation (PTRS_PER_PGD). 1809 * allocation (PTRS_PER_PGD).
1796 */ 1810 */
1811 if (smmu->features & ARM_SMMU_FEAT_TRANS_NESTED) {
1797#ifdef CONFIG_64BIT 1812#ifdef CONFIG_64BIT
1798 smmu->s1_output_size = min_t(unsigned long, VA_BITS, size); 1813 smmu->s1_output_size = min_t(unsigned long, VA_BITS, size);
1799#else 1814#else
1800 smmu->s1_output_size = min(32UL, size); 1815 smmu->s1_output_size = min(32UL, size);
1801#endif 1816#endif
1817 } else {
1818 smmu->s1_output_size = min_t(unsigned long, PHYS_MASK_SHIFT,
1819 size);
1820 }
1802 1821
1803 /* The stage-2 output mask is also applied for bypass */ 1822 /* The stage-2 output mask is also applied for bypass */
1804 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK); 1823 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
@@ -1889,6 +1908,10 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev)
1889 smmu->irqs[i] = irq; 1908 smmu->irqs[i] = irq;
1890 } 1909 }
1891 1910
1911 err = arm_smmu_device_cfg_probe(smmu);
1912 if (err)
1913 return err;
1914
1892 i = 0; 1915 i = 0;
1893 smmu->masters = RB_ROOT; 1916 smmu->masters = RB_ROOT;
1894 while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters", 1917 while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters",
@@ -1905,10 +1928,6 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev)
1905 } 1928 }
1906 dev_notice(dev, "registered %d master devices\n", i); 1929 dev_notice(dev, "registered %d master devices\n", i);
1907 1930
1908 err = arm_smmu_device_cfg_probe(smmu);
1909 if (err)
1910 goto out_put_masters;
1911
1912 parse_driver_options(smmu); 1931 parse_driver_options(smmu);
1913 1932
1914 if (smmu->version > 1 && 1933 if (smmu->version > 1 &&
diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
index 60ab474bfff3..06d268abe951 100644
--- a/drivers/iommu/dmar.c
+++ b/drivers/iommu/dmar.c
@@ -678,8 +678,7 @@ static int __init dmar_acpi_dev_scope_init(void)
678 andd->device_name); 678 andd->device_name);
679 continue; 679 continue;
680 } 680 }
681 acpi_bus_get_device(h, &adev); 681 if (acpi_bus_get_device(h, &adev)) {
682 if (!adev) {
683 pr_err("Failed to get device for ACPI object %s\n", 682 pr_err("Failed to get device for ACPI object %s\n",
684 andd->device_name); 683 andd->device_name);
685 continue; 684 continue;
diff --git a/drivers/iommu/fsl_pamu_domain.c b/drivers/iommu/fsl_pamu_domain.c
index 61d1dafa242d..56feed7cec15 100644
--- a/drivers/iommu/fsl_pamu_domain.c
+++ b/drivers/iommu/fsl_pamu_domain.c
@@ -984,7 +984,7 @@ static int fsl_pamu_add_device(struct device *dev)
984 struct iommu_group *group = ERR_PTR(-ENODEV); 984 struct iommu_group *group = ERR_PTR(-ENODEV);
985 struct pci_dev *pdev; 985 struct pci_dev *pdev;
986 const u32 *prop; 986 const u32 *prop;
987 int ret, len; 987 int ret = 0, len;
988 988
989 /* 989 /*
990 * For platform devices we allocate a separate group for 990 * For platform devices we allocate a separate group for
@@ -1007,7 +1007,13 @@ static int fsl_pamu_add_device(struct device *dev)
1007 if (IS_ERR(group)) 1007 if (IS_ERR(group))
1008 return PTR_ERR(group); 1008 return PTR_ERR(group);
1009 1009
1010 ret = iommu_group_add_device(group, dev); 1010 /*
1011 * Check if device has already been added to an iommu group.
1012 * Group could have already been created for a PCI device in
1013 * the iommu_group_get_for_dev path.
1014 */
1015 if (!dev->iommu_group)
1016 ret = iommu_group_add_device(group, dev);
1011 1017
1012 iommu_group_put(group); 1018 iommu_group_put(group);
1013 return ret; 1019 return ret;
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index ac4adb337038..0639b9274b11 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -678,15 +678,17 @@ static struct iommu_group *iommu_group_get_for_pci_dev(struct pci_dev *pdev)
678 */ 678 */
679struct iommu_group *iommu_group_get_for_dev(struct device *dev) 679struct iommu_group *iommu_group_get_for_dev(struct device *dev)
680{ 680{
681 struct iommu_group *group = ERR_PTR(-EIO); 681 struct iommu_group *group;
682 int ret; 682 int ret;
683 683
684 group = iommu_group_get(dev); 684 group = iommu_group_get(dev);
685 if (group) 685 if (group)
686 return group; 686 return group;
687 687
688 if (dev_is_pci(dev)) 688 if (!dev_is_pci(dev))
689 group = iommu_group_get_for_pci_dev(to_pci_dev(dev)); 689 return ERR_PTR(-EINVAL);
690
691 group = iommu_group_get_for_pci_dev(to_pci_dev(dev));
690 692
691 if (IS_ERR(group)) 693 if (IS_ERR(group))
692 return group; 694 return group;
diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-combiner.c
index f8636a650cf6..5945223b73fa 100644
--- a/drivers/irqchip/exynos-combiner.c
+++ b/drivers/irqchip/exynos-combiner.c
@@ -15,6 +15,7 @@
15#include <linux/slab.h> 15#include <linux/slab.h>
16#include <linux/irqdomain.h> 16#include <linux/irqdomain.h>
17#include <linux/irqchip/chained_irq.h> 17#include <linux/irqchip/chained_irq.h>
18#include <linux/interrupt.h>
18#include <linux/of_address.h> 19#include <linux/of_address.h>
19#include <linux/of_irq.h> 20#include <linux/of_irq.h>
20 21
diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c
index 85c2985d8bcb..bbbaf5de65d2 100644
--- a/drivers/irqchip/irq-crossbar.c
+++ b/drivers/irqchip/irq-crossbar.c
@@ -220,7 +220,7 @@ static int __init crossbar_of_init(struct device_node *node)
220 of_property_read_u32_index(node, 220 of_property_read_u32_index(node,
221 "ti,irqs-reserved", 221 "ti,irqs-reserved",
222 i, &entry); 222 i, &entry);
223 if (entry > max) { 223 if (entry >= max) {
224 pr_err("Invalid reserved entry\n"); 224 pr_err("Invalid reserved entry\n");
225 ret = -EINVAL; 225 ret = -EINVAL;
226 goto err_irq_map; 226 goto err_irq_map;
@@ -238,7 +238,7 @@ static int __init crossbar_of_init(struct device_node *node)
238 of_property_read_u32_index(node, 238 of_property_read_u32_index(node,
239 "ti,irqs-skip", 239 "ti,irqs-skip",
240 i, &entry); 240 i, &entry);
241 if (entry > max) { 241 if (entry >= max) {
242 pr_err("Invalid skip entry\n"); 242 pr_err("Invalid skip entry\n");
243 ret = -EINVAL; 243 ret = -EINVAL;
244 goto err_irq_map; 244 goto err_irq_map;
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 57eaa5a0b1e3..a0698b4f0303 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -36,7 +36,7 @@
36struct gic_chip_data { 36struct gic_chip_data {
37 void __iomem *dist_base; 37 void __iomem *dist_base;
38 void __iomem **redist_base; 38 void __iomem **redist_base;
39 void __percpu __iomem **rdist; 39 void __iomem * __percpu *rdist;
40 struct irq_domain *domain; 40 struct irq_domain *domain;
41 u64 redist_stride; 41 u64 redist_stride;
42 u32 redist_regions; 42 u32 redist_regions;
@@ -104,7 +104,7 @@ static void gic_redist_wait_for_rwp(void)
104} 104}
105 105
106/* Low level accessors */ 106/* Low level accessors */
107static u64 gic_read_iar(void) 107static u64 __maybe_unused gic_read_iar(void)
108{ 108{
109 u64 irqstat; 109 u64 irqstat;
110 110
@@ -112,24 +112,24 @@ static u64 gic_read_iar(void)
112 return irqstat; 112 return irqstat;
113} 113}
114 114
115static void gic_write_pmr(u64 val) 115static void __maybe_unused gic_write_pmr(u64 val)
116{ 116{
117 asm volatile("msr_s " __stringify(ICC_PMR_EL1) ", %0" : : "r" (val)); 117 asm volatile("msr_s " __stringify(ICC_PMR_EL1) ", %0" : : "r" (val));
118} 118}
119 119
120static void gic_write_ctlr(u64 val) 120static void __maybe_unused gic_write_ctlr(u64 val)
121{ 121{
122 asm volatile("msr_s " __stringify(ICC_CTLR_EL1) ", %0" : : "r" (val)); 122 asm volatile("msr_s " __stringify(ICC_CTLR_EL1) ", %0" : : "r" (val));
123 isb(); 123 isb();
124} 124}
125 125
126static void gic_write_grpen1(u64 val) 126static void __maybe_unused gic_write_grpen1(u64 val)
127{ 127{
128 asm volatile("msr_s " __stringify(ICC_GRPEN1_EL1) ", %0" : : "r" (val)); 128 asm volatile("msr_s " __stringify(ICC_GRPEN1_EL1) ", %0" : : "r" (val));
129 isb(); 129 isb();
130} 130}
131 131
132static void gic_write_sgi1r(u64 val) 132static void __maybe_unused gic_write_sgi1r(u64 val)
133{ 133{
134 asm volatile("msr_s " __stringify(ICC_SGI1R_EL1) ", %0" : : "r" (val)); 134 asm volatile("msr_s " __stringify(ICC_SGI1R_EL1) ", %0" : : "r" (val));
135} 135}
@@ -200,19 +200,6 @@ static void gic_poke_irq(struct irq_data *d, u32 offset)
200 rwp_wait(); 200 rwp_wait();
201} 201}
202 202
203static int gic_peek_irq(struct irq_data *d, u32 offset)
204{
205 u32 mask = 1 << (gic_irq(d) % 32);
206 void __iomem *base;
207
208 if (gic_irq_in_rdist(d))
209 base = gic_data_rdist_sgi_base();
210 else
211 base = gic_data.dist_base;
212
213 return !!(readl_relaxed(base + offset + (gic_irq(d) / 32) * 4) & mask);
214}
215
216static void gic_mask_irq(struct irq_data *d) 203static void gic_mask_irq(struct irq_data *d)
217{ 204{
218 gic_poke_irq(d, GICD_ICENABLER); 205 gic_poke_irq(d, GICD_ICENABLER);
@@ -401,6 +388,19 @@ static void gic_cpu_init(void)
401} 388}
402 389
403#ifdef CONFIG_SMP 390#ifdef CONFIG_SMP
391static int gic_peek_irq(struct irq_data *d, u32 offset)
392{
393 u32 mask = 1 << (gic_irq(d) % 32);
394 void __iomem *base;
395
396 if (gic_irq_in_rdist(d))
397 base = gic_data_rdist_sgi_base();
398 else
399 base = gic_data.dist_base;
400
401 return !!(readl_relaxed(base + offset + (gic_irq(d) / 32) * 4) & mask);
402}
403
404static int gic_secondary_init(struct notifier_block *nfb, 404static int gic_secondary_init(struct notifier_block *nfb,
405 unsigned long action, void *hcpu) 405 unsigned long action, void *hcpu)
406{ 406{
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index 4b959e606fe8..dda6dbc23565 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -867,7 +867,7 @@ static int gic_routable_irq_domain_xlate(struct irq_domain *d,
867 return 0; 867 return 0;
868} 868}
869 869
870const struct irq_domain_ops gic_default_routable_irq_domain_ops = { 870static const struct irq_domain_ops gic_default_routable_irq_domain_ops = {
871 .map = gic_routable_irq_domain_map, 871 .map = gic_routable_irq_domain_map,
872 .unmap = gic_routable_irq_domain_unmap, 872 .unmap = gic_routable_irq_domain_unmap,
873 .xlate = gic_routable_irq_domain_xlate, 873 .xlate = gic_routable_irq_domain_xlate,
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
index 1af40ee209e2..7130505c2425 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
@@ -895,8 +895,8 @@ static void migration_success_pre_commit(struct dm_cache_migration *mg)
895 struct cache *cache = mg->cache; 895 struct cache *cache = mg->cache;
896 896
897 if (mg->writeback) { 897 if (mg->writeback) {
898 cell_defer(cache, mg->old_ocell, false);
899 clear_dirty(cache, mg->old_oblock, mg->cblock); 898 clear_dirty(cache, mg->old_oblock, mg->cblock);
899 cell_defer(cache, mg->old_ocell, false);
900 cleanup_migration(mg); 900 cleanup_migration(mg);
901 return; 901 return;
902 902
@@ -951,13 +951,13 @@ static void migration_success_post_commit(struct dm_cache_migration *mg)
951 } 951 }
952 952
953 } else { 953 } else {
954 clear_dirty(cache, mg->new_oblock, mg->cblock);
954 if (mg->requeue_holder) 955 if (mg->requeue_holder)
955 cell_defer(cache, mg->new_ocell, true); 956 cell_defer(cache, mg->new_ocell, true);
956 else { 957 else {
957 bio_endio(mg->new_ocell->holder, 0); 958 bio_endio(mg->new_ocell->holder, 0);
958 cell_defer(cache, mg->new_ocell, false); 959 cell_defer(cache, mg->new_ocell, false);
959 } 960 }
960 clear_dirty(cache, mg->new_oblock, mg->cblock);
961 cleanup_migration(mg); 961 cleanup_migration(mg);
962 } 962 }
963} 963}
diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
index f60bad491eb6..3c89fcbc621e 100644
--- a/drivers/media/Kconfig
+++ b/drivers/media/Kconfig
@@ -182,7 +182,6 @@ config MEDIA_SUBDRV_AUTOSELECT
182 depends on HAS_IOMEM 182 depends on HAS_IOMEM
183 select I2C 183 select I2C
184 select I2C_MUX 184 select I2C_MUX
185 select SPI
186 default y 185 default y
187 help 186 help
188 By default, a media driver auto-selects all possible ancillary 187 By default, a media driver auto-selects all possible ancillary
diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h
index 5135a096bfa6..12ce19c98ded 100644
--- a/drivers/media/dvb-core/dvb-usb-ids.h
+++ b/drivers/media/dvb-core/dvb-usb-ids.h
@@ -280,6 +280,8 @@
280#define USB_PID_PCTV_400E 0x020f 280#define USB_PID_PCTV_400E 0x020f
281#define USB_PID_PCTV_450E 0x0222 281#define USB_PID_PCTV_450E 0x0222
282#define USB_PID_PCTV_452E 0x021f 282#define USB_PID_PCTV_452E 0x021f
283#define USB_PID_PCTV_78E 0x025a
284#define USB_PID_PCTV_79E 0x0262
283#define USB_PID_REALTEK_RTL2831U 0x2831 285#define USB_PID_REALTEK_RTL2831U 0x2831
284#define USB_PID_REALTEK_RTL2832U 0x2832 286#define USB_PID_REALTEK_RTL2832U 0x2832
285#define USB_PID_TECHNOTREND_CONNECT_S2_3600 0x3007 287#define USB_PID_TECHNOTREND_CONNECT_S2_3600 0x3007
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index be4bec2a9640..5c90ea683a7e 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -314,6 +314,19 @@ static int af9033_init(struct dvb_frontend *fe)
314 goto err; 314 goto err;
315 } 315 }
316 316
317 /* feed clock to RF tuner */
318 switch (state->cfg.tuner) {
319 case AF9033_TUNER_IT9135_38:
320 case AF9033_TUNER_IT9135_51:
321 case AF9033_TUNER_IT9135_52:
322 case AF9033_TUNER_IT9135_60:
323 case AF9033_TUNER_IT9135_61:
324 case AF9033_TUNER_IT9135_62:
325 ret = af9033_wr_reg(state, 0x80fba8, 0x00);
326 if (ret < 0)
327 goto err;
328 }
329
317 /* settings for TS interface */ 330 /* settings for TS interface */
318 if (state->cfg.ts_mode == AF9033_TS_MODE_USB) { 331 if (state->cfg.ts_mode == AF9033_TS_MODE_USB) {
319 ret = af9033_wr_reg_mask(state, 0x80f9a5, 0x00, 0x01); 332 ret = af9033_wr_reg_mask(state, 0x80f9a5, 0x00, 0x01);
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index fc2ad581e302..ded7b67d7526 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -1418,7 +1418,7 @@ static const struct reg_val tuner_init_it9135_60[] = {
1418 { 0x800068, 0x0a }, 1418 { 0x800068, 0x0a },
1419 { 0x80006a, 0x03 }, 1419 { 0x80006a, 0x03 },
1420 { 0x800070, 0x0a }, 1420 { 0x800070, 0x0a },
1421 { 0x800071, 0x05 }, 1421 { 0x800071, 0x0a },
1422 { 0x800072, 0x02 }, 1422 { 0x800072, 0x02 },
1423 { 0x800075, 0x8c }, 1423 { 0x800075, 0x8c },
1424 { 0x800076, 0x8c }, 1424 { 0x800076, 0x8c },
@@ -1484,7 +1484,6 @@ static const struct reg_val tuner_init_it9135_60[] = {
1484 { 0x800104, 0x02 }, 1484 { 0x800104, 0x02 },
1485 { 0x800105, 0xbe }, 1485 { 0x800105, 0xbe },
1486 { 0x800106, 0x00 }, 1486 { 0x800106, 0x00 },
1487 { 0x800109, 0x02 },
1488 { 0x800115, 0x0a }, 1487 { 0x800115, 0x0a },
1489 { 0x800116, 0x03 }, 1488 { 0x800116, 0x03 },
1490 { 0x80011a, 0xbe }, 1489 { 0x80011a, 0xbe },
@@ -1510,7 +1509,6 @@ static const struct reg_val tuner_init_it9135_60[] = {
1510 { 0x80014b, 0x8c }, 1509 { 0x80014b, 0x8c },
1511 { 0x80014d, 0xac }, 1510 { 0x80014d, 0xac },
1512 { 0x80014e, 0xc6 }, 1511 { 0x80014e, 0xc6 },
1513 { 0x80014f, 0x03 },
1514 { 0x800151, 0x1e }, 1512 { 0x800151, 0x1e },
1515 { 0x800153, 0xbc }, 1513 { 0x800153, 0xbc },
1516 { 0x800178, 0x09 }, 1514 { 0x800178, 0x09 },
@@ -1522,9 +1520,10 @@ static const struct reg_val tuner_init_it9135_60[] = {
1522 { 0x80018d, 0x5f }, 1520 { 0x80018d, 0x5f },
1523 { 0x80018f, 0xa0 }, 1521 { 0x80018f, 0xa0 },
1524 { 0x800190, 0x5a }, 1522 { 0x800190, 0x5a },
1525 { 0x80ed02, 0xff }, 1523 { 0x800191, 0x00 },
1526 { 0x80ee42, 0xff }, 1524 { 0x80ed02, 0x40 },
1527 { 0x80ee82, 0xff }, 1525 { 0x80ee42, 0x40 },
1526 { 0x80ee82, 0x40 },
1528 { 0x80f000, 0x0f }, 1527 { 0x80f000, 0x0f },
1529 { 0x80f01f, 0x8c }, 1528 { 0x80f01f, 0x8c },
1530 { 0x80f020, 0x00 }, 1529 { 0x80f020, 0x00 },
@@ -1699,7 +1698,6 @@ static const struct reg_val tuner_init_it9135_61[] = {
1699 { 0x800104, 0x02 }, 1698 { 0x800104, 0x02 },
1700 { 0x800105, 0xc8 }, 1699 { 0x800105, 0xc8 },
1701 { 0x800106, 0x00 }, 1700 { 0x800106, 0x00 },
1702 { 0x800109, 0x02 },
1703 { 0x800115, 0x0a }, 1701 { 0x800115, 0x0a },
1704 { 0x800116, 0x03 }, 1702 { 0x800116, 0x03 },
1705 { 0x80011a, 0xc6 }, 1703 { 0x80011a, 0xc6 },
@@ -1725,7 +1723,6 @@ static const struct reg_val tuner_init_it9135_61[] = {
1725 { 0x80014b, 0x8c }, 1723 { 0x80014b, 0x8c },
1726 { 0x80014d, 0xa8 }, 1724 { 0x80014d, 0xa8 },
1727 { 0x80014e, 0xc6 }, 1725 { 0x80014e, 0xc6 },
1728 { 0x80014f, 0x03 },
1729 { 0x800151, 0x28 }, 1726 { 0x800151, 0x28 },
1730 { 0x800153, 0xcc }, 1727 { 0x800153, 0xcc },
1731 { 0x800178, 0x09 }, 1728 { 0x800178, 0x09 },
@@ -1737,9 +1734,10 @@ static const struct reg_val tuner_init_it9135_61[] = {
1737 { 0x80018d, 0x5f }, 1734 { 0x80018d, 0x5f },
1738 { 0x80018f, 0xfb }, 1735 { 0x80018f, 0xfb },
1739 { 0x800190, 0x5c }, 1736 { 0x800190, 0x5c },
1740 { 0x80ed02, 0xff }, 1737 { 0x800191, 0x00 },
1741 { 0x80ee42, 0xff }, 1738 { 0x80ed02, 0x40 },
1742 { 0x80ee82, 0xff }, 1739 { 0x80ee42, 0x40 },
1740 { 0x80ee82, 0x40 },
1743 { 0x80f000, 0x0f }, 1741 { 0x80f000, 0x0f },
1744 { 0x80f01f, 0x8c }, 1742 { 0x80f01f, 0x8c },
1745 { 0x80f020, 0x00 }, 1743 { 0x80f020, 0x00 },
diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c
index 1eaf975d3612..62acb10630f9 100644
--- a/drivers/media/i2c/smiapp/smiapp-core.c
+++ b/drivers/media/i2c/smiapp/smiapp-core.c
@@ -1282,19 +1282,12 @@ static int smiapp_set_power(struct v4l2_subdev *subdev, int on)
1282 1282
1283 mutex_lock(&sensor->power_mutex); 1283 mutex_lock(&sensor->power_mutex);
1284 1284
1285 /* 1285 if (on && !sensor->power_count) {
1286 * If the power count is modified from 0 to != 0 or from != 0
1287 * to 0, update the power state.
1288 */
1289 if (!sensor->power_count == !on)
1290 goto out;
1291
1292 if (on) {
1293 /* Power on and perform initialisation. */ 1286 /* Power on and perform initialisation. */
1294 ret = smiapp_power_on(sensor); 1287 ret = smiapp_power_on(sensor);
1295 if (ret < 0) 1288 if (ret < 0)
1296 goto out; 1289 goto out;
1297 } else { 1290 } else if (!on && sensor->power_count == 1) {
1298 smiapp_power_off(sensor); 1291 smiapp_power_off(sensor);
1299 } 1292 }
1300 1293
@@ -2572,7 +2565,7 @@ static int smiapp_registered(struct v4l2_subdev *subdev)
2572 2565
2573 this->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; 2566 this->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
2574 this->sd.internal_ops = &smiapp_internal_ops; 2567 this->sd.internal_ops = &smiapp_internal_ops;
2575 this->sd.owner = NULL; 2568 this->sd.owner = THIS_MODULE;
2576 v4l2_set_subdevdata(&this->sd, client); 2569 v4l2_set_subdevdata(&this->sd, client);
2577 2570
2578 rval = media_entity_init(&this->sd.entity, 2571 rval = media_entity_init(&this->sd.entity,
diff --git a/drivers/media/pci/cx18/cx18-driver.c b/drivers/media/pci/cx18/cx18-driver.c
index 716bdc57fac6..83f5074706f9 100644
--- a/drivers/media/pci/cx18/cx18-driver.c
+++ b/drivers/media/pci/cx18/cx18-driver.c
@@ -1091,6 +1091,7 @@ static int cx18_probe(struct pci_dev *pci_dev,
1091 setup.addr = ADDR_UNSET; 1091 setup.addr = ADDR_UNSET;
1092 setup.type = cx->options.tuner; 1092 setup.type = cx->options.tuner;
1093 setup.mode_mask = T_ANALOG_TV; /* matches TV tuners */ 1093 setup.mode_mask = T_ANALOG_TV; /* matches TV tuners */
1094 setup.config = NULL;
1094 if (cx->options.radio > 0) 1095 if (cx->options.radio > 0)
1095 setup.mode_mask |= T_RADIO; 1096 setup.mode_mask |= T_RADIO;
1096 setup.tuner_callback = (setup.type == TUNER_XC2028) ? 1097 setup.tuner_callback = (setup.type == TUNER_XC2028) ?
diff --git a/drivers/media/tuners/tuner_it913x.c b/drivers/media/tuners/tuner_it913x.c
index 6f30d7e535b8..3d83c425bccf 100644
--- a/drivers/media/tuners/tuner_it913x.c
+++ b/drivers/media/tuners/tuner_it913x.c
@@ -396,6 +396,7 @@ struct dvb_frontend *it913x_attach(struct dvb_frontend *fe,
396 struct i2c_adapter *i2c_adap, u8 i2c_addr, u8 config) 396 struct i2c_adapter *i2c_adap, u8 i2c_addr, u8 config)
397{ 397{
398 struct it913x_state *state = NULL; 398 struct it913x_state *state = NULL;
399 int ret;
399 400
400 /* allocate memory for the internal state */ 401 /* allocate memory for the internal state */
401 state = kzalloc(sizeof(struct it913x_state), GFP_KERNEL); 402 state = kzalloc(sizeof(struct it913x_state), GFP_KERNEL);
@@ -425,6 +426,11 @@ struct dvb_frontend *it913x_attach(struct dvb_frontend *fe,
425 state->tuner_type = config; 426 state->tuner_type = config;
426 state->firmware_ver = 1; 427 state->firmware_ver = 1;
427 428
429 /* tuner RF initial */
430 ret = it913x_wr_reg(state, PRO_DMOD, 0xec4c, 0x68);
431 if (ret < 0)
432 goto error;
433
428 fe->tuner_priv = state; 434 fe->tuner_priv = state;
429 memcpy(&fe->ops.tuner_ops, &it913x_tuner_ops, 435 memcpy(&fe->ops.tuner_ops, &it913x_tuner_ops,
430 sizeof(struct dvb_tuner_ops)); 436 sizeof(struct dvb_tuner_ops));
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
index 75ec1c659fdd..c82beac0e0cb 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.c
+++ b/drivers/media/usb/dvb-usb-v2/af9035.c
@@ -1575,6 +1575,10 @@ static const struct usb_device_id af9035_id_table[] = {
1575 &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) }, 1575 &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) },
1576 { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900, 1576 { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900,
1577 &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) }, 1577 &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) },
1578 { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_78E,
1579 &af9035_props, "PCTV 78e", RC_MAP_IT913X_V1) },
1580 { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_79E,
1581 &af9035_props, "PCTV 79e", RC_MAP_IT913X_V2) },
1578 { } 1582 { }
1579}; 1583};
1580MODULE_DEVICE_TABLE(usb, af9035_id_table); 1584MODULE_DEVICE_TABLE(usb, af9035_id_table);
diff --git a/drivers/message/fusion/Kconfig b/drivers/message/fusion/Kconfig
index a34a11d2fef2..63ca9841db10 100644
--- a/drivers/message/fusion/Kconfig
+++ b/drivers/message/fusion/Kconfig
@@ -29,7 +29,7 @@ config FUSION_SPI
29config FUSION_FC 29config FUSION_FC
30 tristate "Fusion MPT ScsiHost drivers for FC" 30 tristate "Fusion MPT ScsiHost drivers for FC"
31 depends on PCI && SCSI 31 depends on PCI && SCSI
32 select SCSI_FC_ATTRS 32 depends on SCSI_FC_ATTRS
33 ---help--- 33 ---help---
34 SCSI HOST support for a Fiber Channel host adapters. 34 SCSI HOST support for a Fiber Channel host adapters.
35 35
diff --git a/drivers/misc/lattice-ecp3-config.c b/drivers/misc/lattice-ecp3-config.c
index 7ffdb589841e..7e1efd5f58f0 100644
--- a/drivers/misc/lattice-ecp3-config.c
+++ b/drivers/misc/lattice-ecp3-config.c
@@ -79,6 +79,11 @@ static void firmware_load(const struct firmware *fw, void *context)
79 u32 jedec_id; 79 u32 jedec_id;
80 u32 status; 80 u32 status;
81 81
82 if (fw == NULL) {
83 dev_err(&spi->dev, "Cannot load firmware, aborting\n");
84 return;
85 }
86
82 if (fw->size == 0) { 87 if (fw->size == 0) {
83 dev_err(&spi->dev, "Error: Firmware size is 0!\n"); 88 dev_err(&spi->dev, "Error: Firmware size is 0!\n");
84 return; 89 return;
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 382a389b9bba..53904758d693 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -175,7 +175,7 @@ MODULE_PARM_DESC(fail_over_mac, "For active-backup, do not set all slaves to "
175 "the same MAC; 0 for none (default), " 175 "the same MAC; 0 for none (default), "
176 "1 for active, 2 for follow"); 176 "1 for active, 2 for follow");
177module_param(all_slaves_active, int, 0); 177module_param(all_slaves_active, int, 0);
178MODULE_PARM_DESC(all_slaves_active, "Keep all frames received on an interface" 178MODULE_PARM_DESC(all_slaves_active, "Keep all frames received on an interface "
179 "by setting active flag for all slaves; " 179 "by setting active flag for all slaves; "
180 "0 for never (default), 1 for always."); 180 "0 for never (default), 1 for always.");
181module_param(resend_igmp, int, 0); 181module_param(resend_igmp, int, 0);
@@ -3531,8 +3531,14 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
3531 else 3531 else
3532 bond_xmit_slave_id(bond, skb, 0); 3532 bond_xmit_slave_id(bond, skb, 0);
3533 } else { 3533 } else {
3534 slave_id = bond_rr_gen_slave_id(bond); 3534 int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
3535 bond_xmit_slave_id(bond, skb, slave_id % bond->slave_cnt); 3535
3536 if (likely(slave_cnt)) {
3537 slave_id = bond_rr_gen_slave_id(bond);
3538 bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
3539 } else {
3540 dev_kfree_skb_any(skb);
3541 }
3536 } 3542 }
3537 3543
3538 return NETDEV_TX_OK; 3544 return NETDEV_TX_OK;
@@ -3562,8 +3568,13 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d
3562static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev) 3568static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
3563{ 3569{
3564 struct bonding *bond = netdev_priv(bond_dev); 3570 struct bonding *bond = netdev_priv(bond_dev);
3571 int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
3565 3572
3566 bond_xmit_slave_id(bond, skb, bond_xmit_hash(bond, skb) % bond->slave_cnt); 3573 if (likely(slave_cnt))
3574 bond_xmit_slave_id(bond, skb,
3575 bond_xmit_hash(bond, skb) % slave_cnt);
3576 else
3577 dev_kfree_skb_any(skb);
3567 3578
3568 return NETDEV_TX_OK; 3579 return NETDEV_TX_OK;
3569} 3580}
diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
index f07fa89b5fd5..05e1aa090add 100644
--- a/drivers/net/can/at91_can.c
+++ b/drivers/net/can/at91_can.c
@@ -1123,7 +1123,9 @@ static int at91_open(struct net_device *dev)
1123 struct at91_priv *priv = netdev_priv(dev); 1123 struct at91_priv *priv = netdev_priv(dev);
1124 int err; 1124 int err;
1125 1125
1126 clk_enable(priv->clk); 1126 err = clk_prepare_enable(priv->clk);
1127 if (err)
1128 return err;
1127 1129
1128 /* check or determine and set bittime */ 1130 /* check or determine and set bittime */
1129 err = open_candev(dev); 1131 err = open_candev(dev);
@@ -1149,7 +1151,7 @@ static int at91_open(struct net_device *dev)
1149 out_close: 1151 out_close:
1150 close_candev(dev); 1152 close_candev(dev);
1151 out: 1153 out:
1152 clk_disable(priv->clk); 1154 clk_disable_unprepare(priv->clk);
1153 1155
1154 return err; 1156 return err;
1155} 1157}
@@ -1166,7 +1168,7 @@ static int at91_close(struct net_device *dev)
1166 at91_chip_stop(dev, CAN_STATE_STOPPED); 1168 at91_chip_stop(dev, CAN_STATE_STOPPED);
1167 1169
1168 free_irq(dev->irq, dev); 1170 free_irq(dev->irq, dev);
1169 clk_disable(priv->clk); 1171 clk_disable_unprepare(priv->clk);
1170 1172
1171 close_candev(dev); 1173 close_candev(dev);
1172 1174
diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
index 109cb44291f5..fb279d6ae484 100644
--- a/drivers/net/can/c_can/c_can_platform.c
+++ b/drivers/net/can/c_can/c_can_platform.c
@@ -97,14 +97,14 @@ static void c_can_hw_raminit_ti(const struct c_can_priv *priv, bool enable)
97 ctrl |= CAN_RAMINIT_DONE_MASK(priv->instance); 97 ctrl |= CAN_RAMINIT_DONE_MASK(priv->instance);
98 writel(ctrl, priv->raminit_ctrlreg); 98 writel(ctrl, priv->raminit_ctrlreg);
99 ctrl &= ~CAN_RAMINIT_DONE_MASK(priv->instance); 99 ctrl &= ~CAN_RAMINIT_DONE_MASK(priv->instance);
100 c_can_hw_raminit_wait_ti(priv, ctrl, mask); 100 c_can_hw_raminit_wait_ti(priv, mask, ctrl);
101 101
102 if (enable) { 102 if (enable) {
103 /* Set start bit and wait for the done bit. */ 103 /* Set start bit and wait for the done bit. */
104 ctrl |= CAN_RAMINIT_START_MASK(priv->instance); 104 ctrl |= CAN_RAMINIT_START_MASK(priv->instance);
105 writel(ctrl, priv->raminit_ctrlreg); 105 writel(ctrl, priv->raminit_ctrlreg);
106 ctrl |= CAN_RAMINIT_DONE_MASK(priv->instance); 106 ctrl |= CAN_RAMINIT_DONE_MASK(priv->instance);
107 c_can_hw_raminit_wait_ti(priv, ctrl, mask); 107 c_can_hw_raminit_wait_ti(priv, mask, ctrl);
108 } 108 }
109 spin_unlock(&raminit_lock); 109 spin_unlock(&raminit_lock);
110} 110}
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index 2700865efcad..60f86bd0434a 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -62,7 +62,7 @@
62#define FLEXCAN_MCR_BCC BIT(16) 62#define FLEXCAN_MCR_BCC BIT(16)
63#define FLEXCAN_MCR_LPRIO_EN BIT(13) 63#define FLEXCAN_MCR_LPRIO_EN BIT(13)
64#define FLEXCAN_MCR_AEN BIT(12) 64#define FLEXCAN_MCR_AEN BIT(12)
65#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f) 65#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x7f)
66#define FLEXCAN_MCR_IDAM_A (0 << 8) 66#define FLEXCAN_MCR_IDAM_A (0 << 8)
67#define FLEXCAN_MCR_IDAM_B (1 << 8) 67#define FLEXCAN_MCR_IDAM_B (1 << 8)
68#define FLEXCAN_MCR_IDAM_C (2 << 8) 68#define FLEXCAN_MCR_IDAM_C (2 << 8)
@@ -146,7 +146,9 @@
146 FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT) 146 FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT)
147 147
148/* FLEXCAN interrupt flag register (IFLAG) bits */ 148/* FLEXCAN interrupt flag register (IFLAG) bits */
149#define FLEXCAN_TX_BUF_ID 8 149/* Errata ERR005829 step7: Reserve first valid MB */
150#define FLEXCAN_TX_BUF_RESERVED 8
151#define FLEXCAN_TX_BUF_ID 9
150#define FLEXCAN_IFLAG_BUF(x) BIT(x) 152#define FLEXCAN_IFLAG_BUF(x) BIT(x)
151#define FLEXCAN_IFLAG_RX_FIFO_OVERFLOW BIT(7) 153#define FLEXCAN_IFLAG_RX_FIFO_OVERFLOW BIT(7)
152#define FLEXCAN_IFLAG_RX_FIFO_WARN BIT(6) 154#define FLEXCAN_IFLAG_RX_FIFO_WARN BIT(6)
@@ -157,6 +159,17 @@
157 159
158/* FLEXCAN message buffers */ 160/* FLEXCAN message buffers */
159#define FLEXCAN_MB_CNT_CODE(x) (((x) & 0xf) << 24) 161#define FLEXCAN_MB_CNT_CODE(x) (((x) & 0xf) << 24)
162#define FLEXCAN_MB_CODE_RX_INACTIVE (0x0 << 24)
163#define FLEXCAN_MB_CODE_RX_EMPTY (0x4 << 24)
164#define FLEXCAN_MB_CODE_RX_FULL (0x2 << 24)
165#define FLEXCAN_MB_CODE_RX_OVERRRUN (0x6 << 24)
166#define FLEXCAN_MB_CODE_RX_RANSWER (0xa << 24)
167
168#define FLEXCAN_MB_CODE_TX_INACTIVE (0x8 << 24)
169#define FLEXCAN_MB_CODE_TX_ABORT (0x9 << 24)
170#define FLEXCAN_MB_CODE_TX_DATA (0xc << 24)
171#define FLEXCAN_MB_CODE_TX_TANSWER (0xe << 24)
172
160#define FLEXCAN_MB_CNT_SRR BIT(22) 173#define FLEXCAN_MB_CNT_SRR BIT(22)
161#define FLEXCAN_MB_CNT_IDE BIT(21) 174#define FLEXCAN_MB_CNT_IDE BIT(21)
162#define FLEXCAN_MB_CNT_RTR BIT(20) 175#define FLEXCAN_MB_CNT_RTR BIT(20)
@@ -333,7 +346,7 @@ static int flexcan_chip_enable(struct flexcan_priv *priv)
333 flexcan_write(reg, &regs->mcr); 346 flexcan_write(reg, &regs->mcr);
334 347
335 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 348 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK))
336 usleep_range(10, 20); 349 udelay(10);
337 350
338 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK) 351 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)
339 return -ETIMEDOUT; 352 return -ETIMEDOUT;
@@ -352,7 +365,7 @@ static int flexcan_chip_disable(struct flexcan_priv *priv)
352 flexcan_write(reg, &regs->mcr); 365 flexcan_write(reg, &regs->mcr);
353 366
354 while (timeout-- && !(flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 367 while (timeout-- && !(flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK))
355 usleep_range(10, 20); 368 udelay(10);
356 369
357 if (!(flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 370 if (!(flexcan_read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK))
358 return -ETIMEDOUT; 371 return -ETIMEDOUT;
@@ -371,7 +384,7 @@ static int flexcan_chip_freeze(struct flexcan_priv *priv)
371 flexcan_write(reg, &regs->mcr); 384 flexcan_write(reg, &regs->mcr);
372 385
373 while (timeout-- && !(flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK)) 386 while (timeout-- && !(flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK))
374 usleep_range(100, 200); 387 udelay(100);
375 388
376 if (!(flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK)) 389 if (!(flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK))
377 return -ETIMEDOUT; 390 return -ETIMEDOUT;
@@ -390,7 +403,7 @@ static int flexcan_chip_unfreeze(struct flexcan_priv *priv)
390 flexcan_write(reg, &regs->mcr); 403 flexcan_write(reg, &regs->mcr);
391 404
392 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK)) 405 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK))
393 usleep_range(10, 20); 406 udelay(10);
394 407
395 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK) 408 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_FRZ_ACK)
396 return -ETIMEDOUT; 409 return -ETIMEDOUT;
@@ -405,7 +418,7 @@ static int flexcan_chip_softreset(struct flexcan_priv *priv)
405 418
406 flexcan_write(FLEXCAN_MCR_SOFTRST, &regs->mcr); 419 flexcan_write(FLEXCAN_MCR_SOFTRST, &regs->mcr);
407 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST)) 420 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST))
408 usleep_range(10, 20); 421 udelay(10);
409 422
410 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST) 423 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST)
411 return -ETIMEDOUT; 424 return -ETIMEDOUT;
@@ -487,6 +500,14 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev)
487 flexcan_write(can_id, &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_id); 500 flexcan_write(can_id, &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_id);
488 flexcan_write(ctrl, &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); 501 flexcan_write(ctrl, &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
489 502
503 /* Errata ERR005829 step8:
504 * Write twice INACTIVE(0x8) code to first MB.
505 */
506 flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
507 &regs->cantxfg[FLEXCAN_TX_BUF_RESERVED].can_ctrl);
508 flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
509 &regs->cantxfg[FLEXCAN_TX_BUF_RESERVED].can_ctrl);
510
490 return NETDEV_TX_OK; 511 return NETDEV_TX_OK;
491} 512}
492 513
@@ -803,6 +824,9 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
803 stats->tx_bytes += can_get_echo_skb(dev, 0); 824 stats->tx_bytes += can_get_echo_skb(dev, 0);
804 stats->tx_packets++; 825 stats->tx_packets++;
805 can_led_event(dev, CAN_LED_EVENT_TX); 826 can_led_event(dev, CAN_LED_EVENT_TX);
827 /* after sending a RTR frame mailbox is in RX mode */
828 flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
829 &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
806 flexcan_write((1 << FLEXCAN_TX_BUF_ID), &regs->iflag1); 830 flexcan_write((1 << FLEXCAN_TX_BUF_ID), &regs->iflag1);
807 netif_wake_queue(dev); 831 netif_wake_queue(dev);
808 } 832 }
@@ -858,8 +882,8 @@ static int flexcan_chip_start(struct net_device *dev)
858{ 882{
859 struct flexcan_priv *priv = netdev_priv(dev); 883 struct flexcan_priv *priv = netdev_priv(dev);
860 struct flexcan_regs __iomem *regs = priv->base; 884 struct flexcan_regs __iomem *regs = priv->base;
861 int err;
862 u32 reg_mcr, reg_ctrl, reg_crl2, reg_mecr; 885 u32 reg_mcr, reg_ctrl, reg_crl2, reg_mecr;
886 int err, i;
863 887
864 /* enable module */ 888 /* enable module */
865 err = flexcan_chip_enable(priv); 889 err = flexcan_chip_enable(priv);
@@ -926,8 +950,18 @@ static int flexcan_chip_start(struct net_device *dev)
926 netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); 950 netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl);
927 flexcan_write(reg_ctrl, &regs->ctrl); 951 flexcan_write(reg_ctrl, &regs->ctrl);
928 952
929 /* Abort any pending TX, mark Mailbox as INACTIVE */ 953 /* clear and invalidate all mailboxes first */
930 flexcan_write(FLEXCAN_MB_CNT_CODE(0x4), 954 for (i = FLEXCAN_TX_BUF_ID; i < ARRAY_SIZE(regs->cantxfg); i++) {
955 flexcan_write(FLEXCAN_MB_CODE_RX_INACTIVE,
956 &regs->cantxfg[i].can_ctrl);
957 }
958
959 /* Errata ERR005829: mark first TX mailbox as INACTIVE */
960 flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
961 &regs->cantxfg[FLEXCAN_TX_BUF_RESERVED].can_ctrl);
962
963 /* mark TX mailbox as INACTIVE */
964 flexcan_write(FLEXCAN_MB_CODE_TX_INACTIVE,
931 &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); 965 &regs->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
932 966
933 /* acceptance mask/acceptance code (accept everything) */ 967 /* acceptance mask/acceptance code (accept everything) */
diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c
index 7a85590fefb9..e5fac368068a 100644
--- a/drivers/net/can/sja1000/peak_pci.c
+++ b/drivers/net/can/sja1000/peak_pci.c
@@ -70,6 +70,8 @@ struct peak_pci_chan {
70#define PEAK_PC_104P_DEVICE_ID 0x0006 /* PCAN-PC/104+ cards */ 70#define PEAK_PC_104P_DEVICE_ID 0x0006 /* PCAN-PC/104+ cards */
71#define PEAK_PCI_104E_DEVICE_ID 0x0007 /* PCAN-PCI/104 Express cards */ 71#define PEAK_PCI_104E_DEVICE_ID 0x0007 /* PCAN-PCI/104 Express cards */
72#define PEAK_MPCIE_DEVICE_ID 0x0008 /* The miniPCIe slot cards */ 72#define PEAK_MPCIE_DEVICE_ID 0x0008 /* The miniPCIe slot cards */
73#define PEAK_PCIE_OEM_ID 0x0009 /* PCAN-PCI Express OEM */
74#define PEAK_PCIEC34_DEVICE_ID 0x000A /* PCAN-PCI Express 34 (one channel) */
73 75
74#define PEAK_PCI_CHAN_MAX 4 76#define PEAK_PCI_CHAN_MAX 4
75 77
@@ -87,6 +89,7 @@ static const struct pci_device_id peak_pci_tbl[] = {
87 {PEAK_PCI_VENDOR_ID, PEAK_CPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,}, 89 {PEAK_PCI_VENDOR_ID, PEAK_CPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
88#ifdef CONFIG_CAN_PEAK_PCIEC 90#ifdef CONFIG_CAN_PEAK_PCIEC
89 {PEAK_PCI_VENDOR_ID, PEAK_PCIEC_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,}, 91 {PEAK_PCI_VENDOR_ID, PEAK_PCIEC_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
92 {PEAK_PCI_VENDOR_ID, PEAK_PCIEC34_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
90#endif 93#endif
91 {0,} 94 {0,}
92}; 95};
@@ -653,7 +656,8 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
653 * This must be done *before* register_sja1000dev() but 656 * This must be done *before* register_sja1000dev() but
654 * *after* devices linkage 657 * *after* devices linkage
655 */ 658 */
656 if (pdev->device == PEAK_PCIEC_DEVICE_ID) { 659 if (pdev->device == PEAK_PCIEC_DEVICE_ID ||
660 pdev->device == PEAK_PCIEC34_DEVICE_ID) {
657 err = peak_pciec_probe(pdev, dev); 661 err = peak_pciec_probe(pdev, dev);
658 if (err) { 662 if (err) {
659 dev_err(&pdev->dev, 663 dev_err(&pdev->dev,
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 2b92d712f212..86e621142d5b 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -2128,6 +2128,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
2128 int entry = vp->cur_tx % TX_RING_SIZE; 2128 int entry = vp->cur_tx % TX_RING_SIZE;
2129 struct boom_tx_desc *prev_entry = &vp->tx_ring[(vp->cur_tx-1) % TX_RING_SIZE]; 2129 struct boom_tx_desc *prev_entry = &vp->tx_ring[(vp->cur_tx-1) % TX_RING_SIZE];
2130 unsigned long flags; 2130 unsigned long flags;
2131 dma_addr_t dma_addr;
2131 2132
2132 if (vortex_debug > 6) { 2133 if (vortex_debug > 6) {
2133 pr_debug("boomerang_start_xmit()\n"); 2134 pr_debug("boomerang_start_xmit()\n");
@@ -2162,24 +2163,48 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
2162 vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded | AddTCPChksum | AddUDPChksum); 2163 vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded | AddTCPChksum | AddUDPChksum);
2163 2164
2164 if (!skb_shinfo(skb)->nr_frags) { 2165 if (!skb_shinfo(skb)->nr_frags) {
2165 vp->tx_ring[entry].frag[0].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, 2166 dma_addr = pci_map_single(VORTEX_PCI(vp), skb->data, skb->len,
2166 skb->len, PCI_DMA_TODEVICE)); 2167 PCI_DMA_TODEVICE);
2168 if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
2169 goto out_dma_err;
2170
2171 vp->tx_ring[entry].frag[0].addr = cpu_to_le32(dma_addr);
2167 vp->tx_ring[entry].frag[0].length = cpu_to_le32(skb->len | LAST_FRAG); 2172 vp->tx_ring[entry].frag[0].length = cpu_to_le32(skb->len | LAST_FRAG);
2168 } else { 2173 } else {
2169 int i; 2174 int i;
2170 2175
2171 vp->tx_ring[entry].frag[0].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, 2176 dma_addr = pci_map_single(VORTEX_PCI(vp), skb->data,
2172 skb_headlen(skb), PCI_DMA_TODEVICE)); 2177 skb_headlen(skb), PCI_DMA_TODEVICE);
2178 if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
2179 goto out_dma_err;
2180
2181 vp->tx_ring[entry].frag[0].addr = cpu_to_le32(dma_addr);
2173 vp->tx_ring[entry].frag[0].length = cpu_to_le32(skb_headlen(skb)); 2182 vp->tx_ring[entry].frag[0].length = cpu_to_le32(skb_headlen(skb));
2174 2183
2175 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 2184 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2176 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 2185 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2177 2186
2187 dma_addr = skb_frag_dma_map(&VORTEX_PCI(vp)->dev, frag,
2188 0,
2189 frag->size,
2190 DMA_TO_DEVICE);
2191 if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr)) {
2192 for(i = i-1; i >= 0; i--)
2193 dma_unmap_page(&VORTEX_PCI(vp)->dev,
2194 le32_to_cpu(vp->tx_ring[entry].frag[i+1].addr),
2195 le32_to_cpu(vp->tx_ring[entry].frag[i+1].length),
2196 DMA_TO_DEVICE);
2197
2198 pci_unmap_single(VORTEX_PCI(vp),
2199 le32_to_cpu(vp->tx_ring[entry].frag[0].addr),
2200 le32_to_cpu(vp->tx_ring[entry].frag[0].length),
2201 PCI_DMA_TODEVICE);
2202
2203 goto out_dma_err;
2204 }
2205
2178 vp->tx_ring[entry].frag[i+1].addr = 2206 vp->tx_ring[entry].frag[i+1].addr =
2179 cpu_to_le32(skb_frag_dma_map( 2207 cpu_to_le32(dma_addr);
2180 &VORTEX_PCI(vp)->dev,
2181 frag,
2182 frag->page_offset, frag->size, DMA_TO_DEVICE));
2183 2208
2184 if (i == skb_shinfo(skb)->nr_frags-1) 2209 if (i == skb_shinfo(skb)->nr_frags-1)
2185 vp->tx_ring[entry].frag[i+1].length = cpu_to_le32(skb_frag_size(frag)|LAST_FRAG); 2210 vp->tx_ring[entry].frag[i+1].length = cpu_to_le32(skb_frag_size(frag)|LAST_FRAG);
@@ -2188,7 +2213,10 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
2188 } 2213 }
2189 } 2214 }
2190#else 2215#else
2191 vp->tx_ring[entry].addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE)); 2216 dma_addr = cpu_to_le32(pci_map_single(VORTEX_PCI(vp), skb->data, skb->len, PCI_DMA_TODEVICE));
2217 if (dma_mapping_error(&VORTEX_PCI(vp)->dev, dma_addr))
2218 goto out_dma_err;
2219 vp->tx_ring[entry].addr = cpu_to_le32(dma_addr);
2192 vp->tx_ring[entry].length = cpu_to_le32(skb->len | LAST_FRAG); 2220 vp->tx_ring[entry].length = cpu_to_le32(skb->len | LAST_FRAG);
2193 vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded); 2221 vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded);
2194#endif 2222#endif
@@ -2216,7 +2244,11 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
2216 skb_tx_timestamp(skb); 2244 skb_tx_timestamp(skb);
2217 iowrite16(DownUnstall, ioaddr + EL3_CMD); 2245 iowrite16(DownUnstall, ioaddr + EL3_CMD);
2218 spin_unlock_irqrestore(&vp->lock, flags); 2246 spin_unlock_irqrestore(&vp->lock, flags);
2247out:
2219 return NETDEV_TX_OK; 2248 return NETDEV_TX_OK;
2249out_dma_err:
2250 dev_err(&VORTEX_PCI(vp)->dev, "Error mapping dma buffer\n");
2251 goto out;
2220} 2252}
2221 2253
2222/* The interrupt handler does all of the Rx thread work and cleans up 2254/* The interrupt handler does all of the Rx thread work and cleans up
diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c
index dbea8472bfb4..abe1eabc0171 100644
--- a/drivers/net/ethernet/arc/emac_main.c
+++ b/drivers/net/ethernet/arc/emac_main.c
@@ -28,6 +28,17 @@
28 28
29 29
30/** 30/**
31 * arc_emac_tx_avail - Return the number of available slots in the tx ring.
32 * @priv: Pointer to ARC EMAC private data structure.
33 *
34 * returns: the number of slots available for transmission in tx the ring.
35 */
36static inline int arc_emac_tx_avail(struct arc_emac_priv *priv)
37{
38 return (priv->txbd_dirty + TX_BD_NUM - priv->txbd_curr - 1) % TX_BD_NUM;
39}
40
41/**
31 * arc_emac_adjust_link - Adjust the PHY link duplex. 42 * arc_emac_adjust_link - Adjust the PHY link duplex.
32 * @ndev: Pointer to the net_device structure. 43 * @ndev: Pointer to the net_device structure.
33 * 44 *
@@ -182,10 +193,15 @@ static void arc_emac_tx_clean(struct net_device *ndev)
182 txbd->info = 0; 193 txbd->info = 0;
183 194
184 *txbd_dirty = (*txbd_dirty + 1) % TX_BD_NUM; 195 *txbd_dirty = (*txbd_dirty + 1) % TX_BD_NUM;
185
186 if (netif_queue_stopped(ndev))
187 netif_wake_queue(ndev);
188 } 196 }
197
198 /* Ensure that txbd_dirty is visible to tx() before checking
199 * for queue stopped.
200 */
201 smp_mb();
202
203 if (netif_queue_stopped(ndev) && arc_emac_tx_avail(priv))
204 netif_wake_queue(ndev);
189} 205}
190 206
191/** 207/**
@@ -300,7 +316,7 @@ static int arc_emac_poll(struct napi_struct *napi, int budget)
300 work_done = arc_emac_rx(ndev, budget); 316 work_done = arc_emac_rx(ndev, budget);
301 if (work_done < budget) { 317 if (work_done < budget) {
302 napi_complete(napi); 318 napi_complete(napi);
303 arc_reg_or(priv, R_ENABLE, RXINT_MASK); 319 arc_reg_or(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
304 } 320 }
305 321
306 return work_done; 322 return work_done;
@@ -329,9 +345,9 @@ static irqreturn_t arc_emac_intr(int irq, void *dev_instance)
329 /* Reset all flags except "MDIO complete" */ 345 /* Reset all flags except "MDIO complete" */
330 arc_reg_set(priv, R_STATUS, status); 346 arc_reg_set(priv, R_STATUS, status);
331 347
332 if (status & RXINT_MASK) { 348 if (status & (RXINT_MASK | TXINT_MASK)) {
333 if (likely(napi_schedule_prep(&priv->napi))) { 349 if (likely(napi_schedule_prep(&priv->napi))) {
334 arc_reg_clr(priv, R_ENABLE, RXINT_MASK); 350 arc_reg_clr(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
335 __napi_schedule(&priv->napi); 351 __napi_schedule(&priv->napi);
336 } 352 }
337 } 353 }
@@ -442,7 +458,7 @@ static int arc_emac_open(struct net_device *ndev)
442 arc_reg_set(priv, R_TX_RING, (unsigned int)priv->txbd_dma); 458 arc_reg_set(priv, R_TX_RING, (unsigned int)priv->txbd_dma);
443 459
444 /* Enable interrupts */ 460 /* Enable interrupts */
445 arc_reg_set(priv, R_ENABLE, RXINT_MASK | ERR_MASK); 461 arc_reg_set(priv, R_ENABLE, RXINT_MASK | TXINT_MASK | ERR_MASK);
446 462
447 /* Set CONTROL */ 463 /* Set CONTROL */
448 arc_reg_set(priv, R_CTRL, 464 arc_reg_set(priv, R_CTRL,
@@ -513,7 +529,7 @@ static int arc_emac_stop(struct net_device *ndev)
513 netif_stop_queue(ndev); 529 netif_stop_queue(ndev);
514 530
515 /* Disable interrupts */ 531 /* Disable interrupts */
516 arc_reg_clr(priv, R_ENABLE, RXINT_MASK | ERR_MASK); 532 arc_reg_clr(priv, R_ENABLE, RXINT_MASK | TXINT_MASK | ERR_MASK);
517 533
518 /* Disable EMAC */ 534 /* Disable EMAC */
519 arc_reg_clr(priv, R_CTRL, EN_MASK); 535 arc_reg_clr(priv, R_CTRL, EN_MASK);
@@ -576,11 +592,9 @@ static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)
576 592
577 len = max_t(unsigned int, ETH_ZLEN, skb->len); 593 len = max_t(unsigned int, ETH_ZLEN, skb->len);
578 594
579 /* EMAC still holds this buffer in its possession. 595 if (unlikely(!arc_emac_tx_avail(priv))) {
580 * CPU must not modify this buffer descriptor
581 */
582 if (unlikely((le32_to_cpu(*info) & OWN_MASK) == FOR_EMAC)) {
583 netif_stop_queue(ndev); 596 netif_stop_queue(ndev);
597 netdev_err(ndev, "BUG! Tx Ring full when queue awake!\n");
584 return NETDEV_TX_BUSY; 598 return NETDEV_TX_BUSY;
585 } 599 }
586 600
@@ -609,12 +623,19 @@ static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)
609 /* Increment index to point to the next BD */ 623 /* Increment index to point to the next BD */
610 *txbd_curr = (*txbd_curr + 1) % TX_BD_NUM; 624 *txbd_curr = (*txbd_curr + 1) % TX_BD_NUM;
611 625
612 /* Get "info" of the next BD */ 626 /* Ensure that tx_clean() sees the new txbd_curr before
613 info = &priv->txbd[*txbd_curr].info; 627 * checking the queue status. This prevents an unneeded wake
628 * of the queue in tx_clean().
629 */
630 smp_mb();
614 631
615 /* Check if if Tx BD ring is full - next BD is still owned by EMAC */ 632 if (!arc_emac_tx_avail(priv)) {
616 if (unlikely((le32_to_cpu(*info) & OWN_MASK) == FOR_EMAC))
617 netif_stop_queue(ndev); 633 netif_stop_queue(ndev);
634 /* Refresh tx_dirty */
635 smp_mb();
636 if (arc_emac_tx_avail(priv))
637 netif_start_queue(ndev);
638 }
618 639
619 arc_reg_set(priv, R_STATUS, TXPL_MASK); 640 arc_reg_set(priv, R_STATUS, TXPL_MASK);
620 641
diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c
index 56fadbd4258a..416620fa8fac 100644
--- a/drivers/net/ethernet/broadcom/b44.c
+++ b/drivers/net/ethernet/broadcom/b44.c
@@ -1697,7 +1697,7 @@ static struct rtnl_link_stats64 *b44_get_stats64(struct net_device *dev,
1697 hwstat->tx_underruns + 1697 hwstat->tx_underruns +
1698 hwstat->tx_excessive_cols + 1698 hwstat->tx_excessive_cols +
1699 hwstat->tx_late_cols); 1699 hwstat->tx_late_cols);
1700 nstat->multicast = hwstat->tx_multicast_pkts; 1700 nstat->multicast = hwstat->rx_multicast_pkts;
1701 nstat->collisions = hwstat->tx_total_cols; 1701 nstat->collisions = hwstat->tx_total_cols;
1702 1702
1703 nstat->rx_length_errors = (hwstat->rx_oversize_pkts + 1703 nstat->rx_length_errors = (hwstat->rx_oversize_pkts +
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index 662cf2222873..77f1ff7396ac 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -543,6 +543,25 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv,
543 while ((processed < to_process) && (processed < budget)) { 543 while ((processed < to_process) && (processed < budget)) {
544 cb = &priv->rx_cbs[priv->rx_read_ptr]; 544 cb = &priv->rx_cbs[priv->rx_read_ptr];
545 skb = cb->skb; 545 skb = cb->skb;
546
547 processed++;
548 priv->rx_read_ptr++;
549
550 if (priv->rx_read_ptr == priv->num_rx_bds)
551 priv->rx_read_ptr = 0;
552
553 /* We do not have a backing SKB, so we do not a corresponding
554 * DMA mapping for this incoming packet since
555 * bcm_sysport_rx_refill always either has both skb and mapping
556 * or none.
557 */
558 if (unlikely(!skb)) {
559 netif_err(priv, rx_err, ndev, "out of memory!\n");
560 ndev->stats.rx_dropped++;
561 ndev->stats.rx_errors++;
562 goto refill;
563 }
564
546 dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr), 565 dma_unmap_single(kdev, dma_unmap_addr(cb, dma_addr),
547 RX_BUF_LENGTH, DMA_FROM_DEVICE); 566 RX_BUF_LENGTH, DMA_FROM_DEVICE);
548 567
@@ -552,23 +571,11 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv,
552 status = (rsb->rx_status_len >> DESC_STATUS_SHIFT) & 571 status = (rsb->rx_status_len >> DESC_STATUS_SHIFT) &
553 DESC_STATUS_MASK; 572 DESC_STATUS_MASK;
554 573
555 processed++;
556 priv->rx_read_ptr++;
557 if (priv->rx_read_ptr == priv->num_rx_bds)
558 priv->rx_read_ptr = 0;
559
560 netif_dbg(priv, rx_status, ndev, 574 netif_dbg(priv, rx_status, ndev,
561 "p=%d, c=%d, rd_ptr=%d, len=%d, flag=0x%04x\n", 575 "p=%d, c=%d, rd_ptr=%d, len=%d, flag=0x%04x\n",
562 p_index, priv->rx_c_index, priv->rx_read_ptr, 576 p_index, priv->rx_c_index, priv->rx_read_ptr,
563 len, status); 577 len, status);
564 578
565 if (unlikely(!skb)) {
566 netif_err(priv, rx_err, ndev, "out of memory!\n");
567 ndev->stats.rx_dropped++;
568 ndev->stats.rx_errors++;
569 goto refill;
570 }
571
572 if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) { 579 if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) {
573 netif_err(priv, rx_status, ndev, "fragmented packet!\n"); 580 netif_err(priv, rx_status, ndev, "fragmented packet!\n");
574 ndev->stats.rx_dropped++; 581 ndev->stats.rx_dropped++;
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index a12c65604f9d..e8c601d26c64 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -875,6 +875,7 @@ static void __bcmgenet_tx_reclaim(struct net_device *dev,
875 int last_tx_cn, last_c_index, num_tx_bds; 875 int last_tx_cn, last_c_index, num_tx_bds;
876 struct enet_cb *tx_cb_ptr; 876 struct enet_cb *tx_cb_ptr;
877 struct netdev_queue *txq; 877 struct netdev_queue *txq;
878 unsigned int bds_compl;
878 unsigned int c_index; 879 unsigned int c_index;
879 880
880 /* Compute how many buffers are transmitted since last xmit call */ 881 /* Compute how many buffers are transmitted since last xmit call */
@@ -899,7 +900,9 @@ static void __bcmgenet_tx_reclaim(struct net_device *dev,
899 /* Reclaim transmitted buffers */ 900 /* Reclaim transmitted buffers */
900 while (last_tx_cn-- > 0) { 901 while (last_tx_cn-- > 0) {
901 tx_cb_ptr = ring->cbs + last_c_index; 902 tx_cb_ptr = ring->cbs + last_c_index;
903 bds_compl = 0;
902 if (tx_cb_ptr->skb) { 904 if (tx_cb_ptr->skb) {
905 bds_compl = skb_shinfo(tx_cb_ptr->skb)->nr_frags + 1;
903 dev->stats.tx_bytes += tx_cb_ptr->skb->len; 906 dev->stats.tx_bytes += tx_cb_ptr->skb->len;
904 dma_unmap_single(&dev->dev, 907 dma_unmap_single(&dev->dev,
905 dma_unmap_addr(tx_cb_ptr, dma_addr), 908 dma_unmap_addr(tx_cb_ptr, dma_addr),
@@ -916,7 +919,7 @@ static void __bcmgenet_tx_reclaim(struct net_device *dev,
916 dma_unmap_addr_set(tx_cb_ptr, dma_addr, 0); 919 dma_unmap_addr_set(tx_cb_ptr, dma_addr, 0);
917 } 920 }
918 dev->stats.tx_packets++; 921 dev->stats.tx_packets++;
919 ring->free_bds += 1; 922 ring->free_bds += bds_compl;
920 923
921 last_c_index++; 924 last_c_index++;
922 last_c_index &= (num_tx_bds - 1); 925 last_c_index &= (num_tx_bds - 1);
@@ -1274,12 +1277,29 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_priv *priv,
1274 1277
1275 while ((rxpktprocessed < rxpkttoprocess) && 1278 while ((rxpktprocessed < rxpkttoprocess) &&
1276 (rxpktprocessed < budget)) { 1279 (rxpktprocessed < budget)) {
1280 cb = &priv->rx_cbs[priv->rx_read_ptr];
1281 skb = cb->skb;
1282
1283 rxpktprocessed++;
1284
1285 priv->rx_read_ptr++;
1286 priv->rx_read_ptr &= (priv->num_rx_bds - 1);
1287
1288 /* We do not have a backing SKB, so we do not have a
1289 * corresponding DMA mapping for this incoming packet since
1290 * bcmgenet_rx_refill always either has both skb and mapping or
1291 * none.
1292 */
1293 if (unlikely(!skb)) {
1294 dev->stats.rx_dropped++;
1295 dev->stats.rx_errors++;
1296 goto refill;
1297 }
1298
1277 /* Unmap the packet contents such that we can use the 1299 /* Unmap the packet contents such that we can use the
1278 * RSV from the 64 bytes descriptor when enabled and save 1300 * RSV from the 64 bytes descriptor when enabled and save
1279 * a 32-bits register read 1301 * a 32-bits register read
1280 */ 1302 */
1281 cb = &priv->rx_cbs[priv->rx_read_ptr];
1282 skb = cb->skb;
1283 dma_unmap_single(&dev->dev, dma_unmap_addr(cb, dma_addr), 1303 dma_unmap_single(&dev->dev, dma_unmap_addr(cb, dma_addr),
1284 priv->rx_buf_len, DMA_FROM_DEVICE); 1304 priv->rx_buf_len, DMA_FROM_DEVICE);
1285 1305
@@ -1307,18 +1327,6 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_priv *priv,
1307 __func__, p_index, priv->rx_c_index, 1327 __func__, p_index, priv->rx_c_index,
1308 priv->rx_read_ptr, dma_length_status); 1328 priv->rx_read_ptr, dma_length_status);
1309 1329
1310 rxpktprocessed++;
1311
1312 priv->rx_read_ptr++;
1313 priv->rx_read_ptr &= (priv->num_rx_bds - 1);
1314
1315 /* out of memory, just drop packets at the hardware level */
1316 if (unlikely(!skb)) {
1317 dev->stats.rx_dropped++;
1318 dev->stats.rx_errors++;
1319 goto refill;
1320 }
1321
1322 if (unlikely(!(dma_flag & DMA_EOP) || !(dma_flag & DMA_SOP))) { 1330 if (unlikely(!(dma_flag & DMA_EOP) || !(dma_flag & DMA_SOP))) {
1323 netif_err(priv, rx_status, dev, 1331 netif_err(priv, rx_status, dev,
1324 "dropping fragmented packet!\n"); 1332 "dropping fragmented packet!\n");
@@ -1736,13 +1744,63 @@ static void bcmgenet_init_multiq(struct net_device *dev)
1736 bcmgenet_tdma_writel(priv, reg, DMA_CTRL); 1744 bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
1737} 1745}
1738 1746
1747static int bcmgenet_dma_teardown(struct bcmgenet_priv *priv)
1748{
1749 int ret = 0;
1750 int timeout = 0;
1751 u32 reg;
1752
1753 /* Disable TDMA to stop add more frames in TX DMA */
1754 reg = bcmgenet_tdma_readl(priv, DMA_CTRL);
1755 reg &= ~DMA_EN;
1756 bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
1757
1758 /* Check TDMA status register to confirm TDMA is disabled */
1759 while (timeout++ < DMA_TIMEOUT_VAL) {
1760 reg = bcmgenet_tdma_readl(priv, DMA_STATUS);
1761 if (reg & DMA_DISABLED)
1762 break;
1763
1764 udelay(1);
1765 }
1766
1767 if (timeout == DMA_TIMEOUT_VAL) {
1768 netdev_warn(priv->dev, "Timed out while disabling TX DMA\n");
1769 ret = -ETIMEDOUT;
1770 }
1771
1772 /* Wait 10ms for packet drain in both tx and rx dma */
1773 usleep_range(10000, 20000);
1774
1775 /* Disable RDMA */
1776 reg = bcmgenet_rdma_readl(priv, DMA_CTRL);
1777 reg &= ~DMA_EN;
1778 bcmgenet_rdma_writel(priv, reg, DMA_CTRL);
1779
1780 timeout = 0;
1781 /* Check RDMA status register to confirm RDMA is disabled */
1782 while (timeout++ < DMA_TIMEOUT_VAL) {
1783 reg = bcmgenet_rdma_readl(priv, DMA_STATUS);
1784 if (reg & DMA_DISABLED)
1785 break;
1786
1787 udelay(1);
1788 }
1789
1790 if (timeout == DMA_TIMEOUT_VAL) {
1791 netdev_warn(priv->dev, "Timed out while disabling RX DMA\n");
1792 ret = -ETIMEDOUT;
1793 }
1794
1795 return ret;
1796}
1797
1739static void bcmgenet_fini_dma(struct bcmgenet_priv *priv) 1798static void bcmgenet_fini_dma(struct bcmgenet_priv *priv)
1740{ 1799{
1741 int i; 1800 int i;
1742 1801
1743 /* disable DMA */ 1802 /* disable DMA */
1744 bcmgenet_rdma_writel(priv, 0, DMA_CTRL); 1803 bcmgenet_dma_teardown(priv);
1745 bcmgenet_tdma_writel(priv, 0, DMA_CTRL);
1746 1804
1747 for (i = 0; i < priv->num_tx_bds; i++) { 1805 for (i = 0; i < priv->num_tx_bds; i++) {
1748 if (priv->tx_cbs[i].skb != NULL) { 1806 if (priv->tx_cbs[i].skb != NULL) {
@@ -2101,57 +2159,6 @@ err_clk_disable:
2101 return ret; 2159 return ret;
2102} 2160}
2103 2161
2104static int bcmgenet_dma_teardown(struct bcmgenet_priv *priv)
2105{
2106 int ret = 0;
2107 int timeout = 0;
2108 u32 reg;
2109
2110 /* Disable TDMA to stop add more frames in TX DMA */
2111 reg = bcmgenet_tdma_readl(priv, DMA_CTRL);
2112 reg &= ~DMA_EN;
2113 bcmgenet_tdma_writel(priv, reg, DMA_CTRL);
2114
2115 /* Check TDMA status register to confirm TDMA is disabled */
2116 while (timeout++ < DMA_TIMEOUT_VAL) {
2117 reg = bcmgenet_tdma_readl(priv, DMA_STATUS);
2118 if (reg & DMA_DISABLED)
2119 break;
2120
2121 udelay(1);
2122 }
2123
2124 if (timeout == DMA_TIMEOUT_VAL) {
2125 netdev_warn(priv->dev, "Timed out while disabling TX DMA\n");
2126 ret = -ETIMEDOUT;
2127 }
2128
2129 /* Wait 10ms for packet drain in both tx and rx dma */
2130 usleep_range(10000, 20000);
2131
2132 /* Disable RDMA */
2133 reg = bcmgenet_rdma_readl(priv, DMA_CTRL);
2134 reg &= ~DMA_EN;
2135 bcmgenet_rdma_writel(priv, reg, DMA_CTRL);
2136
2137 timeout = 0;
2138 /* Check RDMA status register to confirm RDMA is disabled */
2139 while (timeout++ < DMA_TIMEOUT_VAL) {
2140 reg = bcmgenet_rdma_readl(priv, DMA_STATUS);
2141 if (reg & DMA_DISABLED)
2142 break;
2143
2144 udelay(1);
2145 }
2146
2147 if (timeout == DMA_TIMEOUT_VAL) {
2148 netdev_warn(priv->dev, "Timed out while disabling RX DMA\n");
2149 ret = -ETIMEDOUT;
2150 }
2151
2152 return ret;
2153}
2154
2155static void bcmgenet_netif_stop(struct net_device *dev) 2162static void bcmgenet_netif_stop(struct net_device *dev)
2156{ 2163{
2157 struct bcmgenet_priv *priv = netdev_priv(dev); 2164 struct bcmgenet_priv *priv = netdev_priv(dev);
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index cb77ae93d89a..e7d3a620d96a 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -7914,8 +7914,6 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7914 7914
7915 entry = tnapi->tx_prod; 7915 entry = tnapi->tx_prod;
7916 base_flags = 0; 7916 base_flags = 0;
7917 if (skb->ip_summed == CHECKSUM_PARTIAL)
7918 base_flags |= TXD_FLAG_TCPUDP_CSUM;
7919 7917
7920 mss = skb_shinfo(skb)->gso_size; 7918 mss = skb_shinfo(skb)->gso_size;
7921 if (mss) { 7919 if (mss) {
@@ -7929,6 +7927,13 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7929 7927
7930 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 7928 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7931 7929
7930 /* HW/FW can not correctly segment packets that have been
7931 * vlan encapsulated.
7932 */
7933 if (skb->protocol == htons(ETH_P_8021Q) ||
7934 skb->protocol == htons(ETH_P_8021AD))
7935 return tg3_tso_bug(tp, tnapi, txq, skb);
7936
7932 if (!skb_is_gso_v6(skb)) { 7937 if (!skb_is_gso_v6(skb)) {
7933 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7938 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7934 tg3_flag(tp, TSO_BUG)) 7939 tg3_flag(tp, TSO_BUG))
@@ -7979,6 +7984,17 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7979 base_flags |= tsflags << 12; 7984 base_flags |= tsflags << 12;
7980 } 7985 }
7981 } 7986 }
7987 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
7988 /* HW/FW can not correctly checksum packets that have been
7989 * vlan encapsulated.
7990 */
7991 if (skb->protocol == htons(ETH_P_8021Q) ||
7992 skb->protocol == htons(ETH_P_8021AD)) {
7993 if (skb_checksum_help(skb))
7994 goto drop;
7995 } else {
7996 base_flags |= TXD_FLAG_TCPUDP_CSUM;
7997 }
7982 } 7998 }
7983 7999
7984 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 8000 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index f56b95af3fcf..eeec49540233 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -6478,6 +6478,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6478 struct port_info *pi; 6478 struct port_info *pi;
6479 bool highdma = false; 6479 bool highdma = false;
6480 struct adapter *adapter = NULL; 6480 struct adapter *adapter = NULL;
6481 void __iomem *regs;
6481 6482
6482 printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION); 6483 printk_once(KERN_INFO "%s - version %s\n", DRV_DESC, DRV_VERSION);
6483 6484
@@ -6494,19 +6495,35 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6494 goto out_release_regions; 6495 goto out_release_regions;
6495 } 6496 }
6496 6497
6498 regs = pci_ioremap_bar(pdev, 0);
6499 if (!regs) {
6500 dev_err(&pdev->dev, "cannot map device registers\n");
6501 err = -ENOMEM;
6502 goto out_disable_device;
6503 }
6504
6505 /* We control everything through one PF */
6506 func = SOURCEPF_GET(readl(regs + PL_WHOAMI));
6507 if (func != ent->driver_data) {
6508 iounmap(regs);
6509 pci_disable_device(pdev);
6510 pci_save_state(pdev); /* to restore SR-IOV later */
6511 goto sriov;
6512 }
6513
6497 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { 6514 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
6498 highdma = true; 6515 highdma = true;
6499 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); 6516 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
6500 if (err) { 6517 if (err) {
6501 dev_err(&pdev->dev, "unable to obtain 64-bit DMA for " 6518 dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
6502 "coherent allocations\n"); 6519 "coherent allocations\n");
6503 goto out_disable_device; 6520 goto out_unmap_bar0;
6504 } 6521 }
6505 } else { 6522 } else {
6506 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 6523 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
6507 if (err) { 6524 if (err) {
6508 dev_err(&pdev->dev, "no usable DMA configuration\n"); 6525 dev_err(&pdev->dev, "no usable DMA configuration\n");
6509 goto out_disable_device; 6526 goto out_unmap_bar0;
6510 } 6527 }
6511 } 6528 }
6512 6529
@@ -6518,7 +6535,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6518 adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); 6535 adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
6519 if (!adapter) { 6536 if (!adapter) {
6520 err = -ENOMEM; 6537 err = -ENOMEM;
6521 goto out_disable_device; 6538 goto out_unmap_bar0;
6522 } 6539 }
6523 6540
6524 adapter->workq = create_singlethread_workqueue("cxgb4"); 6541 adapter->workq = create_singlethread_workqueue("cxgb4");
@@ -6530,20 +6547,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6530 /* PCI device has been enabled */ 6547 /* PCI device has been enabled */
6531 adapter->flags |= DEV_ENABLED; 6548 adapter->flags |= DEV_ENABLED;
6532 6549
6533 adapter->regs = pci_ioremap_bar(pdev, 0); 6550 adapter->regs = regs;
6534 if (!adapter->regs) {
6535 dev_err(&pdev->dev, "cannot map device registers\n");
6536 err = -ENOMEM;
6537 goto out_free_adapter;
6538 }
6539
6540 /* We control everything through one PF */
6541 func = SOURCEPF_GET(readl(adapter->regs + PL_WHOAMI));
6542 if (func != ent->driver_data) {
6543 pci_save_state(pdev); /* to restore SR-IOV later */
6544 goto sriov;
6545 }
6546
6547 adapter->pdev = pdev; 6551 adapter->pdev = pdev;
6548 adapter->pdev_dev = &pdev->dev; 6552 adapter->pdev_dev = &pdev->dev;
6549 adapter->mbox = func; 6553 adapter->mbox = func;
@@ -6560,7 +6564,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6560 6564
6561 err = t4_prep_adapter(adapter); 6565 err = t4_prep_adapter(adapter);
6562 if (err) 6566 if (err)
6563 goto out_unmap_bar0; 6567 goto out_free_adapter;
6568
6564 6569
6565 if (!is_t4(adapter->params.chip)) { 6570 if (!is_t4(adapter->params.chip)) {
6566 s_qpp = QUEUESPERPAGEPF1 * adapter->fn; 6571 s_qpp = QUEUESPERPAGEPF1 * adapter->fn;
@@ -6577,14 +6582,14 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6577 dev_err(&pdev->dev, 6582 dev_err(&pdev->dev,
6578 "Incorrect number of egress queues per page\n"); 6583 "Incorrect number of egress queues per page\n");
6579 err = -EINVAL; 6584 err = -EINVAL;
6580 goto out_unmap_bar0; 6585 goto out_free_adapter;
6581 } 6586 }
6582 adapter->bar2 = ioremap_wc(pci_resource_start(pdev, 2), 6587 adapter->bar2 = ioremap_wc(pci_resource_start(pdev, 2),
6583 pci_resource_len(pdev, 2)); 6588 pci_resource_len(pdev, 2));
6584 if (!adapter->bar2) { 6589 if (!adapter->bar2) {
6585 dev_err(&pdev->dev, "cannot map device bar2 region\n"); 6590 dev_err(&pdev->dev, "cannot map device bar2 region\n");
6586 err = -ENOMEM; 6591 err = -ENOMEM;
6587 goto out_unmap_bar0; 6592 goto out_free_adapter;
6588 } 6593 }
6589 } 6594 }
6590 6595
@@ -6722,13 +6727,13 @@ sriov:
6722 out_unmap_bar: 6727 out_unmap_bar:
6723 if (!is_t4(adapter->params.chip)) 6728 if (!is_t4(adapter->params.chip))
6724 iounmap(adapter->bar2); 6729 iounmap(adapter->bar2);
6725 out_unmap_bar0:
6726 iounmap(adapter->regs);
6727 out_free_adapter: 6730 out_free_adapter:
6728 if (adapter->workq) 6731 if (adapter->workq)
6729 destroy_workqueue(adapter->workq); 6732 destroy_workqueue(adapter->workq);
6730 6733
6731 kfree(adapter); 6734 kfree(adapter);
6735 out_unmap_bar0:
6736 iounmap(regs);
6732 out_disable_device: 6737 out_disable_device:
6733 pci_disable_pcie_error_reporting(pdev); 6738 pci_disable_pcie_error_reporting(pdev);
6734 pci_disable_device(pdev); 6739 pci_disable_device(pdev);
diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c
index 9b33057a9477..70089c29d307 100644
--- a/drivers/net/ethernet/davicom/dm9000.c
+++ b/drivers/net/ethernet/davicom/dm9000.c
@@ -1399,7 +1399,7 @@ static struct dm9000_plat_data *dm9000_parse_dt(struct device *dev)
1399 const void *mac_addr; 1399 const void *mac_addr;
1400 1400
1401 if (!IS_ENABLED(CONFIG_OF) || !np) 1401 if (!IS_ENABLED(CONFIG_OF) || !np)
1402 return NULL; 1402 return ERR_PTR(-ENXIO);
1403 1403
1404 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); 1404 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
1405 if (!pdata) 1405 if (!pdata)
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index 65a4a0f88ea0..02a2e90d581a 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -2389,6 +2389,22 @@ struct mlx4_slaves_pport mlx4_phys_to_slaves_pport_actv(
2389} 2389}
2390EXPORT_SYMBOL_GPL(mlx4_phys_to_slaves_pport_actv); 2390EXPORT_SYMBOL_GPL(mlx4_phys_to_slaves_pport_actv);
2391 2391
2392static int mlx4_slaves_closest_port(struct mlx4_dev *dev, int slave, int port)
2393{
2394 struct mlx4_active_ports actv_ports = mlx4_get_active_ports(dev, slave);
2395 int min_port = find_first_bit(actv_ports.ports, dev->caps.num_ports)
2396 + 1;
2397 int max_port = min_port +
2398 bitmap_weight(actv_ports.ports, dev->caps.num_ports);
2399
2400 if (port < min_port)
2401 port = min_port;
2402 else if (port >= max_port)
2403 port = max_port - 1;
2404
2405 return port;
2406}
2407
2392int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac) 2408int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac)
2393{ 2409{
2394 struct mlx4_priv *priv = mlx4_priv(dev); 2410 struct mlx4_priv *priv = mlx4_priv(dev);
@@ -2402,6 +2418,7 @@ int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac)
2402 if (slave < 0) 2418 if (slave < 0)
2403 return -EINVAL; 2419 return -EINVAL;
2404 2420
2421 port = mlx4_slaves_closest_port(dev, slave, port);
2405 s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; 2422 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
2406 s_info->mac = mac; 2423 s_info->mac = mac;
2407 mlx4_info(dev, "default mac on vf %d port %d to %llX will take afect only after vf restart\n", 2424 mlx4_info(dev, "default mac on vf %d port %d to %llX will take afect only after vf restart\n",
@@ -2428,6 +2445,7 @@ int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos)
2428 if (slave < 0) 2445 if (slave < 0)
2429 return -EINVAL; 2446 return -EINVAL;
2430 2447
2448 port = mlx4_slaves_closest_port(dev, slave, port);
2431 vf_admin = &priv->mfunc.master.vf_admin[slave].vport[port]; 2449 vf_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
2432 2450
2433 if ((0 == vlan) && (0 == qos)) 2451 if ((0 == vlan) && (0 == qos))
@@ -2455,6 +2473,7 @@ bool mlx4_get_slave_default_vlan(struct mlx4_dev *dev, int port, int slave,
2455 struct mlx4_priv *priv; 2473 struct mlx4_priv *priv;
2456 2474
2457 priv = mlx4_priv(dev); 2475 priv = mlx4_priv(dev);
2476 port = mlx4_slaves_closest_port(dev, slave, port);
2458 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port]; 2477 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
2459 2478
2460 if (MLX4_VGT != vp_oper->state.default_vlan) { 2479 if (MLX4_VGT != vp_oper->state.default_vlan) {
@@ -2482,6 +2501,7 @@ int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting)
2482 if (slave < 0) 2501 if (slave < 0)
2483 return -EINVAL; 2502 return -EINVAL;
2484 2503
2504 port = mlx4_slaves_closest_port(dev, slave, port);
2485 s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; 2505 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
2486 s_info->spoofchk = setting; 2506 s_info->spoofchk = setting;
2487 2507
@@ -2535,6 +2555,7 @@ int mlx4_set_vf_link_state(struct mlx4_dev *dev, int port, int vf, int link_stat
2535 if (slave < 0) 2555 if (slave < 0)
2536 return -EINVAL; 2556 return -EINVAL;
2537 2557
2558 port = mlx4_slaves_closest_port(dev, slave, port);
2538 switch (link_state) { 2559 switch (link_state) {
2539 case IFLA_VF_LINK_STATE_AUTO: 2560 case IFLA_VF_LINK_STATE_AUTO:
2540 /* get current link state */ 2561 /* get current link state */
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index e22f24f784fc..35ff2925110a 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -487,6 +487,9 @@ static int mlx4_en_set_pauseparam(struct net_device *dev,
487 struct mlx4_en_dev *mdev = priv->mdev; 487 struct mlx4_en_dev *mdev = priv->mdev;
488 int err; 488 int err;
489 489
490 if (pause->autoneg)
491 return -EINVAL;
492
490 priv->prof->tx_pause = pause->tx_pause != 0; 493 priv->prof->tx_pause = pause->tx_pause != 0;
491 priv->prof->rx_pause = pause->rx_pause != 0; 494 priv->prof->rx_pause = pause->rx_pause != 0;
492 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 495 err = mlx4_SET_PORT_general(mdev->dev, priv->port,
diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
index 0dc31d85fc3b..2301365c79c7 100644
--- a/drivers/net/ethernet/mellanox/mlx4/qp.c
+++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
@@ -390,13 +390,14 @@ err_icm:
390EXPORT_SYMBOL_GPL(mlx4_qp_alloc); 390EXPORT_SYMBOL_GPL(mlx4_qp_alloc);
391 391
392#define MLX4_UPDATE_QP_SUPPORTED_ATTRS MLX4_UPDATE_QP_SMAC 392#define MLX4_UPDATE_QP_SUPPORTED_ATTRS MLX4_UPDATE_QP_SMAC
393int mlx4_update_qp(struct mlx4_dev *dev, struct mlx4_qp *qp, 393int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
394 enum mlx4_update_qp_attr attr, 394 enum mlx4_update_qp_attr attr,
395 struct mlx4_update_qp_params *params) 395 struct mlx4_update_qp_params *params)
396{ 396{
397 struct mlx4_cmd_mailbox *mailbox; 397 struct mlx4_cmd_mailbox *mailbox;
398 struct mlx4_update_qp_context *cmd; 398 struct mlx4_update_qp_context *cmd;
399 u64 pri_addr_path_mask = 0; 399 u64 pri_addr_path_mask = 0;
400 u64 qp_mask = 0;
400 int err = 0; 401 int err = 0;
401 402
402 mailbox = mlx4_alloc_cmd_mailbox(dev); 403 mailbox = mlx4_alloc_cmd_mailbox(dev);
@@ -413,9 +414,16 @@ int mlx4_update_qp(struct mlx4_dev *dev, struct mlx4_qp *qp,
413 cmd->qp_context.pri_path.grh_mylmc = params->smac_index; 414 cmd->qp_context.pri_path.grh_mylmc = params->smac_index;
414 } 415 }
415 416
417 if (attr & MLX4_UPDATE_QP_VSD) {
418 qp_mask |= 1ULL << MLX4_UPD_QP_MASK_VSD;
419 if (params->flags & MLX4_UPDATE_QP_PARAMS_FLAGS_VSD_ENABLE)
420 cmd->qp_context.param3 |= cpu_to_be32(MLX4_STRIP_VLAN);
421 }
422
416 cmd->primary_addr_path_mask = cpu_to_be64(pri_addr_path_mask); 423 cmd->primary_addr_path_mask = cpu_to_be64(pri_addr_path_mask);
424 cmd->qp_mask = cpu_to_be64(qp_mask);
417 425
418 err = mlx4_cmd(dev, mailbox->dma, qp->qpn & 0xffffff, 0, 426 err = mlx4_cmd(dev, mailbox->dma, qpn & 0xffffff, 0,
419 MLX4_CMD_UPDATE_QP, MLX4_CMD_TIME_CLASS_A, 427 MLX4_CMD_UPDATE_QP, MLX4_CMD_TIME_CLASS_A,
420 MLX4_CMD_NATIVE); 428 MLX4_CMD_NATIVE);
421 429
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
index 1089367fed22..5d2498dcf536 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
@@ -702,11 +702,13 @@ static int update_vport_qp_param(struct mlx4_dev *dev,
702 struct mlx4_qp_context *qpc = inbox->buf + 8; 702 struct mlx4_qp_context *qpc = inbox->buf + 8;
703 struct mlx4_vport_oper_state *vp_oper; 703 struct mlx4_vport_oper_state *vp_oper;
704 struct mlx4_priv *priv; 704 struct mlx4_priv *priv;
705 u32 qp_type;
705 int port; 706 int port;
706 707
707 port = (qpc->pri_path.sched_queue & 0x40) ? 2 : 1; 708 port = (qpc->pri_path.sched_queue & 0x40) ? 2 : 1;
708 priv = mlx4_priv(dev); 709 priv = mlx4_priv(dev);
709 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port]; 710 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
711 qp_type = (be32_to_cpu(qpc->flags) >> 16) & 0xff;
710 712
711 if (MLX4_VGT != vp_oper->state.default_vlan) { 713 if (MLX4_VGT != vp_oper->state.default_vlan) {
712 /* the reserved QPs (special, proxy, tunnel) 714 /* the reserved QPs (special, proxy, tunnel)
@@ -715,8 +717,20 @@ static int update_vport_qp_param(struct mlx4_dev *dev,
715 if (mlx4_is_qp_reserved(dev, qpn)) 717 if (mlx4_is_qp_reserved(dev, qpn))
716 return 0; 718 return 0;
717 719
718 /* force strip vlan by clear vsd */ 720 /* force strip vlan by clear vsd, MLX QP refers to Raw Ethernet */
719 qpc->param3 &= ~cpu_to_be32(MLX4_STRIP_VLAN); 721 if (qp_type == MLX4_QP_ST_UD ||
722 (qp_type == MLX4_QP_ST_MLX && mlx4_is_eth(dev, port))) {
723 if (dev->caps.bmme_flags & MLX4_BMME_FLAG_VSD_INIT2RTR) {
724 *(__be32 *)inbox->buf =
725 cpu_to_be32(be32_to_cpu(*(__be32 *)inbox->buf) |
726 MLX4_QP_OPTPAR_VLAN_STRIPPING);
727 qpc->param3 &= ~cpu_to_be32(MLX4_STRIP_VLAN);
728 } else {
729 struct mlx4_update_qp_params params = {.flags = 0};
730
731 mlx4_update_qp(dev, qpn, MLX4_UPDATE_QP_VSD, &params);
732 }
733 }
720 734
721 if (vp_oper->state.link_state == IFLA_VF_LINK_STATE_DISABLE && 735 if (vp_oper->state.link_state == IFLA_VF_LINK_STATE_DISABLE &&
722 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_UPDATE_QP) { 736 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_UPDATE_QP) {
@@ -3998,13 +4012,17 @@ int mlx4_UPDATE_QP_wrapper(struct mlx4_dev *dev, int slave,
3998 } 4012 }
3999 4013
4000 port = (rqp->sched_queue >> 6 & 1) + 1; 4014 port = (rqp->sched_queue >> 6 & 1) + 1;
4001 smac_index = cmd->qp_context.pri_path.grh_mylmc; 4015
4002 err = mac_find_smac_ix_in_slave(dev, slave, port, 4016 if (pri_addr_path_mask & (1ULL << MLX4_UPD_QP_PATH_MASK_MAC_INDEX)) {
4003 smac_index, &mac); 4017 smac_index = cmd->qp_context.pri_path.grh_mylmc;
4004 if (err) { 4018 err = mac_find_smac_ix_in_slave(dev, slave, port,
4005 mlx4_err(dev, "Failed to update qpn 0x%x, MAC is invalid. smac_ix: %d\n", 4019 smac_index, &mac);
4006 qpn, smac_index); 4020
4007 goto err_mac; 4021 if (err) {
4022 mlx4_err(dev, "Failed to update qpn 0x%x, MAC is invalid. smac_ix: %d\n",
4023 qpn, smac_index);
4024 goto err_mac;
4025 }
4008 } 4026 }
4009 4027
4010 err = mlx4_cmd(dev, inbox->dma, 4028 err = mlx4_cmd(dev, inbox->dma,
@@ -4818,7 +4836,7 @@ void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
4818 MLX4_VLAN_CTRL_ETH_RX_BLOCK_UNTAGGED; 4836 MLX4_VLAN_CTRL_ETH_RX_BLOCK_UNTAGGED;
4819 4837
4820 upd_context = mailbox->buf; 4838 upd_context = mailbox->buf;
4821 upd_context->qp_mask = cpu_to_be64(MLX4_UPD_QP_MASK_VSD); 4839 upd_context->qp_mask = cpu_to_be64(1ULL << MLX4_UPD_QP_MASK_VSD);
4822 4840
4823 spin_lock_irq(mlx4_tlock(dev)); 4841 spin_lock_irq(mlx4_tlock(dev));
4824 list_for_each_entry_safe(qp, tmp, qp_list, com.list) { 4842 list_for_each_entry_safe(qp, tmp, qp_list, com.list) {
diff --git a/drivers/net/ethernet/octeon/octeon_mgmt.c b/drivers/net/ethernet/octeon/octeon_mgmt.c
index 979c6980639f..a42293092ea4 100644
--- a/drivers/net/ethernet/octeon/octeon_mgmt.c
+++ b/drivers/net/ethernet/octeon/octeon_mgmt.c
@@ -290,9 +290,11 @@ static void octeon_mgmt_clean_tx_buffers(struct octeon_mgmt *p)
290 /* Read the hardware TX timestamp if one was recorded */ 290 /* Read the hardware TX timestamp if one was recorded */
291 if (unlikely(re.s.tstamp)) { 291 if (unlikely(re.s.tstamp)) {
292 struct skb_shared_hwtstamps ts; 292 struct skb_shared_hwtstamps ts;
293 u64 ns;
294
293 memset(&ts, 0, sizeof(ts)); 295 memset(&ts, 0, sizeof(ts));
294 /* Read the timestamp */ 296 /* Read the timestamp */
295 u64 ns = cvmx_read_csr(CVMX_MIXX_TSTAMP(p->port)); 297 ns = cvmx_read_csr(CVMX_MIXX_TSTAMP(p->port));
296 /* Remove the timestamp from the FIFO */ 298 /* Remove the timestamp from the FIFO */
297 cvmx_write_csr(CVMX_MIXX_TSCTL(p->port), 0); 299 cvmx_write_csr(CVMX_MIXX_TSCTL(p->port), 0);
298 /* Tell the kernel about the timestamp */ 300 /* Tell the kernel about the timestamp */
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig
index 44c8be1c6805..5f7a35212796 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/Kconfig
@@ -7,6 +7,7 @@ config PCH_GBE
7 depends on PCI && (X86_32 || COMPILE_TEST) 7 depends on PCI && (X86_32 || COMPILE_TEST)
8 select MII 8 select MII
9 select PTP_1588_CLOCK_PCH 9 select PTP_1588_CLOCK_PCH
10 select NET_PTP_CLASSIFY
10 ---help--- 11 ---help---
11 This is a gigabit ethernet driver for EG20T PCH. 12 This is a gigabit ethernet driver for EG20T PCH.
12 EG20T PCH is the platform controller hub that is used in Intel's 13 EG20T PCH is the platform controller hub that is used in Intel's
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 02dd92ac1764..1d81238fcb93 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -1847,33 +1847,31 @@ static void __rtl8169_set_features(struct net_device *dev,
1847 netdev_features_t features) 1847 netdev_features_t features)
1848{ 1848{
1849 struct rtl8169_private *tp = netdev_priv(dev); 1849 struct rtl8169_private *tp = netdev_priv(dev);
1850 netdev_features_t changed = features ^ dev->features;
1851 void __iomem *ioaddr = tp->mmio_addr; 1850 void __iomem *ioaddr = tp->mmio_addr;
1851 u32 rx_config;
1852 1852
1853 if (!(changed & (NETIF_F_RXALL | NETIF_F_RXCSUM | 1853 rx_config = RTL_R32(RxConfig);
1854 NETIF_F_HW_VLAN_CTAG_RX))) 1854 if (features & NETIF_F_RXALL)
1855 return; 1855 rx_config |= (AcceptErr | AcceptRunt);
1856 else
1857 rx_config &= ~(AcceptErr | AcceptRunt);
1856 1858
1857 if (changed & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX)) { 1859 RTL_W32(RxConfig, rx_config);
1858 if (features & NETIF_F_RXCSUM)
1859 tp->cp_cmd |= RxChkSum;
1860 else
1861 tp->cp_cmd &= ~RxChkSum;
1862 1860
1863 if (dev->features & NETIF_F_HW_VLAN_CTAG_RX) 1861 if (features & NETIF_F_RXCSUM)
1864 tp->cp_cmd |= RxVlan; 1862 tp->cp_cmd |= RxChkSum;
1865 else 1863 else
1866 tp->cp_cmd &= ~RxVlan; 1864 tp->cp_cmd &= ~RxChkSum;
1867 1865
1868 RTL_W16(CPlusCmd, tp->cp_cmd); 1866 if (features & NETIF_F_HW_VLAN_CTAG_RX)
1869 RTL_R16(CPlusCmd); 1867 tp->cp_cmd |= RxVlan;
1870 } 1868 else
1871 if (changed & NETIF_F_RXALL) { 1869 tp->cp_cmd &= ~RxVlan;
1872 int tmp = (RTL_R32(RxConfig) & ~(AcceptErr | AcceptRunt)); 1870
1873 if (features & NETIF_F_RXALL) 1871 tp->cp_cmd |= RTL_R16(CPlusCmd) & ~(RxVlan | RxChkSum);
1874 tmp |= (AcceptErr | AcceptRunt); 1872
1875 RTL_W32(RxConfig, tmp); 1873 RTL_W16(CPlusCmd, tp->cp_cmd);
1876 } 1874 RTL_R16(CPlusCmd);
1877} 1875}
1878 1876
1879static int rtl8169_set_features(struct net_device *dev, 1877static int rtl8169_set_features(struct net_device *dev,
@@ -1881,8 +1879,11 @@ static int rtl8169_set_features(struct net_device *dev,
1881{ 1879{
1882 struct rtl8169_private *tp = netdev_priv(dev); 1880 struct rtl8169_private *tp = netdev_priv(dev);
1883 1881
1882 features &= NETIF_F_RXALL | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX;
1883
1884 rtl_lock_work(tp); 1884 rtl_lock_work(tp);
1885 __rtl8169_set_features(dev, features); 1885 if (features ^ dev->features)
1886 __rtl8169_set_features(dev, features);
1886 rtl_unlock_work(tp); 1887 rtl_unlock_work(tp);
1887 1888
1888 return 0; 1889 return 0;
@@ -7531,8 +7532,7 @@ static void rtl_hw_initialize(struct rtl8169_private *tp)
7531 } 7532 }
7532} 7533}
7533 7534
7534static int 7535static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7535rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7536{ 7536{
7537 const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data; 7537 const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
7538 const unsigned int region = cfg->region; 7538 const unsigned int region = cfg->region;
@@ -7607,7 +7607,7 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7607 goto err_out_mwi_2; 7607 goto err_out_mwi_2;
7608 } 7608 }
7609 7609
7610 tp->cp_cmd = RxChkSum; 7610 tp->cp_cmd = 0;
7611 7611
7612 if ((sizeof(dma_addr_t) > 4) && 7612 if ((sizeof(dma_addr_t) > 4) &&
7613 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) { 7613 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
@@ -7648,13 +7648,6 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7648 7648
7649 pci_set_master(pdev); 7649 pci_set_master(pdev);
7650 7650
7651 /*
7652 * Pretend we are using VLANs; This bypasses a nasty bug where
7653 * Interrupts stop flowing on high load on 8110SCd controllers.
7654 */
7655 if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7656 tp->cp_cmd |= RxVlan;
7657
7658 rtl_init_mdio_ops(tp); 7651 rtl_init_mdio_ops(tp);
7659 rtl_init_pll_power_ops(tp); 7652 rtl_init_pll_power_ops(tp);
7660 rtl_init_jumbo_ops(tp); 7653 rtl_init_jumbo_ops(tp);
@@ -7738,8 +7731,14 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7738 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | 7731 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
7739 NETIF_F_HIGHDMA; 7732 NETIF_F_HIGHDMA;
7740 7733
7734 tp->cp_cmd |= RxChkSum | RxVlan;
7735
7736 /*
7737 * Pretend we are using VLANs; This bypasses a nasty bug where
7738 * Interrupts stop flowing on high load on 8110SCd controllers.
7739 */
7741 if (tp->mac_version == RTL_GIGA_MAC_VER_05) 7740 if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7742 /* 8110SCd requires hardware Rx VLAN - disallow toggling */ 7741 /* Disallow toggling */
7743 dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX; 7742 dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX;
7744 7743
7745 if (tp->txd_version == RTL_TD_0) 7744 if (tp->txd_version == RTL_TD_0)
diff --git a/drivers/net/ethernet/sfc/farch.c b/drivers/net/ethernet/sfc/farch.c
index 0537381cd2f6..6859437b59fb 100644
--- a/drivers/net/ethernet/sfc/farch.c
+++ b/drivers/net/ethernet/sfc/farch.c
@@ -2933,6 +2933,9 @@ void efx_farch_filter_sync_rx_mode(struct efx_nic *efx)
2933 u32 crc; 2933 u32 crc;
2934 int bit; 2934 int bit;
2935 2935
2936 if (!efx_dev_registered(efx))
2937 return;
2938
2936 netif_addr_lock_bh(net_dev); 2939 netif_addr_lock_bh(net_dev);
2937 2940
2938 efx->unicast_filter = !(net_dev->flags & IFF_PROMISC); 2941 efx->unicast_filter = !(net_dev->flags & IFF_PROMISC);
diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
index 763cdfc228be..edb860947da4 100644
--- a/drivers/net/ethernet/sun/sunvnet.c
+++ b/drivers/net/ethernet/sun/sunvnet.c
@@ -360,14 +360,17 @@ static int vnet_walk_rx_one(struct vnet_port *port,
360 if (IS_ERR(desc)) 360 if (IS_ERR(desc))
361 return PTR_ERR(desc); 361 return PTR_ERR(desc);
362 362
363 if (desc->hdr.state != VIO_DESC_READY)
364 return 1;
365
366 rmb();
367
363 viodbg(DATA, "vio_walk_rx_one desc[%02x:%02x:%08x:%08x:%llx:%llx]\n", 368 viodbg(DATA, "vio_walk_rx_one desc[%02x:%02x:%08x:%08x:%llx:%llx]\n",
364 desc->hdr.state, desc->hdr.ack, 369 desc->hdr.state, desc->hdr.ack,
365 desc->size, desc->ncookies, 370 desc->size, desc->ncookies,
366 desc->cookies[0].cookie_addr, 371 desc->cookies[0].cookie_addr,
367 desc->cookies[0].cookie_size); 372 desc->cookies[0].cookie_size);
368 373
369 if (desc->hdr.state != VIO_DESC_READY)
370 return 1;
371 err = vnet_rx_one(port, desc->size, desc->cookies, desc->ncookies); 374 err = vnet_rx_one(port, desc->size, desc->cookies, desc->ncookies);
372 if (err == -ECONNRESET) 375 if (err == -ECONNRESET)
373 return err; 376 return err;
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 5c3f1f3ad16f..45ba50e4eaec 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -701,6 +701,28 @@ static void cpsw_rx_handler(void *token, int len, int status)
701 cpsw_dual_emac_src_port_detect(status, priv, ndev, skb); 701 cpsw_dual_emac_src_port_detect(status, priv, ndev, skb);
702 702
703 if (unlikely(status < 0) || unlikely(!netif_running(ndev))) { 703 if (unlikely(status < 0) || unlikely(!netif_running(ndev))) {
704 bool ndev_status = false;
705 struct cpsw_slave *slave = priv->slaves;
706 int n;
707
708 if (priv->data.dual_emac) {
709 /* In dual emac mode check for all interfaces */
710 for (n = priv->data.slaves; n; n--, slave++)
711 if (netif_running(slave->ndev))
712 ndev_status = true;
713 }
714
715 if (ndev_status && (status >= 0)) {
716 /* The packet received is for the interface which
717 * is already down and the other interface is up
718 * and running, intead of freeing which results
719 * in reducing of the number of rx descriptor in
720 * DMA engine, requeue skb back to cpdma.
721 */
722 new_skb = skb;
723 goto requeue;
724 }
725
704 /* the interface is going down, skbs are purged */ 726 /* the interface is going down, skbs are purged */
705 dev_kfree_skb_any(skb); 727 dev_kfree_skb_any(skb);
706 return; 728 return;
@@ -719,6 +741,7 @@ static void cpsw_rx_handler(void *token, int len, int status)
719 new_skb = skb; 741 new_skb = skb;
720 } 742 }
721 743
744requeue:
722 ret = cpdma_chan_submit(priv->rxch, new_skb, new_skb->data, 745 ret = cpdma_chan_submit(priv->rxch, new_skb, new_skb->data,
723 skb_tailroom(new_skb), 0); 746 skb_tailroom(new_skb), 0);
724 if (WARN_ON(ret < 0)) 747 if (WARN_ON(ret < 0))
@@ -2354,10 +2377,19 @@ static int cpsw_suspend(struct device *dev)
2354 struct net_device *ndev = platform_get_drvdata(pdev); 2377 struct net_device *ndev = platform_get_drvdata(pdev);
2355 struct cpsw_priv *priv = netdev_priv(ndev); 2378 struct cpsw_priv *priv = netdev_priv(ndev);
2356 2379
2357 if (netif_running(ndev)) 2380 if (priv->data.dual_emac) {
2358 cpsw_ndo_stop(ndev); 2381 int i;
2359 2382
2360 for_each_slave(priv, soft_reset_slave); 2383 for (i = 0; i < priv->data.slaves; i++) {
2384 if (netif_running(priv->slaves[i].ndev))
2385 cpsw_ndo_stop(priv->slaves[i].ndev);
2386 soft_reset_slave(priv->slaves + i);
2387 }
2388 } else {
2389 if (netif_running(ndev))
2390 cpsw_ndo_stop(ndev);
2391 for_each_slave(priv, soft_reset_slave);
2392 }
2361 2393
2362 pm_runtime_put_sync(&pdev->dev); 2394 pm_runtime_put_sync(&pdev->dev);
2363 2395
@@ -2371,14 +2403,24 @@ static int cpsw_resume(struct device *dev)
2371{ 2403{
2372 struct platform_device *pdev = to_platform_device(dev); 2404 struct platform_device *pdev = to_platform_device(dev);
2373 struct net_device *ndev = platform_get_drvdata(pdev); 2405 struct net_device *ndev = platform_get_drvdata(pdev);
2406 struct cpsw_priv *priv = netdev_priv(ndev);
2374 2407
2375 pm_runtime_get_sync(&pdev->dev); 2408 pm_runtime_get_sync(&pdev->dev);
2376 2409
2377 /* Select default pin state */ 2410 /* Select default pin state */
2378 pinctrl_pm_select_default_state(&pdev->dev); 2411 pinctrl_pm_select_default_state(&pdev->dev);
2379 2412
2380 if (netif_running(ndev)) 2413 if (priv->data.dual_emac) {
2381 cpsw_ndo_open(ndev); 2414 int i;
2415
2416 for (i = 0; i < priv->data.slaves; i++) {
2417 if (netif_running(priv->slaves[i].ndev))
2418 cpsw_ndo_open(priv->slaves[i].ndev);
2419 }
2420 } else {
2421 if (netif_running(ndev))
2422 cpsw_ndo_open(ndev);
2423 }
2382 return 0; 2424 return 0;
2383} 2425}
2384 2426
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index a96955597755..726edabff26b 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -36,6 +36,7 @@
36#include <linux/netpoll.h> 36#include <linux/netpoll.h>
37 37
38#define MACVLAN_HASH_SIZE (1 << BITS_PER_BYTE) 38#define MACVLAN_HASH_SIZE (1 << BITS_PER_BYTE)
39#define MACVLAN_BC_QUEUE_LEN 1000
39 40
40struct macvlan_port { 41struct macvlan_port {
41 struct net_device *dev; 42 struct net_device *dev;
@@ -248,7 +249,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
248 goto err; 249 goto err;
249 250
250 spin_lock(&port->bc_queue.lock); 251 spin_lock(&port->bc_queue.lock);
251 if (skb_queue_len(&port->bc_queue) < skb->dev->tx_queue_len) { 252 if (skb_queue_len(&port->bc_queue) < MACVLAN_BC_QUEUE_LEN) {
252 __skb_queue_tail(&port->bc_queue, nskb); 253 __skb_queue_tail(&port->bc_queue, nskb);
253 err = 0; 254 err = 0;
254 } 255 }
@@ -806,6 +807,7 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,
806 features, 807 features,
807 mask); 808 mask);
808 features |= ALWAYS_ON_FEATURES; 809 features |= ALWAYS_ON_FEATURES;
810 features &= ~NETIF_F_NETNS_LOCAL;
809 811
810 return features; 812 return features;
811} 813}
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index fd0ea7c50ee6..011dbda2b2f1 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -592,8 +592,7 @@ static struct phy_driver ksphy_driver[] = {
592 .phy_id = PHY_ID_KSZ9031, 592 .phy_id = PHY_ID_KSZ9031,
593 .phy_id_mask = 0x00fffff0, 593 .phy_id_mask = 0x00fffff0,
594 .name = "Micrel KSZ9031 Gigabit PHY", 594 .name = "Micrel KSZ9031 Gigabit PHY",
595 .features = (PHY_GBIT_FEATURES | SUPPORTED_Pause 595 .features = (PHY_GBIT_FEATURES | SUPPORTED_Pause),
596 | SUPPORTED_Asym_Pause),
597 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT, 596 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
598 .config_init = ksz9031_config_init, 597 .config_init = ksz9031_config_init,
599 .config_aneg = genphy_config_aneg, 598 .config_aneg = genphy_config_aneg,
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 94032199800d..3d5c39a1e46f 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -2050,7 +2050,7 @@ static int rtl8153_enable(struct r8152 *tp)
2050 return rtl_enable(tp); 2050 return rtl_enable(tp);
2051} 2051}
2052 2052
2053static void rtl8152_disable(struct r8152 *tp) 2053static void rtl_disable(struct r8152 *tp)
2054{ 2054{
2055 u32 ocp_data; 2055 u32 ocp_data;
2056 int i; 2056 int i;
@@ -2291,6 +2291,13 @@ static inline void r8152b_enable_aldps(struct r8152 *tp)
2291 LINKENA | DIS_SDSAVE); 2291 LINKENA | DIS_SDSAVE);
2292} 2292}
2293 2293
2294static void rtl8152_disable(struct r8152 *tp)
2295{
2296 r8152b_disable_aldps(tp);
2297 rtl_disable(tp);
2298 r8152b_enable_aldps(tp);
2299}
2300
2294static void r8152b_hw_phy_cfg(struct r8152 *tp) 2301static void r8152b_hw_phy_cfg(struct r8152 *tp)
2295{ 2302{
2296 u16 data; 2303 u16 data;
@@ -2301,11 +2308,8 @@ static void r8152b_hw_phy_cfg(struct r8152 *tp)
2301 r8152_mdio_write(tp, MII_BMCR, data); 2308 r8152_mdio_write(tp, MII_BMCR, data);
2302 } 2309 }
2303 2310
2304 r8152b_disable_aldps(tp);
2305
2306 rtl_clear_bp(tp); 2311 rtl_clear_bp(tp);
2307 2312
2308 r8152b_enable_aldps(tp);
2309 set_bit(PHY_RESET, &tp->flags); 2313 set_bit(PHY_RESET, &tp->flags);
2310} 2314}
2311 2315
@@ -2314,9 +2318,6 @@ static void r8152b_exit_oob(struct r8152 *tp)
2314 u32 ocp_data; 2318 u32 ocp_data;
2315 int i; 2319 int i;
2316 2320
2317 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2318 return;
2319
2320 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); 2321 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
2321 ocp_data &= ~RCR_ACPT_ALL; 2322 ocp_data &= ~RCR_ACPT_ALL;
2322 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); 2323 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
@@ -2404,7 +2405,7 @@ static void r8152b_enter_oob(struct r8152 *tp)
2404 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); 2405 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB);
2405 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); 2406 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB);
2406 2407
2407 rtl8152_disable(tp); 2408 rtl_disable(tp);
2408 2409
2409 for (i = 0; i < 1000; i++) { 2410 for (i = 0; i < 1000; i++) {
2410 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); 2411 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
@@ -2540,9 +2541,6 @@ static void r8153_first_init(struct r8152 *tp)
2540 u32 ocp_data; 2541 u32 ocp_data;
2541 int i; 2542 int i;
2542 2543
2543 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2544 return;
2545
2546 rxdy_gated_en(tp, true); 2544 rxdy_gated_en(tp, true);
2547 r8153_teredo_off(tp); 2545 r8153_teredo_off(tp);
2548 2546
@@ -2613,7 +2611,7 @@ static void r8153_enter_oob(struct r8152 *tp)
2613 ocp_data &= ~NOW_IS_OOB; 2611 ocp_data &= ~NOW_IS_OOB;
2614 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); 2612 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
2615 2613
2616 rtl8152_disable(tp); 2614 rtl_disable(tp);
2617 2615
2618 for (i = 0; i < 1000; i++) { 2616 for (i = 0; i < 1000; i++) {
2619 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); 2617 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
@@ -2675,6 +2673,13 @@ static void r8153_enable_aldps(struct r8152 *tp)
2675 ocp_reg_write(tp, OCP_POWER_CFG, data); 2673 ocp_reg_write(tp, OCP_POWER_CFG, data);
2676} 2674}
2677 2675
2676static void rtl8153_disable(struct r8152 *tp)
2677{
2678 r8153_disable_aldps(tp);
2679 rtl_disable(tp);
2680 r8153_enable_aldps(tp);
2681}
2682
2678static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) 2683static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex)
2679{ 2684{
2680 u16 bmcr, anar, gbcr; 2685 u16 bmcr, anar, gbcr;
@@ -2765,6 +2770,16 @@ out:
2765 return ret; 2770 return ret;
2766} 2771}
2767 2772
2773static void rtl8152_up(struct r8152 *tp)
2774{
2775 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2776 return;
2777
2778 r8152b_disable_aldps(tp);
2779 r8152b_exit_oob(tp);
2780 r8152b_enable_aldps(tp);
2781}
2782
2768static void rtl8152_down(struct r8152 *tp) 2783static void rtl8152_down(struct r8152 *tp)
2769{ 2784{
2770 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { 2785 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
@@ -2778,6 +2793,16 @@ static void rtl8152_down(struct r8152 *tp)
2778 r8152b_enable_aldps(tp); 2793 r8152b_enable_aldps(tp);
2779} 2794}
2780 2795
2796static void rtl8153_up(struct r8152 *tp)
2797{
2798 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2799 return;
2800
2801 r8153_disable_aldps(tp);
2802 r8153_first_init(tp);
2803 r8153_enable_aldps(tp);
2804}
2805
2781static void rtl8153_down(struct r8152 *tp) 2806static void rtl8153_down(struct r8152 *tp)
2782{ 2807{
2783 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { 2808 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
@@ -2996,6 +3021,8 @@ static void r8152b_init(struct r8152 *tp)
2996 if (test_bit(RTL8152_UNPLUG, &tp->flags)) 3021 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2997 return; 3022 return;
2998 3023
3024 r8152b_disable_aldps(tp);
3025
2999 if (tp->version == RTL_VER_01) { 3026 if (tp->version == RTL_VER_01) {
3000 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); 3027 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
3001 ocp_data &= ~LED_MODE_MASK; 3028 ocp_data &= ~LED_MODE_MASK;
@@ -3034,6 +3061,7 @@ static void r8153_init(struct r8152 *tp)
3034 if (test_bit(RTL8152_UNPLUG, &tp->flags)) 3061 if (test_bit(RTL8152_UNPLUG, &tp->flags))
3035 return; 3062 return;
3036 3063
3064 r8153_disable_aldps(tp);
3037 r8153_u1u2en(tp, false); 3065 r8153_u1u2en(tp, false);
3038 3066
3039 for (i = 0; i < 500; i++) { 3067 for (i = 0; i < 500; i++) {
@@ -3444,7 +3472,7 @@ static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id)
3444 ops->init = r8152b_init; 3472 ops->init = r8152b_init;
3445 ops->enable = rtl8152_enable; 3473 ops->enable = rtl8152_enable;
3446 ops->disable = rtl8152_disable; 3474 ops->disable = rtl8152_disable;
3447 ops->up = r8152b_exit_oob; 3475 ops->up = rtl8152_up;
3448 ops->down = rtl8152_down; 3476 ops->down = rtl8152_down;
3449 ops->unload = rtl8152_unload; 3477 ops->unload = rtl8152_unload;
3450 ret = 0; 3478 ret = 0;
@@ -3452,8 +3480,8 @@ static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id)
3452 case PRODUCT_ID_RTL8153: 3480 case PRODUCT_ID_RTL8153:
3453 ops->init = r8153_init; 3481 ops->init = r8153_init;
3454 ops->enable = rtl8153_enable; 3482 ops->enable = rtl8153_enable;
3455 ops->disable = rtl8152_disable; 3483 ops->disable = rtl8153_disable;
3456 ops->up = r8153_first_init; 3484 ops->up = rtl8153_up;
3457 ops->down = rtl8153_down; 3485 ops->down = rtl8153_down;
3458 ops->unload = rtl8153_unload; 3486 ops->unload = rtl8153_unload;
3459 ret = 0; 3487 ret = 0;
@@ -3468,8 +3496,8 @@ static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id)
3468 case PRODUCT_ID_SAMSUNG: 3496 case PRODUCT_ID_SAMSUNG:
3469 ops->init = r8153_init; 3497 ops->init = r8153_init;
3470 ops->enable = rtl8153_enable; 3498 ops->enable = rtl8153_enable;
3471 ops->disable = rtl8152_disable; 3499 ops->disable = rtl8153_disable;
3472 ops->up = r8153_first_init; 3500 ops->up = rtl8153_up;
3473 ops->down = rtl8153_down; 3501 ops->down = rtl8153_down;
3474 ops->unload = rtl8153_unload; 3502 ops->unload = rtl8153_unload;
3475 ret = 0; 3503 ret = 0;
diff --git a/drivers/net/wireless/ath/ath9k/common-beacon.c b/drivers/net/wireless/ath/ath9k/common-beacon.c
index 733be5178481..6ad44470d0f2 100644
--- a/drivers/net/wireless/ath/ath9k/common-beacon.c
+++ b/drivers/net/wireless/ath/ath9k/common-beacon.c
@@ -57,7 +57,7 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah,
57 struct ath9k_beacon_state *bs) 57 struct ath9k_beacon_state *bs)
58{ 58{
59 struct ath_common *common = ath9k_hw_common(ah); 59 struct ath_common *common = ath9k_hw_common(ah);
60 int dtim_intval, sleepduration; 60 int dtim_intval;
61 u64 tsf; 61 u64 tsf;
62 62
63 /* No need to configure beacon if we are not associated */ 63 /* No need to configure beacon if we are not associated */
@@ -75,7 +75,6 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah,
75 * last beacon we received (which may be none). 75 * last beacon we received (which may be none).
76 */ 76 */
77 dtim_intval = conf->intval * conf->dtim_period; 77 dtim_intval = conf->intval * conf->dtim_period;
78 sleepduration = ah->hw->conf.listen_interval * conf->intval;
79 78
80 /* 79 /*
81 * Pull nexttbtt forward to reflect the current 80 * Pull nexttbtt forward to reflect the current
@@ -113,7 +112,7 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah,
113 */ 112 */
114 113
115 bs->bs_sleepduration = TU_TO_USEC(roundup(IEEE80211_MS_TO_TU(100), 114 bs->bs_sleepduration = TU_TO_USEC(roundup(IEEE80211_MS_TO_TU(100),
116 sleepduration)); 115 conf->intval));
117 if (bs->bs_sleepduration > bs->bs_dtimperiod) 116 if (bs->bs_sleepduration > bs->bs_dtimperiod)
118 bs->bs_sleepduration = bs->bs_dtimperiod; 117 bs->bs_sleepduration = bs->bs_dtimperiod;
119 118
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index bb86eb2ffc95..f0484b1b617e 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -978,7 +978,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
978 struct ath_hw *ah = common->ah; 978 struct ath_hw *ah = common->ah;
979 struct ath_htc_rx_status *rxstatus; 979 struct ath_htc_rx_status *rxstatus;
980 struct ath_rx_status rx_stats; 980 struct ath_rx_status rx_stats;
981 bool decrypt_error; 981 bool decrypt_error = false;
982 982
983 if (skb->len < HTC_RX_FRAME_HEADER_SIZE) { 983 if (skb->len < HTC_RX_FRAME_HEADER_SIZE) {
984 ath_err(common, "Corrupted RX frame, dropping (len: %d)\n", 984 ath_err(common, "Corrupted RX frame, dropping (len: %d)\n",
diff --git a/drivers/net/wireless/brcm80211/Kconfig b/drivers/net/wireless/brcm80211/Kconfig
index b8e2561ea645..fe3dc126b149 100644
--- a/drivers/net/wireless/brcm80211/Kconfig
+++ b/drivers/net/wireless/brcm80211/Kconfig
@@ -27,10 +27,17 @@ config BRCMFMAC
27 one of the bus interface support. If you choose to build a module, 27 one of the bus interface support. If you choose to build a module,
28 it'll be called brcmfmac.ko. 28 it'll be called brcmfmac.ko.
29 29
30config BRCMFMAC_PROTO_BCDC
31 bool
32
33config BRCMFMAC_PROTO_MSGBUF
34 bool
35
30config BRCMFMAC_SDIO 36config BRCMFMAC_SDIO
31 bool "SDIO bus interface support for FullMAC driver" 37 bool "SDIO bus interface support for FullMAC driver"
32 depends on (MMC = y || MMC = BRCMFMAC) 38 depends on (MMC = y || MMC = BRCMFMAC)
33 depends on BRCMFMAC 39 depends on BRCMFMAC
40 select BRCMFMAC_PROTO_BCDC
34 select FW_LOADER 41 select FW_LOADER
35 default y 42 default y
36 ---help--- 43 ---help---
@@ -42,6 +49,7 @@ config BRCMFMAC_USB
42 bool "USB bus interface support for FullMAC driver" 49 bool "USB bus interface support for FullMAC driver"
43 depends on (USB = y || USB = BRCMFMAC) 50 depends on (USB = y || USB = BRCMFMAC)
44 depends on BRCMFMAC 51 depends on BRCMFMAC
52 select BRCMFMAC_PROTO_BCDC
45 select FW_LOADER 53 select FW_LOADER
46 ---help--- 54 ---help---
47 This option enables the USB bus interface support for Broadcom 55 This option enables the USB bus interface support for Broadcom
@@ -52,6 +60,8 @@ config BRCMFMAC_PCIE
52 bool "PCIE bus interface support for FullMAC driver" 60 bool "PCIE bus interface support for FullMAC driver"
53 depends on BRCMFMAC 61 depends on BRCMFMAC
54 depends on PCI 62 depends on PCI
63 depends on HAS_DMA
64 select BRCMFMAC_PROTO_MSGBUF
55 select FW_LOADER 65 select FW_LOADER
56 ---help--- 66 ---help---
57 This option enables the PCIE bus interface support for Broadcom 67 This option enables the PCIE bus interface support for Broadcom
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/Makefile b/drivers/net/wireless/brcm80211/brcmfmac/Makefile
index c35adf4bc70b..90a977fe9a64 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/Makefile
+++ b/drivers/net/wireless/brcm80211/brcmfmac/Makefile
@@ -30,16 +30,18 @@ brcmfmac-objs += \
30 fwsignal.o \ 30 fwsignal.o \
31 p2p.o \ 31 p2p.o \
32 proto.o \ 32 proto.o \
33 bcdc.o \
34 commonring.o \
35 flowring.o \
36 msgbuf.o \
37 dhd_common.o \ 33 dhd_common.o \
38 dhd_linux.o \ 34 dhd_linux.o \
39 firmware.o \ 35 firmware.o \
40 feature.o \ 36 feature.o \
41 btcoex.o \ 37 btcoex.o \
42 vendor.o 38 vendor.o
39brcmfmac-$(CONFIG_BRCMFMAC_PROTO_BCDC) += \
40 bcdc.o
41brcmfmac-$(CONFIG_BRCMFMAC_PROTO_MSGBUF) += \
42 commonring.o \
43 flowring.o \
44 msgbuf.o
43brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \ 45brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \
44 dhd_sdio.o \ 46 dhd_sdio.o \
45 bcmsdh.o 47 bcmsdh.o
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h b/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h
index 17e8c039ff32..6003179c0ceb 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcdc.h
@@ -16,9 +16,12 @@
16#ifndef BRCMFMAC_BCDC_H 16#ifndef BRCMFMAC_BCDC_H
17#define BRCMFMAC_BCDC_H 17#define BRCMFMAC_BCDC_H
18 18
19 19#ifdef CONFIG_BRCMFMAC_PROTO_BCDC
20int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr); 20int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
21void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr); 21void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
22 22#else
23static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
24static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
25#endif
23 26
24#endif /* BRCMFMAC_BCDC_H */ 27#endif /* BRCMFMAC_BCDC_H */
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c
index 4f1daabc551b..44fc85f68f7a 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c
@@ -185,7 +185,13 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
185 ifevent->action, ifevent->ifidx, ifevent->bssidx, 185 ifevent->action, ifevent->ifidx, ifevent->bssidx,
186 ifevent->flags, ifevent->role); 186 ifevent->flags, ifevent->role);
187 187
188 if (ifevent->flags & BRCMF_E_IF_FLAG_NOIF) { 188 /* The P2P Device interface event must not be ignored
189 * contrary to what firmware tells us. The only way to
190 * distinguish the P2P Device is by looking at the ifidx
191 * and bssidx received.
192 */
193 if (!(ifevent->ifidx == 0 && ifevent->bssidx == 1) &&
194 (ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) {
189 brcmf_dbg(EVENT, "event can be ignored\n"); 195 brcmf_dbg(EVENT, "event can be ignored\n");
190 return; 196 return;
191 } 197 }
@@ -210,12 +216,12 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
210 return; 216 return;
211 } 217 }
212 218
213 if (ifevent->action == BRCMF_E_IF_CHANGE) 219 if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
214 brcmf_fws_reset_interface(ifp); 220 brcmf_fws_reset_interface(ifp);
215 221
216 err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data); 222 err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
217 223
218 if (ifevent->action == BRCMF_E_IF_DEL) { 224 if (ifp && ifevent->action == BRCMF_E_IF_DEL) {
219 brcmf_fws_del_interface(ifp); 225 brcmf_fws_del_interface(ifp);
220 brcmf_del_if(drvr, ifevent->bssidx); 226 brcmf_del_if(drvr, ifevent->bssidx);
221 } 227 }
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fweh.h b/drivers/net/wireless/brcm80211/brcmfmac/fweh.h
index dd20b1862d44..cbf033f59109 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.h
@@ -172,6 +172,8 @@ enum brcmf_fweh_event_code {
172#define BRCMF_E_IF_ROLE_STA 0 172#define BRCMF_E_IF_ROLE_STA 0
173#define BRCMF_E_IF_ROLE_AP 1 173#define BRCMF_E_IF_ROLE_AP 1
174#define BRCMF_E_IF_ROLE_WDS 2 174#define BRCMF_E_IF_ROLE_WDS 2
175#define BRCMF_E_IF_ROLE_P2P_GO 3
176#define BRCMF_E_IF_ROLE_P2P_CLIENT 4
175 177
176/** 178/**
177 * definitions for event packet validation. 179 * definitions for event packet validation.
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h
index f901ae52bf2b..77a51b8c1e12 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h
@@ -15,6 +15,7 @@
15#ifndef BRCMFMAC_MSGBUF_H 15#ifndef BRCMFMAC_MSGBUF_H
16#define BRCMFMAC_MSGBUF_H 16#define BRCMFMAC_MSGBUF_H
17 17
18#ifdef CONFIG_BRCMFMAC_PROTO_MSGBUF
18 19
19#define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM 20 20#define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM 20
20#define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_MAX_ITEM 256 21#define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_MAX_ITEM 256
@@ -32,9 +33,15 @@
32 33
33 34
34int brcmf_proto_msgbuf_rx_trigger(struct device *dev); 35int brcmf_proto_msgbuf_rx_trigger(struct device *dev);
36void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid);
35int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr); 37int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr);
36void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr); 38void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr);
37void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid); 39#else
38 40static inline int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
41{
42 return 0;
43}
44static inline void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr) {}
45#endif
39 46
40#endif /* BRCMFMAC_MSGBUF_H */ 47#endif /* BRCMFMAC_MSGBUF_H */
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index 12a60ca1462a..54fc1a1cb4f7 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -497,8 +497,11 @@ brcmf_configure_arp_offload(struct brcmf_if *ifp, bool enable)
497static void 497static void
498brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev) 498brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev)
499{ 499{
500 struct net_device *ndev = wdev->netdev; 500 struct brcmf_cfg80211_vif *vif;
501 struct brcmf_if *ifp = netdev_priv(ndev); 501 struct brcmf_if *ifp;
502
503 vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev);
504 ifp = vif->ifp;
502 505
503 if ((wdev->iftype == NL80211_IFTYPE_ADHOC) || 506 if ((wdev->iftype == NL80211_IFTYPE_ADHOC) ||
504 (wdev->iftype == NL80211_IFTYPE_AP) || 507 (wdev->iftype == NL80211_IFTYPE_AP) ||
@@ -5149,6 +5152,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
5149 5152
5150 ch.band = BRCMU_CHAN_BAND_2G; 5153 ch.band = BRCMU_CHAN_BAND_2G;
5151 ch.bw = BRCMU_CHAN_BW_40; 5154 ch.bw = BRCMU_CHAN_BW_40;
5155 ch.sb = BRCMU_CHAN_SB_NONE;
5152 ch.chnum = 0; 5156 ch.chnum = 0;
5153 cfg->d11inf.encchspec(&ch); 5157 cfg->d11inf.encchspec(&ch);
5154 5158
@@ -5182,6 +5186,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
5182 5186
5183 brcmf_update_bw40_channel_flag(&band->channels[j], &ch); 5187 brcmf_update_bw40_channel_flag(&band->channels[j], &ch);
5184 } 5188 }
5189 kfree(pbuf);
5185 } 5190 }
5186 return err; 5191 return err;
5187} 5192}
diff --git a/drivers/net/wireless/iwlwifi/dvm/power.c b/drivers/net/wireless/iwlwifi/dvm/power.c
index 760c45c34ef3..1513dbc79c14 100644
--- a/drivers/net/wireless/iwlwifi/dvm/power.c
+++ b/drivers/net/wireless/iwlwifi/dvm/power.c
@@ -40,7 +40,7 @@
40#include "commands.h" 40#include "commands.h"
41#include "power.h" 41#include "power.h"
42 42
43static bool force_cam; 43static bool force_cam = true;
44module_param(force_cam, bool, 0644); 44module_param(force_cam, bool, 0644);
45MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)"); 45MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)");
46 46
diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c
index 7e26d0dbfcf7..8e99dffa88e8 100644
--- a/drivers/net/wireless/iwlwifi/iwl-7000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-7000.c
@@ -85,6 +85,8 @@
85#define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */ 85#define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */
86#define IWL3160_NVM_VERSION 0x709 86#define IWL3160_NVM_VERSION 0x709
87#define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */ 87#define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */
88#define IWL3165_NVM_VERSION 0x709
89#define IWL3165_TX_POWER_VERSION 0xffff /* meaningless */
88#define IWL7265_NVM_VERSION 0x0a1d 90#define IWL7265_NVM_VERSION 0x0a1d
89#define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */ 91#define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */
90 92
@@ -94,6 +96,9 @@
94#define IWL3160_FW_PRE "iwlwifi-3160-" 96#define IWL3160_FW_PRE "iwlwifi-3160-"
95#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode" 97#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode"
96 98
99#define IWL3165_FW_PRE "iwlwifi-3165-"
100#define IWL3165_MODULE_FIRMWARE(api) IWL3165_FW_PRE __stringify(api) ".ucode"
101
97#define IWL7265_FW_PRE "iwlwifi-7265-" 102#define IWL7265_FW_PRE "iwlwifi-7265-"
98#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode" 103#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode"
99 104
@@ -215,6 +220,16 @@ static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = {
215 {0}, 220 {0},
216}; 221};
217 222
223const struct iwl_cfg iwl3165_2ac_cfg = {
224 .name = "Intel(R) Dual Band Wireless AC 3165",
225 .fw_name_pre = IWL3165_FW_PRE,
226 IWL_DEVICE_7000,
227 .ht_params = &iwl7000_ht_params,
228 .nvm_ver = IWL3165_NVM_VERSION,
229 .nvm_calib_ver = IWL3165_TX_POWER_VERSION,
230 .pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
231};
232
218const struct iwl_cfg iwl7265_2ac_cfg = { 233const struct iwl_cfg iwl7265_2ac_cfg = {
219 .name = "Intel(R) Dual Band Wireless AC 7265", 234 .name = "Intel(R) Dual Band Wireless AC 7265",
220 .fw_name_pre = IWL7265_FW_PRE, 235 .fw_name_pre = IWL7265_FW_PRE,
@@ -247,4 +262,5 @@ const struct iwl_cfg iwl7265_n_cfg = {
247 262
248MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); 263MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
249MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); 264MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
265MODULE_FIRMWARE(IWL3165_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
250MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); 266MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
diff --git a/drivers/net/wireless/iwlwifi/iwl-config.h b/drivers/net/wireless/iwlwifi/iwl-config.h
index 8da596db9abe..3d7cc37420ae 100644
--- a/drivers/net/wireless/iwlwifi/iwl-config.h
+++ b/drivers/net/wireless/iwlwifi/iwl-config.h
@@ -120,6 +120,8 @@ enum iwl_led_mode {
120#define IWL_LONG_WD_TIMEOUT 10000 120#define IWL_LONG_WD_TIMEOUT 10000
121#define IWL_MAX_WD_TIMEOUT 120000 121#define IWL_MAX_WD_TIMEOUT 120000
122 122
123#define IWL_DEFAULT_MAX_TX_POWER 22
124
123/* Antenna presence definitions */ 125/* Antenna presence definitions */
124#define ANT_NONE 0x0 126#define ANT_NONE 0x0
125#define ANT_A BIT(0) 127#define ANT_A BIT(0)
@@ -335,6 +337,7 @@ extern const struct iwl_cfg iwl7260_n_cfg;
335extern const struct iwl_cfg iwl3160_2ac_cfg; 337extern const struct iwl_cfg iwl3160_2ac_cfg;
336extern const struct iwl_cfg iwl3160_2n_cfg; 338extern const struct iwl_cfg iwl3160_2n_cfg;
337extern const struct iwl_cfg iwl3160_n_cfg; 339extern const struct iwl_cfg iwl3160_n_cfg;
340extern const struct iwl_cfg iwl3165_2ac_cfg;
338extern const struct iwl_cfg iwl7265_2ac_cfg; 341extern const struct iwl_cfg iwl7265_2ac_cfg;
339extern const struct iwl_cfg iwl7265_2n_cfg; 342extern const struct iwl_cfg iwl7265_2n_cfg;
340extern const struct iwl_cfg iwl7265_n_cfg; 343extern const struct iwl_cfg iwl7265_n_cfg;
diff --git a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
index 8e7af798abd1..40718f814f8d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
+++ b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
@@ -148,8 +148,6 @@ static const u8 iwl_nvm_channels_family_8000[] = {
148#define LAST_2GHZ_HT_PLUS 9 148#define LAST_2GHZ_HT_PLUS 9
149#define LAST_5GHZ_HT 161 149#define LAST_5GHZ_HT 161
150 150
151#define DEFAULT_MAX_TX_POWER 16
152
153/* rate data (static) */ 151/* rate data (static) */
154static struct ieee80211_rate iwl_cfg80211_rates[] = { 152static struct ieee80211_rate iwl_cfg80211_rates[] = {
155 { .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, }, 153 { .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, },
@@ -297,7 +295,7 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg,
297 * Default value - highest tx power value. max_power 295 * Default value - highest tx power value. max_power
298 * is not used in mvm, and is used for backwards compatibility 296 * is not used in mvm, and is used for backwards compatibility
299 */ 297 */
300 channel->max_power = DEFAULT_MAX_TX_POWER; 298 channel->max_power = IWL_DEFAULT_MAX_TX_POWER;
301 is_5ghz = channel->band == IEEE80211_BAND_5GHZ; 299 is_5ghz = channel->band == IEEE80211_BAND_5GHZ;
302 IWL_DEBUG_EEPROM(dev, 300 IWL_DEBUG_EEPROM(dev,
303 "Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n", 301 "Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n",
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
index 2262d6dc61ae..6e8f3e2aef74 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
@@ -587,8 +587,6 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
587 lockdep_assert_held(&mvm->mutex); 587 lockdep_assert_held(&mvm->mutex);
588 588
589 if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) { 589 if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
590 u32 mode;
591
592 switch (mvm->bt_force_ant_mode) { 590 switch (mvm->bt_force_ant_mode) {
593 case BT_FORCE_ANT_BT: 591 case BT_FORCE_ANT_BT:
594 mode = BT_COEX_BT; 592 mode = BT_COEX_BT;
@@ -758,7 +756,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
758 struct iwl_bt_iterator_data *data = _data; 756 struct iwl_bt_iterator_data *data = _data;
759 struct iwl_mvm *mvm = data->mvm; 757 struct iwl_mvm *mvm = data->mvm;
760 struct ieee80211_chanctx_conf *chanctx_conf; 758 struct ieee80211_chanctx_conf *chanctx_conf;
761 enum ieee80211_smps_mode smps_mode; 759 /* default smps_mode is AUTOMATIC - only used for client modes */
760 enum ieee80211_smps_mode smps_mode = IEEE80211_SMPS_AUTOMATIC;
762 u32 bt_activity_grading; 761 u32 bt_activity_grading;
763 int ave_rssi; 762 int ave_rssi;
764 763
@@ -766,8 +765,6 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
766 765
767 switch (vif->type) { 766 switch (vif->type) {
768 case NL80211_IFTYPE_STATION: 767 case NL80211_IFTYPE_STATION:
769 /* default smps_mode for BSS / P2P client is AUTOMATIC */
770 smps_mode = IEEE80211_SMPS_AUTOMATIC;
771 break; 768 break;
772 case NL80211_IFTYPE_AP: 769 case NL80211_IFTYPE_AP:
773 if (!mvmvif->ap_ibss_active) 770 if (!mvmvif->ap_ibss_active)
@@ -799,7 +796,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
799 else if (bt_activity_grading >= BT_LOW_TRAFFIC) 796 else if (bt_activity_grading >= BT_LOW_TRAFFIC)
800 smps_mode = IEEE80211_SMPS_DYNAMIC; 797 smps_mode = IEEE80211_SMPS_DYNAMIC;
801 798
802 /* relax SMPS contraints for next association */ 799 /* relax SMPS constraints for next association */
803 if (!vif->bss_conf.assoc) 800 if (!vif->bss_conf.assoc)
804 smps_mode = IEEE80211_SMPS_AUTOMATIC; 801 smps_mode = IEEE80211_SMPS_AUTOMATIC;
805 802
diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c b/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
index d919b4ebc83c..9aa2311a776c 100644
--- a/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
+++ b/drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
@@ -76,8 +76,7 @@ static void iwl_dbgfs_update_pm(struct iwl_mvm *mvm,
76 76
77 switch (param) { 77 switch (param) {
78 case MVM_DEBUGFS_PM_KEEP_ALIVE: { 78 case MVM_DEBUGFS_PM_KEEP_ALIVE: {
79 struct ieee80211_hw *hw = mvm->hw; 79 int dtimper = vif->bss_conf.dtim_period ?: 1;
80 int dtimper = hw->conf.ps_dtim_period ?: 1;
81 int dtimper_msec = dtimper * vif->bss_conf.beacon_int; 80 int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
82 81
83 IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val); 82 IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val);
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
index 9c975f9ecfcb..541b844c6b5d 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
@@ -1603,14 +1603,14 @@ enum iwl_sf_scenario {
1603 1603
1604/** 1604/**
1605 * Smart Fifo configuration command. 1605 * Smart Fifo configuration command.
1606 * @state: smart fifo state, types listed in iwl_sf_sate. 1606 * @state: smart fifo state, types listed in enum %iwl_sf_sate.
1607 * @watermark: Minimum allowed availabe free space in RXF for transient state. 1607 * @watermark: Minimum allowed availabe free space in RXF for transient state.
1608 * @long_delay_timeouts: aging and idle timer values for each scenario 1608 * @long_delay_timeouts: aging and idle timer values for each scenario
1609 * in long delay state. 1609 * in long delay state.
1610 * @full_on_timeouts: timer values for each scenario in full on state. 1610 * @full_on_timeouts: timer values for each scenario in full on state.
1611 */ 1611 */
1612struct iwl_sf_cfg_cmd { 1612struct iwl_sf_cfg_cmd {
1613 enum iwl_sf_state state; 1613 __le32 state;
1614 __le32 watermark[SF_TRANSIENT_STATES_NUMBER]; 1614 __le32 watermark[SF_TRANSIENT_STATES_NUMBER];
1615 __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; 1615 __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
1616 __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; 1616 __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
index 9cbb192f680e..158aed501473 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
@@ -727,11 +727,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
727 !force_assoc_off) { 727 !force_assoc_off) {
728 u32 dtim_offs; 728 u32 dtim_offs;
729 729
730 /* Allow beacons to pass through as long as we are not
731 * associated, or we do not have dtim period information.
732 */
733 cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
734
735 /* 730 /*
736 * The DTIM count counts down, so when it is N that means N 731 * The DTIM count counts down, so when it is N that means N
737 * more beacon intervals happen until the DTIM TBTT. Therefore 732 * more beacon intervals happen until the DTIM TBTT. Therefore
@@ -765,6 +760,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
765 ctxt_sta->is_assoc = cpu_to_le32(1); 760 ctxt_sta->is_assoc = cpu_to_le32(1);
766 } else { 761 } else {
767 ctxt_sta->is_assoc = cpu_to_le32(0); 762 ctxt_sta->is_assoc = cpu_to_le32(0);
763
764 /* Allow beacons to pass through as long as we are not
765 * associated, or we do not have dtim period information.
766 */
767 cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
768 } 768 }
769 769
770 ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int); 770 ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int);
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 8d1d4b40b0a3..069bb8e81c36 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -398,12 +398,14 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
398 else 398 else
399 hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; 399 hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
400 400
401 /* TODO: enable that only for firmwares that don't crash */ 401 if (IWL_UCODE_API(mvm->fw->ucode_ver) >= 10) {
402 /* hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; */ 402 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
403 hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX; 403 hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
404 hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES; 404 hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
405 /* we create the 802.11 header and zero length SSID IE. */ 405 /* we create the 802.11 header and zero length SSID IE. */
406 hw->wiphy->max_sched_scan_ie_len = SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2; 406 hw->wiphy->max_sched_scan_ie_len =
407 SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2;
408 }
407 409
408 hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN | 410 hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN |
409 NL80211_FEATURE_LOW_PRIORITY_SCAN | 411 NL80211_FEATURE_LOW_PRIORITY_SCAN |
@@ -1544,11 +1546,6 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
1544 */ 1546 */
1545 iwl_mvm_remove_time_event(mvm, mvmvif, 1547 iwl_mvm_remove_time_event(mvm, mvmvif,
1546 &mvmvif->time_event_data); 1548 &mvmvif->time_event_data);
1547 } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
1548 BSS_CHANGED_QOS)) {
1549 ret = iwl_mvm_power_update_mac(mvm);
1550 if (ret)
1551 IWL_ERR(mvm, "failed to update power mode\n");
1552 } 1549 }
1553 1550
1554 if (changes & BSS_CHANGED_BEACON_INFO) { 1551 if (changes & BSS_CHANGED_BEACON_INFO) {
@@ -1556,6 +1553,12 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
1556 WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0)); 1553 WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0));
1557 } 1554 }
1558 1555
1556 if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | BSS_CHANGED_QOS)) {
1557 ret = iwl_mvm_power_update_mac(mvm);
1558 if (ret)
1559 IWL_ERR(mvm, "failed to update power mode\n");
1560 }
1561
1559 if (changes & BSS_CHANGED_TXPOWER) { 1562 if (changes & BSS_CHANGED_TXPOWER) {
1560 IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n", 1563 IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n",
1561 bss_conf->txpower); 1564 bss_conf->txpower);
diff --git a/drivers/net/wireless/iwlwifi/mvm/power.c b/drivers/net/wireless/iwlwifi/mvm/power.c
index e7a6626fe839..5a29c193b72a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/power.c
+++ b/drivers/net/wireless/iwlwifi/mvm/power.c
@@ -290,7 +290,6 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm,
290 struct ieee80211_vif *vif, 290 struct ieee80211_vif *vif,
291 struct iwl_mac_power_cmd *cmd) 291 struct iwl_mac_power_cmd *cmd)
292{ 292{
293 struct ieee80211_hw *hw = mvm->hw;
294 struct ieee80211_chanctx_conf *chanctx_conf; 293 struct ieee80211_chanctx_conf *chanctx_conf;
295 struct ieee80211_channel *chan; 294 struct ieee80211_channel *chan;
296 int dtimper, dtimper_msec; 295 int dtimper, dtimper_msec;
@@ -301,7 +300,7 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm,
301 300
302 cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id, 301 cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
303 mvmvif->color)); 302 mvmvif->color));
304 dtimper = hw->conf.ps_dtim_period ?: 1; 303 dtimper = vif->bss_conf.dtim_period;
305 304
306 /* 305 /*
307 * Regardless of power management state the driver must set 306 * Regardless of power management state the driver must set
@@ -963,7 +962,7 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm,
963 iwl_mvm_power_build_cmd(mvm, vif, &cmd); 962 iwl_mvm_power_build_cmd(mvm, vif, &cmd);
964 if (enable) { 963 if (enable) {
965 /* configure skip over dtim up to 300 msec */ 964 /* configure skip over dtim up to 300 msec */
966 int dtimper = mvm->hw->conf.ps_dtim_period ?: 1; 965 int dtimper = vif->bss_conf.dtim_period ?: 1;
967 int dtimper_msec = dtimper * vif->bss_conf.beacon_int; 966 int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
968 967
969 if (WARN_ON(!dtimper_msec)) 968 if (WARN_ON(!dtimper_msec))
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c b/drivers/net/wireless/iwlwifi/mvm/rx.c
index 48144e3ad527..a6cb84ed653f 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rx.c
@@ -151,13 +151,13 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm,
151 le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]); 151 le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]);
152 energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >> 152 energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >>
153 IWL_RX_INFO_ENERGY_ANT_A_POS; 153 IWL_RX_INFO_ENERGY_ANT_A_POS;
154 energy_a = energy_a ? -energy_a : -256; 154 energy_a = energy_a ? -energy_a : S8_MIN;
155 energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >> 155 energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >>
156 IWL_RX_INFO_ENERGY_ANT_B_POS; 156 IWL_RX_INFO_ENERGY_ANT_B_POS;
157 energy_b = energy_b ? -energy_b : -256; 157 energy_b = energy_b ? -energy_b : S8_MIN;
158 energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >> 158 energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >>
159 IWL_RX_INFO_ENERGY_ANT_C_POS; 159 IWL_RX_INFO_ENERGY_ANT_C_POS;
160 energy_c = energy_c ? -energy_c : -256; 160 energy_c = energy_c ? -energy_c : S8_MIN;
161 max_energy = max(energy_a, energy_b); 161 max_energy = max(energy_a, energy_b);
162 max_energy = max(max_energy, energy_c); 162 max_energy = max(max_energy, energy_c);
163 163
diff --git a/drivers/net/wireless/iwlwifi/mvm/sf.c b/drivers/net/wireless/iwlwifi/mvm/sf.c
index d1922afe06f4..f88410c7cbfb 100644
--- a/drivers/net/wireless/iwlwifi/mvm/sf.c
+++ b/drivers/net/wireless/iwlwifi/mvm/sf.c
@@ -174,7 +174,7 @@ static int iwl_mvm_sf_config(struct iwl_mvm *mvm, u8 sta_id,
174 enum iwl_sf_state new_state) 174 enum iwl_sf_state new_state)
175{ 175{
176 struct iwl_sf_cfg_cmd sf_cmd = { 176 struct iwl_sf_cfg_cmd sf_cmd = {
177 .state = new_state, 177 .state = cpu_to_le32(new_state),
178 }; 178 };
179 struct ieee80211_sta *sta; 179 struct ieee80211_sta *sta;
180 int ret = 0; 180 int ret = 0;
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
index 963edb8656ad..ed0919465e0e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
@@ -170,10 +170,14 @@ static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
170 170
171 /* 171 /*
172 * for data packets, rate info comes from the table inside the fw. This 172 * for data packets, rate info comes from the table inside the fw. This
173 * table is controlled by LINK_QUALITY commands 173 * table is controlled by LINK_QUALITY commands. Exclude ctrl port
174 * frames like EAPOLs which should be treated as mgmt frames. This
175 * avoids them being sent initially in high rates which increases the
176 * chances for completion of the 4-Way handshake.
174 */ 177 */
175 178
176 if (ieee80211_is_data(fc) && sta) { 179 if (ieee80211_is_data(fc) && sta &&
180 !(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)) {
177 tx_cmd->initial_rate_index = 0; 181 tx_cmd->initial_rate_index = 0;
178 tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE); 182 tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
179 return; 183 return;
diff --git a/drivers/net/wireless/iwlwifi/pcie/drv.c b/drivers/net/wireless/iwlwifi/pcie/drv.c
index dbbbf23082a2..b9d5049e52da 100644
--- a/drivers/net/wireless/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
@@ -354,11 +354,17 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
354 {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)}, 354 {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},
355 {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)}, 355 {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},
356 {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)}, 356 {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},
357 {IWL_PCI_DEVICE(0x08B4, 0x8370, iwl3160_2ac_cfg)},
358 {IWL_PCI_DEVICE(0x08B4, 0x8272, iwl3160_2ac_cfg)},
357 {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)}, 359 {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},
358 {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)}, 360 {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)},
359 {IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)}, 361 {IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)},
360 {IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)}, 362 {IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)},
361 363
364/* 3165 Series */
365 {IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)},
366 {IWL_PCI_DEVICE(0x3165, 0x4210, iwl3165_2ac_cfg)},
367
362/* 7265 Series */ 368/* 7265 Series */
363 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)}, 369 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
364 {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)}, 370 {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)},
@@ -380,6 +386,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
380 {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)}, 386 {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
381 {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)}, 387 {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
382 {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)}, 388 {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)},
389 {IWL_PCI_DEVICE(0x095A, 0x900A, iwl7265_2ac_cfg)},
383 {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)}, 390 {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},
384 {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)}, 391 {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)},
385 {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)}, 392 {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 9dd63b822025..e9bf2f47b61a 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -510,7 +510,7 @@ static void ntb_transport_setup_qp_mw(struct ntb_transport *nt,
510 510
511 WARN_ON(nt->mw[mw_num].virt_addr == NULL); 511 WARN_ON(nt->mw[mw_num].virt_addr == NULL);
512 512
513 if (nt->max_qps % mw_max && mw_num < nt->max_qps % mw_max) 513 if (nt->max_qps % mw_max && mw_num + 1 < nt->max_qps / mw_max)
514 num_qps_mw = nt->max_qps / mw_max + 1; 514 num_qps_mw = nt->max_qps / mw_max + 1;
515 else 515 else
516 num_qps_mw = nt->max_qps / mw_max; 516 num_qps_mw = nt->max_qps / mw_max;
@@ -576,6 +576,19 @@ static int ntb_set_mw(struct ntb_transport *nt, int num_mw, unsigned int size)
576 return -ENOMEM; 576 return -ENOMEM;
577 } 577 }
578 578
579 /*
580 * we must ensure that the memory address allocated is BAR size
581 * aligned in order for the XLAT register to take the value. This
582 * is a requirement of the hardware. It is recommended to setup CMA
583 * for BAR sizes equal or greater than 4MB.
584 */
585 if (!IS_ALIGNED(mw->dma_addr, mw->size)) {
586 dev_err(&pdev->dev, "DMA memory %pad not aligned to BAR size\n",
587 &mw->dma_addr);
588 ntb_free_mw(nt, num_mw);
589 return -ENOMEM;
590 }
591
579 /* Notify HW the memory location of the receive buffer */ 592 /* Notify HW the memory location of the receive buffer */
580 ntb_set_mw_addr(nt->ndev, num_mw, mw->dma_addr); 593 ntb_set_mw_addr(nt->ndev, num_mw, mw->dma_addr);
581 594
@@ -856,7 +869,7 @@ static int ntb_transport_init_queue(struct ntb_transport *nt,
856 qp->client_ready = NTB_LINK_DOWN; 869 qp->client_ready = NTB_LINK_DOWN;
857 qp->event_handler = NULL; 870 qp->event_handler = NULL;
858 871
859 if (nt->max_qps % mw_max && mw_num < nt->max_qps % mw_max) 872 if (nt->max_qps % mw_max && mw_num + 1 < nt->max_qps / mw_max)
860 num_qps_mw = nt->max_qps / mw_max + 1; 873 num_qps_mw = nt->max_qps / mw_max + 1;
861 else 874 else
862 num_qps_mw = nt->max_qps / mw_max; 875 num_qps_mw = nt->max_qps / mw_max;
diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c
index 9eae9834bcc7..a0580afe1713 100644
--- a/drivers/parisc/dino.c
+++ b/drivers/parisc/dino.c
@@ -913,7 +913,7 @@ static int __init dino_probe(struct parisc_device *dev)
913 printk("%s version %s found at 0x%lx\n", name, version, hpa); 913 printk("%s version %s found at 0x%lx\n", name, version, hpa);
914 914
915 if (!request_mem_region(hpa, PAGE_SIZE, name)) { 915 if (!request_mem_region(hpa, PAGE_SIZE, name)) {
916 printk(KERN_ERR "DINO: Hey! Someone took my MMIO space (0x%ld)!\n", 916 printk(KERN_ERR "DINO: Hey! Someone took my MMIO space (0x%lx)!\n",
917 hpa); 917 hpa);
918 return 1; 918 return 1;
919 } 919 }
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index a568efaa331c..35fc73a8d0b3 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -49,6 +49,9 @@ struct imx6_pcie {
49 49
50/* PCIe Port Logic registers (memory-mapped) */ 50/* PCIe Port Logic registers (memory-mapped) */
51#define PL_OFFSET 0x700 51#define PL_OFFSET 0x700
52#define PCIE_PL_PFLR (PL_OFFSET + 0x08)
53#define PCIE_PL_PFLR_LINK_STATE_MASK (0x3f << 16)
54#define PCIE_PL_PFLR_FORCE_LINK (1 << 15)
52#define PCIE_PHY_DEBUG_R0 (PL_OFFSET + 0x28) 55#define PCIE_PHY_DEBUG_R0 (PL_OFFSET + 0x28)
53#define PCIE_PHY_DEBUG_R1 (PL_OFFSET + 0x2c) 56#define PCIE_PHY_DEBUG_R1 (PL_OFFSET + 0x2c)
54#define PCIE_PHY_DEBUG_R1_XMLH_LINK_IN_TRAINING (1 << 29) 57#define PCIE_PHY_DEBUG_R1_XMLH_LINK_IN_TRAINING (1 << 29)
@@ -214,6 +217,32 @@ static int imx6q_pcie_abort_handler(unsigned long addr,
214static int imx6_pcie_assert_core_reset(struct pcie_port *pp) 217static int imx6_pcie_assert_core_reset(struct pcie_port *pp)
215{ 218{
216 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); 219 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
220 u32 val, gpr1, gpr12;
221
222 /*
223 * If the bootloader already enabled the link we need some special
224 * handling to get the core back into a state where it is safe to
225 * touch it for configuration. As there is no dedicated reset signal
226 * wired up for MX6QDL, we need to manually force LTSSM into "detect"
227 * state before completely disabling LTSSM, which is a prerequisite
228 * for core configuration.
229 *
230 * If both LTSSM_ENABLE and REF_SSP_ENABLE are active we have a strong
231 * indication that the bootloader activated the link.
232 */
233 regmap_read(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, &gpr1);
234 regmap_read(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, &gpr12);
235
236 if ((gpr1 & IMX6Q_GPR1_PCIE_REF_CLK_EN) &&
237 (gpr12 & IMX6Q_GPR12_PCIE_CTL_2)) {
238 val = readl(pp->dbi_base + PCIE_PL_PFLR);
239 val &= ~PCIE_PL_PFLR_LINK_STATE_MASK;
240 val |= PCIE_PL_PFLR_FORCE_LINK;
241 writel(val, pp->dbi_base + PCIE_PL_PFLR);
242
243 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
244 IMX6Q_GPR12_PCIE_CTL_2, 0 << 10);
245 }
217 246
218 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, 247 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
219 IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18); 248 IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18);
@@ -589,6 +618,14 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
589 return 0; 618 return 0;
590} 619}
591 620
621static void imx6_pcie_shutdown(struct platform_device *pdev)
622{
623 struct imx6_pcie *imx6_pcie = platform_get_drvdata(pdev);
624
625 /* bring down link, so bootloader gets clean state in case of reboot */
626 imx6_pcie_assert_core_reset(&imx6_pcie->pp);
627}
628
592static const struct of_device_id imx6_pcie_of_match[] = { 629static const struct of_device_id imx6_pcie_of_match[] = {
593 { .compatible = "fsl,imx6q-pcie", }, 630 { .compatible = "fsl,imx6q-pcie", },
594 {}, 631 {},
@@ -601,6 +638,7 @@ static struct platform_driver imx6_pcie_driver = {
601 .owner = THIS_MODULE, 638 .owner = THIS_MODULE,
602 .of_match_table = imx6_pcie_of_match, 639 .of_match_table = imx6_pcie_of_match,
603 }, 640 },
641 .shutdown = imx6_pcie_shutdown,
604}; 642};
605 643
606/* Freescale PCIe driver does not allow module unload */ 644/* Freescale PCIe driver does not allow module unload */
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 70741c8c46a0..6cd5160fc057 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -560,19 +560,15 @@ static void disable_slot(struct acpiphp_slot *slot)
560 slot->flags &= (~SLOT_ENABLED); 560 slot->flags &= (~SLOT_ENABLED);
561} 561}
562 562
563static bool acpiphp_no_hotplug(struct acpi_device *adev)
564{
565 return adev && adev->flags.no_hotplug;
566}
567
568static bool slot_no_hotplug(struct acpiphp_slot *slot) 563static bool slot_no_hotplug(struct acpiphp_slot *slot)
569{ 564{
570 struct acpiphp_func *func; 565 struct pci_bus *bus = slot->bus;
566 struct pci_dev *dev;
571 567
572 list_for_each_entry(func, &slot->funcs, sibling) 568 list_for_each_entry(dev, &bus->devices, bus_list) {
573 if (acpiphp_no_hotplug(func_to_acpi_device(func))) 569 if (PCI_SLOT(dev->devfn) == slot->device && dev->ignore_hotplug)
574 return true; 570 return true;
575 571 }
576 return false; 572 return false;
577} 573}
578 574
@@ -645,7 +641,7 @@ static void trim_stale_devices(struct pci_dev *dev)
645 641
646 status = acpi_evaluate_integer(adev->handle, "_STA", NULL, &sta); 642 status = acpi_evaluate_integer(adev->handle, "_STA", NULL, &sta);
647 alive = (ACPI_SUCCESS(status) && device_status_valid(sta)) 643 alive = (ACPI_SUCCESS(status) && device_status_valid(sta))
648 || acpiphp_no_hotplug(adev); 644 || dev->ignore_hotplug;
649 } 645 }
650 if (!alive) 646 if (!alive)
651 alive = pci_device_is_present(dev); 647 alive = pci_device_is_present(dev);
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index 9da84b8b27d8..5e01ae39ec46 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -506,6 +506,8 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)
506{ 506{
507 struct controller *ctrl = (struct controller *)dev_id; 507 struct controller *ctrl = (struct controller *)dev_id;
508 struct pci_dev *pdev = ctrl_dev(ctrl); 508 struct pci_dev *pdev = ctrl_dev(ctrl);
509 struct pci_bus *subordinate = pdev->subordinate;
510 struct pci_dev *dev;
509 struct slot *slot = ctrl->slot; 511 struct slot *slot = ctrl->slot;
510 u16 detected, intr_loc; 512 u16 detected, intr_loc;
511 513
@@ -539,6 +541,16 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)
539 wake_up(&ctrl->queue); 541 wake_up(&ctrl->queue);
540 } 542 }
541 543
544 if (subordinate) {
545 list_for_each_entry(dev, &subordinate->devices, bus_list) {
546 if (dev->ignore_hotplug) {
547 ctrl_dbg(ctrl, "ignoring hotplug event %#06x (%s requested no hotplug)\n",
548 intr_loc, pci_name(dev));
549 return IRQ_HANDLED;
550 }
551 }
552 }
553
542 if (!(intr_loc & ~PCI_EXP_SLTSTA_CC)) 554 if (!(intr_loc & ~PCI_EXP_SLTSTA_CC))
543 return IRQ_HANDLED; 555 return IRQ_HANDLED;
544 556
diff --git a/drivers/pci/hotplug/pcihp_slot.c b/drivers/pci/hotplug/pcihp_slot.c
index e246a10a0d2c..3e36ec8d708a 100644
--- a/drivers/pci/hotplug/pcihp_slot.c
+++ b/drivers/pci/hotplug/pcihp_slot.c
@@ -46,7 +46,6 @@ static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
46 */ 46 */
47 if (pci_is_pcie(dev)) 47 if (pci_is_pcie(dev))
48 return; 48 return;
49 dev_info(&dev->dev, "using default PCI settings\n");
50 hpp = &pci_default_type0; 49 hpp = &pci_default_type0;
51 } 50 }
52 51
@@ -153,7 +152,6 @@ void pci_configure_slot(struct pci_dev *dev)
153{ 152{
154 struct pci_dev *cdev; 153 struct pci_dev *cdev;
155 struct hotplug_params hpp; 154 struct hotplug_params hpp;
156 int ret;
157 155
158 if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL || 156 if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL ||
159 (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE && 157 (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
@@ -163,9 +161,7 @@ void pci_configure_slot(struct pci_dev *dev)
163 pcie_bus_configure_settings(dev->bus); 161 pcie_bus_configure_settings(dev->bus);
164 162
165 memset(&hpp, 0, sizeof(hpp)); 163 memset(&hpp, 0, sizeof(hpp));
166 ret = pci_get_hp_params(dev, &hpp); 164 pci_get_hp_params(dev, &hpp);
167 if (ret)
168 dev_warn(&dev->dev, "no hotplug settings from platform\n");
169 165
170 program_hpp_type2(dev, hpp.t2); 166 program_hpp_type2(dev, hpp.t2);
171 program_hpp_type1(dev, hpp.t1); 167 program_hpp_type1(dev, hpp.t1);
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 0dd742719154..f833aa271a2e 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -41,9 +41,9 @@ config PHY_MVEBU_SATA
41config PHY_MIPHY365X 41config PHY_MIPHY365X
42 tristate "STMicroelectronics MIPHY365X PHY driver for STiH41x series" 42 tristate "STMicroelectronics MIPHY365X PHY driver for STiH41x series"
43 depends on ARCH_STI 43 depends on ARCH_STI
44 depends on GENERIC_PHY
45 depends on HAS_IOMEM 44 depends on HAS_IOMEM
46 depends on OF 45 depends on OF
46 select GENERIC_PHY
47 help 47 help
48 Enable this to support the miphy transceiver (for SATA/PCIE) 48 Enable this to support the miphy transceiver (for SATA/PCIE)
49 that is part of STMicroelectronics STiH41x SoC series. 49 that is part of STMicroelectronics STiH41x SoC series.
@@ -214,12 +214,14 @@ config PHY_QCOM_IPQ806X_SATA
214config PHY_ST_SPEAR1310_MIPHY 214config PHY_ST_SPEAR1310_MIPHY
215 tristate "ST SPEAR1310-MIPHY driver" 215 tristate "ST SPEAR1310-MIPHY driver"
216 select GENERIC_PHY 216 select GENERIC_PHY
217 depends on MACH_SPEAR1310 || COMPILE_TEST
217 help 218 help
218 Support for ST SPEAr1310 MIPHY which can be used for PCIe and SATA. 219 Support for ST SPEAr1310 MIPHY which can be used for PCIe and SATA.
219 220
220config PHY_ST_SPEAR1340_MIPHY 221config PHY_ST_SPEAR1340_MIPHY
221 tristate "ST SPEAR1340-MIPHY driver" 222 tristate "ST SPEAR1340-MIPHY driver"
222 select GENERIC_PHY 223 select GENERIC_PHY
224 depends on MACH_SPEAR1340 || COMPILE_TEST
223 help 225 help
224 Support for ST SPEAr1340 MIPHY which can be used for PCIe and SATA. 226 Support for ST SPEAr1340 MIPHY which can be used for PCIe and SATA.
225 227
diff --git a/drivers/phy/phy-exynos5-usbdrd.c b/drivers/phy/phy-exynos5-usbdrd.c
index b05302b09c9f..392101c8d6b0 100644
--- a/drivers/phy/phy-exynos5-usbdrd.c
+++ b/drivers/phy/phy-exynos5-usbdrd.c
@@ -542,6 +542,7 @@ static const struct of_device_id exynos5_usbdrd_phy_of_match[] = {
542 }, 542 },
543 { }, 543 { },
544}; 544};
545MODULE_DEVICE_TABLE(of, exynos5_usbdrd_phy_of_match);
545 546
546static int exynos5_usbdrd_phy_probe(struct platform_device *pdev) 547static int exynos5_usbdrd_phy_probe(struct platform_device *pdev)
547{ 548{
diff --git a/drivers/phy/phy-miphy365x.c b/drivers/phy/phy-miphy365x.c
index e111baf187ce..e0fb7a1e5a5a 100644
--- a/drivers/phy/phy-miphy365x.c
+++ b/drivers/phy/phy-miphy365x.c
@@ -163,6 +163,7 @@ enum miphy_sata_gen {
163}; 163};
164 164
165static u8 rx_tx_spd[] = { 165static u8 rx_tx_spd[] = {
166 0, /* GEN0 doesn't exist. */
166 TX_SPDSEL_GEN1_VAL | RX_SPDSEL_GEN1_VAL, 167 TX_SPDSEL_GEN1_VAL | RX_SPDSEL_GEN1_VAL,
167 TX_SPDSEL_GEN2_VAL | RX_SPDSEL_GEN2_VAL, 168 TX_SPDSEL_GEN2_VAL | RX_SPDSEL_GEN2_VAL,
168 TX_SPDSEL_GEN3_VAL | RX_SPDSEL_GEN3_VAL 169 TX_SPDSEL_GEN3_VAL | RX_SPDSEL_GEN3_VAL
diff --git a/drivers/phy/phy-twl4030-usb.c b/drivers/phy/phy-twl4030-usb.c
index e1a6623d4696..9cd33a4bcfb1 100644
--- a/drivers/phy/phy-twl4030-usb.c
+++ b/drivers/phy/phy-twl4030-usb.c
@@ -34,6 +34,7 @@
34#include <linux/delay.h> 34#include <linux/delay.h>
35#include <linux/usb/otg.h> 35#include <linux/usb/otg.h>
36#include <linux/phy/phy.h> 36#include <linux/phy/phy.h>
37#include <linux/pm_runtime.h>
37#include <linux/usb/musb-omap.h> 38#include <linux/usb/musb-omap.h>
38#include <linux/usb/ulpi.h> 39#include <linux/usb/ulpi.h>
39#include <linux/i2c/twl.h> 40#include <linux/i2c/twl.h>
@@ -422,37 +423,55 @@ static void twl4030_phy_power(struct twl4030_usb *twl, int on)
422 } 423 }
423} 424}
424 425
425static int twl4030_phy_power_off(struct phy *phy) 426static int twl4030_usb_runtime_suspend(struct device *dev)
426{ 427{
427 struct twl4030_usb *twl = phy_get_drvdata(phy); 428 struct twl4030_usb *twl = dev_get_drvdata(dev);
428 429
430 dev_dbg(twl->dev, "%s\n", __func__);
429 if (twl->asleep) 431 if (twl->asleep)
430 return 0; 432 return 0;
431 433
432 twl4030_phy_power(twl, 0); 434 twl4030_phy_power(twl, 0);
433 twl->asleep = 1; 435 twl->asleep = 1;
434 dev_dbg(twl->dev, "%s\n", __func__); 436
435 return 0; 437 return 0;
436} 438}
437 439
438static void __twl4030_phy_power_on(struct twl4030_usb *twl) 440static int twl4030_usb_runtime_resume(struct device *dev)
439{ 441{
442 struct twl4030_usb *twl = dev_get_drvdata(dev);
443
444 dev_dbg(twl->dev, "%s\n", __func__);
445 if (!twl->asleep)
446 return 0;
447
440 twl4030_phy_power(twl, 1); 448 twl4030_phy_power(twl, 1);
441 twl4030_i2c_access(twl, 1); 449 twl->asleep = 0;
442 twl4030_usb_set_mode(twl, twl->usb_mode); 450
443 if (twl->usb_mode == T2_USB_MODE_ULPI) 451 return 0;
444 twl4030_i2c_access(twl, 0); 452}
453
454static int twl4030_phy_power_off(struct phy *phy)
455{
456 struct twl4030_usb *twl = phy_get_drvdata(phy);
457
458 dev_dbg(twl->dev, "%s\n", __func__);
459 pm_runtime_mark_last_busy(twl->dev);
460 pm_runtime_put_autosuspend(twl->dev);
461
462 return 0;
445} 463}
446 464
447static int twl4030_phy_power_on(struct phy *phy) 465static int twl4030_phy_power_on(struct phy *phy)
448{ 466{
449 struct twl4030_usb *twl = phy_get_drvdata(phy); 467 struct twl4030_usb *twl = phy_get_drvdata(phy);
450 468
451 if (!twl->asleep)
452 return 0;
453 __twl4030_phy_power_on(twl);
454 twl->asleep = 0;
455 dev_dbg(twl->dev, "%s\n", __func__); 469 dev_dbg(twl->dev, "%s\n", __func__);
470 pm_runtime_get_sync(twl->dev);
471 twl4030_i2c_access(twl, 1);
472 twl4030_usb_set_mode(twl, twl->usb_mode);
473 if (twl->usb_mode == T2_USB_MODE_ULPI)
474 twl4030_i2c_access(twl, 0);
456 475
457 /* 476 /*
458 * XXX When VBUS gets driven after musb goes to A mode, 477 * XXX When VBUS gets driven after musb goes to A mode,
@@ -558,9 +577,27 @@ static irqreturn_t twl4030_usb_irq(int irq, void *_twl)
558 * USB_LINK_VBUS state. musb_hdrc won't care until it 577 * USB_LINK_VBUS state. musb_hdrc won't care until it
559 * starts to handle softconnect right. 578 * starts to handle softconnect right.
560 */ 579 */
580 if ((status == OMAP_MUSB_VBUS_VALID) ||
581 (status == OMAP_MUSB_ID_GROUND)) {
582 if (twl->asleep)
583 pm_runtime_get_sync(twl->dev);
584 } else {
585 if (!twl->asleep) {
586 pm_runtime_mark_last_busy(twl->dev);
587 pm_runtime_put_autosuspend(twl->dev);
588 }
589 }
561 omap_musb_mailbox(status); 590 omap_musb_mailbox(status);
562 } 591 }
563 sysfs_notify(&twl->dev->kobj, NULL, "vbus"); 592
593 /* don't schedule during sleep - irq works right then */
594 if (status == OMAP_MUSB_ID_GROUND && !twl->asleep) {
595 cancel_delayed_work(&twl->id_workaround_work);
596 schedule_delayed_work(&twl->id_workaround_work, HZ);
597 }
598
599 if (irq)
600 sysfs_notify(&twl->dev->kobj, NULL, "vbus");
564 601
565 return IRQ_HANDLED; 602 return IRQ_HANDLED;
566} 603}
@@ -569,29 +606,8 @@ static void twl4030_id_workaround_work(struct work_struct *work)
569{ 606{
570 struct twl4030_usb *twl = container_of(work, struct twl4030_usb, 607 struct twl4030_usb *twl = container_of(work, struct twl4030_usb,
571 id_workaround_work.work); 608 id_workaround_work.work);
572 enum omap_musb_vbus_id_status status;
573 bool status_changed = false;
574
575 status = twl4030_usb_linkstat(twl);
576
577 spin_lock_irq(&twl->lock);
578 if (status >= 0 && status != twl->linkstat) {
579 twl->linkstat = status;
580 status_changed = true;
581 }
582 spin_unlock_irq(&twl->lock);
583
584 if (status_changed) {
585 dev_dbg(twl->dev, "handle missing status change to %d\n",
586 status);
587 omap_musb_mailbox(status);
588 }
589 609
590 /* don't schedule during sleep - irq works right then */ 610 twl4030_usb_irq(0, twl);
591 if (status == OMAP_MUSB_ID_GROUND && !twl->asleep) {
592 cancel_delayed_work(&twl->id_workaround_work);
593 schedule_delayed_work(&twl->id_workaround_work, HZ);
594 }
595} 611}
596 612
597static int twl4030_phy_init(struct phy *phy) 613static int twl4030_phy_init(struct phy *phy)
@@ -599,22 +615,17 @@ static int twl4030_phy_init(struct phy *phy)
599 struct twl4030_usb *twl = phy_get_drvdata(phy); 615 struct twl4030_usb *twl = phy_get_drvdata(phy);
600 enum omap_musb_vbus_id_status status; 616 enum omap_musb_vbus_id_status status;
601 617
602 /* 618 pm_runtime_get_sync(twl->dev);
603 * Start in sleep state, we'll get called through set_suspend()
604 * callback when musb is runtime resumed and it's time to start.
605 */
606 __twl4030_phy_power(twl, 0);
607 twl->asleep = 1;
608
609 status = twl4030_usb_linkstat(twl); 619 status = twl4030_usb_linkstat(twl);
610 twl->linkstat = status; 620 twl->linkstat = status;
611 621
612 if (status == OMAP_MUSB_ID_GROUND || status == OMAP_MUSB_VBUS_VALID) { 622 if (status == OMAP_MUSB_ID_GROUND || status == OMAP_MUSB_VBUS_VALID)
613 omap_musb_mailbox(twl->linkstat); 623 omap_musb_mailbox(twl->linkstat);
614 twl4030_phy_power_on(phy);
615 }
616 624
617 sysfs_notify(&twl->dev->kobj, NULL, "vbus"); 625 sysfs_notify(&twl->dev->kobj, NULL, "vbus");
626 pm_runtime_mark_last_busy(twl->dev);
627 pm_runtime_put_autosuspend(twl->dev);
628
618 return 0; 629 return 0;
619} 630}
620 631
@@ -650,6 +661,11 @@ static const struct phy_ops ops = {
650 .owner = THIS_MODULE, 661 .owner = THIS_MODULE,
651}; 662};
652 663
664static const struct dev_pm_ops twl4030_usb_pm_ops = {
665 SET_RUNTIME_PM_OPS(twl4030_usb_runtime_suspend,
666 twl4030_usb_runtime_resume, NULL)
667};
668
653static int twl4030_usb_probe(struct platform_device *pdev) 669static int twl4030_usb_probe(struct platform_device *pdev)
654{ 670{
655 struct twl4030_usb_data *pdata = dev_get_platdata(&pdev->dev); 671 struct twl4030_usb_data *pdata = dev_get_platdata(&pdev->dev);
@@ -726,6 +742,11 @@ static int twl4030_usb_probe(struct platform_device *pdev)
726 742
727 ATOMIC_INIT_NOTIFIER_HEAD(&twl->phy.notifier); 743 ATOMIC_INIT_NOTIFIER_HEAD(&twl->phy.notifier);
728 744
745 pm_runtime_use_autosuspend(&pdev->dev);
746 pm_runtime_set_autosuspend_delay(&pdev->dev, 2000);
747 pm_runtime_enable(&pdev->dev);
748 pm_runtime_get_sync(&pdev->dev);
749
729 /* Our job is to use irqs and status from the power module 750 /* Our job is to use irqs and status from the power module
730 * to keep the transceiver disabled when nothing's connected. 751 * to keep the transceiver disabled when nothing's connected.
731 * 752 *
@@ -744,6 +765,9 @@ static int twl4030_usb_probe(struct platform_device *pdev)
744 return status; 765 return status;
745 } 766 }
746 767
768 pm_runtime_mark_last_busy(&pdev->dev);
769 pm_runtime_put_autosuspend(twl->dev);
770
747 dev_info(&pdev->dev, "Initialized TWL4030 USB module\n"); 771 dev_info(&pdev->dev, "Initialized TWL4030 USB module\n");
748 return 0; 772 return 0;
749} 773}
@@ -753,6 +777,7 @@ static int twl4030_usb_remove(struct platform_device *pdev)
753 struct twl4030_usb *twl = platform_get_drvdata(pdev); 777 struct twl4030_usb *twl = platform_get_drvdata(pdev);
754 int val; 778 int val;
755 779
780 pm_runtime_get_sync(twl->dev);
756 cancel_delayed_work(&twl->id_workaround_work); 781 cancel_delayed_work(&twl->id_workaround_work);
757 device_remove_file(twl->dev, &dev_attr_vbus); 782 device_remove_file(twl->dev, &dev_attr_vbus);
758 783
@@ -772,9 +797,8 @@ static int twl4030_usb_remove(struct platform_device *pdev)
772 797
773 /* disable complete OTG block */ 798 /* disable complete OTG block */
774 twl4030_usb_clear_bits(twl, POWER_CTRL, POWER_CTRL_OTG_ENAB); 799 twl4030_usb_clear_bits(twl, POWER_CTRL, POWER_CTRL_OTG_ENAB);
775 800 pm_runtime_mark_last_busy(twl->dev);
776 if (!twl->asleep) 801 pm_runtime_put(twl->dev);
777 twl4030_phy_power(twl, 0);
778 802
779 return 0; 803 return 0;
780} 804}
@@ -792,6 +816,7 @@ static struct platform_driver twl4030_usb_driver = {
792 .remove = twl4030_usb_remove, 816 .remove = twl4030_usb_remove,
793 .driver = { 817 .driver = {
794 .name = "twl4030_usb", 818 .name = "twl4030_usb",
819 .pm = &twl4030_usb_pm_ops,
795 .owner = THIS_MODULE, 820 .owner = THIS_MODULE,
796 .of_match_table = of_match_ptr(twl4030_usb_id_table), 821 .of_match_table = of_match_ptr(twl4030_usb_id_table),
797 }, 822 },
diff --git a/drivers/pinctrl/pinctrl-baytrail.c b/drivers/pinctrl/pinctrl-baytrail.c
index 9ca59a018743..e12e5b07f6d7 100644
--- a/drivers/pinctrl/pinctrl-baytrail.c
+++ b/drivers/pinctrl/pinctrl-baytrail.c
@@ -461,6 +461,7 @@ static struct irq_chip byt_irqchip = {
461 .irq_mask = byt_irq_mask, 461 .irq_mask = byt_irq_mask,
462 .irq_unmask = byt_irq_unmask, 462 .irq_unmask = byt_irq_unmask,
463 .irq_set_type = byt_irq_type, 463 .irq_set_type = byt_irq_type,
464 .flags = IRQCHIP_SKIP_SET_WAKE,
464}; 465};
465 466
466static void byt_gpio_irq_init_hw(struct byt_gpio *vg) 467static void byt_gpio_irq_init_hw(struct byt_gpio *vg)
diff --git a/drivers/regulator/88pm8607.c b/drivers/regulator/88pm8607.c
index 337634ad0562..6d77dcd7dcf6 100644
--- a/drivers/regulator/88pm8607.c
+++ b/drivers/regulator/88pm8607.c
@@ -319,7 +319,7 @@ static int pm8607_regulator_dt_init(struct platform_device *pdev,
319 struct regulator_config *config) 319 struct regulator_config *config)
320{ 320{
321 struct device_node *nproot, *np; 321 struct device_node *nproot, *np;
322 nproot = of_node_get(pdev->dev.parent->of_node); 322 nproot = pdev->dev.parent->of_node;
323 if (!nproot) 323 if (!nproot)
324 return -ENODEV; 324 return -ENODEV;
325 nproot = of_get_child_by_name(nproot, "regulators"); 325 nproot = of_get_child_by_name(nproot, "regulators");
diff --git a/drivers/regulator/da9052-regulator.c b/drivers/regulator/da9052-regulator.c
index fdb6ea8ae7e6..00033625a09c 100644
--- a/drivers/regulator/da9052-regulator.c
+++ b/drivers/regulator/da9052-regulator.c
@@ -422,9 +422,9 @@ static int da9052_regulator_probe(struct platform_device *pdev)
422 config.init_data = pdata->regulators[pdev->id]; 422 config.init_data = pdata->regulators[pdev->id];
423 } else { 423 } else {
424#ifdef CONFIG_OF 424#ifdef CONFIG_OF
425 struct device_node *nproot, *np; 425 struct device_node *nproot = da9052->dev->of_node;
426 struct device_node *np;
426 427
427 nproot = of_node_get(da9052->dev->of_node);
428 if (!nproot) 428 if (!nproot)
429 return -ENODEV; 429 return -ENODEV;
430 430
diff --git a/drivers/regulator/max8907-regulator.c b/drivers/regulator/max8907-regulator.c
index 9623e9e290bf..3426be89c9f6 100644
--- a/drivers/regulator/max8907-regulator.c
+++ b/drivers/regulator/max8907-regulator.c
@@ -226,7 +226,7 @@ static int max8907_regulator_parse_dt(struct platform_device *pdev)
226 struct device_node *np, *regulators; 226 struct device_node *np, *regulators;
227 int ret; 227 int ret;
228 228
229 np = of_node_get(pdev->dev.parent->of_node); 229 np = pdev->dev.parent->of_node;
230 if (!np) 230 if (!np)
231 return 0; 231 return 0;
232 232
diff --git a/drivers/regulator/max8925-regulator.c b/drivers/regulator/max8925-regulator.c
index dad2bcd14e96..7770777befc4 100644
--- a/drivers/regulator/max8925-regulator.c
+++ b/drivers/regulator/max8925-regulator.c
@@ -250,7 +250,7 @@ static int max8925_regulator_dt_init(struct platform_device *pdev,
250 struct device_node *nproot, *np; 250 struct device_node *nproot, *np;
251 int rcount; 251 int rcount;
252 252
253 nproot = of_node_get(pdev->dev.parent->of_node); 253 nproot = pdev->dev.parent->of_node;
254 if (!nproot) 254 if (!nproot)
255 return -ENODEV; 255 return -ENODEV;
256 np = of_get_child_by_name(nproot, "regulators"); 256 np = of_get_child_by_name(nproot, "regulators");
diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
index 90b4c530dee5..9c31e215a521 100644
--- a/drivers/regulator/max8997.c
+++ b/drivers/regulator/max8997.c
@@ -917,7 +917,7 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
917 struct max8997_regulator_data *rdata; 917 struct max8997_regulator_data *rdata;
918 unsigned int i, dvs_voltage_nr = 1, ret; 918 unsigned int i, dvs_voltage_nr = 1, ret;
919 919
920 pmic_np = of_node_get(iodev->dev->of_node); 920 pmic_np = iodev->dev->of_node;
921 if (!pmic_np) { 921 if (!pmic_np) {
922 dev_err(&pdev->dev, "could not find pmic sub-node\n"); 922 dev_err(&pdev->dev, "could not find pmic sub-node\n");
923 return -ENODEV; 923 return -ENODEV;
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c
index a7ce34d1b5f2..1878e5b567ef 100644
--- a/drivers/regulator/palmas-regulator.c
+++ b/drivers/regulator/palmas-regulator.c
@@ -1427,7 +1427,6 @@ static void palmas_dt_to_pdata(struct device *dev,
1427 u32 prop; 1427 u32 prop;
1428 int idx, ret; 1428 int idx, ret;
1429 1429
1430 node = of_node_get(node);
1431 regulators = of_get_child_by_name(node, "regulators"); 1430 regulators = of_get_child_by_name(node, "regulators");
1432 if (!regulators) { 1431 if (!regulators) {
1433 dev_info(dev, "regulator node not found\n"); 1432 dev_info(dev, "regulator node not found\n");
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index fa7db8847578..e584c998b55f 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -1014,7 +1014,7 @@ static struct tps65910_board *tps65910_parse_dt_reg_data(
1014 if (!pmic_plat_data) 1014 if (!pmic_plat_data)
1015 return NULL; 1015 return NULL;
1016 1016
1017 np = of_node_get(pdev->dev.parent->of_node); 1017 np = pdev->dev.parent->of_node;
1018 regulators = of_get_child_by_name(np, "regulators"); 1018 regulators = of_get_child_by_name(np, "regulators");
1019 if (!regulators) { 1019 if (!regulators) {
1020 dev_err(&pdev->dev, "regulator node not found\n"); 1020 dev_err(&pdev->dev, "regulator node not found\n");
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c
index 2ead7e78c456..14ba80bfa571 100644
--- a/drivers/s390/block/dasd_devmap.c
+++ b/drivers/s390/block/dasd_devmap.c
@@ -77,7 +77,7 @@ EXPORT_SYMBOL_GPL(dasd_nofcx);
77 * strings when running as a module. 77 * strings when running as a module.
78 */ 78 */
79static char *dasd[256]; 79static char *dasd[256];
80module_param_array(dasd, charp, NULL, 0); 80module_param_array(dasd, charp, NULL, S_IRUGO);
81 81
82/* 82/*
83 * Single spinlock to protect devmap and servermap structures and lists. 83 * Single spinlock to protect devmap and servermap structures and lists.
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 18a3358eb1d4..bd85fb4978e0 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -43,7 +43,7 @@ config SCSI_DMA
43config SCSI_NETLINK 43config SCSI_NETLINK
44 bool 44 bool
45 default n 45 default n
46 select NET 46 depends on NET
47 47
48config SCSI_PROC_FS 48config SCSI_PROC_FS
49 bool "legacy /proc/scsi/ support" 49 bool "legacy /proc/scsi/ support"
@@ -257,7 +257,7 @@ config SCSI_SPI_ATTRS
257 257
258config SCSI_FC_ATTRS 258config SCSI_FC_ATTRS
259 tristate "FiberChannel Transport Attributes" 259 tristate "FiberChannel Transport Attributes"
260 depends on SCSI 260 depends on SCSI && NET
261 select SCSI_NETLINK 261 select SCSI_NETLINK
262 help 262 help
263 If you wish to export transport-specific information about 263 If you wish to export transport-specific information about
@@ -585,28 +585,28 @@ config HYPERV_STORAGE
585 585
586config LIBFC 586config LIBFC
587 tristate "LibFC module" 587 tristate "LibFC module"
588 select SCSI_FC_ATTRS 588 depends on SCSI_FC_ATTRS
589 select CRC32 589 select CRC32
590 ---help--- 590 ---help---
591 Fibre Channel library module 591 Fibre Channel library module
592 592
593config LIBFCOE 593config LIBFCOE
594 tristate "LibFCoE module" 594 tristate "LibFCoE module"
595 select LIBFC 595 depends on LIBFC
596 ---help--- 596 ---help---
597 Library for Fibre Channel over Ethernet module 597 Library for Fibre Channel over Ethernet module
598 598
599config FCOE 599config FCOE
600 tristate "FCoE module" 600 tristate "FCoE module"
601 depends on PCI 601 depends on PCI
602 select LIBFCOE 602 depends on LIBFCOE
603 ---help--- 603 ---help---
604 Fibre Channel over Ethernet module 604 Fibre Channel over Ethernet module
605 605
606config FCOE_FNIC 606config FCOE_FNIC
607 tristate "Cisco FNIC Driver" 607 tristate "Cisco FNIC Driver"
608 depends on PCI && X86 608 depends on PCI && X86
609 select LIBFCOE 609 depends on LIBFCOE
610 help 610 help
611 This is support for the Cisco PCI-Express FCoE HBA. 611 This is support for the Cisco PCI-Express FCoE HBA.
612 612
@@ -816,7 +816,7 @@ config SCSI_IBMVSCSI
816config SCSI_IBMVFC 816config SCSI_IBMVFC
817 tristate "IBM Virtual FC support" 817 tristate "IBM Virtual FC support"
818 depends on PPC_PSERIES && SCSI 818 depends on PPC_PSERIES && SCSI
819 select SCSI_FC_ATTRS 819 depends on SCSI_FC_ATTRS
820 help 820 help
821 This is the IBM POWER Virtual FC Client 821 This is the IBM POWER Virtual FC Client
822 822
@@ -1266,7 +1266,7 @@ source "drivers/scsi/qla4xxx/Kconfig"
1266config SCSI_LPFC 1266config SCSI_LPFC
1267 tristate "Emulex LightPulse Fibre Channel Support" 1267 tristate "Emulex LightPulse Fibre Channel Support"
1268 depends on PCI && SCSI 1268 depends on PCI && SCSI
1269 select SCSI_FC_ATTRS 1269 depends on SCSI_FC_ATTRS
1270 select CRC_T10DIF 1270 select CRC_T10DIF
1271 help 1271 help
1272 This lpfc driver supports the Emulex LightPulse 1272 This lpfc driver supports the Emulex LightPulse
@@ -1676,7 +1676,7 @@ config SCSI_SUNESP
1676config ZFCP 1676config ZFCP
1677 tristate "FCP host bus adapter driver for IBM eServer zSeries" 1677 tristate "FCP host bus adapter driver for IBM eServer zSeries"
1678 depends on S390 && QDIO && SCSI 1678 depends on S390 && QDIO && SCSI
1679 select SCSI_FC_ATTRS 1679 depends on SCSI_FC_ATTRS
1680 help 1680 help
1681 If you want to access SCSI devices attached to your IBM eServer 1681 If you want to access SCSI devices attached to your IBM eServer
1682 zSeries by means of Fibre Channel interfaces say Y. 1682 zSeries by means of Fibre Channel interfaces say Y.
@@ -1704,7 +1704,7 @@ config SCSI_PM8001
1704config SCSI_BFA_FC 1704config SCSI_BFA_FC
1705 tristate "Brocade BFA Fibre Channel Support" 1705 tristate "Brocade BFA Fibre Channel Support"
1706 depends on PCI && SCSI 1706 depends on PCI && SCSI
1707 select SCSI_FC_ATTRS 1707 depends on SCSI_FC_ATTRS
1708 help 1708 help
1709 This bfa driver supports all Brocade PCIe FC/FCOE host adapters. 1709 This bfa driver supports all Brocade PCIe FC/FCOE host adapters.
1710 1710
diff --git a/drivers/scsi/bnx2fc/Kconfig b/drivers/scsi/bnx2fc/Kconfig
index f245d543d7b1..097882882649 100644
--- a/drivers/scsi/bnx2fc/Kconfig
+++ b/drivers/scsi/bnx2fc/Kconfig
@@ -1,11 +1,12 @@
1config SCSI_BNX2X_FCOE 1config SCSI_BNX2X_FCOE
2 tristate "QLogic NetXtreme II FCoE support" 2 tristate "QLogic NetXtreme II FCoE support"
3 depends on PCI 3 depends on PCI
4 depends on (IPV6 || IPV6=n)
5 depends on LIBFC
6 depends on LIBFCOE
4 select NETDEVICES 7 select NETDEVICES
5 select ETHERNET 8 select ETHERNET
6 select NET_VENDOR_BROADCOM 9 select NET_VENDOR_BROADCOM
7 select LIBFC
8 select LIBFCOE
9 select CNIC 10 select CNIC
10 ---help--- 11 ---help---
11 This driver supports FCoE offload for the QLogic NetXtreme II 12 This driver supports FCoE offload for the QLogic NetXtreme II
diff --git a/drivers/scsi/bnx2i/Kconfig b/drivers/scsi/bnx2i/Kconfig
index 44ce54e536e5..ba30ff86d581 100644
--- a/drivers/scsi/bnx2i/Kconfig
+++ b/drivers/scsi/bnx2i/Kconfig
@@ -2,6 +2,7 @@ config SCSI_BNX2_ISCSI
2 tristate "QLogic NetXtreme II iSCSI support" 2 tristate "QLogic NetXtreme II iSCSI support"
3 depends on NET 3 depends on NET
4 depends on PCI 4 depends on PCI
5 depends on (IPV6 || IPV6=n)
5 select SCSI_ISCSI_ATTRS 6 select SCSI_ISCSI_ATTRS
6 select NETDEVICES 7 select NETDEVICES
7 select ETHERNET 8 select ETHERNET
diff --git a/drivers/scsi/csiostor/Kconfig b/drivers/scsi/csiostor/Kconfig
index 4d03b032aa10..7c7e5085968b 100644
--- a/drivers/scsi/csiostor/Kconfig
+++ b/drivers/scsi/csiostor/Kconfig
@@ -1,7 +1,7 @@
1config SCSI_CHELSIO_FCOE 1config SCSI_CHELSIO_FCOE
2 tristate "Chelsio Communications FCoE support" 2 tristate "Chelsio Communications FCoE support"
3 depends on PCI && SCSI 3 depends on PCI && SCSI
4 select SCSI_FC_ATTRS 4 depends on SCSI_FC_ATTRS
5 select FW_LOADER 5 select FW_LOADER
6 help 6 help
7 This driver supports FCoE Offload functionality over 7 This driver supports FCoE Offload functionality over
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index ea025e4806b6..191b59793519 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -717,11 +717,21 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
717 return NULL; 717 return NULL;
718 } 718 }
719 719
720 if (data_size > ISCSI_DEF_MAX_RECV_SEG_LEN) {
721 iscsi_conn_printk(KERN_ERR, conn, "Invalid buffer len of %u for login task. Max len is %u\n", data_size, ISCSI_DEF_MAX_RECV_SEG_LEN);
722 return NULL;
723 }
724
720 task = conn->login_task; 725 task = conn->login_task;
721 } else { 726 } else {
722 if (session->state != ISCSI_STATE_LOGGED_IN) 727 if (session->state != ISCSI_STATE_LOGGED_IN)
723 return NULL; 728 return NULL;
724 729
730 if (data_size != 0) {
731 iscsi_conn_printk(KERN_ERR, conn, "Can not send data buffer of len %u for op 0x%x\n", data_size, opcode);
732 return NULL;
733 }
734
725 BUG_ON(conn->c_stage == ISCSI_CONN_INITIAL_STAGE); 735 BUG_ON(conn->c_stage == ISCSI_CONN_INITIAL_STAGE);
726 BUG_ON(conn->c_stage == ISCSI_CONN_STOPPED); 736 BUG_ON(conn->c_stage == ISCSI_CONN_STOPPED);
727 737
diff --git a/drivers/scsi/qla2xxx/Kconfig b/drivers/scsi/qla2xxx/Kconfig
index 23d607218ae8..113e6c9826a1 100644
--- a/drivers/scsi/qla2xxx/Kconfig
+++ b/drivers/scsi/qla2xxx/Kconfig
@@ -1,7 +1,7 @@
1config SCSI_QLA_FC 1config SCSI_QLA_FC
2 tristate "QLogic QLA2XXX Fibre Channel Support" 2 tristate "QLogic QLA2XXX Fibre Channel Support"
3 depends on PCI && SCSI 3 depends on PCI && SCSI
4 select SCSI_FC_ATTRS 4 depends on SCSI_FC_ATTRS
5 select FW_LOADER 5 select FW_LOADER
6 ---help--- 6 ---help---
7 This qla2xxx driver supports all QLogic Fibre Channel 7 This qla2xxx driver supports all QLogic Fibre Channel
@@ -31,7 +31,7 @@ config SCSI_QLA_FC
31config TCM_QLA2XXX 31config TCM_QLA2XXX
32 tristate "TCM_QLA2XXX fabric module for Qlogic 2xxx series target mode HBAs" 32 tristate "TCM_QLA2XXX fabric module for Qlogic 2xxx series target mode HBAs"
33 depends on SCSI_QLA_FC && TARGET_CORE 33 depends on SCSI_QLA_FC && TARGET_CORE
34 select LIBFC 34 depends on LIBFC
35 select BTREE 35 select BTREE
36 default n 36 default n
37 ---help--- 37 ---help---
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index d837dc180522..aaea4b98af16 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -733,12 +733,13 @@ static bool scsi_end_request(struct request *req, int error,
733 } else { 733 } else {
734 unsigned long flags; 734 unsigned long flags;
735 735
736 if (bidi_bytes)
737 scsi_release_bidi_buffers(cmd);
738
736 spin_lock_irqsave(q->queue_lock, flags); 739 spin_lock_irqsave(q->queue_lock, flags);
737 blk_finish_request(req, error); 740 blk_finish_request(req, error);
738 spin_unlock_irqrestore(q->queue_lock, flags); 741 spin_unlock_irqrestore(q->queue_lock, flags);
739 742
740 if (bidi_bytes)
741 scsi_release_bidi_buffers(cmd);
742 scsi_release_buffers(cmd); 743 scsi_release_buffers(cmd);
743 scsi_next_command(cmd); 744 scsi_next_command(cmd);
744 } 745 }
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index 48f1d26e6ad9..134fb6eb7b19 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -397,24 +397,21 @@ static int davinci_spi_setup(struct spi_device *spi)
397 struct spi_master *master = spi->master; 397 struct spi_master *master = spi->master;
398 struct device_node *np = spi->dev.of_node; 398 struct device_node *np = spi->dev.of_node;
399 bool internal_cs = true; 399 bool internal_cs = true;
400 unsigned long flags = GPIOF_DIR_OUT;
401 400
402 dspi = spi_master_get_devdata(spi->master); 401 dspi = spi_master_get_devdata(spi->master);
403 pdata = &dspi->pdata; 402 pdata = &dspi->pdata;
404 403
405 flags |= (spi->mode & SPI_CS_HIGH) ? GPIOF_INIT_LOW : GPIOF_INIT_HIGH;
406
407 if (!(spi->mode & SPI_NO_CS)) { 404 if (!(spi->mode & SPI_NO_CS)) {
408 if (np && (master->cs_gpios != NULL) && (spi->cs_gpio >= 0)) { 405 if (np && (master->cs_gpios != NULL) && (spi->cs_gpio >= 0)) {
409 retval = gpio_request_one(spi->cs_gpio, 406 retval = gpio_direction_output(
410 flags, dev_name(&spi->dev)); 407 spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
411 internal_cs = false; 408 internal_cs = false;
412 } else if (pdata->chip_sel && 409 } else if (pdata->chip_sel &&
413 spi->chip_select < pdata->num_chipselect && 410 spi->chip_select < pdata->num_chipselect &&
414 pdata->chip_sel[spi->chip_select] != SPI_INTERN_CS) { 411 pdata->chip_sel[spi->chip_select] != SPI_INTERN_CS) {
415 spi->cs_gpio = pdata->chip_sel[spi->chip_select]; 412 spi->cs_gpio = pdata->chip_sel[spi->chip_select];
416 retval = gpio_request_one(spi->cs_gpio, 413 retval = gpio_direction_output(
417 flags, dev_name(&spi->dev)); 414 spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
418 internal_cs = false; 415 internal_cs = false;
419 } 416 }
420 417
@@ -439,12 +436,6 @@ static int davinci_spi_setup(struct spi_device *spi)
439 return retval; 436 return retval;
440} 437}
441 438
442static void davinci_spi_cleanup(struct spi_device *spi)
443{
444 if (spi->cs_gpio >= 0)
445 gpio_free(spi->cs_gpio);
446}
447
448static int davinci_spi_check_error(struct davinci_spi *dspi, int int_status) 439static int davinci_spi_check_error(struct davinci_spi *dspi, int int_status)
449{ 440{
450 struct device *sdev = dspi->bitbang.master->dev.parent; 441 struct device *sdev = dspi->bitbang.master->dev.parent;
@@ -956,7 +947,6 @@ static int davinci_spi_probe(struct platform_device *pdev)
956 master->num_chipselect = pdata->num_chipselect; 947 master->num_chipselect = pdata->num_chipselect;
957 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 16); 948 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 16);
958 master->setup = davinci_spi_setup; 949 master->setup = davinci_spi_setup;
959 master->cleanup = davinci_spi_cleanup;
960 950
961 dspi->bitbang.chipselect = davinci_spi_chipselect; 951 dspi->bitbang.chipselect = davinci_spi_chipselect;
962 dspi->bitbang.setup_transfer = davinci_spi_setup_transfer; 952 dspi->bitbang.setup_transfer = davinci_spi_setup_transfer;
@@ -967,6 +957,27 @@ static int davinci_spi_probe(struct platform_device *pdev)
967 if (dspi->version == SPI_VERSION_2) 957 if (dspi->version == SPI_VERSION_2)
968 dspi->bitbang.flags |= SPI_READY; 958 dspi->bitbang.flags |= SPI_READY;
969 959
960 if (pdev->dev.of_node) {
961 int i;
962
963 for (i = 0; i < pdata->num_chipselect; i++) {
964 int cs_gpio = of_get_named_gpio(pdev->dev.of_node,
965 "cs-gpios", i);
966
967 if (cs_gpio == -EPROBE_DEFER) {
968 ret = cs_gpio;
969 goto free_clk;
970 }
971
972 if (gpio_is_valid(cs_gpio)) {
973 ret = devm_gpio_request(&pdev->dev, cs_gpio,
974 dev_name(&pdev->dev));
975 if (ret)
976 goto free_clk;
977 }
978 }
979 }
980
970 r = platform_get_resource(pdev, IORESOURCE_DMA, 0); 981 r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
971 if (r) 982 if (r)
972 dma_rx_chan = r->start; 983 dma_rx_chan = r->start;
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
index 670f0627f3bf..0dd0623319b0 100644
--- a/drivers/spi/spi-dw.c
+++ b/drivers/spi/spi-dw.c
@@ -547,8 +547,7 @@ static int dw_spi_setup(struct spi_device *spi)
547 /* Only alloc on first setup */ 547 /* Only alloc on first setup */
548 chip = spi_get_ctldata(spi); 548 chip = spi_get_ctldata(spi);
549 if (!chip) { 549 if (!chip) {
550 chip = devm_kzalloc(&spi->dev, sizeof(struct chip_data), 550 chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
551 GFP_KERNEL);
552 if (!chip) 551 if (!chip)
553 return -ENOMEM; 552 return -ENOMEM;
554 spi_set_ctldata(spi, chip); 553 spi_set_ctldata(spi, chip);
@@ -606,6 +605,14 @@ static int dw_spi_setup(struct spi_device *spi)
606 return 0; 605 return 0;
607} 606}
608 607
608static void dw_spi_cleanup(struct spi_device *spi)
609{
610 struct chip_data *chip = spi_get_ctldata(spi);
611
612 kfree(chip);
613 spi_set_ctldata(spi, NULL);
614}
615
609/* Restart the controller, disable all interrupts, clean rx fifo */ 616/* Restart the controller, disable all interrupts, clean rx fifo */
610static void spi_hw_init(struct dw_spi *dws) 617static void spi_hw_init(struct dw_spi *dws)
611{ 618{
@@ -661,6 +668,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
661 master->bus_num = dws->bus_num; 668 master->bus_num = dws->bus_num;
662 master->num_chipselect = dws->num_cs; 669 master->num_chipselect = dws->num_cs;
663 master->setup = dw_spi_setup; 670 master->setup = dw_spi_setup;
671 master->cleanup = dw_spi_cleanup;
664 master->transfer_one_message = dw_spi_transfer_one_message; 672 master->transfer_one_message = dw_spi_transfer_one_message;
665 master->max_speed_hz = dws->max_freq; 673 master->max_speed_hz = dws->max_freq;
666 674
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
index 8ebd724e4c59..429e11190265 100644
--- a/drivers/spi/spi-fsl-espi.c
+++ b/drivers/spi/spi-fsl-espi.c
@@ -452,16 +452,16 @@ static int fsl_espi_setup(struct spi_device *spi)
452 int retval; 452 int retval;
453 u32 hw_mode; 453 u32 hw_mode;
454 u32 loop_mode; 454 u32 loop_mode;
455 struct spi_mpc8xxx_cs *cs = spi->controller_state; 455 struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
456 456
457 if (!spi->max_speed_hz) 457 if (!spi->max_speed_hz)
458 return -EINVAL; 458 return -EINVAL;
459 459
460 if (!cs) { 460 if (!cs) {
461 cs = devm_kzalloc(&spi->dev, sizeof(*cs), GFP_KERNEL); 461 cs = kzalloc(sizeof(*cs), GFP_KERNEL);
462 if (!cs) 462 if (!cs)
463 return -ENOMEM; 463 return -ENOMEM;
464 spi->controller_state = cs; 464 spi_set_ctldata(spi, cs);
465 } 465 }
466 466
467 mpc8xxx_spi = spi_master_get_devdata(spi->master); 467 mpc8xxx_spi = spi_master_get_devdata(spi->master);
@@ -496,6 +496,14 @@ static int fsl_espi_setup(struct spi_device *spi)
496 return 0; 496 return 0;
497} 497}
498 498
499static void fsl_espi_cleanup(struct spi_device *spi)
500{
501 struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
502
503 kfree(cs);
504 spi_set_ctldata(spi, NULL);
505}
506
499void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) 507void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events)
500{ 508{
501 struct fsl_espi_reg *reg_base = mspi->reg_base; 509 struct fsl_espi_reg *reg_base = mspi->reg_base;
@@ -605,6 +613,7 @@ static struct spi_master * fsl_espi_probe(struct device *dev,
605 613
606 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); 614 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16);
607 master->setup = fsl_espi_setup; 615 master->setup = fsl_espi_setup;
616 master->cleanup = fsl_espi_cleanup;
608 617
609 mpc8xxx_spi = spi_master_get_devdata(master); 618 mpc8xxx_spi = spi_master_get_devdata(master);
610 mpc8xxx_spi->spi_do_one_msg = fsl_espi_do_one_msg; 619 mpc8xxx_spi->spi_do_one_msg = fsl_espi_do_one_msg;
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
index 9452f6740997..590f31bc0aba 100644
--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -425,16 +425,16 @@ static int fsl_spi_setup(struct spi_device *spi)
425 struct fsl_spi_reg *reg_base; 425 struct fsl_spi_reg *reg_base;
426 int retval; 426 int retval;
427 u32 hw_mode; 427 u32 hw_mode;
428 struct spi_mpc8xxx_cs *cs = spi->controller_state; 428 struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
429 429
430 if (!spi->max_speed_hz) 430 if (!spi->max_speed_hz)
431 return -EINVAL; 431 return -EINVAL;
432 432
433 if (!cs) { 433 if (!cs) {
434 cs = devm_kzalloc(&spi->dev, sizeof(*cs), GFP_KERNEL); 434 cs = kzalloc(sizeof(*cs), GFP_KERNEL);
435 if (!cs) 435 if (!cs)
436 return -ENOMEM; 436 return -ENOMEM;
437 spi->controller_state = cs; 437 spi_set_ctldata(spi, cs);
438 } 438 }
439 mpc8xxx_spi = spi_master_get_devdata(spi->master); 439 mpc8xxx_spi = spi_master_get_devdata(spi->master);
440 440
@@ -496,9 +496,13 @@ static int fsl_spi_setup(struct spi_device *spi)
496static void fsl_spi_cleanup(struct spi_device *spi) 496static void fsl_spi_cleanup(struct spi_device *spi)
497{ 497{
498 struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); 498 struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
499 struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
499 500
500 if (mpc8xxx_spi->type == TYPE_GRLIB && gpio_is_valid(spi->cs_gpio)) 501 if (mpc8xxx_spi->type == TYPE_GRLIB && gpio_is_valid(spi->cs_gpio))
501 gpio_free(spi->cs_gpio); 502 gpio_free(spi->cs_gpio);
503
504 kfree(cs);
505 spi_set_ctldata(spi, NULL);
502} 506}
503 507
504static void fsl_spi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) 508static void fsl_spi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events)
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index 1189cfd96477..f1f0a587e4fc 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -2136,7 +2136,7 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)
2136 cs_gpio); 2136 cs_gpio);
2137 else if (gpio_direction_output(cs_gpio, 1)) 2137 else if (gpio_direction_output(cs_gpio, 1))
2138 dev_err(&adev->dev, 2138 dev_err(&adev->dev,
2139 "could set gpio %d as output\n", 2139 "could not set gpio %d as output\n",
2140 cs_gpio); 2140 cs_gpio);
2141 } 2141 }
2142 } 2142 }
diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index cd0e08b0c9f6..3afc266b666d 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -220,7 +220,7 @@ static inline void wait_for_idle(struct rockchip_spi *rs)
220 do { 220 do {
221 if (!(readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY)) 221 if (!(readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY))
222 return; 222 return;
223 } while (time_before(jiffies, timeout)); 223 } while (!time_after(jiffies, timeout));
224 224
225 dev_warn(rs->dev, "spi controller is in busy state!\n"); 225 dev_warn(rs->dev, "spi controller is in busy state!\n");
226} 226}
@@ -529,7 +529,8 @@ static int rockchip_spi_transfer_one(
529 int ret = 0; 529 int ret = 0;
530 struct rockchip_spi *rs = spi_master_get_devdata(master); 530 struct rockchip_spi *rs = spi_master_get_devdata(master);
531 531
532 WARN_ON((readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY)); 532 WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) &&
533 (readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY));
533 534
534 if (!xfer->tx_buf && !xfer->rx_buf) { 535 if (!xfer->tx_buf && !xfer->rx_buf) {
535 dev_err(rs->dev, "No buffer for transfer\n"); 536 dev_err(rs->dev, "No buffer for transfer\n");
diff --git a/drivers/spi/spi-sirf.c b/drivers/spi/spi-sirf.c
index 95ac276eaafe..6f0602fd7401 100644
--- a/drivers/spi/spi-sirf.c
+++ b/drivers/spi/spi-sirf.c
@@ -312,6 +312,8 @@ static int spi_sirfsoc_cmd_transfer(struct spi_device *spi,
312 u32 cmd; 312 u32 cmd;
313 313
314 sspi = spi_master_get_devdata(spi->master); 314 sspi = spi_master_get_devdata(spi->master);
315 writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_TXFIFO_OP);
316 writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_TXFIFO_OP);
315 memcpy(&cmd, sspi->tx, t->len); 317 memcpy(&cmd, sspi->tx, t->len);
316 if (sspi->word_width == 1 && !(spi->mode & SPI_LSB_FIRST)) 318 if (sspi->word_width == 1 && !(spi->mode & SPI_LSB_FIRST))
317 cmd = cpu_to_be32(cmd) >> 319 cmd = cpu_to_be32(cmd) >>
@@ -438,7 +440,8 @@ static void spi_sirfsoc_pio_transfer(struct spi_device *spi,
438 sspi->tx_word(sspi); 440 sspi->tx_word(sspi);
439 writel(SIRFSOC_SPI_TXFIFO_EMPTY_INT_EN | 441 writel(SIRFSOC_SPI_TXFIFO_EMPTY_INT_EN |
440 SIRFSOC_SPI_TX_UFLOW_INT_EN | 442 SIRFSOC_SPI_TX_UFLOW_INT_EN |
441 SIRFSOC_SPI_RX_OFLOW_INT_EN, 443 SIRFSOC_SPI_RX_OFLOW_INT_EN |
444 SIRFSOC_SPI_RX_IO_DMA_INT_EN,
442 sspi->base + SIRFSOC_SPI_INT_EN); 445 sspi->base + SIRFSOC_SPI_INT_EN);
443 writel(SIRFSOC_SPI_RX_EN | SIRFSOC_SPI_TX_EN, 446 writel(SIRFSOC_SPI_RX_EN | SIRFSOC_SPI_TX_EN,
444 sspi->base + SIRFSOC_SPI_TX_RX_EN); 447 sspi->base + SIRFSOC_SPI_TX_RX_EN);
diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c
index e7b2e0234196..69139ce7420d 100644
--- a/drivers/staging/android/sync.c
+++ b/drivers/staging/android/sync.c
@@ -199,7 +199,6 @@ struct sync_fence *sync_fence_create(const char *name, struct sync_pt *pt)
199 fence->num_fences = 1; 199 fence->num_fences = 1;
200 atomic_set(&fence->status, 1); 200 atomic_set(&fence->status, 1);
201 201
202 fence_get(&pt->base);
203 fence->cbs[0].sync_pt = &pt->base; 202 fence->cbs[0].sync_pt = &pt->base;
204 fence->cbs[0].fence = fence; 203 fence->cbs[0].fence = fence;
205 if (fence_add_callback(&pt->base, &fence->cbs[0].cb, 204 if (fence_add_callback(&pt->base, &fence->cbs[0].cb,
diff --git a/drivers/staging/iio/meter/ade7758_trigger.c b/drivers/staging/iio/meter/ade7758_trigger.c
index ea01b8f7a2c3..6f45ce0478d7 100644
--- a/drivers/staging/iio/meter/ade7758_trigger.c
+++ b/drivers/staging/iio/meter/ade7758_trigger.c
@@ -85,7 +85,7 @@ int ade7758_probe_trigger(struct iio_dev *indio_dev)
85 ret = iio_trigger_register(st->trig); 85 ret = iio_trigger_register(st->trig);
86 86
87 /* select default trigger */ 87 /* select default trigger */
88 indio_dev->trig = st->trig; 88 indio_dev->trig = iio_trigger_get(st->trig);
89 if (ret) 89 if (ret)
90 goto error_free_irq; 90 goto error_free_irq;
91 91
diff --git a/drivers/staging/imx-drm/imx-ldb.c b/drivers/staging/imx-drm/imx-ldb.c
index 7e3f019d7e72..4662e00b456a 100644
--- a/drivers/staging/imx-drm/imx-ldb.c
+++ b/drivers/staging/imx-drm/imx-ldb.c
@@ -574,6 +574,9 @@ static void imx_ldb_unbind(struct device *dev, struct device *master,
574 for (i = 0; i < 2; i++) { 574 for (i = 0; i < 2; i++) {
575 struct imx_ldb_channel *channel = &imx_ldb->channel[i]; 575 struct imx_ldb_channel *channel = &imx_ldb->channel[i];
576 576
577 if (!channel->connector.funcs)
578 continue;
579
577 channel->connector.funcs->destroy(&channel->connector); 580 channel->connector.funcs->destroy(&channel->connector);
578 channel->encoder.funcs->destroy(&channel->encoder); 581 channel->encoder.funcs->destroy(&channel->encoder);
579 } 582 }
diff --git a/drivers/staging/imx-drm/ipuv3-plane.c b/drivers/staging/imx-drm/ipuv3-plane.c
index 6f393a11f44d..50de10a550e9 100644
--- a/drivers/staging/imx-drm/ipuv3-plane.c
+++ b/drivers/staging/imx-drm/ipuv3-plane.c
@@ -281,7 +281,8 @@ static void ipu_plane_dpms(struct ipu_plane *ipu_plane, int mode)
281 281
282 ipu_idmac_put(ipu_plane->ipu_ch); 282 ipu_idmac_put(ipu_plane->ipu_ch);
283 ipu_dmfc_put(ipu_plane->dmfc); 283 ipu_dmfc_put(ipu_plane->dmfc);
284 ipu_dp_put(ipu_plane->dp); 284 if (ipu_plane->dp)
285 ipu_dp_put(ipu_plane->dp);
285 } 286 }
286} 287}
287 288
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c
index 0367f5a2cfe4..0c59e26c0805 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -568,7 +568,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
568 if (sb->s_root == NULL) { 568 if (sb->s_root == NULL) {
569 CERROR("%s: can't make root dentry\n", 569 CERROR("%s: can't make root dentry\n",
570 ll_get_fsname(sb, NULL, 0)); 570 ll_get_fsname(sb, NULL, 0));
571 GOTO(out_root, err = -ENOMEM); 571 GOTO(out_lock_cn_cb, err = -ENOMEM);
572 } 572 }
573 573
574 sbi->ll_sdev_orig = sb->s_dev; 574 sbi->ll_sdev_orig = sb->s_dev;
diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c
index f105c2ac091b..164136b07a68 100644
--- a/drivers/staging/vt6655/hostap.c
+++ b/drivers/staging/vt6655/hostap.c
@@ -350,6 +350,9 @@ static int hostap_set_generic_element(PSDevice pDevice,
350{ 350{
351 PSMgmtObject pMgmt = pDevice->pMgmt; 351 PSMgmtObject pMgmt = pDevice->pMgmt;
352 352
353 if (param->u.generic_elem.len > sizeof(pMgmt->abyWPAIE))
354 return -EINVAL;
355
353 memcpy(pMgmt->abyWPAIE, 356 memcpy(pMgmt->abyWPAIE,
354 param->u.generic_elem.data, 357 param->u.generic_elem.data,
355 param->u.generic_elem.len 358 param->u.generic_elem.len
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 1f4c794f5fcc..260c3e1e312c 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -4540,6 +4540,7 @@ static void iscsit_logout_post_handler_diffcid(
4540{ 4540{
4541 struct iscsi_conn *l_conn; 4541 struct iscsi_conn *l_conn;
4542 struct iscsi_session *sess = conn->sess; 4542 struct iscsi_session *sess = conn->sess;
4543 bool conn_found = false;
4543 4544
4544 if (!sess) 4545 if (!sess)
4545 return; 4546 return;
@@ -4548,12 +4549,13 @@ static void iscsit_logout_post_handler_diffcid(
4548 list_for_each_entry(l_conn, &sess->sess_conn_list, conn_list) { 4549 list_for_each_entry(l_conn, &sess->sess_conn_list, conn_list) {
4549 if (l_conn->cid == cid) { 4550 if (l_conn->cid == cid) {
4550 iscsit_inc_conn_usage_count(l_conn); 4551 iscsit_inc_conn_usage_count(l_conn);
4552 conn_found = true;
4551 break; 4553 break;
4552 } 4554 }
4553 } 4555 }
4554 spin_unlock_bh(&sess->conn_lock); 4556 spin_unlock_bh(&sess->conn_lock);
4555 4557
4556 if (!l_conn) 4558 if (!conn_found)
4557 return; 4559 return;
4558 4560
4559 if (l_conn->sock) 4561 if (l_conn->sock)
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c
index 02f9de26f38a..18c29260b4a2 100644
--- a/drivers/target/iscsi/iscsi_target_parameters.c
+++ b/drivers/target/iscsi/iscsi_target_parameters.c
@@ -601,7 +601,7 @@ int iscsi_copy_param_list(
601 param_list = kzalloc(sizeof(struct iscsi_param_list), GFP_KERNEL); 601 param_list = kzalloc(sizeof(struct iscsi_param_list), GFP_KERNEL);
602 if (!param_list) { 602 if (!param_list) {
603 pr_err("Unable to allocate memory for struct iscsi_param_list.\n"); 603 pr_err("Unable to allocate memory for struct iscsi_param_list.\n");
604 goto err_out; 604 return -1;
605 } 605 }
606 INIT_LIST_HEAD(&param_list->param_list); 606 INIT_LIST_HEAD(&param_list->param_list);
607 INIT_LIST_HEAD(&param_list->extra_response_list); 607 INIT_LIST_HEAD(&param_list->extra_response_list);
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c
index fd90b28f1d94..73355f4fca74 100644
--- a/drivers/target/iscsi/iscsi_target_util.c
+++ b/drivers/target/iscsi/iscsi_target_util.c
@@ -400,6 +400,8 @@ struct iscsi_cmd *iscsit_find_cmd_from_itt_or_dump(
400 400
401 spin_lock_bh(&conn->cmd_lock); 401 spin_lock_bh(&conn->cmd_lock);
402 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) { 402 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
403 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT)
404 continue;
403 if (cmd->init_task_tag == init_task_tag) { 405 if (cmd->init_task_tag == init_task_tag) {
404 spin_unlock_bh(&conn->cmd_lock); 406 spin_unlock_bh(&conn->cmd_lock);
405 return cmd; 407 return cmd;
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index bf55c5a04cfa..756def38c77a 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -2363,7 +2363,7 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\
2363 pr_err("Invalid value '%ld', must be '0' or '1'\n", tmp); \ 2363 pr_err("Invalid value '%ld', must be '0' or '1'\n", tmp); \
2364 return -EINVAL; \ 2364 return -EINVAL; \
2365 } \ 2365 } \
2366 if (!tmp) \ 2366 if (tmp) \
2367 t->_var |= _bit; \ 2367 t->_var |= _bit; \
2368 else \ 2368 else \
2369 t->_var &= ~_bit; \ 2369 t->_var &= ~_bit; \
diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index 6cd7222738fc..bc286a67af7c 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -664,7 +664,7 @@ spc_emulate_evpd_b3(struct se_cmd *cmd, unsigned char *buf)
664 buf[0] = dev->transport->get_device_type(dev); 664 buf[0] = dev->transport->get_device_type(dev);
665 buf[3] = 0x0c; 665 buf[3] = 0x0c;
666 put_unaligned_be32(dev->t10_alua.lba_map_segment_size, &buf[8]); 666 put_unaligned_be32(dev->t10_alua.lba_map_segment_size, &buf[8]);
667 put_unaligned_be32(dev->t10_alua.lba_map_segment_size, &buf[12]); 667 put_unaligned_be32(dev->t10_alua.lba_map_segment_multiplier, &buf[12]);
668 668
669 return 0; 669 return 0;
670} 670}
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index 4db7987ec225..57d9df84ce5d 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -540,6 +540,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
540 { "INT3434", 0 }, 540 { "INT3434", 0 },
541 { "INT3435", 0 }, 541 { "INT3435", 0 },
542 { "80860F0A", 0 }, 542 { "80860F0A", 0 },
543 { "8086228A", 0 },
543 { }, 544 { },
544}; 545};
545MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match); 546MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index 7b63677475c1..d7d4584549a5 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -527,6 +527,45 @@ static void atmel_enable_ms(struct uart_port *port)
527} 527}
528 528
529/* 529/*
530 * Disable modem status interrupts
531 */
532static void atmel_disable_ms(struct uart_port *port)
533{
534 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
535 uint32_t idr = 0;
536
537 /*
538 * Interrupt should not be disabled twice
539 */
540 if (!atmel_port->ms_irq_enabled)
541 return;
542
543 atmel_port->ms_irq_enabled = false;
544
545 if (atmel_port->gpio_irq[UART_GPIO_CTS] >= 0)
546 disable_irq(atmel_port->gpio_irq[UART_GPIO_CTS]);
547 else
548 idr |= ATMEL_US_CTSIC;
549
550 if (atmel_port->gpio_irq[UART_GPIO_DSR] >= 0)
551 disable_irq(atmel_port->gpio_irq[UART_GPIO_DSR]);
552 else
553 idr |= ATMEL_US_DSRIC;
554
555 if (atmel_port->gpio_irq[UART_GPIO_RI] >= 0)
556 disable_irq(atmel_port->gpio_irq[UART_GPIO_RI]);
557 else
558 idr |= ATMEL_US_RIIC;
559
560 if (atmel_port->gpio_irq[UART_GPIO_DCD] >= 0)
561 disable_irq(atmel_port->gpio_irq[UART_GPIO_DCD]);
562 else
563 idr |= ATMEL_US_DCDIC;
564
565 UART_PUT_IDR(port, idr);
566}
567
568/*
530 * Control the transmission of a break signal 569 * Control the transmission of a break signal
531 */ 570 */
532static void atmel_break_ctl(struct uart_port *port, int break_state) 571static void atmel_break_ctl(struct uart_port *port, int break_state)
@@ -1993,7 +2032,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
1993 2032
1994 /* CTS flow-control and modem-status interrupts */ 2033 /* CTS flow-control and modem-status interrupts */
1995 if (UART_ENABLE_MS(port, termios->c_cflag)) 2034 if (UART_ENABLE_MS(port, termios->c_cflag))
1996 port->ops->enable_ms(port); 2035 atmel_enable_ms(port);
2036 else
2037 atmel_disable_ms(port);
1997 2038
1998 spin_unlock_irqrestore(&port->lock, flags); 2039 spin_unlock_irqrestore(&port->lock, flags);
1999} 2040}
diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
index 01951d27cc03..806e4bcadbd7 100644
--- a/drivers/tty/serial/xilinx_uartps.c
+++ b/drivers/tty/serial/xilinx_uartps.c
@@ -581,7 +581,7 @@ static unsigned int cdns_uart_tx_empty(struct uart_port *port)
581{ 581{
582 unsigned int status; 582 unsigned int status;
583 583
584 status = cdns_uart_readl(CDNS_UART_ISR_OFFSET) & CDNS_UART_IXR_TXEMPTY; 584 status = cdns_uart_readl(CDNS_UART_SR_OFFSET) & CDNS_UART_SR_TXEMPTY;
585 return status ? TIOCSER_TEMT : 0; 585 return status ? TIOCSER_TEMT : 0;
586} 586}
587 587
diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
index d72b9d2de2c5..4935ac38fd00 100644
--- a/drivers/usb/chipidea/ci_hdrc_msm.c
+++ b/drivers/usb/chipidea/ci_hdrc_msm.c
@@ -20,13 +20,13 @@
20static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event) 20static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
21{ 21{
22 struct device *dev = ci->gadget.dev.parent; 22 struct device *dev = ci->gadget.dev.parent;
23 int val;
24 23
25 switch (event) { 24 switch (event) {
26 case CI_HDRC_CONTROLLER_RESET_EVENT: 25 case CI_HDRC_CONTROLLER_RESET_EVENT:
27 dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n"); 26 dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
28 writel(0, USB_AHBBURST); 27 writel(0, USB_AHBBURST);
29 writel(0, USB_AHBMODE); 28 writel(0, USB_AHBMODE);
29 usb_phy_init(ci->transceiver);
30 break; 30 break;
31 case CI_HDRC_CONTROLLER_STOPPED_EVENT: 31 case CI_HDRC_CONTROLLER_STOPPED_EVENT:
32 dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n"); 32 dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
@@ -34,10 +34,7 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
34 * Put the transceiver in non-driving mode. Otherwise host 34 * Put the transceiver in non-driving mode. Otherwise host
35 * may not detect soft-disconnection. 35 * may not detect soft-disconnection.
36 */ 36 */
37 val = usb_phy_io_read(ci->transceiver, ULPI_FUNC_CTRL); 37 usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN);
38 val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
39 val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
40 usb_phy_io_write(ci->transceiver, val, ULPI_FUNC_CTRL);
41 break; 38 break;
42 default: 39 default:
43 dev_dbg(dev, "unknown ci_hdrc event\n"); 40 dev_dbg(dev, "unknown ci_hdrc event\n");
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 46f5161c7891..d481c99a20d7 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -5024,9 +5024,10 @@ static void hub_events(void)
5024 5024
5025 hub = list_entry(tmp, struct usb_hub, event_list); 5025 hub = list_entry(tmp, struct usb_hub, event_list);
5026 kref_get(&hub->kref); 5026 kref_get(&hub->kref);
5027 hdev = hub->hdev;
5028 usb_get_dev(hdev);
5027 spin_unlock_irq(&hub_event_lock); 5029 spin_unlock_irq(&hub_event_lock);
5028 5030
5029 hdev = hub->hdev;
5030 hub_dev = hub->intfdev; 5031 hub_dev = hub->intfdev;
5031 intf = to_usb_interface(hub_dev); 5032 intf = to_usb_interface(hub_dev);
5032 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n", 5033 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
@@ -5139,6 +5140,7 @@ static void hub_events(void)
5139 usb_autopm_put_interface(intf); 5140 usb_autopm_put_interface(intf);
5140 loop_disconnected: 5141 loop_disconnected:
5141 usb_unlock_device(hdev); 5142 usb_unlock_device(hdev);
5143 usb_put_dev(hdev);
5142 kref_put(&hub->kref, hub_release); 5144 kref_put(&hub->kref, hub_release);
5143 5145
5144 } /* end while (1) */ 5146 } /* end while (1) */
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index 7c9618e916e2..ce6071d65d51 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -1649,6 +1649,7 @@ static void s3c_hsotg_txfifo_flush(struct s3c_hsotg *hsotg, unsigned int idx)
1649 dev_err(hsotg->dev, 1649 dev_err(hsotg->dev,
1650 "%s: timeout flushing fifo (GRSTCTL=%08x)\n", 1650 "%s: timeout flushing fifo (GRSTCTL=%08x)\n",
1651 __func__, val); 1651 __func__, val);
1652 break;
1652 } 1653 }
1653 1654
1654 udelay(1); 1655 udelay(1);
@@ -2747,13 +2748,14 @@ static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg)
2747 2748
2748 dev_dbg(hsotg->dev, "pdev 0x%p\n", pdev); 2749 dev_dbg(hsotg->dev, "pdev 0x%p\n", pdev);
2749 2750
2750 if (hsotg->phy) { 2751 if (hsotg->uphy)
2751 phy_init(hsotg->phy);
2752 phy_power_on(hsotg->phy);
2753 } else if (hsotg->uphy)
2754 usb_phy_init(hsotg->uphy); 2752 usb_phy_init(hsotg->uphy);
2755 else if (hsotg->plat->phy_init) 2753 else if (hsotg->plat && hsotg->plat->phy_init)
2756 hsotg->plat->phy_init(pdev, hsotg->plat->phy_type); 2754 hsotg->plat->phy_init(pdev, hsotg->plat->phy_type);
2755 else {
2756 phy_init(hsotg->phy);
2757 phy_power_on(hsotg->phy);
2758 }
2757} 2759}
2758 2760
2759/** 2761/**
@@ -2767,13 +2769,14 @@ static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg)
2767{ 2769{
2768 struct platform_device *pdev = to_platform_device(hsotg->dev); 2770 struct platform_device *pdev = to_platform_device(hsotg->dev);
2769 2771
2770 if (hsotg->phy) { 2772 if (hsotg->uphy)
2771 phy_power_off(hsotg->phy);
2772 phy_exit(hsotg->phy);
2773 } else if (hsotg->uphy)
2774 usb_phy_shutdown(hsotg->uphy); 2773 usb_phy_shutdown(hsotg->uphy);
2775 else if (hsotg->plat->phy_exit) 2774 else if (hsotg->plat && hsotg->plat->phy_exit)
2776 hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type); 2775 hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type);
2776 else {
2777 phy_power_off(hsotg->phy);
2778 phy_exit(hsotg->phy);
2779 }
2777} 2780}
2778 2781
2779/** 2782/**
@@ -2892,13 +2895,11 @@ static int s3c_hsotg_udc_stop(struct usb_gadget *gadget,
2892 return -ENODEV; 2895 return -ENODEV;
2893 2896
2894 /* all endpoints should be shutdown */ 2897 /* all endpoints should be shutdown */
2895 for (ep = 0; ep < hsotg->num_of_eps; ep++) 2898 for (ep = 1; ep < hsotg->num_of_eps; ep++)
2896 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep); 2899 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep);
2897 2900
2898 spin_lock_irqsave(&hsotg->lock, flags); 2901 spin_lock_irqsave(&hsotg->lock, flags);
2899 2902
2900 s3c_hsotg_phy_disable(hsotg);
2901
2902 if (!driver) 2903 if (!driver)
2903 hsotg->driver = NULL; 2904 hsotg->driver = NULL;
2904 2905
@@ -2941,7 +2942,6 @@ static int s3c_hsotg_pullup(struct usb_gadget *gadget, int is_on)
2941 s3c_hsotg_phy_enable(hsotg); 2942 s3c_hsotg_phy_enable(hsotg);
2942 s3c_hsotg_core_init(hsotg); 2943 s3c_hsotg_core_init(hsotg);
2943 } else { 2944 } else {
2944 s3c_hsotg_disconnect(hsotg);
2945 s3c_hsotg_phy_disable(hsotg); 2945 s3c_hsotg_phy_disable(hsotg);
2946 } 2946 }
2947 2947
@@ -3441,13 +3441,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3441 3441
3442 hsotg->irq = ret; 3442 hsotg->irq = ret;
3443 3443
3444 ret = devm_request_irq(&pdev->dev, hsotg->irq, s3c_hsotg_irq, 0,
3445 dev_name(dev), hsotg);
3446 if (ret < 0) {
3447 dev_err(dev, "cannot claim IRQ\n");
3448 goto err_clk;
3449 }
3450
3451 dev_info(dev, "regs %p, irq %d\n", hsotg->regs, hsotg->irq); 3444 dev_info(dev, "regs %p, irq %d\n", hsotg->regs, hsotg->irq);
3452 3445
3453 hsotg->gadget.max_speed = USB_SPEED_HIGH; 3446 hsotg->gadget.max_speed = USB_SPEED_HIGH;
@@ -3488,9 +3481,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3488 if (hsotg->phy && (phy_get_bus_width(phy) == 8)) 3481 if (hsotg->phy && (phy_get_bus_width(phy) == 8))
3489 hsotg->phyif = GUSBCFG_PHYIF8; 3482 hsotg->phyif = GUSBCFG_PHYIF8;
3490 3483
3491 if (hsotg->phy)
3492 phy_init(hsotg->phy);
3493
3494 /* usb phy enable */ 3484 /* usb phy enable */
3495 s3c_hsotg_phy_enable(hsotg); 3485 s3c_hsotg_phy_enable(hsotg);
3496 3486
@@ -3498,6 +3488,17 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3498 s3c_hsotg_init(hsotg); 3488 s3c_hsotg_init(hsotg);
3499 s3c_hsotg_hw_cfg(hsotg); 3489 s3c_hsotg_hw_cfg(hsotg);
3500 3490
3491 ret = devm_request_irq(&pdev->dev, hsotg->irq, s3c_hsotg_irq, 0,
3492 dev_name(dev), hsotg);
3493 if (ret < 0) {
3494 s3c_hsotg_phy_disable(hsotg);
3495 clk_disable_unprepare(hsotg->clk);
3496 regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies),
3497 hsotg->supplies);
3498 dev_err(dev, "cannot claim IRQ\n");
3499 goto err_clk;
3500 }
3501
3501 /* hsotg->num_of_eps holds number of EPs other than ep0 */ 3502 /* hsotg->num_of_eps holds number of EPs other than ep0 */
3502 3503
3503 if (hsotg->num_of_eps == 0) { 3504 if (hsotg->num_of_eps == 0) {
@@ -3582,9 +3583,6 @@ static int s3c_hsotg_remove(struct platform_device *pdev)
3582 usb_gadget_unregister_driver(hsotg->driver); 3583 usb_gadget_unregister_driver(hsotg->driver);
3583 } 3584 }
3584 3585
3585 s3c_hsotg_phy_disable(hsotg);
3586 if (hsotg->phy)
3587 phy_exit(hsotg->phy);
3588 clk_disable_unprepare(hsotg->clk); 3586 clk_disable_unprepare(hsotg->clk);
3589 3587
3590 return 0; 3588 return 0;
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index b769c1faaf03..9069984fe5cf 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -799,20 +799,21 @@ static int dwc3_remove(struct platform_device *pdev)
799{ 799{
800 struct dwc3 *dwc = platform_get_drvdata(pdev); 800 struct dwc3 *dwc = platform_get_drvdata(pdev);
801 801
802 dwc3_debugfs_exit(dwc);
803 dwc3_core_exit_mode(dwc);
804 dwc3_event_buffers_cleanup(dwc);
805 dwc3_free_event_buffers(dwc);
806
802 usb_phy_set_suspend(dwc->usb2_phy, 1); 807 usb_phy_set_suspend(dwc->usb2_phy, 1);
803 usb_phy_set_suspend(dwc->usb3_phy, 1); 808 usb_phy_set_suspend(dwc->usb3_phy, 1);
804 phy_power_off(dwc->usb2_generic_phy); 809 phy_power_off(dwc->usb2_generic_phy);
805 phy_power_off(dwc->usb3_generic_phy); 810 phy_power_off(dwc->usb3_generic_phy);
806 811
812 dwc3_core_exit(dwc);
813
807 pm_runtime_put_sync(&pdev->dev); 814 pm_runtime_put_sync(&pdev->dev);
808 pm_runtime_disable(&pdev->dev); 815 pm_runtime_disable(&pdev->dev);
809 816
810 dwc3_debugfs_exit(dwc);
811 dwc3_core_exit_mode(dwc);
812 dwc3_event_buffers_cleanup(dwc);
813 dwc3_free_event_buffers(dwc);
814 dwc3_core_exit(dwc);
815
816 return 0; 817 return 0;
817} 818}
818 819
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 9dcfbe7cd5f5..fc0de3753648 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -576,9 +576,9 @@ static int dwc3_omap_remove(struct platform_device *pdev)
576 if (omap->extcon_id_dev.edev) 576 if (omap->extcon_id_dev.edev)
577 extcon_unregister_interest(&omap->extcon_id_dev); 577 extcon_unregister_interest(&omap->extcon_id_dev);
578 dwc3_omap_disable_irqs(omap); 578 dwc3_omap_disable_irqs(omap);
579 device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
579 pm_runtime_put_sync(&pdev->dev); 580 pm_runtime_put_sync(&pdev->dev);
580 pm_runtime_disable(&pdev->dev); 581 pm_runtime_disable(&pdev->dev);
581 device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
582 582
583 return 0; 583 return 0;
584} 584}
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 349cacc577d8..490a6ca00733 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -527,7 +527,7 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
527 dep->stream_capable = true; 527 dep->stream_capable = true;
528 } 528 }
529 529
530 if (usb_endpoint_xfer_isoc(desc)) 530 if (!usb_endpoint_xfer_control(desc))
531 params.param1 |= DWC3_DEPCFG_XFER_IN_PROGRESS_EN; 531 params.param1 |= DWC3_DEPCFG_XFER_IN_PROGRESS_EN;
532 532
533 /* 533 /*
@@ -1225,16 +1225,17 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
1225 1225
1226 int ret; 1226 int ret;
1227 1227
1228 spin_lock_irqsave(&dwc->lock, flags);
1228 if (!dep->endpoint.desc) { 1229 if (!dep->endpoint.desc) {
1229 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n", 1230 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n",
1230 request, ep->name); 1231 request, ep->name);
1232 spin_unlock_irqrestore(&dwc->lock, flags);
1231 return -ESHUTDOWN; 1233 return -ESHUTDOWN;
1232 } 1234 }
1233 1235
1234 dev_vdbg(dwc->dev, "queing request %p to %s length %d\n", 1236 dev_vdbg(dwc->dev, "queing request %p to %s length %d\n",
1235 request, ep->name, request->length); 1237 request, ep->name, request->length);
1236 1238
1237 spin_lock_irqsave(&dwc->lock, flags);
1238 ret = __dwc3_gadget_ep_queue(dep, req); 1239 ret = __dwc3_gadget_ep_queue(dep, req);
1239 spin_unlock_irqrestore(&dwc->lock, flags); 1240 spin_unlock_irqrestore(&dwc->lock, flags);
1240 1241
@@ -2041,12 +2042,6 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
2041 dwc3_endpoint_transfer_complete(dwc, dep, event); 2042 dwc3_endpoint_transfer_complete(dwc, dep, event);
2042 break; 2043 break;
2043 case DWC3_DEPEVT_XFERINPROGRESS: 2044 case DWC3_DEPEVT_XFERINPROGRESS:
2044 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
2045 dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n",
2046 dep->name);
2047 return;
2048 }
2049
2050 dwc3_endpoint_transfer_complete(dwc, dep, event); 2045 dwc3_endpoint_transfer_complete(dwc, dep, event);
2051 break; 2046 break;
2052 case DWC3_DEPEVT_XFERNOTREADY: 2047 case DWC3_DEPEVT_XFERNOTREADY:
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index dc30adf15a01..0dc3552d1360 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -155,6 +155,12 @@ struct ffs_io_data {
155 struct usb_request *req; 155 struct usb_request *req;
156}; 156};
157 157
158struct ffs_desc_helper {
159 struct ffs_data *ffs;
160 unsigned interfaces_count;
161 unsigned eps_count;
162};
163
158static int __must_check ffs_epfiles_create(struct ffs_data *ffs); 164static int __must_check ffs_epfiles_create(struct ffs_data *ffs);
159static void ffs_epfiles_destroy(struct ffs_epfile *epfiles, unsigned count); 165static void ffs_epfiles_destroy(struct ffs_epfile *epfiles, unsigned count);
160 166
@@ -1830,7 +1836,8 @@ static int __ffs_data_do_entity(enum ffs_entity_type type,
1830 u8 *valuep, struct usb_descriptor_header *desc, 1836 u8 *valuep, struct usb_descriptor_header *desc,
1831 void *priv) 1837 void *priv)
1832{ 1838{
1833 struct ffs_data *ffs = priv; 1839 struct ffs_desc_helper *helper = priv;
1840 struct usb_endpoint_descriptor *d;
1834 1841
1835 ENTER(); 1842 ENTER();
1836 1843
@@ -1844,8 +1851,8 @@ static int __ffs_data_do_entity(enum ffs_entity_type type,
1844 * encountered interface "n" then there are at least 1851 * encountered interface "n" then there are at least
1845 * "n+1" interfaces. 1852 * "n+1" interfaces.
1846 */ 1853 */
1847 if (*valuep >= ffs->interfaces_count) 1854 if (*valuep >= helper->interfaces_count)
1848 ffs->interfaces_count = *valuep + 1; 1855 helper->interfaces_count = *valuep + 1;
1849 break; 1856 break;
1850 1857
1851 case FFS_STRING: 1858 case FFS_STRING:
@@ -1853,14 +1860,22 @@ static int __ffs_data_do_entity(enum ffs_entity_type type,
1853 * Strings are indexed from 1 (0 is magic ;) reserved 1860 * Strings are indexed from 1 (0 is magic ;) reserved
1854 * for languages list or some such) 1861 * for languages list or some such)
1855 */ 1862 */
1856 if (*valuep > ffs->strings_count) 1863 if (*valuep > helper->ffs->strings_count)
1857 ffs->strings_count = *valuep; 1864 helper->ffs->strings_count = *valuep;
1858 break; 1865 break;
1859 1866
1860 case FFS_ENDPOINT: 1867 case FFS_ENDPOINT:
1861 /* Endpoints are indexed from 1 as well. */ 1868 d = (void *)desc;
1862 if ((*valuep & USB_ENDPOINT_NUMBER_MASK) > ffs->eps_count) 1869 helper->eps_count++;
1863 ffs->eps_count = (*valuep & USB_ENDPOINT_NUMBER_MASK); 1870 if (helper->eps_count >= 15)
1871 return -EINVAL;
1872 /* Check if descriptors for any speed were already parsed */
1873 if (!helper->ffs->eps_count && !helper->ffs->interfaces_count)
1874 helper->ffs->eps_addrmap[helper->eps_count] =
1875 d->bEndpointAddress;
1876 else if (helper->ffs->eps_addrmap[helper->eps_count] !=
1877 d->bEndpointAddress)
1878 return -EINVAL;
1864 break; 1879 break;
1865 } 1880 }
1866 1881
@@ -2053,6 +2068,7 @@ static int __ffs_data_got_descs(struct ffs_data *ffs,
2053 char *data = _data, *raw_descs; 2068 char *data = _data, *raw_descs;
2054 unsigned os_descs_count = 0, counts[3], flags; 2069 unsigned os_descs_count = 0, counts[3], flags;
2055 int ret = -EINVAL, i; 2070 int ret = -EINVAL, i;
2071 struct ffs_desc_helper helper;
2056 2072
2057 ENTER(); 2073 ENTER();
2058 2074
@@ -2101,13 +2117,29 @@ static int __ffs_data_got_descs(struct ffs_data *ffs,
2101 2117
2102 /* Read descriptors */ 2118 /* Read descriptors */
2103 raw_descs = data; 2119 raw_descs = data;
2120 helper.ffs = ffs;
2104 for (i = 0; i < 3; ++i) { 2121 for (i = 0; i < 3; ++i) {
2105 if (!counts[i]) 2122 if (!counts[i])
2106 continue; 2123 continue;
2124 helper.interfaces_count = 0;
2125 helper.eps_count = 0;
2107 ret = ffs_do_descs(counts[i], data, len, 2126 ret = ffs_do_descs(counts[i], data, len,
2108 __ffs_data_do_entity, ffs); 2127 __ffs_data_do_entity, &helper);
2109 if (ret < 0) 2128 if (ret < 0)
2110 goto error; 2129 goto error;
2130 if (!ffs->eps_count && !ffs->interfaces_count) {
2131 ffs->eps_count = helper.eps_count;
2132 ffs->interfaces_count = helper.interfaces_count;
2133 } else {
2134 if (ffs->eps_count != helper.eps_count) {
2135 ret = -EINVAL;
2136 goto error;
2137 }
2138 if (ffs->interfaces_count != helper.interfaces_count) {
2139 ret = -EINVAL;
2140 goto error;
2141 }
2142 }
2111 data += ret; 2143 data += ret;
2112 len -= ret; 2144 len -= ret;
2113 } 2145 }
@@ -2342,9 +2374,18 @@ static void ffs_event_add(struct ffs_data *ffs,
2342 spin_unlock_irqrestore(&ffs->ev.waitq.lock, flags); 2374 spin_unlock_irqrestore(&ffs->ev.waitq.lock, flags);
2343} 2375}
2344 2376
2345
2346/* Bind/unbind USB function hooks *******************************************/ 2377/* Bind/unbind USB function hooks *******************************************/
2347 2378
2379static int ffs_ep_addr2idx(struct ffs_data *ffs, u8 endpoint_address)
2380{
2381 int i;
2382
2383 for (i = 1; i < ARRAY_SIZE(ffs->eps_addrmap); ++i)
2384 if (ffs->eps_addrmap[i] == endpoint_address)
2385 return i;
2386 return -ENOENT;
2387}
2388
2348static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep, 2389static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep,
2349 struct usb_descriptor_header *desc, 2390 struct usb_descriptor_header *desc,
2350 void *priv) 2391 void *priv)
@@ -2378,7 +2419,10 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep,
2378 if (!desc || desc->bDescriptorType != USB_DT_ENDPOINT) 2419 if (!desc || desc->bDescriptorType != USB_DT_ENDPOINT)
2379 return 0; 2420 return 0;
2380 2421
2381 idx = (ds->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK) - 1; 2422 idx = ffs_ep_addr2idx(func->ffs, ds->bEndpointAddress) - 1;
2423 if (idx < 0)
2424 return idx;
2425
2382 ffs_ep = func->eps + idx; 2426 ffs_ep = func->eps + idx;
2383 2427
2384 if (unlikely(ffs_ep->descs[ep_desc_id])) { 2428 if (unlikely(ffs_ep->descs[ep_desc_id])) {
diff --git a/drivers/usb/gadget/function/u_fs.h b/drivers/usb/gadget/function/u_fs.h
index 63d6e71569c1..d48897e8ffeb 100644
--- a/drivers/usb/gadget/function/u_fs.h
+++ b/drivers/usb/gadget/function/u_fs.h
@@ -224,6 +224,8 @@ struct ffs_data {
224 void *ms_os_descs_ext_prop_name_avail; 224 void *ms_os_descs_ext_prop_name_avail;
225 void *ms_os_descs_ext_prop_data_avail; 225 void *ms_os_descs_ext_prop_data_avail;
226 226
227 u8 eps_addrmap[15];
228
227 unsigned short strings_count; 229 unsigned short strings_count;
228 unsigned short interfaces_count; 230 unsigned short interfaces_count;
229 unsigned short eps_count; 231 unsigned short eps_count;
diff --git a/drivers/usb/gadget/udc/fusb300_udc.h b/drivers/usb/gadget/udc/fusb300_udc.h
index ae811d8d38b4..ad39f892d200 100644
--- a/drivers/usb/gadget/udc/fusb300_udc.h
+++ b/drivers/usb/gadget/udc/fusb300_udc.h
@@ -12,7 +12,7 @@
12 12
13 13
14#ifndef __FUSB300_UDC_H__ 14#ifndef __FUSB300_UDC_H__
15#define __FUSB300_UDC_H_ 15#define __FUSB300_UDC_H__
16 16
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18 18
diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index f4eac113690e..2e95715b50c0 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -3320,7 +3320,7 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3320 if (stat & tmp) { 3320 if (stat & tmp) {
3321 writel(tmp, &dev->regs->irqstat1); 3321 writel(tmp, &dev->regs->irqstat1);
3322 if ((((stat & BIT(ROOT_PORT_RESET_INTERRUPT)) && 3322 if ((((stat & BIT(ROOT_PORT_RESET_INTERRUPT)) &&
3323 (readl(&dev->usb->usbstat) & mask)) || 3323 ((readl(&dev->usb->usbstat) & mask) == 0)) ||
3324 ((readl(&dev->usb->usbctl) & 3324 ((readl(&dev->usb->usbctl) &
3325 BIT(VBUS_PIN)) == 0)) && 3325 BIT(VBUS_PIN)) == 0)) &&
3326 (dev->gadget.speed != USB_SPEED_UNKNOWN)) { 3326 (dev->gadget.speed != USB_SPEED_UNKNOWN)) {
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 81cda09b47e3..488a30836c36 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -965,8 +965,6 @@ rescan:
965 } 965 }
966 966
967 qh->exception = 1; 967 qh->exception = 1;
968 if (ehci->rh_state < EHCI_RH_RUNNING)
969 qh->qh_state = QH_STATE_IDLE;
970 switch (qh->qh_state) { 968 switch (qh->qh_state) {
971 case QH_STATE_LINKED: 969 case QH_STATE_LINKED:
972 WARN_ON(!list_empty(&qh->qtd_list)); 970 WARN_ON(!list_empty(&qh->qtd_list));
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index aa79e8749040..69aece31143a 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -468,7 +468,8 @@ static void xhci_hub_report_usb2_link_state(u32 *status, u32 status_reg)
468} 468}
469 469
470/* Updates Link Status for super Speed port */ 470/* Updates Link Status for super Speed port */
471static void xhci_hub_report_usb3_link_state(u32 *status, u32 status_reg) 471static void xhci_hub_report_usb3_link_state(struct xhci_hcd *xhci,
472 u32 *status, u32 status_reg)
472{ 473{
473 u32 pls = status_reg & PORT_PLS_MASK; 474 u32 pls = status_reg & PORT_PLS_MASK;
474 475
@@ -507,7 +508,8 @@ static void xhci_hub_report_usb3_link_state(u32 *status, u32 status_reg)
507 * in which sometimes the port enters compliance mode 508 * in which sometimes the port enters compliance mode
508 * caused by a delay on the host-device negotiation. 509 * caused by a delay on the host-device negotiation.
509 */ 510 */
510 if (pls == USB_SS_PORT_LS_COMP_MOD) 511 if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
512 (pls == USB_SS_PORT_LS_COMP_MOD))
511 pls |= USB_PORT_STAT_CONNECTION; 513 pls |= USB_PORT_STAT_CONNECTION;
512 } 514 }
513 515
@@ -666,7 +668,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
666 } 668 }
667 /* Update Port Link State */ 669 /* Update Port Link State */
668 if (hcd->speed == HCD_USB3) { 670 if (hcd->speed == HCD_USB3) {
669 xhci_hub_report_usb3_link_state(&status, raw_port_status); 671 xhci_hub_report_usb3_link_state(xhci, &status, raw_port_status);
670 /* 672 /*
671 * Verify if all USB3 Ports Have entered U0 already. 673 * Verify if all USB3 Ports Have entered U0 already.
672 * Delete Compliance Mode Timer if so. 674 * Delete Compliance Mode Timer if so.
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 8056d90690ee..8936211b161d 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -1812,6 +1812,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1812 1812
1813 if (xhci->lpm_command) 1813 if (xhci->lpm_command)
1814 xhci_free_command(xhci, xhci->lpm_command); 1814 xhci_free_command(xhci, xhci->lpm_command);
1815 xhci->lpm_command = NULL;
1815 if (xhci->cmd_ring) 1816 if (xhci->cmd_ring)
1816 xhci_ring_free(xhci, xhci->cmd_ring); 1817 xhci_ring_free(xhci, xhci->cmd_ring);
1817 xhci->cmd_ring = NULL; 1818 xhci->cmd_ring = NULL;
@@ -1819,7 +1820,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1819 xhci_cleanup_command_queue(xhci); 1820 xhci_cleanup_command_queue(xhci);
1820 1821
1821 num_ports = HCS_MAX_PORTS(xhci->hcs_params1); 1822 num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
1822 for (i = 0; i < num_ports; i++) { 1823 for (i = 0; i < num_ports && xhci->rh_bw; i++) {
1823 struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table; 1824 struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
1824 for (j = 0; j < XHCI_MAX_INTERVAL; j++) { 1825 for (j = 0; j < XHCI_MAX_INTERVAL; j++) {
1825 struct list_head *ep = &bwt->interval_bw[j].endpoints; 1826 struct list_head *ep = &bwt->interval_bw[j].endpoints;
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index c020b094fe7d..c4a8fca8ae93 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -3971,13 +3971,21 @@ static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci,
3971 int ret; 3971 int ret;
3972 3972
3973 spin_lock_irqsave(&xhci->lock, flags); 3973 spin_lock_irqsave(&xhci->lock, flags);
3974 if (max_exit_latency == xhci->devs[udev->slot_id]->current_mel) { 3974
3975 virt_dev = xhci->devs[udev->slot_id];
3976
3977 /*
3978 * virt_dev might not exists yet if xHC resumed from hibernate (S4) and
3979 * xHC was re-initialized. Exit latency will be set later after
3980 * hub_port_finish_reset() is done and xhci->devs[] are re-allocated
3981 */
3982
3983 if (!virt_dev || max_exit_latency == virt_dev->current_mel) {
3975 spin_unlock_irqrestore(&xhci->lock, flags); 3984 spin_unlock_irqrestore(&xhci->lock, flags);
3976 return 0; 3985 return 0;
3977 } 3986 }
3978 3987
3979 /* Attempt to issue an Evaluate Context command to change the MEL. */ 3988 /* Attempt to issue an Evaluate Context command to change the MEL. */
3980 virt_dev = xhci->devs[udev->slot_id];
3981 command = xhci->lpm_command; 3989 command = xhci->lpm_command;
3982 ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx); 3990 ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
3983 if (!ctrl_ctx) { 3991 if (!ctrl_ctx) {
diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c
index 47ae6455d073..3ee133f675ab 100644
--- a/drivers/usb/musb/musb_cppi41.c
+++ b/drivers/usb/musb/musb_cppi41.c
@@ -39,6 +39,7 @@ struct cppi41_dma_channel {
39 u32 transferred; 39 u32 transferred;
40 u32 packet_sz; 40 u32 packet_sz;
41 struct list_head tx_check; 41 struct list_head tx_check;
42 int tx_zlp;
42}; 43};
43 44
44#define MUSB_DMA_NUM_CHANNELS 15 45#define MUSB_DMA_NUM_CHANNELS 15
@@ -122,6 +123,8 @@ static void cppi41_trans_done(struct cppi41_dma_channel *cppi41_channel)
122{ 123{
123 struct musb_hw_ep *hw_ep = cppi41_channel->hw_ep; 124 struct musb_hw_ep *hw_ep = cppi41_channel->hw_ep;
124 struct musb *musb = hw_ep->musb; 125 struct musb *musb = hw_ep->musb;
126 void __iomem *epio = hw_ep->regs;
127 u16 csr;
125 128
126 if (!cppi41_channel->prog_len || 129 if (!cppi41_channel->prog_len ||
127 (cppi41_channel->channel.status == MUSB_DMA_STATUS_FREE)) { 130 (cppi41_channel->channel.status == MUSB_DMA_STATUS_FREE)) {
@@ -131,15 +134,24 @@ static void cppi41_trans_done(struct cppi41_dma_channel *cppi41_channel)
131 cppi41_channel->transferred; 134 cppi41_channel->transferred;
132 cppi41_channel->channel.status = MUSB_DMA_STATUS_FREE; 135 cppi41_channel->channel.status = MUSB_DMA_STATUS_FREE;
133 cppi41_channel->channel.rx_packet_done = true; 136 cppi41_channel->channel.rx_packet_done = true;
137
138 /*
139 * transmit ZLP using PIO mode for transfers which size is
140 * multiple of EP packet size.
141 */
142 if (cppi41_channel->tx_zlp && (cppi41_channel->transferred %
143 cppi41_channel->packet_sz) == 0) {
144 musb_ep_select(musb->mregs, hw_ep->epnum);
145 csr = MUSB_TXCSR_MODE | MUSB_TXCSR_TXPKTRDY;
146 musb_writew(epio, MUSB_TXCSR, csr);
147 }
134 musb_dma_completion(musb, hw_ep->epnum, cppi41_channel->is_tx); 148 musb_dma_completion(musb, hw_ep->epnum, cppi41_channel->is_tx);
135 } else { 149 } else {
136 /* next iteration, reload */ 150 /* next iteration, reload */
137 struct dma_chan *dc = cppi41_channel->dc; 151 struct dma_chan *dc = cppi41_channel->dc;
138 struct dma_async_tx_descriptor *dma_desc; 152 struct dma_async_tx_descriptor *dma_desc;
139 enum dma_transfer_direction direction; 153 enum dma_transfer_direction direction;
140 u16 csr;
141 u32 remain_bytes; 154 u32 remain_bytes;
142 void __iomem *epio = cppi41_channel->hw_ep->regs;
143 155
144 cppi41_channel->buf_addr += cppi41_channel->packet_sz; 156 cppi41_channel->buf_addr += cppi41_channel->packet_sz;
145 157
@@ -363,6 +375,7 @@ static bool cppi41_configure_channel(struct dma_channel *channel,
363 cppi41_channel->total_len = len; 375 cppi41_channel->total_len = len;
364 cppi41_channel->transferred = 0; 376 cppi41_channel->transferred = 0;
365 cppi41_channel->packet_sz = packet_sz; 377 cppi41_channel->packet_sz = packet_sz;
378 cppi41_channel->tx_zlp = (cppi41_channel->is_tx && mode) ? 1 : 0;
366 379
367 /* 380 /*
368 * Due to AM335x' Advisory 1.0.13 we are not allowed to transfer more 381 * Due to AM335x' Advisory 1.0.13 we are not allowed to transfer more
diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
index c42bdf0c4a1f..00972eca04e7 100644
--- a/drivers/usb/phy/phy-mxs-usb.c
+++ b/drivers/usb/phy/phy-mxs-usb.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright 2012-2013 Freescale Semiconductor, Inc. 2 * Copyright 2012-2014 Freescale Semiconductor, Inc.
3 * Copyright (C) 2012 Marek Vasut <marex@denx.de> 3 * Copyright (C) 2012 Marek Vasut <marex@denx.de>
4 * on behalf of DENX Software Engineering GmbH 4 * on behalf of DENX Software Engineering GmbH
5 * 5 *
@@ -125,7 +125,13 @@ static const struct mxs_phy_data imx6sl_phy_data = {
125 MXS_PHY_NEED_IP_FIX, 125 MXS_PHY_NEED_IP_FIX,
126}; 126};
127 127
128static const struct mxs_phy_data imx6sx_phy_data = {
129 .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS |
130 MXS_PHY_NEED_IP_FIX,
131};
132
128static const struct of_device_id mxs_phy_dt_ids[] = { 133static const struct of_device_id mxs_phy_dt_ids[] = {
134 { .compatible = "fsl,imx6sx-usbphy", .data = &imx6sx_phy_data, },
129 { .compatible = "fsl,imx6sl-usbphy", .data = &imx6sl_phy_data, }, 135 { .compatible = "fsl,imx6sl-usbphy", .data = &imx6sl_phy_data, },
130 { .compatible = "fsl,imx6q-usbphy", .data = &imx6q_phy_data, }, 136 { .compatible = "fsl,imx6q-usbphy", .data = &imx6q_phy_data, },
131 { .compatible = "fsl,imx23-usbphy", .data = &imx23_phy_data, }, 137 { .compatible = "fsl,imx23-usbphy", .data = &imx23_phy_data, },
diff --git a/drivers/usb/phy/phy-tegra-usb.c b/drivers/usb/phy/phy-tegra-usb.c
index 13b4fa287da8..886f1807a67b 100644
--- a/drivers/usb/phy/phy-tegra-usb.c
+++ b/drivers/usb/phy/phy-tegra-usb.c
@@ -878,8 +878,8 @@ static int utmi_phy_probe(struct tegra_usb_phy *tegra_phy,
878 return -ENOMEM; 878 return -ENOMEM;
879 } 879 }
880 880
881 tegra_phy->config = devm_kzalloc(&pdev->dev, 881 tegra_phy->config = devm_kzalloc(&pdev->dev, sizeof(*config),
882 sizeof(*tegra_phy->config), GFP_KERNEL); 882 GFP_KERNEL);
883 if (!tegra_phy->config) { 883 if (!tegra_phy->config) {
884 dev_err(&pdev->dev, 884 dev_err(&pdev->dev,
885 "unable to allocate memory for USB UTMIP config\n"); 885 "unable to allocate memory for USB UTMIP config\n");
diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
index 4fd36530bfa3..b0c97a3f1bfe 100644
--- a/drivers/usb/renesas_usbhs/fifo.c
+++ b/drivers/usb/renesas_usbhs/fifo.c
@@ -108,19 +108,45 @@ static struct usbhs_pkt *__usbhsf_pkt_get(struct usbhs_pipe *pipe)
108 return list_first_entry(&pipe->list, struct usbhs_pkt, node); 108 return list_first_entry(&pipe->list, struct usbhs_pkt, node);
109} 109}
110 110
111static void usbhsf_fifo_clear(struct usbhs_pipe *pipe,
112 struct usbhs_fifo *fifo);
113static void usbhsf_fifo_unselect(struct usbhs_pipe *pipe,
114 struct usbhs_fifo *fifo);
115static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo,
116 struct usbhs_pkt *pkt);
117#define usbhsf_dma_map(p) __usbhsf_dma_map_ctrl(p, 1)
118#define usbhsf_dma_unmap(p) __usbhsf_dma_map_ctrl(p, 0)
119static int __usbhsf_dma_map_ctrl(struct usbhs_pkt *pkt, int map);
111struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt) 120struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt)
112{ 121{
113 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); 122 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
123 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe);
114 unsigned long flags; 124 unsigned long flags;
115 125
116 /******************** spin lock ********************/ 126 /******************** spin lock ********************/
117 usbhs_lock(priv, flags); 127 usbhs_lock(priv, flags);
118 128
129 usbhs_pipe_disable(pipe);
130
119 if (!pkt) 131 if (!pkt)
120 pkt = __usbhsf_pkt_get(pipe); 132 pkt = __usbhsf_pkt_get(pipe);
121 133
122 if (pkt) 134 if (pkt) {
135 struct dma_chan *chan = NULL;
136
137 if (fifo)
138 chan = usbhsf_dma_chan_get(fifo, pkt);
139 if (chan) {
140 dmaengine_terminate_all(chan);
141 usbhsf_fifo_clear(pipe, fifo);
142 usbhsf_dma_unmap(pkt);
143 }
144
123 __usbhsf_pkt_del(pkt); 145 __usbhsf_pkt_del(pkt);
146 }
147
148 if (fifo)
149 usbhsf_fifo_unselect(pipe, fifo);
124 150
125 usbhs_unlock(priv, flags); 151 usbhs_unlock(priv, flags);
126 /******************** spin unlock ******************/ 152 /******************** spin unlock ******************/
@@ -544,6 +570,7 @@ static int usbhsf_pio_try_push(struct usbhs_pkt *pkt, int *is_done)
544 usbhsf_send_terminator(pipe, fifo); 570 usbhsf_send_terminator(pipe, fifo);
545 571
546 usbhsf_tx_irq_ctrl(pipe, !*is_done); 572 usbhsf_tx_irq_ctrl(pipe, !*is_done);
573 usbhs_pipe_running(pipe, !*is_done);
547 usbhs_pipe_enable(pipe); 574 usbhs_pipe_enable(pipe);
548 575
549 dev_dbg(dev, " send %d (%d/ %d/ %d/ %d)\n", 576 dev_dbg(dev, " send %d (%d/ %d/ %d/ %d)\n",
@@ -570,12 +597,21 @@ usbhs_fifo_write_busy:
570 * retry in interrupt 597 * retry in interrupt
571 */ 598 */
572 usbhsf_tx_irq_ctrl(pipe, 1); 599 usbhsf_tx_irq_ctrl(pipe, 1);
600 usbhs_pipe_running(pipe, 1);
573 601
574 return ret; 602 return ret;
575} 603}
576 604
605static int usbhsf_pio_prepare_push(struct usbhs_pkt *pkt, int *is_done)
606{
607 if (usbhs_pipe_is_running(pkt->pipe))
608 return 0;
609
610 return usbhsf_pio_try_push(pkt, is_done);
611}
612
577struct usbhs_pkt_handle usbhs_fifo_pio_push_handler = { 613struct usbhs_pkt_handle usbhs_fifo_pio_push_handler = {
578 .prepare = usbhsf_pio_try_push, 614 .prepare = usbhsf_pio_prepare_push,
579 .try_run = usbhsf_pio_try_push, 615 .try_run = usbhsf_pio_try_push,
580}; 616};
581 617
@@ -589,6 +625,9 @@ static int usbhsf_prepare_pop(struct usbhs_pkt *pkt, int *is_done)
589 if (usbhs_pipe_is_busy(pipe)) 625 if (usbhs_pipe_is_busy(pipe))
590 return 0; 626 return 0;
591 627
628 if (usbhs_pipe_is_running(pipe))
629 return 0;
630
592 /* 631 /*
593 * pipe enable to prepare packet receive 632 * pipe enable to prepare packet receive
594 */ 633 */
@@ -597,6 +636,7 @@ static int usbhsf_prepare_pop(struct usbhs_pkt *pkt, int *is_done)
597 636
598 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->length); 637 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->length);
599 usbhs_pipe_enable(pipe); 638 usbhs_pipe_enable(pipe);
639 usbhs_pipe_running(pipe, 1);
600 usbhsf_rx_irq_ctrl(pipe, 1); 640 usbhsf_rx_irq_ctrl(pipe, 1);
601 641
602 return 0; 642 return 0;
@@ -642,6 +682,7 @@ static int usbhsf_pio_try_pop(struct usbhs_pkt *pkt, int *is_done)
642 (total_len < maxp)) { /* short packet */ 682 (total_len < maxp)) { /* short packet */
643 *is_done = 1; 683 *is_done = 1;
644 usbhsf_rx_irq_ctrl(pipe, 0); 684 usbhsf_rx_irq_ctrl(pipe, 0);
685 usbhs_pipe_running(pipe, 0);
645 usbhs_pipe_disable(pipe); /* disable pipe first */ 686 usbhs_pipe_disable(pipe); /* disable pipe first */
646 } 687 }
647 688
@@ -763,8 +804,6 @@ static void __usbhsf_dma_ctrl(struct usbhs_pipe *pipe,
763 usbhs_bset(priv, fifo->sel, DREQE, dreqe); 804 usbhs_bset(priv, fifo->sel, DREQE, dreqe);
764} 805}
765 806
766#define usbhsf_dma_map(p) __usbhsf_dma_map_ctrl(p, 1)
767#define usbhsf_dma_unmap(p) __usbhsf_dma_map_ctrl(p, 0)
768static int __usbhsf_dma_map_ctrl(struct usbhs_pkt *pkt, int map) 807static int __usbhsf_dma_map_ctrl(struct usbhs_pkt *pkt, int map)
769{ 808{
770 struct usbhs_pipe *pipe = pkt->pipe; 809 struct usbhs_pipe *pipe = pkt->pipe;
@@ -805,6 +844,7 @@ static void xfer_work(struct work_struct *work)
805 dev_dbg(dev, " %s %d (%d/ %d)\n", 844 dev_dbg(dev, " %s %d (%d/ %d)\n",
806 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero); 845 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero);
807 846
847 usbhs_pipe_running(pipe, 1);
808 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->trans); 848 usbhs_pipe_set_trans_count_if_bulk(pipe, pkt->trans);
809 usbhs_pipe_enable(pipe); 849 usbhs_pipe_enable(pipe);
810 usbhsf_dma_start(pipe, fifo); 850 usbhsf_dma_start(pipe, fifo);
@@ -836,6 +876,10 @@ static int usbhsf_dma_prepare_push(struct usbhs_pkt *pkt, int *is_done)
836 if ((uintptr_t)(pkt->buf + pkt->actual) & 0x7) /* 8byte alignment */ 876 if ((uintptr_t)(pkt->buf + pkt->actual) & 0x7) /* 8byte alignment */
837 goto usbhsf_pio_prepare_push; 877 goto usbhsf_pio_prepare_push;
838 878
879 /* return at this time if the pipe is running */
880 if (usbhs_pipe_is_running(pipe))
881 return 0;
882
839 /* get enable DMA fifo */ 883 /* get enable DMA fifo */
840 fifo = usbhsf_get_dma_fifo(priv, pkt); 884 fifo = usbhsf_get_dma_fifo(priv, pkt);
841 if (!fifo) 885 if (!fifo)
@@ -869,15 +913,29 @@ usbhsf_pio_prepare_push:
869static int usbhsf_dma_push_done(struct usbhs_pkt *pkt, int *is_done) 913static int usbhsf_dma_push_done(struct usbhs_pkt *pkt, int *is_done)
870{ 914{
871 struct usbhs_pipe *pipe = pkt->pipe; 915 struct usbhs_pipe *pipe = pkt->pipe;
916 int is_short = pkt->trans % usbhs_pipe_get_maxpacket(pipe);
917
918 pkt->actual += pkt->trans;
872 919
873 pkt->actual = pkt->trans; 920 if (pkt->actual < pkt->length)
921 *is_done = 0; /* there are remainder data */
922 else if (is_short)
923 *is_done = 1; /* short packet */
924 else
925 *is_done = !pkt->zero; /* send zero packet? */
874 926
875 *is_done = !pkt->zero; /* send zero packet ? */ 927 usbhs_pipe_running(pipe, !*is_done);
876 928
877 usbhsf_dma_stop(pipe, pipe->fifo); 929 usbhsf_dma_stop(pipe, pipe->fifo);
878 usbhsf_dma_unmap(pkt); 930 usbhsf_dma_unmap(pkt);
879 usbhsf_fifo_unselect(pipe, pipe->fifo); 931 usbhsf_fifo_unselect(pipe, pipe->fifo);
880 932
933 if (!*is_done) {
934 /* change handler to PIO */
935 pkt->handler = &usbhs_fifo_pio_push_handler;
936 return pkt->handler->try_run(pkt, is_done);
937 }
938
881 return 0; 939 return 0;
882} 940}
883 941
@@ -972,8 +1030,10 @@ static int usbhsf_dma_pop_done(struct usbhs_pkt *pkt, int *is_done)
972 if ((pkt->actual == pkt->length) || /* receive all data */ 1030 if ((pkt->actual == pkt->length) || /* receive all data */
973 (pkt->trans < maxp)) { /* short packet */ 1031 (pkt->trans < maxp)) { /* short packet */
974 *is_done = 1; 1032 *is_done = 1;
1033 usbhs_pipe_running(pipe, 0);
975 } else { 1034 } else {
976 /* re-enable */ 1035 /* re-enable */
1036 usbhs_pipe_running(pipe, 0);
977 usbhsf_prepare_pop(pkt, is_done); 1037 usbhsf_prepare_pop(pkt, is_done);
978 } 1038 }
979 1039
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c
index 6a030b931a3b..9a705b15b3a1 100644
--- a/drivers/usb/renesas_usbhs/mod.c
+++ b/drivers/usb/renesas_usbhs/mod.c
@@ -213,7 +213,10 @@ static int usbhs_status_get_each_irq(struct usbhs_priv *priv,
213{ 213{
214 struct usbhs_mod *mod = usbhs_mod_get_current(priv); 214 struct usbhs_mod *mod = usbhs_mod_get_current(priv);
215 u16 intenb0, intenb1; 215 u16 intenb0, intenb1;
216 unsigned long flags;
216 217
218 /******************** spin lock ********************/
219 usbhs_lock(priv, flags);
217 state->intsts0 = usbhs_read(priv, INTSTS0); 220 state->intsts0 = usbhs_read(priv, INTSTS0);
218 state->intsts1 = usbhs_read(priv, INTSTS1); 221 state->intsts1 = usbhs_read(priv, INTSTS1);
219 222
@@ -229,6 +232,8 @@ static int usbhs_status_get_each_irq(struct usbhs_priv *priv,
229 state->bempsts &= mod->irq_bempsts; 232 state->bempsts &= mod->irq_bempsts;
230 state->brdysts &= mod->irq_brdysts; 233 state->brdysts &= mod->irq_brdysts;
231 } 234 }
235 usbhs_unlock(priv, flags);
236 /******************** spin unlock ******************/
232 237
233 /* 238 /*
234 * Check whether the irq enable registers and the irq status are set 239 * Check whether the irq enable registers and the irq status are set
diff --git a/drivers/usb/renesas_usbhs/pipe.c b/drivers/usb/renesas_usbhs/pipe.c
index 75fbcf6b102e..040bcefcb040 100644
--- a/drivers/usb/renesas_usbhs/pipe.c
+++ b/drivers/usb/renesas_usbhs/pipe.c
@@ -578,6 +578,19 @@ int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe)
578 return usbhsp_flags_has(pipe, IS_DIR_HOST); 578 return usbhsp_flags_has(pipe, IS_DIR_HOST);
579} 579}
580 580
581int usbhs_pipe_is_running(struct usbhs_pipe *pipe)
582{
583 return usbhsp_flags_has(pipe, IS_RUNNING);
584}
585
586void usbhs_pipe_running(struct usbhs_pipe *pipe, int running)
587{
588 if (running)
589 usbhsp_flags_set(pipe, IS_RUNNING);
590 else
591 usbhsp_flags_clr(pipe, IS_RUNNING);
592}
593
581void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int sequence) 594void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int sequence)
582{ 595{
583 u16 mask = (SQCLR | SQSET); 596 u16 mask = (SQCLR | SQSET);
diff --git a/drivers/usb/renesas_usbhs/pipe.h b/drivers/usb/renesas_usbhs/pipe.h
index 406f36d050e4..d24a05972370 100644
--- a/drivers/usb/renesas_usbhs/pipe.h
+++ b/drivers/usb/renesas_usbhs/pipe.h
@@ -36,6 +36,7 @@ struct usbhs_pipe {
36#define USBHS_PIPE_FLAGS_IS_USED (1 << 0) 36#define USBHS_PIPE_FLAGS_IS_USED (1 << 0)
37#define USBHS_PIPE_FLAGS_IS_DIR_IN (1 << 1) 37#define USBHS_PIPE_FLAGS_IS_DIR_IN (1 << 1)
38#define USBHS_PIPE_FLAGS_IS_DIR_HOST (1 << 2) 38#define USBHS_PIPE_FLAGS_IS_DIR_HOST (1 << 2)
39#define USBHS_PIPE_FLAGS_IS_RUNNING (1 << 3)
39 40
40 struct usbhs_pkt_handle *handler; 41 struct usbhs_pkt_handle *handler;
41 42
@@ -80,6 +81,9 @@ int usbhs_pipe_probe(struct usbhs_priv *priv);
80void usbhs_pipe_remove(struct usbhs_priv *priv); 81void usbhs_pipe_remove(struct usbhs_priv *priv);
81int usbhs_pipe_is_dir_in(struct usbhs_pipe *pipe); 82int usbhs_pipe_is_dir_in(struct usbhs_pipe *pipe);
82int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe); 83int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe);
84int usbhs_pipe_is_running(struct usbhs_pipe *pipe);
85void usbhs_pipe_running(struct usbhs_pipe *pipe, int running);
86
83void usbhs_pipe_init(struct usbhs_priv *priv, 87void usbhs_pipe_init(struct usbhs_priv *priv,
84 int (*dma_map_ctrl)(struct usbhs_pkt *pkt, int map)); 88 int (*dma_map_ctrl)(struct usbhs_pkt *pkt, int map));
85int usbhs_pipe_get_maxpacket(struct usbhs_pipe *pipe); 89int usbhs_pipe_get_maxpacket(struct usbhs_pipe *pipe);
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 824ea5e7ec8b..dc72b924c399 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -728,6 +728,7 @@ static const struct usb_device_id id_table_combined[] = {
728 { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID), 728 { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
729 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, 729 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
730 { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, 730 { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
731 { USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) },
731 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) }, 732 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) },
732 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) }, 733 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) },
733 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) }, 734 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
@@ -939,6 +940,8 @@ static const struct usb_device_id id_table_combined[] = {
939 { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) }, 940 { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) },
940 /* Infineon Devices */ 941 /* Infineon Devices */
941 { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) }, 942 { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) },
943 /* GE Healthcare devices */
944 { USB_DEVICE(GE_HEALTHCARE_VID, GE_HEALTHCARE_NEMO_TRACKER_PID) },
942 { } /* Terminating entry */ 945 { } /* Terminating entry */
943}; 946};
944 947
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
index 70b0b1d88ae9..5937b2d242f2 100644
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -837,6 +837,12 @@
837#define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */ 837#define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */
838 838
839/* 839/*
840 * NOVITUS printers
841 */
842#define NOVITUS_VID 0x1a28
843#define NOVITUS_BONO_E_PID 0x6010
844
845/*
840 * RT Systems programming cables for various ham radios 846 * RT Systems programming cables for various ham radios
841 */ 847 */
842#define RTSYSTEMS_VID 0x2100 /* Vendor ID */ 848#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
@@ -1385,3 +1391,9 @@
1385 * ekey biometric systems GmbH (http://ekey.net/) 1391 * ekey biometric systems GmbH (http://ekey.net/)
1386 */ 1392 */
1387#define FTDI_EKEY_CONV_USB_PID 0xCB08 /* Converter USB */ 1393#define FTDI_EKEY_CONV_USB_PID 0xCB08 /* Converter USB */
1394
1395/*
1396 * GE Healthcare devices
1397 */
1398#define GE_HEALTHCARE_VID 0x1901
1399#define GE_HEALTHCARE_NEMO_TRACKER_PID 0x0015
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index 6f7f01eb556a..46179a0828eb 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -282,14 +282,19 @@ static const struct usb_device_id id_table[] = {
282 /* Sierra Wireless HSPA Non-Composite Device */ 282 /* Sierra Wireless HSPA Non-Composite Device */
283 { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)}, 283 { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)},
284 { USB_DEVICE(0x1199, 0x6893) }, /* Sierra Wireless Device */ 284 { USB_DEVICE(0x1199, 0x6893) }, /* Sierra Wireless Device */
285 { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ 285 /* Sierra Wireless Direct IP modems */
286 { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68A3, 0xFF, 0xFF, 0xFF),
287 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
288 },
289 { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68AA, 0xFF, 0xFF, 0xFF),
286 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist 290 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
287 }, 291 },
288 /* AT&T Direct IP LTE modems */ 292 /* AT&T Direct IP LTE modems */
289 { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF), 293 { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF),
290 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist 294 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
291 }, 295 },
292 { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ 296 /* Airprime/Sierra Wireless Direct IP modems */
297 { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68A3, 0xFF, 0xFF, 0xFF),
293 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist 298 .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
294 }, 299 },
295 300
diff --git a/drivers/usb/serial/zte_ev.c b/drivers/usb/serial/zte_ev.c
index 1a132e9e947a..c9bb107d5e5c 100644
--- a/drivers/usb/serial/zte_ev.c
+++ b/drivers/usb/serial/zte_ev.c
@@ -272,6 +272,14 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
272} 272}
273 273
274static const struct usb_device_id id_table[] = { 274static const struct usb_device_id id_table[] = {
275 { USB_DEVICE(0x19d2, 0xffec) },
276 { USB_DEVICE(0x19d2, 0xffee) },
277 { USB_DEVICE(0x19d2, 0xfff6) },
278 { USB_DEVICE(0x19d2, 0xfff7) },
279 { USB_DEVICE(0x19d2, 0xfff8) },
280 { USB_DEVICE(0x19d2, 0xfff9) },
281 { USB_DEVICE(0x19d2, 0xfffb) },
282 { USB_DEVICE(0x19d2, 0xfffc) },
275 /* MG880 */ 283 /* MG880 */
276 { USB_DEVICE(0x19d2, 0xfffd) }, 284 { USB_DEVICE(0x19d2, 0xfffd) },
277 { }, 285 { },
diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h
index 503ac5c8d80f..8a6f371ed6e7 100644
--- a/drivers/usb/storage/uas-detect.h
+++ b/drivers/usb/storage/uas-detect.h
@@ -59,10 +59,6 @@ static int uas_use_uas_driver(struct usb_interface *intf,
59 unsigned long flags = id->driver_info; 59 unsigned long flags = id->driver_info;
60 int r, alt; 60 int r, alt;
61 61
62 usb_stor_adjust_quirks(udev, &flags);
63
64 if (flags & US_FL_IGNORE_UAS)
65 return 0;
66 62
67 alt = uas_find_uas_alt_setting(intf); 63 alt = uas_find_uas_alt_setting(intf);
68 if (alt < 0) 64 if (alt < 0)
@@ -72,6 +68,29 @@ static int uas_use_uas_driver(struct usb_interface *intf,
72 if (r < 0) 68 if (r < 0)
73 return 0; 69 return 0;
74 70
71 /*
72 * ASM1051 and older ASM1053 devices have the same usb-id, and UAS is
73 * broken on the ASM1051, use the number of streams to differentiate.
74 * New ASM1053-s also support 32 streams, but have a different prod-id.
75 */
76 if (le16_to_cpu(udev->descriptor.idVendor) == 0x174c &&
77 le16_to_cpu(udev->descriptor.idProduct) == 0x55aa) {
78 if (udev->speed < USB_SPEED_SUPER) {
79 /* No streams info, assume ASM1051 */
80 flags |= US_FL_IGNORE_UAS;
81 } else if (usb_ss_max_streams(&eps[1]->ss_ep_comp) == 32) {
82 flags |= US_FL_IGNORE_UAS;
83 }
84 }
85
86 usb_stor_adjust_quirks(udev, &flags);
87
88 if (flags & US_FL_IGNORE_UAS) {
89 dev_warn(&udev->dev,
90 "UAS is blacklisted for this device, using usb-storage instead\n");
91 return 0;
92 }
93
75 if (udev->bus->sg_tablesize == 0) { 94 if (udev->bus->sg_tablesize == 0) {
76 dev_warn(&udev->dev, 95 dev_warn(&udev->dev,
77 "The driver for the USB controller %s does not support scatter-gather which is\n", 96 "The driver for the USB controller %s does not support scatter-gather which is\n",
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index 7ef99b2f3aaf..4a5c68a47e46 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -101,6 +101,12 @@ UNUSUAL_DEV( 0x03f0, 0x4002, 0x0001, 0x0001,
101 "PhotoSmart R707", 101 "PhotoSmart R707",
102 USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_CAPACITY), 102 USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_CAPACITY),
103 103
104UNUSUAL_DEV( 0x03f3, 0x0001, 0x0000, 0x9999,
105 "Adaptec",
106 "USBConnect 2000",
107 USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
108 US_FL_SCM_MULT_TARG ),
109
104/* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net> 110/* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net>
105 * and Olaf Hering <olh@suse.de> (different bcd's, same vendor/product) 111 * and Olaf Hering <olh@suse.de> (different bcd's, same vendor/product)
106 * for USB floppies that need the SINGLE_LUN enforcement. 112 * for USB floppies that need the SINGLE_LUN enforcement.
@@ -741,6 +747,12 @@ UNUSUAL_DEV( 0x059b, 0x0001, 0x0100, 0x0100,
741 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 747 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
742 US_FL_SINGLE_LUN ), 748 US_FL_SINGLE_LUN ),
743 749
750UNUSUAL_DEV( 0x059b, 0x0040, 0x0100, 0x0100,
751 "Iomega",
752 "Jaz USB Adapter",
753 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
754 US_FL_SINGLE_LUN ),
755
744/* Reported by <Hendryk.Pfeiffer@gmx.de> */ 756/* Reported by <Hendryk.Pfeiffer@gmx.de> */
745UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000, 757UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000,
746 "LaCie", 758 "LaCie",
@@ -1119,6 +1131,18 @@ UNUSUAL_DEV( 0x0851, 0x1543, 0x0200, 0x0200,
1119 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 1131 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1120 US_FL_NOT_LOCKABLE), 1132 US_FL_NOT_LOCKABLE),
1121 1133
1134UNUSUAL_DEV( 0x085a, 0x0026, 0x0100, 0x0133,
1135 "Xircom",
1136 "PortGear USB-SCSI (Mac USB Dock)",
1137 USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
1138 US_FL_SCM_MULT_TARG ),
1139
1140UNUSUAL_DEV( 0x085a, 0x0028, 0x0100, 0x0133,
1141 "Xircom",
1142 "PortGear USB to SCSI Converter",
1143 USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
1144 US_FL_SCM_MULT_TARG ),
1145
1122/* Submitted by Jan De Luyck <lkml@kcore.org> */ 1146/* Submitted by Jan De Luyck <lkml@kcore.org> */
1123UNUSUAL_DEV( 0x08bd, 0x1100, 0x0000, 0x0000, 1147UNUSUAL_DEV( 0x08bd, 0x1100, 0x0000, 0x0000,
1124 "CITIZEN", 1148 "CITIZEN",
@@ -1958,6 +1982,14 @@ UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100,
1958 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 1982 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1959 US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ), 1983 US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ),
1960 1984
1985/* Entrega Technologies U1-SC25 (later Xircom PortGear PGSCSI)
1986 * and Mac USB Dock USB-SCSI */
1987UNUSUAL_DEV( 0x1645, 0x0007, 0x0100, 0x0133,
1988 "Entrega Technologies",
1989 "USB to SCSI Converter",
1990 USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
1991 US_FL_SCM_MULT_TARG ),
1992
1961/* Reported by Robert Schedel <r.schedel@yahoo.de> 1993/* Reported by Robert Schedel <r.schedel@yahoo.de>
1962 * Note: this is a 'super top' device like the above 14cd/6600 device */ 1994 * Note: this is a 'super top' device like the above 14cd/6600 device */
1963UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201, 1995UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201,
@@ -1980,6 +2012,12 @@ UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,
1980 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 2012 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1981 US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ), 2013 US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ),
1982 2014
2015UNUSUAL_DEV( 0x1822, 0x0001, 0x0000, 0x9999,
2016 "Ariston Technologies",
2017 "iConnect USB to SCSI adapter",
2018 USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
2019 US_FL_SCM_MULT_TARG ),
2020
1983/* Reported by Hans de Goede <hdegoede@redhat.com> 2021/* Reported by Hans de Goede <hdegoede@redhat.com>
1984 * These Appotech controllers are found in Picture Frames, they provide a 2022 * These Appotech controllers are found in Picture Frames, they provide a
1985 * (buggy) emulation of a cdrom drive which contains the windows software 2023 * (buggy) emulation of a cdrom drive which contains the windows software
diff --git a/drivers/uwb/lc-dev.c b/drivers/uwb/lc-dev.c
index 80079b8fed15..d0303f0dbe15 100644
--- a/drivers/uwb/lc-dev.c
+++ b/drivers/uwb/lc-dev.c
@@ -431,16 +431,19 @@ void uwbd_dev_onair(struct uwb_rc *rc, struct uwb_beca_e *bce)
431 uwb_dev->mac_addr = *bce->mac_addr; 431 uwb_dev->mac_addr = *bce->mac_addr;
432 uwb_dev->dev_addr = bce->dev_addr; 432 uwb_dev->dev_addr = bce->dev_addr;
433 dev_set_name(&uwb_dev->dev, "%s", macbuf); 433 dev_set_name(&uwb_dev->dev, "%s", macbuf);
434
435 /* plug the beacon cache */
436 bce->uwb_dev = uwb_dev;
437 uwb_dev->bce = bce;
438 uwb_bce_get(bce); /* released in uwb_dev_sys_release() */
439
434 result = uwb_dev_add(uwb_dev, &rc->uwb_dev.dev, rc); 440 result = uwb_dev_add(uwb_dev, &rc->uwb_dev.dev, rc);
435 if (result < 0) { 441 if (result < 0) {
436 dev_err(dev, "new device %s: cannot instantiate device\n", 442 dev_err(dev, "new device %s: cannot instantiate device\n",
437 macbuf); 443 macbuf);
438 goto error_dev_add; 444 goto error_dev_add;
439 } 445 }
440 /* plug the beacon cache */ 446
441 bce->uwb_dev = uwb_dev;
442 uwb_dev->bce = bce;
443 uwb_bce_get(bce); /* released in uwb_dev_sys_release() */
444 dev_info(dev, "uwb device (mac %s dev %s) connected to %s %s\n", 447 dev_info(dev, "uwb device (mac %s dev %s) connected to %s %s\n",
445 macbuf, devbuf, rc->uwb_dev.dev.parent->bus->name, 448 macbuf, devbuf, rc->uwb_dev.dev.parent->bus->name,
446 dev_name(rc->uwb_dev.dev.parent)); 449 dev_name(rc->uwb_dev.dev.parent));
@@ -448,6 +451,8 @@ void uwbd_dev_onair(struct uwb_rc *rc, struct uwb_beca_e *bce)
448 return; 451 return;
449 452
450error_dev_add: 453error_dev_add:
454 bce->uwb_dev = NULL;
455 uwb_bce_put(bce);
451 kfree(uwb_dev); 456 kfree(uwb_dev);
452 return; 457 return;
453} 458}
diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index a7b6217ac87b..6ad23bd3523a 100644
--- a/drivers/video/fbdev/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
@@ -639,9 +639,7 @@ static int clcdfb_of_init_tft_panel(struct clcd_fb *fb, u32 r0, u32 g0, u32 b0)
639 if (g0 != panels[i].g0) 639 if (g0 != panels[i].g0)
640 continue; 640 continue;
641 if (r0 == panels[i].r0 && b0 == panels[i].b0) 641 if (r0 == panels[i].r0 && b0 == panels[i].b0)
642 fb->panel->caps = panels[i].caps & CLCD_CAP_RGB; 642 fb->panel->caps = panels[i].caps;
643 if (r0 == panels[i].b0 && b0 == panels[i].r0)
644 fb->panel->caps = panels[i].caps & CLCD_CAP_BGR;
645 } 643 }
646 644
647 return fb->panel->caps ? 0 : -EINVAL; 645 return fb->panel->caps ? 0 : -EINVAL;
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 5c660c77f03b..1e0a317d3dcd 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -230,8 +230,8 @@ static enum bp_state reserve_additional_memory(long credit)
230 rc = add_memory(nid, hotplug_start_paddr, balloon_hotplug << PAGE_SHIFT); 230 rc = add_memory(nid, hotplug_start_paddr, balloon_hotplug << PAGE_SHIFT);
231 231
232 if (rc) { 232 if (rc) {
233 pr_info("%s: add_memory() failed: %i\n", __func__, rc); 233 pr_warn("Cannot add additional memory (%i)\n", rc);
234 return BP_EAGAIN; 234 return BP_ECANCELED;
235 } 235 }
236 236
237 balloon_hotplug -= credit; 237 balloon_hotplug -= credit;
diff --git a/drivers/xen/gntalloc.c b/drivers/xen/gntalloc.c
index 787d17945418..e53fe191738c 100644
--- a/drivers/xen/gntalloc.c
+++ b/drivers/xen/gntalloc.c
@@ -124,7 +124,7 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,
124 int i, rc, readonly; 124 int i, rc, readonly;
125 LIST_HEAD(queue_gref); 125 LIST_HEAD(queue_gref);
126 LIST_HEAD(queue_file); 126 LIST_HEAD(queue_file);
127 struct gntalloc_gref *gref; 127 struct gntalloc_gref *gref, *next;
128 128
129 readonly = !(op->flags & GNTALLOC_FLAG_WRITABLE); 129 readonly = !(op->flags & GNTALLOC_FLAG_WRITABLE);
130 rc = -ENOMEM; 130 rc = -ENOMEM;
@@ -141,13 +141,11 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,
141 goto undo; 141 goto undo;
142 142
143 /* Grant foreign access to the page. */ 143 /* Grant foreign access to the page. */
144 gref->gref_id = gnttab_grant_foreign_access(op->domid, 144 rc = gnttab_grant_foreign_access(op->domid,
145 pfn_to_mfn(page_to_pfn(gref->page)), readonly); 145 pfn_to_mfn(page_to_pfn(gref->page)), readonly);
146 if ((int)gref->gref_id < 0) { 146 if (rc < 0)
147 rc = gref->gref_id;
148 goto undo; 147 goto undo;
149 } 148 gref_ids[i] = gref->gref_id = rc;
150 gref_ids[i] = gref->gref_id;
151 } 149 }
152 150
153 /* Add to gref lists. */ 151 /* Add to gref lists. */
@@ -162,8 +160,8 @@ undo:
162 mutex_lock(&gref_mutex); 160 mutex_lock(&gref_mutex);
163 gref_size -= (op->count - i); 161 gref_size -= (op->count - i);
164 162
165 list_for_each_entry(gref, &queue_file, next_file) { 163 list_for_each_entry_safe(gref, next, &queue_file, next_file) {
166 /* __del_gref does not remove from queue_file */ 164 list_del(&gref->next_file);
167 __del_gref(gref); 165 __del_gref(gref);
168 } 166 }
169 167
@@ -193,7 +191,7 @@ static void __del_gref(struct gntalloc_gref *gref)
193 191
194 gref->notify.flags = 0; 192 gref->notify.flags = 0;
195 193
196 if (gref->gref_id > 0) { 194 if (gref->gref_id) {
197 if (gnttab_query_foreign_access(gref->gref_id)) 195 if (gnttab_query_foreign_access(gref->gref_id))
198 return; 196 return;
199 197
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index 5f1e1f3cd186..f8bb36f9d9ce 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -103,16 +103,11 @@ static void do_suspend(void)
103 103
104 shutting_down = SHUTDOWN_SUSPEND; 104 shutting_down = SHUTDOWN_SUSPEND;
105 105
106#ifdef CONFIG_PREEMPT
107 /* If the kernel is preemptible, we need to freeze all the processes
108 to prevent them from being in the middle of a pagetable update
109 during suspend. */
110 err = freeze_processes(); 106 err = freeze_processes();
111 if (err) { 107 if (err) {
112 pr_err("%s: freeze failed %d\n", __func__, err); 108 pr_err("%s: freeze failed %d\n", __func__, err);
113 goto out; 109 goto out;
114 } 110 }
115#endif
116 111
117 err = dpm_suspend_start(PMSG_FREEZE); 112 err = dpm_suspend_start(PMSG_FREEZE);
118 if (err) { 113 if (err) {
@@ -157,10 +152,8 @@ out_resume:
157 dpm_resume_end(si.cancelled ? PMSG_THAW : PMSG_RESTORE); 152 dpm_resume_end(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
158 153
159out_thaw: 154out_thaw:
160#ifdef CONFIG_PREEMPT
161 thaw_processes(); 155 thaw_processes();
162out: 156out:
163#endif
164 shutting_down = SHUTDOWN_INVALID; 157 shutting_down = SHUTDOWN_INVALID;
165} 158}
166#endif /* CONFIG_HIBERNATE_CALLBACKS */ 159#endif /* CONFIG_HIBERNATE_CALLBACKS */