aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
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/acpica/nsprepkg.c39
-rw-r--r--drivers/acpi/battery.c14
-rw-r--r--drivers/acpi/ec.c4
-rw-r--r--drivers/acpi/processor_idle.c4
-rw-r--r--drivers/acpi/scan.c15
-rw-r--r--drivers/acpi/video.c45
-rw-r--r--drivers/ata/ahci.c22
-rw-r--r--drivers/ata/ahci_tegra.c14
-rw-r--r--drivers/ata/ahci_xgene.c61
-rw-r--r--drivers/ata/ata_piix.c8
-rw-r--r--drivers/ata/pata_jmicron.c12
-rw-r--r--drivers/base/regmap/internal.h3
-rw-r--r--drivers/base/regmap/regcache-rbtree.c9
-rw-r--r--drivers/base/regmap/regcache.c2
-rw-r--r--drivers/base/regmap/regmap-debugfs.c12
-rw-r--r--drivers/base/regmap/regmap.c2
-rw-r--r--drivers/bcma/host_pci.c1
-rw-r--r--drivers/block/rbd.c6
-rw-r--r--drivers/bus/arm-ccn.c51
-rw-r--r--drivers/char/hw_random/virtio-rng.c7
-rw-r--r--drivers/cpufreq/cpufreq_opp.c2
-rw-r--r--drivers/cpufreq/intel_pstate.c4
-rw-r--r--drivers/dma/dma-jz4740.c3
-rw-r--r--drivers/gpio/gpio-bt8xx.c3
-rw-r--r--drivers/gpu/drm/ast/ast_main.c3
-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_bios.c2
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c34
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c55
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c2
-rw-r--r--drivers/gpu/drm/i915/intel_panel.c8
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c66
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c14
-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/core/parent.c4
-rw-r--r--drivers/gpu/drm/radeon/atombios_dp.c7
-rw-r--r--drivers/gpu/drm/radeon/r600.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c33
-rw-r--r--drivers/gpu/drm/radeon/radeon_semaphore.c2
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c11
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c3
-rw-r--r--drivers/hwmon/ds1621.c1
-rw-r--r--drivers/i2c/busses/i2c-at91.c32
-rw-r--r--drivers/i2c/busses/i2c-mv64xxx.c3
-rw-r--r--drivers/i2c/busses/i2c-rcar.c37
-rw-r--r--drivers/i2c/busses/i2c-rk3x.c4
-rw-r--r--drivers/infiniband/hw/mlx4/main.c30
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c8
-rw-r--r--drivers/input/input-mt.c30
-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.c8
-rw-r--r--drivers/input/mouse/elantech.c148
-rw-r--r--drivers/input/mouse/elantech.h3
-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-sparcio.h3
-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/leds/led-class.c14
-rw-r--r--drivers/leds/led-core.c11
-rw-r--r--drivers/md/dm-cache-target.c4
-rw-r--r--drivers/misc/lattice-ecp3-config.c5
-rw-r--r--drivers/mtd/chips/cfi_cmdset_0002.c4
-rw-r--r--drivers/net/ethernet/3com/3c59x.c8
-rw-r--r--drivers/net/ethernet/aeroflex/greth.c86
-rw-r--r--drivers/net/ethernet/aeroflex/greth.h2
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c8
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-dev.c209
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-drv.c2
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c7
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-main.c2
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe.h4
-rw-r--r--drivers/net/ethernet/apm/xgene/Kconfig1
-rw-r--r--drivers/net/ethernet/broadcom/Kconfig2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h7
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c74
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h5
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c57
-rw-r--r--drivers/net/ethernet/broadcom/cnic.c4
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c16
-rw-r--r--drivers/net/ethernet/broadcom/tg3.h1
-rw-r--r--drivers/net/ethernet/brocade/bna/bnad.c7
-rw-r--r--drivers/net/ethernet/calxeda/Kconfig1
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c16
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c79
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_regs.h2
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h4
-rw-r--r--drivers/net/ethernet/ibm/ehea/ehea_main.c2
-rw-r--r--drivers/net/ethernet/intel/e1000/e1000_main.c19
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c21
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_txrx.c2
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_txrx.c2
-rw-r--r--drivers/net/ethernet/marvell/mvneta.c8
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_netdev.c31
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mcg.c38
-rw-r--r--drivers/net/ethernet/moxa/moxart_ether.c34
-rw-r--r--drivers/net/ethernet/nxp/lpc_eth.c3
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_main.c5
-rw-r--r--drivers/net/ethernet/renesas/Kconfig1
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/chain_mode.c14
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/common.h13
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwmac1000.h2
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c6
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/mmc.h2
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/mmc_core.c2
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/ring_mode.c15
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac.h9
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c2
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c142
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c1
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h2
-rw-r--r--drivers/net/fddi/skfp/h/skfbi.h5
-rw-r--r--drivers/net/phy/phy.c18
-rw-r--r--drivers/net/vmxnet3/vmxnet3_drv.c15
-rw-r--r--drivers/net/vmxnet3/vmxnet3_int.h4
-rw-r--r--drivers/net/vxlan.c8
-rw-r--r--drivers/net/wireless/at76c50x-usb.c3
-rw-r--r--drivers/net/wireless/ath/ath9k/spectral.c2
-rw-r--r--drivers/net/wireless/iwlwifi/Kconfig2
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/rxon.c12
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-7000.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-8000.c2
-rw-r--r--drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/sw.c1
-rw-r--r--drivers/net/xen-netback/interface.c6
-rw-r--r--drivers/ntb/ntb_transport.c17
-rw-r--r--drivers/parisc/dino.c2
-rw-r--r--drivers/pci/host/Kconfig2
-rw-r--r--drivers/phy/Kconfig2
-rw-r--r--drivers/phy/phy-exynos5-usbdrd.c1
-rw-r--r--drivers/phy/phy-twl4030-usb.c121
-rw-r--r--drivers/pinctrl/pinctrl-baytrail.c1
-rw-r--r--drivers/platform/x86/ideapad-laptop.c31
-rw-r--r--drivers/platform/x86/toshiba_acpi.c27
-rw-r--r--drivers/powercap/intel_rapl.c8
-rw-r--r--drivers/s390/block/dasd_devmap.c2
-rw-r--r--drivers/s390/net/qeth_core.h1
-rw-r--r--drivers/s390/net/qeth_core_main.c16
-rw-r--r--drivers/s390/net/qeth_l2_sys.c7
-rw-r--r--drivers/ssb/b43_pci_bridge.c1
-rw-r--r--drivers/staging/android/sync.c1
-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/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/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.h6
-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
204 files changed, 2453 insertions, 1180 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/acpica/nsprepkg.c b/drivers/acpi/acpica/nsprepkg.c
index 68f725839eb6..1b13b921dda9 100644
--- a/drivers/acpi/acpica/nsprepkg.c
+++ b/drivers/acpi/acpica/nsprepkg.c
@@ -316,6 +316,45 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
316 acpi_ns_check_package_list(info, package, elements, count); 316 acpi_ns_check_package_list(info, package, elements, count);
317 break; 317 break;
318 318
319 case ACPI_PTYPE2_UUID_PAIR:
320
321 /* The package must contain pairs of (UUID + type) */
322
323 if (count & 1) {
324 expected_count = count + 1;
325 goto package_too_small;
326 }
327
328 while (count > 0) {
329 status = acpi_ns_check_object_type(info, elements,
330 package->ret_info.
331 object_type1, 0);
332 if (ACPI_FAILURE(status)) {
333 return (status);
334 }
335
336 /* Validate length of the UUID buffer */
337
338 if ((*elements)->buffer.length != 16) {
339 ACPI_WARN_PREDEFINED((AE_INFO,
340 info->full_pathname,
341 info->node_flags,
342 "Invalid length for UUID Buffer"));
343 return (AE_AML_OPERAND_VALUE);
344 }
345
346 status = acpi_ns_check_object_type(info, elements + 1,
347 package->ret_info.
348 object_type2, 0);
349 if (ACPI_FAILURE(status)) {
350 return (status);
351 }
352
353 elements += 2;
354 count -= 2;
355 }
356 break;
357
319 default: 358 default:
320 359
321 /* Should not get here if predefined info table is correct */ 360 /* Should not get here if predefined info table is correct */
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/ec.c b/drivers/acpi/ec.c
index 9922cc46b15c..cb6066c809ea 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1030,6 +1030,10 @@ static struct dmi_system_id ec_dmi_table[] __initdata = {
1030 DMI_MATCH(DMI_SYS_VENDOR, "Quanta"), 1030 DMI_MATCH(DMI_SYS_VENDOR, "Quanta"),
1031 DMI_MATCH(DMI_PRODUCT_NAME, "TW9/SW9"),}, NULL}, 1031 DMI_MATCH(DMI_PRODUCT_NAME, "TW9/SW9"),}, NULL},
1032 { 1032 {
1033 ec_flag_msi, "Clevo W350etq", {
1034 DMI_MATCH(DMI_SYS_VENDOR, "CLEVO CO."),
1035 DMI_MATCH(DMI_PRODUCT_NAME, "W35_37ET"),}, NULL},
1036 {
1033 ec_validate_ecdt, "ASUS hardware", { 1037 ec_validate_ecdt, "ASUS hardware", {
1034 DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL}, 1038 DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL},
1035 { 1039 {
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 3dca36d4ad26..17f9ec501972 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -1071,9 +1071,9 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
1071 1071
1072 if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) { 1072 if (pr->id == 0 && cpuidle_get_driver() == &acpi_idle_driver) {
1073 1073
1074 cpuidle_pause_and_lock();
1075 /* Protect against cpu-hotplug */ 1074 /* Protect against cpu-hotplug */
1076 get_online_cpus(); 1075 get_online_cpus();
1076 cpuidle_pause_and_lock();
1077 1077
1078 /* Disable all cpuidle devices */ 1078 /* Disable all cpuidle devices */
1079 for_each_online_cpu(cpu) { 1079 for_each_online_cpu(cpu) {
@@ -1100,8 +1100,8 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
1100 cpuidle_enable_device(dev); 1100 cpuidle_enable_device(dev);
1101 } 1101 }
1102 } 1102 }
1103 put_online_cpus();
1104 cpuidle_resume_and_unlock(); 1103 cpuidle_resume_and_unlock();
1104 put_online_cpus();
1105 } 1105 }
1106 1106
1107 return 0; 1107 return 0;
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 9a9298994e26..3bf7764659a4 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -667,8 +667,14 @@ static ssize_t
667acpi_device_sun_show(struct device *dev, struct device_attribute *attr, 667acpi_device_sun_show(struct device *dev, struct device_attribute *attr,
668 char *buf) { 668 char *buf) {
669 struct acpi_device *acpi_dev = to_acpi_device(dev); 669 struct acpi_device *acpi_dev = to_acpi_device(dev);
670 acpi_status status;
671 unsigned long long sun;
672
673 status = acpi_evaluate_integer(acpi_dev->handle, "_SUN", NULL, &sun);
674 if (ACPI_FAILURE(status))
675 return -ENODEV;
670 676
671 return sprintf(buf, "%lu\n", acpi_dev->pnp.sun); 677 return sprintf(buf, "%llu\n", sun);
672} 678}
673static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL); 679static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL);
674 680
@@ -690,7 +696,6 @@ static int acpi_device_setup_files(struct acpi_device *dev)
690{ 696{
691 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 697 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
692 acpi_status status; 698 acpi_status status;
693 unsigned long long sun;
694 int result = 0; 699 int result = 0;
695 700
696 /* 701 /*
@@ -731,14 +736,10 @@ static int acpi_device_setup_files(struct acpi_device *dev)
731 if (dev->pnp.unique_id) 736 if (dev->pnp.unique_id)
732 result = device_create_file(&dev->dev, &dev_attr_uid); 737 result = device_create_file(&dev->dev, &dev_attr_uid);
733 738
734 status = acpi_evaluate_integer(dev->handle, "_SUN", NULL, &sun); 739 if (acpi_has_method(dev->handle, "_SUN")) {
735 if (ACPI_SUCCESS(status)) {
736 dev->pnp.sun = (unsigned long)sun;
737 result = device_create_file(&dev->dev, &dev_attr_sun); 740 result = device_create_file(&dev->dev, &dev_attr_sun);
738 if (result) 741 if (result)
739 goto end; 742 goto end;
740 } else {
741 dev->pnp.sun = (unsigned long)-1;
742 } 743 }
743 744
744 if (acpi_has_method(dev->handle, "_STA")) { 745 if (acpi_has_method(dev->handle, "_STA")) {
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 826884392e6b..fcbda105616e 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -82,9 +82,9 @@ module_param(allow_duplicates, bool, 0644);
82 * For Windows 8 systems: used to decide if video module 82 * For Windows 8 systems: used to decide if video module
83 * should skip registering backlight interface of its own. 83 * should skip registering backlight interface of its own.
84 */ 84 */
85static int use_native_backlight_param = 1; 85static int use_native_backlight_param = -1;
86module_param_named(use_native_backlight, use_native_backlight_param, int, 0444); 86module_param_named(use_native_backlight, use_native_backlight_param, int, 0444);
87static bool use_native_backlight_dmi = false; 87static bool use_native_backlight_dmi = true;
88 88
89static int register_count; 89static int register_count;
90static struct mutex video_list_lock; 90static struct mutex video_list_lock;
@@ -417,6 +417,12 @@ static int __init video_set_use_native_backlight(const struct dmi_system_id *d)
417 return 0; 417 return 0;
418} 418}
419 419
420static int __init video_disable_native_backlight(const struct dmi_system_id *d)
421{
422 use_native_backlight_dmi = false;
423 return 0;
424}
425
420static struct dmi_system_id video_dmi_table[] __initdata = { 426static struct dmi_system_id video_dmi_table[] __initdata = {
421 /* 427 /*
422 * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121 428 * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
@@ -720,6 +726,41 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
720 DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 8780w"), 726 DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 8780w"),
721 }, 727 },
722 }, 728 },
729
730 /*
731 * These models have a working acpi_video backlight control, and using
732 * native backlight causes a regression where backlight does not work
733 * when userspace is not handling brightness key events. Disable
734 * native_backlight on these to fix this:
735 * https://bugzilla.kernel.org/show_bug.cgi?id=81691
736 */
737 {
738 .callback = video_disable_native_backlight,
739 .ident = "ThinkPad T420",
740 .matches = {
741 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
742 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T420"),
743 },
744 },
745 {
746 .callback = video_disable_native_backlight,
747 .ident = "ThinkPad T520",
748 .matches = {
749 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
750 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T520"),
751 },
752 },
753
754 /* The native backlight controls do not work on some older machines */
755 {
756 /* https://bugs.freedesktop.org/show_bug.cgi?id=81515 */
757 .callback = video_disable_native_backlight,
758 .ident = "HP ENVY 15 Notebook",
759 .matches = {
760 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
761 DMI_MATCH(DMI_PRODUCT_NAME, "HP ENVY 15 Notebook PC"),
762 },
763 },
723 {} 764 {}
724}; 765};
725 766
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index a29f8012fb08..a0cc0edafc78 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -305,6 +305,14 @@ static const struct pci_device_id ahci_pci_tbl[] = {
305 { PCI_VDEVICE(INTEL, 0x9c85), board_ahci }, /* Wildcat Point-LP RAID */ 305 { PCI_VDEVICE(INTEL, 0x9c85), board_ahci }, /* Wildcat Point-LP RAID */
306 { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */ 306 { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */
307 { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */ 307 { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */
308 { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
309 { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series AHCI */
310 { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
311 { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series RAID */
312 { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
313 { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
314 { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
315 { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
308 316
309 /* JMicron 360/1/3/5/6, match class to avoid IDE function */ 317 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
310 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 318 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
@@ -442,6 +450,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
442 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a), 450 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
443 .driver_data = board_ahci_yes_fbs }, /* 88se9172 */ 451 .driver_data = board_ahci_yes_fbs }, /* 88se9172 */
444 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172), 452 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
453 .driver_data = board_ahci_yes_fbs }, /* 88se9182 */
454 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9182),
445 .driver_data = board_ahci_yes_fbs }, /* 88se9172 */ 455 .driver_data = board_ahci_yes_fbs }, /* 88se9172 */
446 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192), 456 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192),
447 .driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */ 457 .driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */
@@ -1329,6 +1339,18 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1329 else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000) 1339 else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000)
1330 ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS; 1340 ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS;
1331 1341
1342 /*
1343 * The JMicron chip 361/363 contains one SATA controller and one
1344 * PATA controller,for powering on these both controllers, we must
1345 * follow the sequence one by one, otherwise one of them can not be
1346 * powered on successfully, so here we disable the async suspend
1347 * method for these chips.
1348 */
1349 if (pdev->vendor == PCI_VENDOR_ID_JMICRON &&
1350 (pdev->device == PCI_DEVICE_ID_JMICRON_JMB363 ||
1351 pdev->device == PCI_DEVICE_ID_JMICRON_JMB361))
1352 device_disable_async_suspend(&pdev->dev);
1353
1332 /* acquire resources */ 1354 /* acquire resources */
1333 rc = pcim_enable_device(pdev); 1355 rc = pcim_enable_device(pdev);
1334 if (rc) 1356 if (rc)
diff --git a/drivers/ata/ahci_tegra.c b/drivers/ata/ahci_tegra.c
index f1fef74e503c..032904402c95 100644
--- a/drivers/ata/ahci_tegra.c
+++ b/drivers/ata/ahci_tegra.c
@@ -18,14 +18,17 @@
18 */ 18 */
19 19
20#include <linux/ahci_platform.h> 20#include <linux/ahci_platform.h>
21#include <linux/reset.h>
22#include <linux/errno.h> 21#include <linux/errno.h>
23#include <linux/kernel.h> 22#include <linux/kernel.h>
24#include <linux/module.h> 23#include <linux/module.h>
25#include <linux/of_device.h> 24#include <linux/of_device.h>
26#include <linux/platform_device.h> 25#include <linux/platform_device.h>
27#include <linux/regulator/consumer.h> 26#include <linux/regulator/consumer.h>
27#include <linux/reset.h>
28
29#include <soc/tegra/fuse.h>
28#include <soc/tegra/pmc.h> 30#include <soc/tegra/pmc.h>
31
29#include "ahci.h" 32#include "ahci.h"
30 33
31#define SATA_CONFIGURATION_0 0x180 34#define SATA_CONFIGURATION_0 0x180
@@ -180,9 +183,12 @@ static int tegra_ahci_controller_init(struct ahci_host_priv *hpriv)
180 183
181 /* Pad calibration */ 184 /* Pad calibration */
182 185
183 /* FIXME Always use calibration 0. Change this to read the calibration 186 ret = tegra_fuse_readl(FUSE_SATA_CALIB, &val);
184 * fuse once the fuse driver has landed. */ 187 if (ret) {
185 val = 0; 188 dev_err(&tegra->pdev->dev,
189 "failed to read calibration fuse: %d\n", ret);
190 return ret;
191 }
186 192
187 calib = tegra124_pad_calibration[val & FUSE_SATA_CALIB_MASK]; 193 calib = tegra124_pad_calibration[val & FUSE_SATA_CALIB_MASK];
188 194
diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
index c6962300b93c..f03aab187f4d 100644
--- a/drivers/ata/ahci_xgene.c
+++ b/drivers/ata/ahci_xgene.c
@@ -78,6 +78,9 @@
78#define CFG_MEM_RAM_SHUTDOWN 0x00000070 78#define CFG_MEM_RAM_SHUTDOWN 0x00000070
79#define BLOCK_MEM_RDY 0x00000074 79#define BLOCK_MEM_RDY 0x00000074
80 80
81/* Max retry for link down */
82#define MAX_LINK_DOWN_RETRY 3
83
81struct xgene_ahci_context { 84struct xgene_ahci_context {
82 struct ahci_host_priv *hpriv; 85 struct ahci_host_priv *hpriv;
83 struct device *dev; 86 struct device *dev;
@@ -145,6 +148,14 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
145 return rc; 148 return rc;
146} 149}
147 150
151static bool xgene_ahci_is_memram_inited(struct xgene_ahci_context *ctx)
152{
153 void __iomem *diagcsr = ctx->csr_diag;
154
155 return (readl(diagcsr + CFG_MEM_RAM_SHUTDOWN) == 0 &&
156 readl(diagcsr + BLOCK_MEM_RDY) == 0xFFFFFFFF);
157}
158
148/** 159/**
149 * xgene_ahci_read_id - Read ID data from the specified device 160 * xgene_ahci_read_id - Read ID data from the specified device
150 * @dev: device 161 * @dev: device
@@ -229,8 +240,11 @@ static void xgene_ahci_set_phy_cfg(struct xgene_ahci_context *ctx, int channel)
229 * and Gen1 (1.5Gbps). Otherwise during long IO stress test, the PHY will 240 * and Gen1 (1.5Gbps). Otherwise during long IO stress test, the PHY will
230 * report disparity error and etc. In addition, during COMRESET, there can 241 * report disparity error and etc. In addition, during COMRESET, there can
231 * be error reported in the register PORT_SCR_ERR. For SERR_DISPARITY and 242 * be error reported in the register PORT_SCR_ERR. For SERR_DISPARITY and
232 * SERR_10B_8B_ERR, the PHY receiver line must be reseted. The following 243 * SERR_10B_8B_ERR, the PHY receiver line must be reseted. Also during long
233 * algorithm is followed to proper configure the hardware PHY during COMRESET: 244 * reboot cycle regression, sometimes the PHY reports link down even if the
245 * device is present because of speed negotiation failure. so need to retry
246 * the COMRESET to get the link up. The following algorithm is followed to
247 * proper configure the hardware PHY during COMRESET:
234 * 248 *
235 * Alg Part 1: 249 * Alg Part 1:
236 * 1. Start the PHY at Gen3 speed (default setting) 250 * 1. Start the PHY at Gen3 speed (default setting)
@@ -246,9 +260,15 @@ static void xgene_ahci_set_phy_cfg(struct xgene_ahci_context *ctx, int channel)
246 * Alg Part 2: 260 * Alg Part 2:
247 * 1. On link up, if there are any SERR_DISPARITY and SERR_10B_8B_ERR error 261 * 1. On link up, if there are any SERR_DISPARITY and SERR_10B_8B_ERR error
248 * reported in the register PORT_SCR_ERR, then reset the PHY receiver line 262 * reported in the register PORT_SCR_ERR, then reset the PHY receiver line
249 * 2. Go to Alg Part 3 263 * 2. Go to Alg Part 4
250 * 264 *
251 * Alg Part 3: 265 * Alg Part 3:
266 * 1. Check the PORT_SCR_STAT to see whether device presence detected but PHY
267 * communication establishment failed and maximum link down attempts are
268 * less than Max attempts 3 then goto Alg Part 1.
269 * 2. Go to Alg Part 4.
270 *
271 * Alg Part 4:
252 * 1. Clear any pending from register PORT_SCR_ERR. 272 * 1. Clear any pending from register PORT_SCR_ERR.
253 * 273 *
254 * NOTE: For the initial version, we will NOT support Gen1/Gen2. In addition 274 * NOTE: For the initial version, we will NOT support Gen1/Gen2. In addition
@@ -267,19 +287,27 @@ static int xgene_ahci_do_hardreset(struct ata_link *link,
267 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; 287 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
268 void __iomem *port_mmio = ahci_port_base(ap); 288 void __iomem *port_mmio = ahci_port_base(ap);
269 struct ata_taskfile tf; 289 struct ata_taskfile tf;
290 int link_down_retry = 0;
270 int rc; 291 int rc;
271 u32 val; 292 u32 val, sstatus;
272 293
273 /* clear D2H reception area to properly wait for D2H FIS */ 294 do {
274 ata_tf_init(link->device, &tf); 295 /* clear D2H reception area to properly wait for D2H FIS */
275 tf.command = ATA_BUSY; 296 ata_tf_init(link->device, &tf);
276 ata_tf_to_fis(&tf, 0, 0, d2h_fis); 297 tf.command = ATA_BUSY;
277 rc = sata_link_hardreset(link, timing, deadline, online, 298 ata_tf_to_fis(&tf, 0, 0, d2h_fis);
299 rc = sata_link_hardreset(link, timing, deadline, online,
278 ahci_check_ready); 300 ahci_check_ready);
301 if (*online) {
302 val = readl(port_mmio + PORT_SCR_ERR);
303 if (val & (SERR_DISPARITY | SERR_10B_8B_ERR))
304 dev_warn(ctx->dev, "link has error\n");
305 break;
306 }
279 307
280 val = readl(port_mmio + PORT_SCR_ERR); 308 sata_scr_read(link, SCR_STATUS, &sstatus);
281 if (val & (SERR_DISPARITY | SERR_10B_8B_ERR)) 309 } while (link_down_retry++ < MAX_LINK_DOWN_RETRY &&
282 dev_warn(ctx->dev, "link has error\n"); 310 (sstatus & 0xff) == 0x1);
283 311
284 /* clear all errors if any pending */ 312 /* clear all errors if any pending */
285 val = readl(port_mmio + PORT_SCR_ERR); 313 val = readl(port_mmio + PORT_SCR_ERR);
@@ -467,6 +495,11 @@ static int xgene_ahci_probe(struct platform_device *pdev)
467 return -ENODEV; 495 return -ENODEV;
468 } 496 }
469 497
498 if (xgene_ahci_is_memram_inited(ctx)) {
499 dev_info(dev, "skip clock and PHY initialization\n");
500 goto skip_clk_phy;
501 }
502
470 /* Due to errata, HW requires full toggle transition */ 503 /* Due to errata, HW requires full toggle transition */
471 rc = ahci_platform_enable_clks(hpriv); 504 rc = ahci_platform_enable_clks(hpriv);
472 if (rc) 505 if (rc)
@@ -479,7 +512,7 @@ static int xgene_ahci_probe(struct platform_device *pdev)
479 512
480 /* Configure the host controller */ 513 /* Configure the host controller */
481 xgene_ahci_hw_init(hpriv); 514 xgene_ahci_hw_init(hpriv);
482 515skip_clk_phy:
483 hpriv->flags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_NO_NCQ; 516 hpriv->flags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_NO_NCQ;
484 517
485 rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info); 518 rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info);
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 893e30e9a9ef..ffbe625e6fd2 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -340,6 +340,14 @@ static const struct pci_device_id piix_pci_tbl[] = {
340 { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, 340 { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
341 /* SATA Controller IDE (Coleto Creek) */ 341 /* SATA Controller IDE (Coleto Creek) */
342 { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, 342 { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
343 /* SATA Controller IDE (9 Series) */
344 { 0x8086, 0x8c88, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
345 /* SATA Controller IDE (9 Series) */
346 { 0x8086, 0x8c89, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
347 /* SATA Controller IDE (9 Series) */
348 { 0x8086, 0x8c80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
349 /* SATA Controller IDE (9 Series) */
350 { 0x8086, 0x8c81, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
343 351
344 { } /* terminate list */ 352 { } /* terminate list */
345}; 353};
diff --git a/drivers/ata/pata_jmicron.c b/drivers/ata/pata_jmicron.c
index 4d1a5d2c4287..47e418b8c8ba 100644
--- a/drivers/ata/pata_jmicron.c
+++ b/drivers/ata/pata_jmicron.c
@@ -143,6 +143,18 @@ static int jmicron_init_one (struct pci_dev *pdev, const struct pci_device_id *i
143 }; 143 };
144 const struct ata_port_info *ppi[] = { &info, NULL }; 144 const struct ata_port_info *ppi[] = { &info, NULL };
145 145
146 /*
147 * The JMicron chip 361/363 contains one SATA controller and one
148 * PATA controller,for powering on these both controllers, we must
149 * follow the sequence one by one, otherwise one of them can not be
150 * powered on successfully, so here we disable the async suspend
151 * method for these chips.
152 */
153 if (pdev->vendor == PCI_VENDOR_ID_JMICRON &&
154 (pdev->device == PCI_DEVICE_ID_JMICRON_JMB363 ||
155 pdev->device == PCI_DEVICE_ID_JMICRON_JMB361))
156 device_disable_async_suspend(&pdev->dev);
157
146 return ata_pci_bmdma_init_one(pdev, ppi, &jmicron_sht, NULL, 0); 158 return ata_pci_bmdma_init_one(pdev, ppi, &jmicron_sht, NULL, 0);
147} 159}
148 160
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
index 7d1326985bee..bfc90b8547f2 100644
--- a/drivers/base/regmap/internal.h
+++ b/drivers/base/regmap/internal.h
@@ -146,6 +146,9 @@ struct regcache_ops {
146 enum regcache_type type; 146 enum regcache_type type;
147 int (*init)(struct regmap *map); 147 int (*init)(struct regmap *map);
148 int (*exit)(struct regmap *map); 148 int (*exit)(struct regmap *map);
149#ifdef CONFIG_DEBUG_FS
150 void (*debugfs_init)(struct regmap *map);
151#endif
149 int (*read)(struct regmap *map, unsigned int reg, unsigned int *value); 152 int (*read)(struct regmap *map, unsigned int reg, unsigned int *value);
150 int (*write)(struct regmap *map, unsigned int reg, unsigned int value); 153 int (*write)(struct regmap *map, unsigned int reg, unsigned int value);
151 int (*sync)(struct regmap *map, unsigned int min, unsigned int max); 154 int (*sync)(struct regmap *map, unsigned int min, unsigned int max);
diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
index 6a7e4fa12854..f3e8fe0cc650 100644
--- a/drivers/base/regmap/regcache-rbtree.c
+++ b/drivers/base/regmap/regcache-rbtree.c
@@ -194,10 +194,6 @@ static void rbtree_debugfs_init(struct regmap *map)
194{ 194{
195 debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops); 195 debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops);
196} 196}
197#else
198static void rbtree_debugfs_init(struct regmap *map)
199{
200}
201#endif 197#endif
202 198
203static int regcache_rbtree_init(struct regmap *map) 199static int regcache_rbtree_init(struct regmap *map)
@@ -222,8 +218,6 @@ static int regcache_rbtree_init(struct regmap *map)
222 goto err; 218 goto err;
223 } 219 }
224 220
225 rbtree_debugfs_init(map);
226
227 return 0; 221 return 0;
228 222
229err: 223err:
@@ -532,6 +526,9 @@ struct regcache_ops regcache_rbtree_ops = {
532 .name = "rbtree", 526 .name = "rbtree",
533 .init = regcache_rbtree_init, 527 .init = regcache_rbtree_init,
534 .exit = regcache_rbtree_exit, 528 .exit = regcache_rbtree_exit,
529#ifdef CONFIG_DEBUG_FS
530 .debugfs_init = rbtree_debugfs_init,
531#endif
535 .read = regcache_rbtree_read, 532 .read = regcache_rbtree_read,
536 .write = regcache_rbtree_write, 533 .write = regcache_rbtree_write,
537 .sync = regcache_rbtree_sync, 534 .sync = regcache_rbtree_sync,
diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index 29b4128da0b0..5617da6dc898 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -698,7 +698,7 @@ int regcache_sync_block(struct regmap *map, void *block,
698 unsigned int block_base, unsigned int start, 698 unsigned int block_base, unsigned int start,
699 unsigned int end) 699 unsigned int end)
700{ 700{
701 if (regmap_can_raw_write(map)) 701 if (regmap_can_raw_write(map) && !map->use_single_rw)
702 return regcache_sync_block_raw(map, block, cache_present, 702 return regcache_sync_block_raw(map, block, cache_present,
703 block_base, start, end); 703 block_base, start, end);
704 else 704 else
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
index 45d812c0ea77..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);
@@ -538,6 +545,9 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
538 545
539 next = rb_next(&range_node->node); 546 next = rb_next(&range_node->node);
540 } 547 }
548
549 if (map->cache_ops && map->cache_ops->debugfs_init)
550 map->cache_ops->debugfs_init(map);
541} 551}
542 552
543void regmap_debugfs_exit(struct regmap *map) 553void regmap_debugfs_exit(struct regmap *map)
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 78f43fb2fe84..1cf427bc0d4a 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -109,7 +109,7 @@ bool regmap_readable(struct regmap *map, unsigned int reg)
109 109
110bool regmap_volatile(struct regmap *map, unsigned int reg) 110bool regmap_volatile(struct regmap *map, unsigned int reg)
111{ 111{
112 if (!regmap_readable(map, reg)) 112 if (!map->format.format_write && !regmap_readable(map, reg))
113 return false; 113 return false;
114 114
115 if (map->volatile_reg) 115 if (map->volatile_reg)
diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c
index 294a7dd25190..f032ed6dd459 100644
--- a/drivers/bcma/host_pci.c
+++ b/drivers/bcma/host_pci.c
@@ -282,6 +282,7 @@ static const struct pci_device_id bcma_pci_bridge_tbl[] = {
282 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43a9) }, 282 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43a9) },
283 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43aa) }, 283 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x43aa) },
284 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4727) }, 284 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4727) },
285 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 43227) }, /* 0xA8DB */
285 { 0, }, 286 { 0, },
286}; 287};
287MODULE_DEVICE_TABLE(pci, bcma_pci_bridge_tbl); 288MODULE_DEVICE_TABLE(pci, bcma_pci_bridge_tbl);
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/bus/arm-ccn.c b/drivers/bus/arm-ccn.c
index 6f550d9e7a2d..a60f26400705 100644
--- a/drivers/bus/arm-ccn.c
+++ b/drivers/bus/arm-ccn.c
@@ -586,6 +586,30 @@ static int arm_ccn_pmu_type_eq(u32 a, u32 b)
586 return 0; 586 return 0;
587} 587}
588 588
589static void arm_ccn_pmu_event_destroy(struct perf_event *event)
590{
591 struct arm_ccn *ccn = pmu_to_arm_ccn(event->pmu);
592 struct hw_perf_event *hw = &event->hw;
593
594 if (hw->idx == CCN_IDX_PMU_CYCLE_COUNTER) {
595 clear_bit(CCN_IDX_PMU_CYCLE_COUNTER, ccn->dt.pmu_counters_mask);
596 } else {
597 struct arm_ccn_component *source =
598 ccn->dt.pmu_counters[hw->idx].source;
599
600 if (CCN_CONFIG_TYPE(event->attr.config) == CCN_TYPE_XP &&
601 CCN_CONFIG_EVENT(event->attr.config) ==
602 CCN_EVENT_WATCHPOINT)
603 clear_bit(hw->config_base, source->xp.dt_cmp_mask);
604 else
605 clear_bit(hw->config_base, source->pmu_events_mask);
606 clear_bit(hw->idx, ccn->dt.pmu_counters_mask);
607 }
608
609 ccn->dt.pmu_counters[hw->idx].source = NULL;
610 ccn->dt.pmu_counters[hw->idx].event = NULL;
611}
612
589static int arm_ccn_pmu_event_init(struct perf_event *event) 613static int arm_ccn_pmu_event_init(struct perf_event *event)
590{ 614{
591 struct arm_ccn *ccn; 615 struct arm_ccn *ccn;
@@ -599,6 +623,7 @@ static int arm_ccn_pmu_event_init(struct perf_event *event)
599 return -ENOENT; 623 return -ENOENT;
600 624
601 ccn = pmu_to_arm_ccn(event->pmu); 625 ccn = pmu_to_arm_ccn(event->pmu);
626 event->destroy = arm_ccn_pmu_event_destroy;
602 627
603 if (hw->sample_period) { 628 if (hw->sample_period) {
604 dev_warn(ccn->dev, "Sampling not supported!\n"); 629 dev_warn(ccn->dev, "Sampling not supported!\n");
@@ -731,30 +756,6 @@ static int arm_ccn_pmu_event_init(struct perf_event *event)
731 return 0; 756 return 0;
732} 757}
733 758
734static void arm_ccn_pmu_event_free(struct perf_event *event)
735{
736 struct arm_ccn *ccn = pmu_to_arm_ccn(event->pmu);
737 struct hw_perf_event *hw = &event->hw;
738
739 if (hw->idx == CCN_IDX_PMU_CYCLE_COUNTER) {
740 clear_bit(CCN_IDX_PMU_CYCLE_COUNTER, ccn->dt.pmu_counters_mask);
741 } else {
742 struct arm_ccn_component *source =
743 ccn->dt.pmu_counters[hw->idx].source;
744
745 if (CCN_CONFIG_TYPE(event->attr.config) == CCN_TYPE_XP &&
746 CCN_CONFIG_EVENT(event->attr.config) ==
747 CCN_EVENT_WATCHPOINT)
748 clear_bit(hw->config_base, source->xp.dt_cmp_mask);
749 else
750 clear_bit(hw->config_base, source->pmu_events_mask);
751 clear_bit(hw->idx, ccn->dt.pmu_counters_mask);
752 }
753
754 ccn->dt.pmu_counters[hw->idx].source = NULL;
755 ccn->dt.pmu_counters[hw->idx].event = NULL;
756}
757
758static u64 arm_ccn_pmu_read_counter(struct arm_ccn *ccn, int idx) 759static u64 arm_ccn_pmu_read_counter(struct arm_ccn *ccn, int idx)
759{ 760{
760 u64 res; 761 u64 res;
@@ -1027,8 +1028,6 @@ static int arm_ccn_pmu_event_add(struct perf_event *event, int flags)
1027static void arm_ccn_pmu_event_del(struct perf_event *event, int flags) 1028static void arm_ccn_pmu_event_del(struct perf_event *event, int flags)
1028{ 1029{
1029 arm_ccn_pmu_event_stop(event, PERF_EF_UPDATE); 1030 arm_ccn_pmu_event_stop(event, PERF_EF_UPDATE);
1030
1031 arm_ccn_pmu_event_free(event);
1032} 1031}
1033 1032
1034static void arm_ccn_pmu_event_read(struct perf_event *event) 1033static void arm_ccn_pmu_event_read(struct perf_event *event)
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/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/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index e396ad3f8f3f..0668b389c516 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -708,10 +708,6 @@ static unsigned int intel_pstate_get(unsigned int cpu_num)
708 708
709static int intel_pstate_set_policy(struct cpufreq_policy *policy) 709static int intel_pstate_set_policy(struct cpufreq_policy *policy)
710{ 710{
711 struct cpudata *cpu;
712
713 cpu = all_cpu_data[policy->cpu];
714
715 if (!policy->cpuinfo.max_freq) 711 if (!policy->cpuinfo.max_freq)
716 return -ENODEV; 712 return -ENODEV;
717 713
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/gpio/gpio-bt8xx.c b/drivers/gpio/gpio-bt8xx.c
index 6557147d9331..7e4c43c18960 100644
--- a/drivers/gpio/gpio-bt8xx.c
+++ b/drivers/gpio/gpio-bt8xx.c
@@ -241,9 +241,6 @@ static void bt8xxgpio_remove(struct pci_dev *pdev)
241 bgwrite(~0x0, BT848_INT_STAT); 241 bgwrite(~0x0, BT848_INT_STAT);
242 bgwrite(0x0, BT848_GPIO_OUT_EN); 242 bgwrite(0x0, BT848_GPIO_OUT_EN);
243 243
244 iounmap(bg->mmio);
245 release_mem_region(pci_resource_start(pdev, 0),
246 pci_resource_len(pdev, 0));
247 pci_disable_device(pdev); 244 pci_disable_device(pdev);
248} 245}
249 246
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/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_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index a66955037e4e..eee79e1c3222 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1123,7 +1123,7 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
1123 } 1123 }
1124} 1124}
1125 1125
1126static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id) 1126static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
1127{ 1127{
1128 DRM_DEBUG_KMS("Falling back to manually reading VBT from " 1128 DRM_DEBUG_KMS("Falling back to manually reading VBT from "
1129 "VBIOS ROM for %s\n", 1129 "VBIOS ROM for %s\n",
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index e8abfce40976..9212e6504e0f 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -804,7 +804,7 @@ static const struct drm_encoder_funcs intel_crt_enc_funcs = {
804 .destroy = intel_encoder_destroy, 804 .destroy = intel_encoder_destroy,
805}; 805};
806 806
807static int __init intel_no_crt_dmi_callback(const struct dmi_system_id *id) 807static int intel_no_crt_dmi_callback(const struct dmi_system_id *id)
808{ 808{
809 DRM_INFO("Skipping CRT initialization for %s\n", id->ident); 809 DRM_INFO("Skipping CRT initialization for %s\n", id->ident);
810 return 1; 810 return 1;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d074d704f458..d8324c69fa86 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2233,6 +2233,15 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
2233 if (need_vtd_wa(dev) && alignment < 256 * 1024) 2233 if (need_vtd_wa(dev) && alignment < 256 * 1024)
2234 alignment = 256 * 1024; 2234 alignment = 256 * 1024;
2235 2235
2236 /*
2237 * Global gtt pte registers are special registers which actually forward
2238 * writes to a chunk of system memory. Which means that there is no risk
2239 * that the register values disappear as soon as we call
2240 * intel_runtime_pm_put(), so it is correct to wrap only the
2241 * pin/unpin/fence and not more.
2242 */
2243 intel_runtime_pm_get(dev_priv);
2244
2236 dev_priv->mm.interruptible = false; 2245 dev_priv->mm.interruptible = false;
2237 ret = i915_gem_object_pin_to_display_plane(obj, alignment, pipelined); 2246 ret = i915_gem_object_pin_to_display_plane(obj, alignment, pipelined);
2238 if (ret) 2247 if (ret)
@@ -2250,12 +2259,14 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
2250 i915_gem_object_pin_fence(obj); 2259 i915_gem_object_pin_fence(obj);
2251 2260
2252 dev_priv->mm.interruptible = true; 2261 dev_priv->mm.interruptible = true;
2262 intel_runtime_pm_put(dev_priv);
2253 return 0; 2263 return 0;
2254 2264
2255err_unpin: 2265err_unpin:
2256 i915_gem_object_unpin_from_display_plane(obj); 2266 i915_gem_object_unpin_from_display_plane(obj);
2257err_interruptible: 2267err_interruptible:
2258 dev_priv->mm.interruptible = true; 2268 dev_priv->mm.interruptible = true;
2269 intel_runtime_pm_put(dev_priv);
2259 return ret; 2270 return ret;
2260} 2271}
2261 2272
@@ -4188,10 +4199,6 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
4188 intel_set_pch_fifo_underrun_reporting(dev, pipe, false); 4199 intel_set_pch_fifo_underrun_reporting(dev, pipe, false);
4189 4200
4190 intel_disable_pipe(dev_priv, pipe); 4201 intel_disable_pipe(dev_priv, pipe);
4191
4192 if (intel_crtc->config.dp_encoder_is_mst)
4193 intel_ddi_set_vc_payload_alloc(crtc, false);
4194
4195 ironlake_pfit_disable(intel_crtc); 4202 ironlake_pfit_disable(intel_crtc);
4196 4203
4197 for_each_encoder_on_crtc(dev, crtc, encoder) 4204 for_each_encoder_on_crtc(dev, crtc, encoder)
@@ -4256,6 +4263,9 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
4256 intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, false); 4263 intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, false);
4257 intel_disable_pipe(dev_priv, pipe); 4264 intel_disable_pipe(dev_priv, pipe);
4258 4265
4266 if (intel_crtc->config.dp_encoder_is_mst)
4267 intel_ddi_set_vc_payload_alloc(crtc, false);
4268
4259 intel_ddi_disable_transcoder_func(dev_priv, cpu_transcoder); 4269 intel_ddi_disable_transcoder_func(dev_priv, cpu_transcoder);
4260 4270
4261 ironlake_pfit_disable(intel_crtc); 4271 ironlake_pfit_disable(intel_crtc);
@@ -8240,6 +8250,15 @@ static int intel_crtc_cursor_set_obj(struct drm_crtc *crtc,
8240 goto fail_locked; 8250 goto fail_locked;
8241 } 8251 }
8242 8252
8253 /*
8254 * Global gtt pte registers are special registers which actually
8255 * forward writes to a chunk of system memory. Which means that
8256 * there is no risk that the register values disappear as soon
8257 * as we call intel_runtime_pm_put(), so it is correct to wrap
8258 * only the pin/unpin/fence and not more.
8259 */
8260 intel_runtime_pm_get(dev_priv);
8261
8243 /* Note that the w/a also requires 2 PTE of padding following 8262 /* Note that the w/a also requires 2 PTE of padding following
8244 * the bo. We currently fill all unused PTE with the shadow 8263 * the bo. We currently fill all unused PTE with the shadow
8245 * page and so we should always have valid PTE following the 8264 * page and so we should always have valid PTE following the
@@ -8252,16 +8271,20 @@ static int intel_crtc_cursor_set_obj(struct drm_crtc *crtc,
8252 ret = i915_gem_object_pin_to_display_plane(obj, alignment, NULL); 8271 ret = i915_gem_object_pin_to_display_plane(obj, alignment, NULL);
8253 if (ret) { 8272 if (ret) {
8254 DRM_DEBUG_KMS("failed to move cursor bo into the GTT\n"); 8273 DRM_DEBUG_KMS("failed to move cursor bo into the GTT\n");
8274 intel_runtime_pm_put(dev_priv);
8255 goto fail_locked; 8275 goto fail_locked;
8256 } 8276 }
8257 8277
8258 ret = i915_gem_object_put_fence(obj); 8278 ret = i915_gem_object_put_fence(obj);
8259 if (ret) { 8279 if (ret) {
8260 DRM_DEBUG_KMS("failed to release fence for cursor"); 8280 DRM_DEBUG_KMS("failed to release fence for cursor");
8281 intel_runtime_pm_put(dev_priv);
8261 goto fail_unpin; 8282 goto fail_unpin;
8262 } 8283 }
8263 8284
8264 addr = i915_gem_obj_ggtt_offset(obj); 8285 addr = i915_gem_obj_ggtt_offset(obj);
8286
8287 intel_runtime_pm_put(dev_priv);
8265 } else { 8288 } else {
8266 int align = IS_I830(dev) ? 16 * 1024 : 256; 8289 int align = IS_I830(dev) ? 16 * 1024 : 256;
8267 ret = i915_gem_object_attach_phys(obj, align); 8290 ret = i915_gem_object_attach_phys(obj, align);
@@ -12481,6 +12504,9 @@ static struct intel_quirk intel_quirks[] = {
12481 /* Acer C720 and C720P Chromebooks (Celeron 2955U) have backlights */ 12504 /* Acer C720 and C720P Chromebooks (Celeron 2955U) have backlights */
12482 { 0x0a06, 0x1025, 0x0a11, quirk_backlight_present }, 12505 { 0x0a06, 0x1025, 0x0a11, quirk_backlight_present },
12483 12506
12507 /* Acer C720 Chromebook (Core i3 4005U) */
12508 { 0x0a16, 0x1025, 0x0a11, quirk_backlight_present },
12509
12484 /* Toshiba CB35 Chromebook (Celeron 2955U) */ 12510 /* Toshiba CB35 Chromebook (Celeron 2955U) */
12485 { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present }, 12511 { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
12486 12512
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 67cfed6d911a..81d7681faa63 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -3661,24 +3661,12 @@ ironlake_dp_detect(struct intel_dp *intel_dp)
3661 return intel_dp_detect_dpcd(intel_dp); 3661 return intel_dp_detect_dpcd(intel_dp);
3662} 3662}
3663 3663
3664static enum drm_connector_status 3664static int g4x_digital_port_connected(struct drm_device *dev,
3665g4x_dp_detect(struct intel_dp *intel_dp) 3665 struct intel_digital_port *intel_dig_port)
3666{ 3666{
3667 struct drm_device *dev = intel_dp_to_dev(intel_dp);
3668 struct drm_i915_private *dev_priv = dev->dev_private; 3667 struct drm_i915_private *dev_priv = dev->dev_private;
3669 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3670 uint32_t bit; 3668 uint32_t bit;
3671 3669
3672 /* Can't disconnect eDP, but you can close the lid... */
3673 if (is_edp(intel_dp)) {
3674 enum drm_connector_status status;
3675
3676 status = intel_panel_detect(dev);
3677 if (status == connector_status_unknown)
3678 status = connector_status_connected;
3679 return status;
3680 }
3681
3682 if (IS_VALLEYVIEW(dev)) { 3670 if (IS_VALLEYVIEW(dev)) {
3683 switch (intel_dig_port->port) { 3671 switch (intel_dig_port->port) {
3684 case PORT_B: 3672 case PORT_B:
@@ -3691,7 +3679,7 @@ g4x_dp_detect(struct intel_dp *intel_dp)
3691 bit = PORTD_HOTPLUG_LIVE_STATUS_VLV; 3679 bit = PORTD_HOTPLUG_LIVE_STATUS_VLV;
3692 break; 3680 break;
3693 default: 3681 default:
3694 return connector_status_unknown; 3682 return -EINVAL;
3695 } 3683 }
3696 } else { 3684 } else {
3697 switch (intel_dig_port->port) { 3685 switch (intel_dig_port->port) {
@@ -3705,11 +3693,36 @@ g4x_dp_detect(struct intel_dp *intel_dp)
3705 bit = PORTD_HOTPLUG_LIVE_STATUS_G4X; 3693 bit = PORTD_HOTPLUG_LIVE_STATUS_G4X;
3706 break; 3694 break;
3707 default: 3695 default:
3708 return connector_status_unknown; 3696 return -EINVAL;
3709 } 3697 }
3710 } 3698 }
3711 3699
3712 if ((I915_READ(PORT_HOTPLUG_STAT) & bit) == 0) 3700 if ((I915_READ(PORT_HOTPLUG_STAT) & bit) == 0)
3701 return 0;
3702 return 1;
3703}
3704
3705static enum drm_connector_status
3706g4x_dp_detect(struct intel_dp *intel_dp)
3707{
3708 struct drm_device *dev = intel_dp_to_dev(intel_dp);
3709 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3710 int ret;
3711
3712 /* Can't disconnect eDP, but you can close the lid... */
3713 if (is_edp(intel_dp)) {
3714 enum drm_connector_status status;
3715
3716 status = intel_panel_detect(dev);
3717 if (status == connector_status_unknown)
3718 status = connector_status_connected;
3719 return status;
3720 }
3721
3722 ret = g4x_digital_port_connected(dev, intel_dig_port);
3723 if (ret == -EINVAL)
3724 return connector_status_unknown;
3725 else if (ret == 0)
3713 return connector_status_disconnected; 3726 return connector_status_disconnected;
3714 3727
3715 return intel_dp_detect_dpcd(intel_dp); 3728 return intel_dp_detect_dpcd(intel_dp);
@@ -4066,8 +4079,14 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
4066 intel_display_power_get(dev_priv, power_domain); 4079 intel_display_power_get(dev_priv, power_domain);
4067 4080
4068 if (long_hpd) { 4081 if (long_hpd) {
4069 if (!ibx_digital_port_connected(dev_priv, intel_dig_port)) 4082
4070 goto mst_fail; 4083 if (HAS_PCH_SPLIT(dev)) {
4084 if (!ibx_digital_port_connected(dev_priv, intel_dig_port))
4085 goto mst_fail;
4086 } else {
4087 if (g4x_digital_port_connected(dev, intel_dig_port) != 1)
4088 goto mst_fail;
4089 }
4071 4090
4072 if (!intel_dp_get_dpcd(intel_dp)) { 4091 if (!intel_dp_get_dpcd(intel_dp)) {
4073 goto mst_fail; 4092 goto mst_fail;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 881361c0f27e..fdf40267249c 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -538,7 +538,7 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
538 .destroy = intel_encoder_destroy, 538 .destroy = intel_encoder_destroy,
539}; 539};
540 540
541static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id) 541static int intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
542{ 542{
543 DRM_INFO("Skipping LVDS initialization for %s\n", id->ident); 543 DRM_INFO("Skipping LVDS initialization for %s\n", id->ident);
544 return 1; 544 return 1;
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 59b028f0b1e8..8e374449c6b5 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -801,7 +801,7 @@ static void pch_enable_backlight(struct intel_connector *connector)
801 801
802 cpu_ctl2 = I915_READ(BLC_PWM_CPU_CTL2); 802 cpu_ctl2 = I915_READ(BLC_PWM_CPU_CTL2);
803 if (cpu_ctl2 & BLM_PWM_ENABLE) { 803 if (cpu_ctl2 & BLM_PWM_ENABLE) {
804 WARN(1, "cpu backlight already enabled\n"); 804 DRM_DEBUG_KMS("cpu backlight already enabled\n");
805 cpu_ctl2 &= ~BLM_PWM_ENABLE; 805 cpu_ctl2 &= ~BLM_PWM_ENABLE;
806 I915_WRITE(BLC_PWM_CPU_CTL2, cpu_ctl2); 806 I915_WRITE(BLC_PWM_CPU_CTL2, cpu_ctl2);
807 } 807 }
@@ -845,7 +845,7 @@ static void i9xx_enable_backlight(struct intel_connector *connector)
845 845
846 ctl = I915_READ(BLC_PWM_CTL); 846 ctl = I915_READ(BLC_PWM_CTL);
847 if (ctl & BACKLIGHT_DUTY_CYCLE_MASK_PNV) { 847 if (ctl & BACKLIGHT_DUTY_CYCLE_MASK_PNV) {
848 WARN(1, "backlight already enabled\n"); 848 DRM_DEBUG_KMS("backlight already enabled\n");
849 I915_WRITE(BLC_PWM_CTL, 0); 849 I915_WRITE(BLC_PWM_CTL, 0);
850 } 850 }
851 851
@@ -876,7 +876,7 @@ static void i965_enable_backlight(struct intel_connector *connector)
876 876
877 ctl2 = I915_READ(BLC_PWM_CTL2); 877 ctl2 = I915_READ(BLC_PWM_CTL2);
878 if (ctl2 & BLM_PWM_ENABLE) { 878 if (ctl2 & BLM_PWM_ENABLE) {
879 WARN(1, "backlight already enabled\n"); 879 DRM_DEBUG_KMS("backlight already enabled\n");
880 ctl2 &= ~BLM_PWM_ENABLE; 880 ctl2 &= ~BLM_PWM_ENABLE;
881 I915_WRITE(BLC_PWM_CTL2, ctl2); 881 I915_WRITE(BLC_PWM_CTL2, ctl2);
882 } 882 }
@@ -910,7 +910,7 @@ static void vlv_enable_backlight(struct intel_connector *connector)
910 910
911 ctl2 = I915_READ(VLV_BLC_PWM_CTL2(pipe)); 911 ctl2 = I915_READ(VLV_BLC_PWM_CTL2(pipe));
912 if (ctl2 & BLM_PWM_ENABLE) { 912 if (ctl2 & BLM_PWM_ENABLE) {
913 WARN(1, "backlight already enabled\n"); 913 DRM_DEBUG_KMS("backlight already enabled\n");
914 ctl2 &= ~BLM_PWM_ENABLE; 914 ctl2 &= ~BLM_PWM_ENABLE;
915 I915_WRITE(VLV_BLC_PWM_CTL2(pipe), ctl2); 915 I915_WRITE(VLV_BLC_PWM_CTL2(pipe), ctl2);
916 } 916 }
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 16371a444426..2d068edd1adc 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 | 1024);
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 32186a656816..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
@@ -1311,6 +1315,7 @@ intel_tv_detect(struct drm_connector *connector, bool force)
1311{ 1315{
1312 struct drm_display_mode mode; 1316 struct drm_display_mode mode;
1313 struct intel_tv *intel_tv = intel_attached_tv(connector); 1317 struct intel_tv *intel_tv = intel_attached_tv(connector);
1318 enum drm_connector_status status;
1314 int type; 1319 int type;
1315 1320
1316 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n", 1321 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] force=%d\n",
@@ -1328,16 +1333,19 @@ intel_tv_detect(struct drm_connector *connector, bool force)
1328 if (intel_get_load_detect_pipe(connector, &mode, &tmp, &ctx)) { 1333 if (intel_get_load_detect_pipe(connector, &mode, &tmp, &ctx)) {
1329 type = intel_tv_detect_type(intel_tv, connector); 1334 type = intel_tv_detect_type(intel_tv, connector);
1330 intel_release_load_detect_pipe(connector, &tmp); 1335 intel_release_load_detect_pipe(connector, &tmp);
1336 status = type < 0 ?
1337 connector_status_disconnected :
1338 connector_status_connected;
1331 } else 1339 } else
1332 return connector_status_unknown; 1340 status = connector_status_unknown;
1333 1341
1334 drm_modeset_drop_locks(&ctx); 1342 drm_modeset_drop_locks(&ctx);
1335 drm_modeset_acquire_fini(&ctx); 1343 drm_modeset_acquire_fini(&ctx);
1336 } else 1344 } else
1337 return connector->status; 1345 return connector->status;
1338 1346
1339 if (type < 0) 1347 if (status != connector_status_connected)
1340 return connector_status_disconnected; 1348 return status;
1341 1349
1342 intel_tv->type = type; 1350 intel_tv->type = type;
1343 intel_tv_find_better_format(connector); 1351 intel_tv_find_better_format(connector);
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/core/parent.c b/drivers/gpu/drm/nouveau/core/core/parent.c
index 8701968a9743..30a2911878f8 100644
--- a/drivers/gpu/drm/nouveau/core/core/parent.c
+++ b/drivers/gpu/drm/nouveau/core/core/parent.c
@@ -86,7 +86,7 @@ nouveau_parent_lclass(struct nouveau_object *parent, u32 *lclass, int size)
86 sclass = nv_parent(parent)->sclass; 86 sclass = nv_parent(parent)->sclass;
87 while (sclass) { 87 while (sclass) {
88 if (++nr < size) 88 if (++nr < size)
89 lclass[nr] = sclass->oclass->handle; 89 lclass[nr] = sclass->oclass->handle & 0xffff;
90 sclass = sclass->sclass; 90 sclass = sclass->sclass;
91 } 91 }
92 92
@@ -96,7 +96,7 @@ nouveau_parent_lclass(struct nouveau_object *parent, u32 *lclass, int size)
96 if (engine && (oclass = engine->sclass)) { 96 if (engine && (oclass = engine->sclass)) {
97 while (oclass->ofuncs) { 97 while (oclass->ofuncs) {
98 if (++nr < size) 98 if (++nr < size)
99 lclass[nr] = oclass->handle; 99 lclass[nr] = oclass->handle & 0xffff;
100 oclass++; 100 oclass++;
101 } 101 }
102 } 102 }
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/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/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_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/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
index 7bfdaa163a33..36b871686d3c 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
@@ -450,11 +450,11 @@ static int vmw_cmd_res_reloc_add(struct vmw_private *dev_priv,
450 res, 450 res,
451 id_loc - sw_context->buf_start); 451 id_loc - sw_context->buf_start);
452 if (unlikely(ret != 0)) 452 if (unlikely(ret != 0))
453 goto out_err; 453 return ret;
454 454
455 ret = vmw_resource_val_add(sw_context, res, &node); 455 ret = vmw_resource_val_add(sw_context, res, &node);
456 if (unlikely(ret != 0)) 456 if (unlikely(ret != 0))
457 goto out_err; 457 return ret;
458 458
459 if (res_type == vmw_res_context && dev_priv->has_mob && 459 if (res_type == vmw_res_context && dev_priv->has_mob &&
460 node->first_usage) { 460 node->first_usage) {
@@ -468,13 +468,13 @@ static int vmw_cmd_res_reloc_add(struct vmw_private *dev_priv,
468 468
469 ret = vmw_resource_context_res_add(dev_priv, sw_context, res); 469 ret = vmw_resource_context_res_add(dev_priv, sw_context, res);
470 if (unlikely(ret != 0)) 470 if (unlikely(ret != 0))
471 goto out_err; 471 return ret;
472 node->staged_bindings = 472 node->staged_bindings =
473 kzalloc(sizeof(*node->staged_bindings), GFP_KERNEL); 473 kzalloc(sizeof(*node->staged_bindings), GFP_KERNEL);
474 if (node->staged_bindings == NULL) { 474 if (node->staged_bindings == NULL) {
475 DRM_ERROR("Failed to allocate context binding " 475 DRM_ERROR("Failed to allocate context binding "
476 "information.\n"); 476 "information.\n");
477 goto out_err; 477 return -ENOMEM;
478 } 478 }
479 INIT_LIST_HEAD(&node->staged_bindings->list); 479 INIT_LIST_HEAD(&node->staged_bindings->list);
480 } 480 }
@@ -482,8 +482,7 @@ static int vmw_cmd_res_reloc_add(struct vmw_private *dev_priv,
482 if (p_val) 482 if (p_val)
483 *p_val = node; 483 *p_val = node;
484 484
485out_err: 485 return 0;
486 return ret;
487} 486}
488 487
489 488
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
index 6ccd993e26bf..6eae14d2a3f7 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
@@ -180,8 +180,9 @@ void vmw_fifo_release(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
180 180
181 mutex_lock(&dev_priv->hw_mutex); 181 mutex_lock(&dev_priv->hw_mutex);
182 182
183 vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC);
183 while (vmw_read(dev_priv, SVGA_REG_BUSY) != 0) 184 while (vmw_read(dev_priv, SVGA_REG_BUSY) != 0)
184 vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC); 185 ;
185 186
186 dev_priv->last_read_seqno = ioread32(fifo_mem + SVGA_FIFO_FENCE); 187 dev_priv->last_read_seqno = ioread32(fifo_mem + SVGA_FIFO_FENCE);
187 188
diff --git a/drivers/hwmon/ds1621.c b/drivers/hwmon/ds1621.c
index fc6f5d54e7f7..8890870309e4 100644
--- a/drivers/hwmon/ds1621.c
+++ b/drivers/hwmon/ds1621.c
@@ -309,6 +309,7 @@ static ssize_t set_convrate(struct device *dev, struct device_attribute *da,
309 data->conf |= (resol << DS1621_REG_CONFIG_RESOL_SHIFT); 309 data->conf |= (resol << DS1621_REG_CONFIG_RESOL_SHIFT);
310 i2c_smbus_write_byte_data(client, DS1621_REG_CONF, data->conf); 310 i2c_smbus_write_byte_data(client, DS1621_REG_CONF, data->conf);
311 data->update_interval = ds1721_convrates[resol]; 311 data->update_interval = ds1721_convrates[resol];
312 data->zbits = 7 - resol;
312 mutex_unlock(&data->update_lock); 313 mutex_unlock(&data->update_lock);
313 314
314 return count; 315 return count;
diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
index 79a68999a696..917d54588d95 100644
--- a/drivers/i2c/busses/i2c-at91.c
+++ b/drivers/i2c/busses/i2c-at91.c
@@ -101,6 +101,7 @@ struct at91_twi_dev {
101 unsigned twi_cwgr_reg; 101 unsigned twi_cwgr_reg;
102 struct at91_twi_pdata *pdata; 102 struct at91_twi_pdata *pdata;
103 bool use_dma; 103 bool use_dma;
104 bool recv_len_abort;
104 struct at91_twi_dma dma; 105 struct at91_twi_dma dma;
105}; 106};
106 107
@@ -267,12 +268,24 @@ static void at91_twi_read_next_byte(struct at91_twi_dev *dev)
267 *dev->buf = at91_twi_read(dev, AT91_TWI_RHR) & 0xff; 268 *dev->buf = at91_twi_read(dev, AT91_TWI_RHR) & 0xff;
268 --dev->buf_len; 269 --dev->buf_len;
269 270
271 /* return if aborting, we only needed to read RHR to clear RXRDY*/
272 if (dev->recv_len_abort)
273 return;
274
270 /* handle I2C_SMBUS_BLOCK_DATA */ 275 /* handle I2C_SMBUS_BLOCK_DATA */
271 if (unlikely(dev->msg->flags & I2C_M_RECV_LEN)) { 276 if (unlikely(dev->msg->flags & I2C_M_RECV_LEN)) {
272 dev->msg->flags &= ~I2C_M_RECV_LEN; 277 /* ensure length byte is a valid value */
273 dev->buf_len += *dev->buf; 278 if (*dev->buf <= I2C_SMBUS_BLOCK_MAX && *dev->buf > 0) {
274 dev->msg->len = dev->buf_len + 1; 279 dev->msg->flags &= ~I2C_M_RECV_LEN;
275 dev_dbg(dev->dev, "received block length %d\n", dev->buf_len); 280 dev->buf_len += *dev->buf;
281 dev->msg->len = dev->buf_len + 1;
282 dev_dbg(dev->dev, "received block length %d\n",
283 dev->buf_len);
284 } else {
285 /* abort and send the stop by reading one more byte */
286 dev->recv_len_abort = true;
287 dev->buf_len = 1;
288 }
276 } 289 }
277 290
278 /* send stop if second but last byte has been read */ 291 /* send stop if second but last byte has been read */
@@ -421,8 +434,8 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
421 } 434 }
422 } 435 }
423 436
424 ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete, 437 ret = wait_for_completion_io_timeout(&dev->cmd_complete,
425 dev->adapter.timeout); 438 dev->adapter.timeout);
426 if (ret == 0) { 439 if (ret == 0) {
427 dev_err(dev->dev, "controller timed out\n"); 440 dev_err(dev->dev, "controller timed out\n");
428 at91_init_twi_bus(dev); 441 at91_init_twi_bus(dev);
@@ -444,6 +457,12 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
444 ret = -EIO; 457 ret = -EIO;
445 goto error; 458 goto error;
446 } 459 }
460 if (dev->recv_len_abort) {
461 dev_err(dev->dev, "invalid smbus block length recvd\n");
462 ret = -EPROTO;
463 goto error;
464 }
465
447 dev_dbg(dev->dev, "transfer complete\n"); 466 dev_dbg(dev->dev, "transfer complete\n");
448 467
449 return 0; 468 return 0;
@@ -500,6 +519,7 @@ static int at91_twi_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, int num)
500 dev->buf_len = m_start->len; 519 dev->buf_len = m_start->len;
501 dev->buf = m_start->buf; 520 dev->buf = m_start->buf;
502 dev->msg = m_start; 521 dev->msg = m_start;
522 dev->recv_len_abort = false;
503 523
504 ret = at91_do_twi_transfer(dev); 524 ret = at91_do_twi_transfer(dev);
505 525
diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c
index 6dc5ded86f62..2f64273d3f2b 100644
--- a/drivers/i2c/busses/i2c-mv64xxx.c
+++ b/drivers/i2c/busses/i2c-mv64xxx.c
@@ -746,8 +746,7 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
746 } 746 }
747 tclk = clk_get_rate(drv_data->clk); 747 tclk = clk_get_rate(drv_data->clk);
748 748
749 rc = of_property_read_u32(np, "clock-frequency", &bus_freq); 749 if (of_property_read_u32(np, "clock-frequency", &bus_freq))
750 if (rc)
751 bus_freq = 100000; /* 100kHz by default */ 750 bus_freq = 100000; /* 100kHz by default */
752 751
753 if (!mv64xxx_find_baud_factors(bus_freq, tclk, 752 if (!mv64xxx_find_baud_factors(bus_freq, tclk,
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index f3c7139dfa25..1cc146cfc1f3 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -34,6 +34,7 @@
34#include <linux/platform_device.h> 34#include <linux/platform_device.h>
35#include <linux/pm_runtime.h> 35#include <linux/pm_runtime.h>
36#include <linux/slab.h> 36#include <linux/slab.h>
37#include <linux/spinlock.h>
37 38
38/* register offsets */ 39/* register offsets */
39#define ICSCR 0x00 /* slave ctrl */ 40#define ICSCR 0x00 /* slave ctrl */
@@ -95,6 +96,7 @@ struct rcar_i2c_priv {
95 struct i2c_msg *msg; 96 struct i2c_msg *msg;
96 struct clk *clk; 97 struct clk *clk;
97 98
99 spinlock_t lock;
98 wait_queue_head_t wait; 100 wait_queue_head_t wait;
99 101
100 int pos; 102 int pos;
@@ -365,20 +367,20 @@ static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
365 struct rcar_i2c_priv *priv = ptr; 367 struct rcar_i2c_priv *priv = ptr;
366 u32 msr; 368 u32 msr;
367 369
370 /*-------------- spin lock -----------------*/
371 spin_lock(&priv->lock);
372
368 msr = rcar_i2c_read(priv, ICMSR); 373 msr = rcar_i2c_read(priv, ICMSR);
369 374
375 /* Only handle interrupts that are currently enabled */
376 msr &= rcar_i2c_read(priv, ICMIER);
377
370 /* Arbitration lost */ 378 /* Arbitration lost */
371 if (msr & MAL) { 379 if (msr & MAL) {
372 rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST)); 380 rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST));
373 goto out; 381 goto out;
374 } 382 }
375 383
376 /* Stop */
377 if (msr & MST) {
378 rcar_i2c_flags_set(priv, ID_DONE);
379 goto out;
380 }
381
382 /* Nack */ 384 /* Nack */
383 if (msr & MNR) { 385 if (msr & MNR) {
384 /* go to stop phase */ 386 /* go to stop phase */
@@ -388,6 +390,12 @@ static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
388 goto out; 390 goto out;
389 } 391 }
390 392
393 /* Stop */
394 if (msr & MST) {
395 rcar_i2c_flags_set(priv, ID_DONE);
396 goto out;
397 }
398
391 if (rcar_i2c_is_recv(priv)) 399 if (rcar_i2c_is_recv(priv))
392 rcar_i2c_flags_set(priv, rcar_i2c_irq_recv(priv, msr)); 400 rcar_i2c_flags_set(priv, rcar_i2c_irq_recv(priv, msr));
393 else 401 else
@@ -400,6 +408,9 @@ out:
400 wake_up(&priv->wait); 408 wake_up(&priv->wait);
401 } 409 }
402 410
411 spin_unlock(&priv->lock);
412 /*-------------- spin unlock -----------------*/
413
403 return IRQ_HANDLED; 414 return IRQ_HANDLED;
404} 415}
405 416
@@ -409,14 +420,21 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
409{ 420{
410 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap); 421 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap);
411 struct device *dev = rcar_i2c_priv_to_dev(priv); 422 struct device *dev = rcar_i2c_priv_to_dev(priv);
423 unsigned long flags;
412 int i, ret, timeout; 424 int i, ret, timeout;
413 425
414 pm_runtime_get_sync(dev); 426 pm_runtime_get_sync(dev);
415 427
428 /*-------------- spin lock -----------------*/
429 spin_lock_irqsave(&priv->lock, flags);
430
416 rcar_i2c_init(priv); 431 rcar_i2c_init(priv);
417 /* start clock */ 432 /* start clock */
418 rcar_i2c_write(priv, ICCCR, priv->icccr); 433 rcar_i2c_write(priv, ICCCR, priv->icccr);
419 434
435 spin_unlock_irqrestore(&priv->lock, flags);
436 /*-------------- spin unlock -----------------*/
437
420 ret = rcar_i2c_bus_barrier(priv); 438 ret = rcar_i2c_bus_barrier(priv);
421 if (ret < 0) 439 if (ret < 0)
422 goto out; 440 goto out;
@@ -428,6 +446,9 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
428 break; 446 break;
429 } 447 }
430 448
449 /*-------------- spin lock -----------------*/
450 spin_lock_irqsave(&priv->lock, flags);
451
431 /* init each data */ 452 /* init each data */
432 priv->msg = &msgs[i]; 453 priv->msg = &msgs[i];
433 priv->pos = 0; 454 priv->pos = 0;
@@ -437,6 +458,9 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
437 458
438 ret = rcar_i2c_prepare_msg(priv); 459 ret = rcar_i2c_prepare_msg(priv);
439 460
461 spin_unlock_irqrestore(&priv->lock, flags);
462 /*-------------- spin unlock -----------------*/
463
440 if (ret < 0) 464 if (ret < 0)
441 break; 465 break;
442 466
@@ -540,6 +564,7 @@ static int rcar_i2c_probe(struct platform_device *pdev)
540 564
541 irq = platform_get_irq(pdev, 0); 565 irq = platform_get_irq(pdev, 0);
542 init_waitqueue_head(&priv->wait); 566 init_waitqueue_head(&priv->wait);
567 spin_lock_init(&priv->lock);
543 568
544 adap = &priv->adap; 569 adap = &priv->adap;
545 adap->nr = pdev->id; 570 adap->nr = pdev->id;
diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
index 69e11853e8bf..e637c32ae517 100644
--- a/drivers/i2c/busses/i2c-rk3x.c
+++ b/drivers/i2c/busses/i2c-rk3x.c
@@ -323,6 +323,10 @@ static void rk3x_i2c_handle_read(struct rk3x_i2c *i2c, unsigned int ipd)
323 /* ack interrupt */ 323 /* ack interrupt */
324 i2c_writel(i2c, REG_INT_MBRF, REG_IPD); 324 i2c_writel(i2c, REG_INT_MBRF, REG_IPD);
325 325
326 /* Can only handle a maximum of 32 bytes at a time */
327 if (len > 32)
328 len = 32;
329
326 /* read the data from receive buffer */ 330 /* read the data from receive buffer */
327 for (i = 0; i < len; ++i) { 331 for (i = 0; i < len; ++i) {
328 if (i % 4 == 0) 332 if (i % 4 == 0)
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index e1e558a3d692..af8256353c7d 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -1089,6 +1089,30 @@ static int __mlx4_ib_destroy_flow(struct mlx4_dev *dev, u64 reg_id)
1089 return err; 1089 return err;
1090} 1090}
1091 1091
1092static int mlx4_ib_tunnel_steer_add(struct ib_qp *qp, struct ib_flow_attr *flow_attr,
1093 u64 *reg_id)
1094{
1095 void *ib_flow;
1096 union ib_flow_spec *ib_spec;
1097 struct mlx4_dev *dev = to_mdev(qp->device)->dev;
1098 int err = 0;
1099
1100 if (dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
1101 return 0; /* do nothing */
1102
1103 ib_flow = flow_attr + 1;
1104 ib_spec = (union ib_flow_spec *)ib_flow;
1105
1106 if (ib_spec->type != IB_FLOW_SPEC_ETH || flow_attr->num_of_specs != 1)
1107 return 0; /* do nothing */
1108
1109 err = mlx4_tunnel_steer_add(to_mdev(qp->device)->dev, ib_spec->eth.val.dst_mac,
1110 flow_attr->port, qp->qp_num,
1111 MLX4_DOMAIN_UVERBS | (flow_attr->priority & 0xff),
1112 reg_id);
1113 return err;
1114}
1115
1092static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp, 1116static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
1093 struct ib_flow_attr *flow_attr, 1117 struct ib_flow_attr *flow_attr,
1094 int domain) 1118 int domain)
@@ -1136,6 +1160,12 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
1136 i++; 1160 i++;
1137 } 1161 }
1138 1162
1163 if (i < ARRAY_SIZE(type) && flow_attr->type == IB_FLOW_ATTR_NORMAL) {
1164 err = mlx4_ib_tunnel_steer_add(qp, flow_attr, &mflow->reg_id[i]);
1165 if (err)
1166 goto err_free;
1167 }
1168
1139 return &mflow->ibflow; 1169 return &mflow->ibflow;
1140 1170
1141err_free: 1171err_free:
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 67780452f0cf..efb9eff8906c 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1677,9 +1677,15 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
1677 } 1677 }
1678 } 1678 }
1679 1679
1680 if (qp->ibqp.qp_type == IB_QPT_RAW_PACKET) 1680 if (qp->ibqp.qp_type == IB_QPT_RAW_PACKET) {
1681 context->pri_path.ackto = (context->pri_path.ackto & 0xf8) | 1681 context->pri_path.ackto = (context->pri_path.ackto & 0xf8) |
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) {
1684 /* set QP to receive both tunneled & non-tunneled packets */
1685 if (!(context->flags & (1 << MLX4_RSS_QPC_FLAG_OFFSET)))
1686 context->srqn = cpu_to_be32(7 << 28);
1687 }
1688 }
1683 1689
1684 if (ibqp->qp_type == IB_QPT_UD && (new_state == IB_QPS_RTR)) { 1690 if (ibqp->qp_type == IB_QPT_UD && (new_state == IB_QPS_RTR)) {
1685 int is_eth = rdma_port_get_link_layer( 1691 int is_eth = rdma_port_get_link_layer(
diff --git a/drivers/input/input-mt.c b/drivers/input/input-mt.c
index c30204f2fa30..fbe29fcb15c5 100644
--- a/drivers/input/input-mt.c
+++ b/drivers/input/input-mt.c
@@ -236,6 +236,18 @@ void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count)
236} 236}
237EXPORT_SYMBOL(input_mt_report_pointer_emulation); 237EXPORT_SYMBOL(input_mt_report_pointer_emulation);
238 238
239static void __input_mt_drop_unused(struct input_dev *dev, struct input_mt *mt)
240{
241 int i;
242
243 for (i = 0; i < mt->num_slots; i++) {
244 if (!input_mt_is_used(mt, &mt->slots[i])) {
245 input_mt_slot(dev, i);
246 input_event(dev, EV_ABS, ABS_MT_TRACKING_ID, -1);
247 }
248 }
249}
250
239/** 251/**
240 * input_mt_drop_unused() - Inactivate slots not seen in this frame 252 * input_mt_drop_unused() - Inactivate slots not seen in this frame
241 * @dev: input device with allocated MT slots 253 * @dev: input device with allocated MT slots
@@ -245,19 +257,11 @@ EXPORT_SYMBOL(input_mt_report_pointer_emulation);
245void input_mt_drop_unused(struct input_dev *dev) 257void input_mt_drop_unused(struct input_dev *dev)
246{ 258{
247 struct input_mt *mt = dev->mt; 259 struct input_mt *mt = dev->mt;
248 int i;
249 260
250 if (!mt) 261 if (mt) {
251 return; 262 __input_mt_drop_unused(dev, mt);
252 263 mt->frame++;
253 for (i = 0; i < mt->num_slots; i++) {
254 if (!input_mt_is_used(mt, &mt->slots[i])) {
255 input_mt_slot(dev, i);
256 input_event(dev, EV_ABS, ABS_MT_TRACKING_ID, -1);
257 }
258 } 264 }
259
260 mt->frame++;
261} 265}
262EXPORT_SYMBOL(input_mt_drop_unused); 266EXPORT_SYMBOL(input_mt_drop_unused);
263 267
@@ -278,12 +282,14 @@ void input_mt_sync_frame(struct input_dev *dev)
278 return; 282 return;
279 283
280 if (mt->flags & INPUT_MT_DROP_UNUSED) 284 if (mt->flags & INPUT_MT_DROP_UNUSED)
281 input_mt_drop_unused(dev); 285 __input_mt_drop_unused(dev, mt);
282 286
283 if ((mt->flags & INPUT_MT_POINTER) && !(mt->flags & INPUT_MT_SEMI_MT)) 287 if ((mt->flags & INPUT_MT_POINTER) && !(mt->flags & INPUT_MT_SEMI_MT))
284 use_count = true; 288 use_count = true;
285 289
286 input_mt_report_pointer_emulation(dev, use_count); 290 input_mt_report_pointer_emulation(dev, use_count);
291
292 mt->frame++;
287} 293}
288EXPORT_SYMBOL(input_mt_sync_frame); 294EXPORT_SYMBOL(input_mt_sync_frame);
289 295
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 a59a1a64b674..35a49bf57227 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -2234,8 +2234,8 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
2234 return 0; 2234 return 0;
2235 } 2235 }
2236 2236
2237 psmouse_info(psmouse, 2237 psmouse_dbg(psmouse,
2238 "Unknown ALPS touchpad: E7=%3ph, EC=%3ph\n", e7, ec); 2238 "Likely not an ALPS touchpad: E7=%3ph, EC=%3ph\n", e7, ec);
2239 2239
2240 return -EINVAL; 2240 return -EINVAL;
2241} 2241}
@@ -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 ee2a04d90d20..06fc6e76ffbe 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -18,6 +18,7 @@
18#include <linux/input/mt.h> 18#include <linux/input/mt.h>
19#include <linux/serio.h> 19#include <linux/serio.h>
20#include <linux/libps2.h> 20#include <linux/libps2.h>
21#include <asm/unaligned.h>
21#include "psmouse.h" 22#include "psmouse.h"
22#include "elantech.h" 23#include "elantech.h"
23 24
@@ -403,6 +404,68 @@ static void elantech_report_absolute_v2(struct psmouse *psmouse)
403 input_sync(dev); 404 input_sync(dev);
404} 405}
405 406
407static void elantech_report_trackpoint(struct psmouse *psmouse,
408 int packet_type)
409{
410 /*
411 * byte 0: 0 0 sx sy 0 M R L
412 * byte 1:~sx 0 0 0 0 0 0 0
413 * byte 2:~sy 0 0 0 0 0 0 0
414 * byte 3: 0 0 ~sy ~sx 0 1 1 0
415 * byte 4: x7 x6 x5 x4 x3 x2 x1 x0
416 * byte 5: y7 y6 y5 y4 y3 y2 y1 y0
417 *
418 * x and y are written in two's complement spread
419 * over 9 bits with sx/sy the relative top bit and
420 * x7..x0 and y7..y0 the lower bits.
421 * The sign of y is opposite to what the input driver
422 * expects for a relative movement
423 */
424
425 struct elantech_data *etd = psmouse->private;
426 struct input_dev *tp_dev = etd->tp_dev;
427 unsigned char *packet = psmouse->packet;
428 int x, y;
429 u32 t;
430
431 if (dev_WARN_ONCE(&psmouse->ps2dev.serio->dev,
432 !tp_dev,
433 psmouse_fmt("Unexpected trackpoint message\n"))) {
434 if (etd->debug == 1)
435 elantech_packet_dump(psmouse);
436 return;
437 }
438
439 t = get_unaligned_le32(&packet[0]);
440
441 switch (t & ~7U) {
442 case 0x06000030U:
443 case 0x16008020U:
444 case 0x26800010U:
445 case 0x36808000U:
446 x = packet[4] - (int)((packet[1]^0x80) << 1);
447 y = (int)((packet[2]^0x80) << 1) - packet[5];
448
449 input_report_key(tp_dev, BTN_LEFT, packet[0] & 0x01);
450 input_report_key(tp_dev, BTN_RIGHT, packet[0] & 0x02);
451 input_report_key(tp_dev, BTN_MIDDLE, packet[0] & 0x04);
452
453 input_report_rel(tp_dev, REL_X, x);
454 input_report_rel(tp_dev, REL_Y, y);
455
456 input_sync(tp_dev);
457
458 break;
459
460 default:
461 /* Dump unexpected packet sequences if debug=1 (default) */
462 if (etd->debug == 1)
463 elantech_packet_dump(psmouse);
464
465 break;
466 }
467}
468
406/* 469/*
407 * Interpret complete data packets and report absolute mode input events for 470 * Interpret complete data packets and report absolute mode input events for
408 * hardware version 3. (12 byte packets for two fingers) 471 * hardware version 3. (12 byte packets for two fingers)
@@ -715,6 +778,8 @@ static int elantech_packet_check_v3(struct psmouse *psmouse)
715 778
716 if ((packet[0] & 0x0c) == 0x0c && (packet[3] & 0xce) == 0x0c) 779 if ((packet[0] & 0x0c) == 0x0c && (packet[3] & 0xce) == 0x0c)
717 return PACKET_V3_TAIL; 780 return PACKET_V3_TAIL;
781 if ((packet[3] & 0x0f) == 0x06)
782 return PACKET_TRACKPOINT;
718 } 783 }
719 784
720 return PACKET_UNKNOWN; 785 return PACKET_UNKNOWN;
@@ -791,14 +856,23 @@ static psmouse_ret_t elantech_process_byte(struct psmouse *psmouse)
791 856
792 case 3: 857 case 3:
793 packet_type = elantech_packet_check_v3(psmouse); 858 packet_type = elantech_packet_check_v3(psmouse);
794 /* ignore debounce */ 859 switch (packet_type) {
795 if (packet_type == PACKET_DEBOUNCE) 860 case PACKET_UNKNOWN:
796 return PSMOUSE_FULL_PACKET;
797
798 if (packet_type == PACKET_UNKNOWN)
799 return PSMOUSE_BAD_DATA; 861 return PSMOUSE_BAD_DATA;
800 862
801 elantech_report_absolute_v3(psmouse, packet_type); 863 case PACKET_DEBOUNCE:
864 /* ignore debounce */
865 break;
866
867 case PACKET_TRACKPOINT:
868 elantech_report_trackpoint(psmouse, packet_type);
869 break;
870
871 default:
872 elantech_report_absolute_v3(psmouse, packet_type);
873 break;
874 }
875
802 break; 876 break;
803 877
804 case 4: 878 case 4:
@@ -1018,8 +1092,10 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
1018 * Asus UX31 0x361f00 20, 15, 0e clickpad 1092 * Asus UX31 0x361f00 20, 15, 0e clickpad
1019 * Asus UX32VD 0x361f02 00, 15, 0e clickpad 1093 * Asus UX32VD 0x361f02 00, 15, 0e clickpad
1020 * Avatar AVIU-145A2 0x361f00 ? clickpad 1094 * Avatar AVIU-145A2 0x361f00 ? clickpad
1095 * Fujitsu H730 0x570f00 c0, 14, 0c 3 hw buttons (**)
1021 * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons 1096 * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons
1022 * Lenovo L430 0x350f02 b9, 15, 0c 2 hw buttons (*) 1097 * Lenovo L430 0x350f02 b9, 15, 0c 2 hw buttons (*)
1098 * Lenovo L530 0x350f02 b9, 15, 0c 2 hw buttons (*)
1023 * Samsung NF210 0x150b00 78, 14, 0a 2 hw buttons 1099 * Samsung NF210 0x150b00 78, 14, 0a 2 hw buttons
1024 * Samsung NP770Z5E 0x575f01 10, 15, 0f clickpad 1100 * Samsung NP770Z5E 0x575f01 10, 15, 0f clickpad
1025 * Samsung NP700Z5B 0x361f06 21, 15, 0f clickpad 1101 * Samsung NP700Z5B 0x361f06 21, 15, 0f clickpad
@@ -1029,6 +1105,8 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
1029 * Samsung RF710 0x450f00 ? 2 hw buttons 1105 * Samsung RF710 0x450f00 ? 2 hw buttons
1030 * System76 Pangolin 0x250f01 ? 2 hw buttons 1106 * System76 Pangolin 0x250f01 ? 2 hw buttons
1031 * (*) + 3 trackpoint buttons 1107 * (*) + 3 trackpoint buttons
1108 * (**) + 0 trackpoint buttons
1109 * Note: Lenovo L430 and Lenovo L430 have the same fw_version/caps
1032 */ 1110 */
1033static void elantech_set_buttonpad_prop(struct psmouse *psmouse) 1111static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
1034{ 1112{
@@ -1253,6 +1331,13 @@ static bool elantech_is_signature_valid(const unsigned char *param)
1253 if (param[1] == 0) 1331 if (param[1] == 0)
1254 return true; 1332 return true;
1255 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
1256 for (i = 0; i < ARRAY_SIZE(rates); i++) 1341 for (i = 0; i < ARRAY_SIZE(rates); i++)
1257 if (param[2] == rates[i]) 1342 if (param[2] == rates[i])
1258 return false; 1343 return false;
@@ -1324,6 +1409,10 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
1324 */ 1409 */
1325static void elantech_disconnect(struct psmouse *psmouse) 1410static void elantech_disconnect(struct psmouse *psmouse)
1326{ 1411{
1412 struct elantech_data *etd = psmouse->private;
1413
1414 if (etd->tp_dev)
1415 input_unregister_device(etd->tp_dev);
1327 sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj, 1416 sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj,
1328 &elantech_attr_group); 1417 &elantech_attr_group);
1329 kfree(psmouse->private); 1418 kfree(psmouse->private);
@@ -1438,8 +1527,10 @@ static int elantech_set_properties(struct elantech_data *etd)
1438int elantech_init(struct psmouse *psmouse) 1527int elantech_init(struct psmouse *psmouse)
1439{ 1528{
1440 struct elantech_data *etd; 1529 struct elantech_data *etd;
1441 int i, error; 1530 int i;
1531 int error = -EINVAL;
1442 unsigned char param[3]; 1532 unsigned char param[3];
1533 struct input_dev *tp_dev;
1443 1534
1444 psmouse->private = etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL); 1535 psmouse->private = etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL);
1445 if (!etd) 1536 if (!etd)
@@ -1498,14 +1589,53 @@ int elantech_init(struct psmouse *psmouse)
1498 goto init_fail; 1589 goto init_fail;
1499 } 1590 }
1500 1591
1592 /* The MSB indicates the presence of the trackpoint */
1593 if ((etd->capabilities[0] & 0x80) == 0x80) {
1594 tp_dev = input_allocate_device();
1595
1596 if (!tp_dev) {
1597 error = -ENOMEM;
1598 goto init_fail_tp_alloc;
1599 }
1600
1601 etd->tp_dev = tp_dev;
1602 snprintf(etd->tp_phys, sizeof(etd->tp_phys), "%s/input1",
1603 psmouse->ps2dev.serio->phys);
1604 tp_dev->phys = etd->tp_phys;
1605 tp_dev->name = "Elantech PS/2 TrackPoint";
1606 tp_dev->id.bustype = BUS_I8042;
1607 tp_dev->id.vendor = 0x0002;
1608 tp_dev->id.product = PSMOUSE_ELANTECH;
1609 tp_dev->id.version = 0x0000;
1610 tp_dev->dev.parent = &psmouse->ps2dev.serio->dev;
1611 tp_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
1612 tp_dev->relbit[BIT_WORD(REL_X)] =
1613 BIT_MASK(REL_X) | BIT_MASK(REL_Y);
1614 tp_dev->keybit[BIT_WORD(BTN_LEFT)] =
1615 BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_MIDDLE) |
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
1621 error = input_register_device(etd->tp_dev);
1622 if (error < 0)
1623 goto init_fail_tp_reg;
1624 }
1625
1501 psmouse->protocol_handler = elantech_process_byte; 1626 psmouse->protocol_handler = elantech_process_byte;
1502 psmouse->disconnect = elantech_disconnect; 1627 psmouse->disconnect = elantech_disconnect;
1503 psmouse->reconnect = elantech_reconnect; 1628 psmouse->reconnect = elantech_reconnect;
1504 psmouse->pktsize = etd->hw_version > 1 ? 6 : 4; 1629 psmouse->pktsize = etd->hw_version > 1 ? 6 : 4;
1505 1630
1506 return 0; 1631 return 0;
1507 1632 init_fail_tp_reg:
1633 input_free_device(tp_dev);
1634 init_fail_tp_alloc:
1635 sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj,
1636 &elantech_attr_group);
1508 init_fail: 1637 init_fail:
1638 psmouse_reset(psmouse);
1509 kfree(etd); 1639 kfree(etd);
1510 return -1; 1640 return error;
1511} 1641}
diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
index 9e0e2a1f340d..6f3afec02f03 100644
--- a/drivers/input/mouse/elantech.h
+++ b/drivers/input/mouse/elantech.h
@@ -94,6 +94,7 @@
94#define PACKET_V4_HEAD 0x05 94#define PACKET_V4_HEAD 0x05
95#define PACKET_V4_MOTION 0x06 95#define PACKET_V4_MOTION 0x06
96#define PACKET_V4_STATUS 0x07 96#define PACKET_V4_STATUS 0x07
97#define PACKET_TRACKPOINT 0x08
97 98
98/* 99/*
99 * track up to 5 fingers for v4 hardware 100 * track up to 5 fingers for v4 hardware
@@ -114,6 +115,8 @@ struct finger_pos {
114}; 115};
115 116
116struct elantech_data { 117struct elantech_data {
118 struct input_dev *tp_dev; /* Relative device for trackpoint */
119 char tp_phys[32];
117 unsigned char reg_07; 120 unsigned char reg_07;
118 unsigned char reg_10; 121 unsigned char reg_10;
119 unsigned char reg_11; 122 unsigned char reg_11;
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-sparcio.h b/drivers/input/serio/i8042-sparcio.h
index d6aa4c67dbb6..93cb7912703c 100644
--- a/drivers/input/serio/i8042-sparcio.h
+++ b/drivers/input/serio/i8042-sparcio.h
@@ -17,7 +17,6 @@ static int i8042_aux_irq = -1;
17#define I8042_MUX_PHYS_DESC "sparcps2/serio%d" 17#define I8042_MUX_PHYS_DESC "sparcps2/serio%d"
18 18
19static void __iomem *kbd_iobase; 19static void __iomem *kbd_iobase;
20static struct resource *kbd_res;
21 20
22#define I8042_COMMAND_REG (kbd_iobase + 0x64UL) 21#define I8042_COMMAND_REG (kbd_iobase + 0x64UL)
23#define I8042_DATA_REG (kbd_iobase + 0x60UL) 22#define I8042_DATA_REG (kbd_iobase + 0x60UL)
@@ -44,6 +43,8 @@ static inline void i8042_write_command(int val)
44 43
45#ifdef CONFIG_PCI 44#ifdef CONFIG_PCI
46 45
46static struct resource *kbd_res;
47
47#define OBP_PS2KBD_NAME1 "kb_ps2" 48#define OBP_PS2KBD_NAME1 "kb_ps2"
48#define OBP_PS2KBD_NAME2 "keyboard" 49#define OBP_PS2KBD_NAME2 "keyboard"
49#define OBP_PS2MS_NAME1 "kdmouse" 50#define OBP_PS2MS_NAME1 "kdmouse"
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/leds/led-class.c b/drivers/leds/led-class.c
index 129729d35478..aa29198fca3e 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -15,10 +15,10 @@
15#include <linux/list.h> 15#include <linux/list.h>
16#include <linux/spinlock.h> 16#include <linux/spinlock.h>
17#include <linux/device.h> 17#include <linux/device.h>
18#include <linux/timer.h>
18#include <linux/err.h> 19#include <linux/err.h>
19#include <linux/ctype.h> 20#include <linux/ctype.h>
20#include <linux/leds.h> 21#include <linux/leds.h>
21#include <linux/workqueue.h>
22#include "leds.h" 22#include "leds.h"
23 23
24static struct class *leds_class; 24static struct class *leds_class;
@@ -97,10 +97,9 @@ static const struct attribute_group *led_groups[] = {
97 NULL, 97 NULL,
98}; 98};
99 99
100static void led_work_function(struct work_struct *ws) 100static void led_timer_function(unsigned long data)
101{ 101{
102 struct led_classdev *led_cdev = 102 struct led_classdev *led_cdev = (void *)data;
103 container_of(ws, struct led_classdev, blink_work.work);
104 unsigned long brightness; 103 unsigned long brightness;
105 unsigned long delay; 104 unsigned long delay;
106 105
@@ -144,8 +143,7 @@ static void led_work_function(struct work_struct *ws)
144 } 143 }
145 } 144 }
146 145
147 queue_delayed_work(system_wq, &led_cdev->blink_work, 146 mod_timer(&led_cdev->blink_timer, jiffies + msecs_to_jiffies(delay));
148 msecs_to_jiffies(delay));
149} 147}
150 148
151static void set_brightness_delayed(struct work_struct *ws) 149static void set_brightness_delayed(struct work_struct *ws)
@@ -233,7 +231,9 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
233 231
234 INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); 232 INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed);
235 233
236 INIT_DELAYED_WORK(&led_cdev->blink_work, led_work_function); 234 init_timer(&led_cdev->blink_timer);
235 led_cdev->blink_timer.function = led_timer_function;
236 led_cdev->blink_timer.data = (unsigned long)led_cdev;
237 237
238#ifdef CONFIG_LEDS_TRIGGERS 238#ifdef CONFIG_LEDS_TRIGGERS
239 led_trigger_set_default(led_cdev); 239 led_trigger_set_default(led_cdev);
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
index 4bb116867b88..71b40d3bf776 100644
--- a/drivers/leds/led-core.c
+++ b/drivers/leds/led-core.c
@@ -16,7 +16,6 @@
16#include <linux/module.h> 16#include <linux/module.h>
17#include <linux/rwsem.h> 17#include <linux/rwsem.h>
18#include <linux/leds.h> 18#include <linux/leds.h>
19#include <linux/workqueue.h>
20#include "leds.h" 19#include "leds.h"
21 20
22DECLARE_RWSEM(leds_list_lock); 21DECLARE_RWSEM(leds_list_lock);
@@ -52,7 +51,7 @@ static void led_set_software_blink(struct led_classdev *led_cdev,
52 return; 51 return;
53 } 52 }
54 53
55 queue_delayed_work(system_wq, &led_cdev->blink_work, 1); 54 mod_timer(&led_cdev->blink_timer, jiffies + 1);
56} 55}
57 56
58 57
@@ -76,7 +75,7 @@ void led_blink_set(struct led_classdev *led_cdev,
76 unsigned long *delay_on, 75 unsigned long *delay_on,
77 unsigned long *delay_off) 76 unsigned long *delay_off)
78{ 77{
79 cancel_delayed_work_sync(&led_cdev->blink_work); 78 del_timer_sync(&led_cdev->blink_timer);
80 79
81 led_cdev->flags &= ~LED_BLINK_ONESHOT; 80 led_cdev->flags &= ~LED_BLINK_ONESHOT;
82 led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP; 81 led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP;
@@ -91,7 +90,7 @@ void led_blink_set_oneshot(struct led_classdev *led_cdev,
91 int invert) 90 int invert)
92{ 91{
93 if ((led_cdev->flags & LED_BLINK_ONESHOT) && 92 if ((led_cdev->flags & LED_BLINK_ONESHOT) &&
94 delayed_work_pending(&led_cdev->blink_work)) 93 timer_pending(&led_cdev->blink_timer))
95 return; 94 return;
96 95
97 led_cdev->flags |= LED_BLINK_ONESHOT; 96 led_cdev->flags |= LED_BLINK_ONESHOT;
@@ -108,7 +107,7 @@ EXPORT_SYMBOL(led_blink_set_oneshot);
108 107
109void led_stop_software_blink(struct led_classdev *led_cdev) 108void led_stop_software_blink(struct led_classdev *led_cdev)
110{ 109{
111 cancel_delayed_work_sync(&led_cdev->blink_work); 110 del_timer_sync(&led_cdev->blink_timer);
112 led_cdev->blink_delay_on = 0; 111 led_cdev->blink_delay_on = 0;
113 led_cdev->blink_delay_off = 0; 112 led_cdev->blink_delay_off = 0;
114} 113}
@@ -117,7 +116,7 @@ EXPORT_SYMBOL_GPL(led_stop_software_blink);
117void led_set_brightness(struct led_classdev *led_cdev, 116void led_set_brightness(struct led_classdev *led_cdev,
118 enum led_brightness brightness) 117 enum led_brightness brightness)
119{ 118{
120 /* delay brightness setting if need to stop soft-blink work */ 119 /* delay brightness setting if need to stop soft-blink timer */
121 if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) { 120 if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) {
122 led_cdev->delayed_set_value = brightness; 121 led_cdev->delayed_set_value = brightness;
123 schedule_work(&led_cdev->set_brightness_work); 122 schedule_work(&led_cdev->set_brightness_work);
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/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/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
index 5a4bfe33112a..46c4643b7a07 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -1434,6 +1434,10 @@ static int cfi_amdstd_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,
1434 1434
1435 mutex_lock(&chip->mutex); 1435 mutex_lock(&chip->mutex);
1436 ret = get_chip(map, chip, base, FL_LOCKING); 1436 ret = get_chip(map, chip, base, FL_LOCKING);
1437 if (ret) {
1438 mutex_unlock(&chip->mutex);
1439 return ret;
1440 }
1437 1441
1438 /* Enter lock register command */ 1442 /* Enter lock register command */
1439 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, 1443 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1,
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 059c7414e303..3fe45c705933 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -2177,10 +2177,10 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
2177 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 2177 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2178 2178
2179 vp->tx_ring[entry].frag[i+1].addr = 2179 vp->tx_ring[entry].frag[i+1].addr =
2180 cpu_to_le32(pci_map_single( 2180 cpu_to_le32(skb_frag_dma_map(
2181 VORTEX_PCI(vp), 2181 &VORTEX_PCI(vp)->dev,
2182 (void *)skb_frag_address(frag), 2182 frag,
2183 skb_frag_size(frag), PCI_DMA_TODEVICE)); 2183 frag->page_offset, frag->size, DMA_TO_DEVICE));
2184 2184
2185 if (i == skb_shinfo(skb)->nr_frags-1) 2185 if (i == skb_shinfo(skb)->nr_frags-1)
2186 vp->tx_ring[entry].frag[i+1].length = cpu_to_le32(skb_frag_size(frag)|LAST_FRAG); 2186 vp->tx_ring[entry].frag[i+1].length = cpu_to_le32(skb_frag_size(frag)|LAST_FRAG);
diff --git a/drivers/net/ethernet/aeroflex/greth.c b/drivers/net/ethernet/aeroflex/greth.c
index 23578dfee249..3005155e412b 100644
--- a/drivers/net/ethernet/aeroflex/greth.c
+++ b/drivers/net/ethernet/aeroflex/greth.c
@@ -123,6 +123,12 @@ static inline void greth_enable_tx(struct greth_private *greth)
123 GRETH_REGORIN(greth->regs->control, GRETH_TXEN); 123 GRETH_REGORIN(greth->regs->control, GRETH_TXEN);
124} 124}
125 125
126static inline void greth_enable_tx_and_irq(struct greth_private *greth)
127{
128 wmb(); /* BDs must been written to memory before enabling TX */
129 GRETH_REGORIN(greth->regs->control, GRETH_TXEN | GRETH_TXI);
130}
131
126static inline void greth_disable_tx(struct greth_private *greth) 132static inline void greth_disable_tx(struct greth_private *greth)
127{ 133{
128 GRETH_REGANDIN(greth->regs->control, ~GRETH_TXEN); 134 GRETH_REGANDIN(greth->regs->control, ~GRETH_TXEN);
@@ -447,29 +453,30 @@ out:
447 return err; 453 return err;
448} 454}
449 455
456static inline u16 greth_num_free_bds(u16 tx_last, u16 tx_next)
457{
458 if (tx_next < tx_last)
459 return (tx_last - tx_next) - 1;
460 else
461 return GRETH_TXBD_NUM - (tx_next - tx_last) - 1;
462}
450 463
451static netdev_tx_t 464static netdev_tx_t
452greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev) 465greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev)
453{ 466{
454 struct greth_private *greth = netdev_priv(dev); 467 struct greth_private *greth = netdev_priv(dev);
455 struct greth_bd *bdp; 468 struct greth_bd *bdp;
456 u32 status = 0, dma_addr, ctrl; 469 u32 status, dma_addr;
457 int curr_tx, nr_frags, i, err = NETDEV_TX_OK; 470 int curr_tx, nr_frags, i, err = NETDEV_TX_OK;
458 unsigned long flags; 471 unsigned long flags;
472 u16 tx_last;
459 473
460 nr_frags = skb_shinfo(skb)->nr_frags; 474 nr_frags = skb_shinfo(skb)->nr_frags;
475 tx_last = greth->tx_last;
476 rmb(); /* tx_last is updated by the poll task */
461 477
462 /* Clean TX Ring */ 478 if (greth_num_free_bds(tx_last, greth->tx_next) < nr_frags + 1) {
463 greth_clean_tx_gbit(dev);
464
465 if (greth->tx_free < nr_frags + 1) {
466 spin_lock_irqsave(&greth->devlock, flags);/*save from poll/irq*/
467 ctrl = GRETH_REGLOAD(greth->regs->control);
468 /* Enable TX IRQ only if not already in poll() routine */
469 if (ctrl & GRETH_RXI)
470 GRETH_REGSAVE(greth->regs->control, ctrl | GRETH_TXI);
471 netif_stop_queue(dev); 479 netif_stop_queue(dev);
472 spin_unlock_irqrestore(&greth->devlock, flags);
473 err = NETDEV_TX_BUSY; 480 err = NETDEV_TX_BUSY;
474 goto out; 481 goto out;
475 } 482 }
@@ -488,6 +495,8 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev)
488 /* Linear buf */ 495 /* Linear buf */
489 if (nr_frags != 0) 496 if (nr_frags != 0)
490 status = GRETH_TXBD_MORE; 497 status = GRETH_TXBD_MORE;
498 else
499 status = GRETH_BD_IE;
491 500
492 if (skb->ip_summed == CHECKSUM_PARTIAL) 501 if (skb->ip_summed == CHECKSUM_PARTIAL)
493 status |= GRETH_TXBD_CSALL; 502 status |= GRETH_TXBD_CSALL;
@@ -545,14 +554,12 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev)
545 554
546 /* Enable the descriptor chain by enabling the first descriptor */ 555 /* Enable the descriptor chain by enabling the first descriptor */
547 bdp = greth->tx_bd_base + greth->tx_next; 556 bdp = greth->tx_bd_base + greth->tx_next;
548 greth_write_bd(&bdp->stat, greth_read_bd(&bdp->stat) | GRETH_BD_EN); 557 greth_write_bd(&bdp->stat,
549 greth->tx_next = curr_tx; 558 greth_read_bd(&bdp->stat) | GRETH_BD_EN);
550 greth->tx_free -= nr_frags + 1;
551
552 wmb();
553 559
554 spin_lock_irqsave(&greth->devlock, flags); /*save from poll/irq*/ 560 spin_lock_irqsave(&greth->devlock, flags); /*save from poll/irq*/
555 greth_enable_tx(greth); 561 greth->tx_next = curr_tx;
562 greth_enable_tx_and_irq(greth);
556 spin_unlock_irqrestore(&greth->devlock, flags); 563 spin_unlock_irqrestore(&greth->devlock, flags);
557 564
558 return NETDEV_TX_OK; 565 return NETDEV_TX_OK;
@@ -648,7 +655,6 @@ static void greth_clean_tx(struct net_device *dev)
648 if (greth->tx_free > 0) { 655 if (greth->tx_free > 0) {
649 netif_wake_queue(dev); 656 netif_wake_queue(dev);
650 } 657 }
651
652} 658}
653 659
654static inline void greth_update_tx_stats(struct net_device *dev, u32 stat) 660static inline void greth_update_tx_stats(struct net_device *dev, u32 stat)
@@ -670,20 +676,22 @@ static void greth_clean_tx_gbit(struct net_device *dev)
670{ 676{
671 struct greth_private *greth; 677 struct greth_private *greth;
672 struct greth_bd *bdp, *bdp_last_frag; 678 struct greth_bd *bdp, *bdp_last_frag;
673 struct sk_buff *skb; 679 struct sk_buff *skb = NULL;
674 u32 stat; 680 u32 stat;
675 int nr_frags, i; 681 int nr_frags, i;
682 u16 tx_last;
676 683
677 greth = netdev_priv(dev); 684 greth = netdev_priv(dev);
685 tx_last = greth->tx_last;
678 686
679 while (greth->tx_free < GRETH_TXBD_NUM) { 687 while (tx_last != greth->tx_next) {
680 688
681 skb = greth->tx_skbuff[greth->tx_last]; 689 skb = greth->tx_skbuff[tx_last];
682 690
683 nr_frags = skb_shinfo(skb)->nr_frags; 691 nr_frags = skb_shinfo(skb)->nr_frags;
684 692
685 /* We only clean fully completed SKBs */ 693 /* We only clean fully completed SKBs */
686 bdp_last_frag = greth->tx_bd_base + SKIP_TX(greth->tx_last, nr_frags); 694 bdp_last_frag = greth->tx_bd_base + SKIP_TX(tx_last, nr_frags);
687 695
688 GRETH_REGSAVE(greth->regs->status, GRETH_INT_TE | GRETH_INT_TX); 696 GRETH_REGSAVE(greth->regs->status, GRETH_INT_TE | GRETH_INT_TX);
689 mb(); 697 mb();
@@ -692,14 +700,14 @@ static void greth_clean_tx_gbit(struct net_device *dev)
692 if (stat & GRETH_BD_EN) 700 if (stat & GRETH_BD_EN)
693 break; 701 break;
694 702
695 greth->tx_skbuff[greth->tx_last] = NULL; 703 greth->tx_skbuff[tx_last] = NULL;
696 704
697 greth_update_tx_stats(dev, stat); 705 greth_update_tx_stats(dev, stat);
698 dev->stats.tx_bytes += skb->len; 706 dev->stats.tx_bytes += skb->len;
699 707
700 bdp = greth->tx_bd_base + greth->tx_last; 708 bdp = greth->tx_bd_base + tx_last;
701 709
702 greth->tx_last = NEXT_TX(greth->tx_last); 710 tx_last = NEXT_TX(tx_last);
703 711
704 dma_unmap_single(greth->dev, 712 dma_unmap_single(greth->dev,
705 greth_read_bd(&bdp->addr), 713 greth_read_bd(&bdp->addr),
@@ -708,21 +716,26 @@ static void greth_clean_tx_gbit(struct net_device *dev)
708 716
709 for (i = 0; i < nr_frags; i++) { 717 for (i = 0; i < nr_frags; i++) {
710 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 718 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
711 bdp = greth->tx_bd_base + greth->tx_last; 719 bdp = greth->tx_bd_base + tx_last;
712 720
713 dma_unmap_page(greth->dev, 721 dma_unmap_page(greth->dev,
714 greth_read_bd(&bdp->addr), 722 greth_read_bd(&bdp->addr),
715 skb_frag_size(frag), 723 skb_frag_size(frag),
716 DMA_TO_DEVICE); 724 DMA_TO_DEVICE);
717 725
718 greth->tx_last = NEXT_TX(greth->tx_last); 726 tx_last = NEXT_TX(tx_last);
719 } 727 }
720 greth->tx_free += nr_frags+1;
721 dev_kfree_skb(skb); 728 dev_kfree_skb(skb);
722 } 729 }
730 if (skb) { /* skb is set only if the above while loop was entered */
731 wmb();
732 greth->tx_last = tx_last;
723 733
724 if (netif_queue_stopped(dev) && (greth->tx_free > (MAX_SKB_FRAGS+1))) 734 if (netif_queue_stopped(dev) &&
725 netif_wake_queue(dev); 735 (greth_num_free_bds(tx_last, greth->tx_next) >
736 (MAX_SKB_FRAGS+1)))
737 netif_wake_queue(dev);
738 }
726} 739}
727 740
728static int greth_rx(struct net_device *dev, int limit) 741static int greth_rx(struct net_device *dev, int limit)
@@ -965,16 +978,12 @@ static int greth_poll(struct napi_struct *napi, int budget)
965 greth = container_of(napi, struct greth_private, napi); 978 greth = container_of(napi, struct greth_private, napi);
966 979
967restart_txrx_poll: 980restart_txrx_poll:
968 if (netif_queue_stopped(greth->netdev)) {
969 if (greth->gbit_mac)
970 greth_clean_tx_gbit(greth->netdev);
971 else
972 greth_clean_tx(greth->netdev);
973 }
974
975 if (greth->gbit_mac) { 981 if (greth->gbit_mac) {
982 greth_clean_tx_gbit(greth->netdev);
976 work_done += greth_rx_gbit(greth->netdev, budget - work_done); 983 work_done += greth_rx_gbit(greth->netdev, budget - work_done);
977 } else { 984 } else {
985 if (netif_queue_stopped(greth->netdev))
986 greth_clean_tx(greth->netdev);
978 work_done += greth_rx(greth->netdev, budget - work_done); 987 work_done += greth_rx(greth->netdev, budget - work_done);
979 } 988 }
980 989
@@ -983,7 +992,8 @@ restart_txrx_poll:
983 spin_lock_irqsave(&greth->devlock, flags); 992 spin_lock_irqsave(&greth->devlock, flags);
984 993
985 ctrl = GRETH_REGLOAD(greth->regs->control); 994 ctrl = GRETH_REGLOAD(greth->regs->control);
986 if (netif_queue_stopped(greth->netdev)) { 995 if ((greth->gbit_mac && (greth->tx_last != greth->tx_next)) ||
996 (!greth->gbit_mac && netif_queue_stopped(greth->netdev))) {
987 GRETH_REGSAVE(greth->regs->control, 997 GRETH_REGSAVE(greth->regs->control,
988 ctrl | GRETH_TXI | GRETH_RXI); 998 ctrl | GRETH_TXI | GRETH_RXI);
989 mask = GRETH_INT_RX | GRETH_INT_RE | 999 mask = GRETH_INT_RX | GRETH_INT_RE |
diff --git a/drivers/net/ethernet/aeroflex/greth.h b/drivers/net/ethernet/aeroflex/greth.h
index 232a622a85b7..ae16ac94daf8 100644
--- a/drivers/net/ethernet/aeroflex/greth.h
+++ b/drivers/net/ethernet/aeroflex/greth.h
@@ -107,7 +107,7 @@ struct greth_private {
107 107
108 u16 tx_next; 108 u16 tx_next;
109 u16 tx_last; 109 u16 tx_last;
110 u16 tx_free; 110 u16 tx_free; /* only used on 10/100Mbit */
111 u16 rx_cur; 111 u16 rx_cur;
112 112
113 struct greth_regs *regs; /* Address of controller registers. */ 113 struct greth_regs *regs; /* Address of controller registers. */
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
index 346592dca33c..a3c11355a34d 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
@@ -272,8 +272,8 @@ static ssize_t xpcs_reg_value_read(struct file *filp, char __user *buffer,
272 struct xgbe_prv_data *pdata = filp->private_data; 272 struct xgbe_prv_data *pdata = filp->private_data;
273 unsigned int value; 273 unsigned int value;
274 274
275 value = pdata->hw_if.read_mmd_regs(pdata, pdata->debugfs_xpcs_mmd, 275 value = XMDIO_READ(pdata, pdata->debugfs_xpcs_mmd,
276 pdata->debugfs_xpcs_reg); 276 pdata->debugfs_xpcs_reg);
277 277
278 return xgbe_common_read(buffer, count, ppos, value); 278 return xgbe_common_read(buffer, count, ppos, value);
279} 279}
@@ -290,8 +290,8 @@ static ssize_t xpcs_reg_value_write(struct file *filp,
290 if (len < 0) 290 if (len < 0)
291 return len; 291 return len;
292 292
293 pdata->hw_if.write_mmd_regs(pdata, pdata->debugfs_xpcs_mmd, 293 XMDIO_WRITE(pdata, pdata->debugfs_xpcs_mmd, pdata->debugfs_xpcs_reg,
294 pdata->debugfs_xpcs_reg, value); 294 value);
295 295
296 return len; 296 return len;
297} 297}
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index edaca4496264..ea273836d999 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -348,7 +348,7 @@ static int xgbe_disable_tx_flow_control(struct xgbe_prv_data *pdata)
348 348
349 /* Clear MAC flow control */ 349 /* Clear MAC flow control */
350 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES; 350 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
351 q_count = min_t(unsigned int, pdata->rx_q_count, max_q_count); 351 q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
352 reg = MAC_Q0TFCR; 352 reg = MAC_Q0TFCR;
353 for (i = 0; i < q_count; i++) { 353 for (i = 0; i < q_count; i++) {
354 reg_val = XGMAC_IOREAD(pdata, reg); 354 reg_val = XGMAC_IOREAD(pdata, reg);
@@ -373,7 +373,7 @@ static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata)
373 373
374 /* Set MAC flow control */ 374 /* Set MAC flow control */
375 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES; 375 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
376 q_count = min_t(unsigned int, pdata->rx_q_count, max_q_count); 376 q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
377 reg = MAC_Q0TFCR; 377 reg = MAC_Q0TFCR;
378 for (i = 0; i < q_count; i++) { 378 for (i = 0; i < q_count; i++) {
379 reg_val = XGMAC_IOREAD(pdata, reg); 379 reg_val = XGMAC_IOREAD(pdata, reg);
@@ -509,8 +509,8 @@ static void xgbe_enable_mac_interrupts(struct xgbe_prv_data *pdata)
509 XGMAC_IOWRITE(pdata, MAC_IER, mac_ier); 509 XGMAC_IOWRITE(pdata, MAC_IER, mac_ier);
510 510
511 /* Enable all counter interrupts */ 511 /* Enable all counter interrupts */
512 XGMAC_IOWRITE_BITS(pdata, MMC_RIER, ALL_INTERRUPTS, 0xff); 512 XGMAC_IOWRITE_BITS(pdata, MMC_RIER, ALL_INTERRUPTS, 0xffffffff);
513 XGMAC_IOWRITE_BITS(pdata, MMC_TIER, ALL_INTERRUPTS, 0xff); 513 XGMAC_IOWRITE_BITS(pdata, MMC_TIER, ALL_INTERRUPTS, 0xffffffff);
514} 514}
515 515
516static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata) 516static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata)
@@ -1633,6 +1633,9 @@ static int xgbe_flush_tx_queues(struct xgbe_prv_data *pdata)
1633{ 1633{
1634 unsigned int i, count; 1634 unsigned int i, count;
1635 1635
1636 if (XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER) < 0x21)
1637 return 0;
1638
1636 for (i = 0; i < pdata->tx_q_count; i++) 1639 for (i = 0; i < pdata->tx_q_count; i++)
1637 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1); 1640 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1);
1638 1641
@@ -1703,8 +1706,8 @@ static void xgbe_config_mtl_mode(struct xgbe_prv_data *pdata)
1703 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP); 1706 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP);
1704} 1707}
1705 1708
1706static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size, 1709static unsigned int xgbe_calculate_per_queue_fifo(unsigned int fifo_size,
1707 unsigned char queue_count) 1710 unsigned int queue_count)
1708{ 1711{
1709 unsigned int q_fifo_size = 0; 1712 unsigned int q_fifo_size = 0;
1710 enum xgbe_mtl_fifo_size p_fifo = XGMAC_MTL_FIFO_SIZE_256; 1713 enum xgbe_mtl_fifo_size p_fifo = XGMAC_MTL_FIFO_SIZE_256;
@@ -1748,6 +1751,10 @@ static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size,
1748 q_fifo_size = XGBE_FIFO_SIZE_KB(256); 1751 q_fifo_size = XGBE_FIFO_SIZE_KB(256);
1749 break; 1752 break;
1750 } 1753 }
1754
1755 /* The configured value is not the actual amount of fifo RAM */
1756 q_fifo_size = min_t(unsigned int, XGBE_FIFO_MAX, q_fifo_size);
1757
1751 q_fifo_size = q_fifo_size / queue_count; 1758 q_fifo_size = q_fifo_size / queue_count;
1752 1759
1753 /* Set the queue fifo size programmable value */ 1760 /* Set the queue fifo size programmable value */
@@ -1947,6 +1954,32 @@ static void xgbe_config_vlan_support(struct xgbe_prv_data *pdata)
1947 xgbe_disable_rx_vlan_stripping(pdata); 1954 xgbe_disable_rx_vlan_stripping(pdata);
1948} 1955}
1949 1956
1957static u64 xgbe_mmc_read(struct xgbe_prv_data *pdata, unsigned int reg_lo)
1958{
1959 bool read_hi;
1960 u64 val;
1961
1962 switch (reg_lo) {
1963 /* These registers are always 64 bit */
1964 case MMC_TXOCTETCOUNT_GB_LO:
1965 case MMC_TXOCTETCOUNT_G_LO:
1966 case MMC_RXOCTETCOUNT_GB_LO:
1967 case MMC_RXOCTETCOUNT_G_LO:
1968 read_hi = true;
1969 break;
1970
1971 default:
1972 read_hi = false;
1973 };
1974
1975 val = XGMAC_IOREAD(pdata, reg_lo);
1976
1977 if (read_hi)
1978 val |= ((u64)XGMAC_IOREAD(pdata, reg_lo + 4) << 32);
1979
1980 return val;
1981}
1982
1950static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata) 1983static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata)
1951{ 1984{
1952 struct xgbe_mmc_stats *stats = &pdata->mmc_stats; 1985 struct xgbe_mmc_stats *stats = &pdata->mmc_stats;
@@ -1954,75 +1987,75 @@ static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata)
1954 1987
1955 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_GB)) 1988 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_GB))
1956 stats->txoctetcount_gb += 1989 stats->txoctetcount_gb +=
1957 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_GB_LO); 1990 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO);
1958 1991
1959 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_GB)) 1992 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_GB))
1960 stats->txframecount_gb += 1993 stats->txframecount_gb +=
1961 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_GB_LO); 1994 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO);
1962 1995
1963 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_G)) 1996 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_G))
1964 stats->txbroadcastframes_g += 1997 stats->txbroadcastframes_g +=
1965 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_G_LO); 1998 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO);
1966 1999
1967 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_G)) 2000 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_G))
1968 stats->txmulticastframes_g += 2001 stats->txmulticastframes_g +=
1969 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_G_LO); 2002 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO);
1970 2003
1971 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX64OCTETS_GB)) 2004 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX64OCTETS_GB))
1972 stats->tx64octets_gb += 2005 stats->tx64octets_gb +=
1973 XGMAC_IOREAD(pdata, MMC_TX64OCTETS_GB_LO); 2006 xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO);
1974 2007
1975 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX65TO127OCTETS_GB)) 2008 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX65TO127OCTETS_GB))
1976 stats->tx65to127octets_gb += 2009 stats->tx65to127octets_gb +=
1977 XGMAC_IOREAD(pdata, MMC_TX65TO127OCTETS_GB_LO); 2010 xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO);
1978 2011
1979 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX128TO255OCTETS_GB)) 2012 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX128TO255OCTETS_GB))
1980 stats->tx128to255octets_gb += 2013 stats->tx128to255octets_gb +=
1981 XGMAC_IOREAD(pdata, MMC_TX128TO255OCTETS_GB_LO); 2014 xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO);
1982 2015
1983 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX256TO511OCTETS_GB)) 2016 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX256TO511OCTETS_GB))
1984 stats->tx256to511octets_gb += 2017 stats->tx256to511octets_gb +=
1985 XGMAC_IOREAD(pdata, MMC_TX256TO511OCTETS_GB_LO); 2018 xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO);
1986 2019
1987 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX512TO1023OCTETS_GB)) 2020 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX512TO1023OCTETS_GB))
1988 stats->tx512to1023octets_gb += 2021 stats->tx512to1023octets_gb +=
1989 XGMAC_IOREAD(pdata, MMC_TX512TO1023OCTETS_GB_LO); 2022 xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO);
1990 2023
1991 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX1024TOMAXOCTETS_GB)) 2024 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX1024TOMAXOCTETS_GB))
1992 stats->tx1024tomaxoctets_gb += 2025 stats->tx1024tomaxoctets_gb +=
1993 XGMAC_IOREAD(pdata, MMC_TX1024TOMAXOCTETS_GB_LO); 2026 xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO);
1994 2027
1995 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNICASTFRAMES_GB)) 2028 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNICASTFRAMES_GB))
1996 stats->txunicastframes_gb += 2029 stats->txunicastframes_gb +=
1997 XGMAC_IOREAD(pdata, MMC_TXUNICASTFRAMES_GB_LO); 2030 xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO);
1998 2031
1999 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_GB)) 2032 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_GB))
2000 stats->txmulticastframes_gb += 2033 stats->txmulticastframes_gb +=
2001 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_GB_LO); 2034 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO);
2002 2035
2003 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_GB)) 2036 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_GB))
2004 stats->txbroadcastframes_g += 2037 stats->txbroadcastframes_g +=
2005 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_GB_LO); 2038 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO);
2006 2039
2007 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNDERFLOWERROR)) 2040 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNDERFLOWERROR))
2008 stats->txunderflowerror += 2041 stats->txunderflowerror +=
2009 XGMAC_IOREAD(pdata, MMC_TXUNDERFLOWERROR_LO); 2042 xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO);
2010 2043
2011 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_G)) 2044 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_G))
2012 stats->txoctetcount_g += 2045 stats->txoctetcount_g +=
2013 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_G_LO); 2046 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO);
2014 2047
2015 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_G)) 2048 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_G))
2016 stats->txframecount_g += 2049 stats->txframecount_g +=
2017 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_G_LO); 2050 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO);
2018 2051
2019 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXPAUSEFRAMES)) 2052 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXPAUSEFRAMES))
2020 stats->txpauseframes += 2053 stats->txpauseframes +=
2021 XGMAC_IOREAD(pdata, MMC_TXPAUSEFRAMES_LO); 2054 xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO);
2022 2055
2023 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXVLANFRAMES_G)) 2056 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXVLANFRAMES_G))
2024 stats->txvlanframes_g += 2057 stats->txvlanframes_g +=
2025 XGMAC_IOREAD(pdata, MMC_TXVLANFRAMES_G_LO); 2058 xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO);
2026} 2059}
2027 2060
2028static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata) 2061static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata)
@@ -2032,95 +2065,95 @@ static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata)
2032 2065
2033 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFRAMECOUNT_GB)) 2066 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFRAMECOUNT_GB))
2034 stats->rxframecount_gb += 2067 stats->rxframecount_gb +=
2035 XGMAC_IOREAD(pdata, MMC_RXFRAMECOUNT_GB_LO); 2068 xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO);
2036 2069
2037 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_GB)) 2070 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_GB))
2038 stats->rxoctetcount_gb += 2071 stats->rxoctetcount_gb +=
2039 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_GB_LO); 2072 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO);
2040 2073
2041 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_G)) 2074 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_G))
2042 stats->rxoctetcount_g += 2075 stats->rxoctetcount_g +=
2043 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_G_LO); 2076 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO);
2044 2077
2045 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXBROADCASTFRAMES_G)) 2078 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXBROADCASTFRAMES_G))
2046 stats->rxbroadcastframes_g += 2079 stats->rxbroadcastframes_g +=
2047 XGMAC_IOREAD(pdata, MMC_RXBROADCASTFRAMES_G_LO); 2080 xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO);
2048 2081
2049 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXMULTICASTFRAMES_G)) 2082 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXMULTICASTFRAMES_G))
2050 stats->rxmulticastframes_g += 2083 stats->rxmulticastframes_g +=
2051 XGMAC_IOREAD(pdata, MMC_RXMULTICASTFRAMES_G_LO); 2084 xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO);
2052 2085
2053 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXCRCERROR)) 2086 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXCRCERROR))
2054 stats->rxcrcerror += 2087 stats->rxcrcerror +=
2055 XGMAC_IOREAD(pdata, MMC_RXCRCERROR_LO); 2088 xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO);
2056 2089
2057 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXRUNTERROR)) 2090 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXRUNTERROR))
2058 stats->rxrunterror += 2091 stats->rxrunterror +=
2059 XGMAC_IOREAD(pdata, MMC_RXRUNTERROR); 2092 xgbe_mmc_read(pdata, MMC_RXRUNTERROR);
2060 2093
2061 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXJABBERERROR)) 2094 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXJABBERERROR))
2062 stats->rxjabbererror += 2095 stats->rxjabbererror +=
2063 XGMAC_IOREAD(pdata, MMC_RXJABBERERROR); 2096 xgbe_mmc_read(pdata, MMC_RXJABBERERROR);
2064 2097
2065 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNDERSIZE_G)) 2098 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNDERSIZE_G))
2066 stats->rxundersize_g += 2099 stats->rxundersize_g +=
2067 XGMAC_IOREAD(pdata, MMC_RXUNDERSIZE_G); 2100 xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G);
2068 2101
2069 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOVERSIZE_G)) 2102 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOVERSIZE_G))
2070 stats->rxoversize_g += 2103 stats->rxoversize_g +=
2071 XGMAC_IOREAD(pdata, MMC_RXOVERSIZE_G); 2104 xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G);
2072 2105
2073 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX64OCTETS_GB)) 2106 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX64OCTETS_GB))
2074 stats->rx64octets_gb += 2107 stats->rx64octets_gb +=
2075 XGMAC_IOREAD(pdata, MMC_RX64OCTETS_GB_LO); 2108 xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO);
2076 2109
2077 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX65TO127OCTETS_GB)) 2110 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX65TO127OCTETS_GB))
2078 stats->rx65to127octets_gb += 2111 stats->rx65to127octets_gb +=
2079 XGMAC_IOREAD(pdata, MMC_RX65TO127OCTETS_GB_LO); 2112 xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO);
2080 2113
2081 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX128TO255OCTETS_GB)) 2114 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX128TO255OCTETS_GB))
2082 stats->rx128to255octets_gb += 2115 stats->rx128to255octets_gb +=
2083 XGMAC_IOREAD(pdata, MMC_RX128TO255OCTETS_GB_LO); 2116 xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO);
2084 2117
2085 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX256TO511OCTETS_GB)) 2118 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX256TO511OCTETS_GB))
2086 stats->rx256to511octets_gb += 2119 stats->rx256to511octets_gb +=
2087 XGMAC_IOREAD(pdata, MMC_RX256TO511OCTETS_GB_LO); 2120 xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO);
2088 2121
2089 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX512TO1023OCTETS_GB)) 2122 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX512TO1023OCTETS_GB))
2090 stats->rx512to1023octets_gb += 2123 stats->rx512to1023octets_gb +=
2091 XGMAC_IOREAD(pdata, MMC_RX512TO1023OCTETS_GB_LO); 2124 xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO);
2092 2125
2093 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX1024TOMAXOCTETS_GB)) 2126 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX1024TOMAXOCTETS_GB))
2094 stats->rx1024tomaxoctets_gb += 2127 stats->rx1024tomaxoctets_gb +=
2095 XGMAC_IOREAD(pdata, MMC_RX1024TOMAXOCTETS_GB_LO); 2128 xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO);
2096 2129
2097 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNICASTFRAMES_G)) 2130 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNICASTFRAMES_G))
2098 stats->rxunicastframes_g += 2131 stats->rxunicastframes_g +=
2099 XGMAC_IOREAD(pdata, MMC_RXUNICASTFRAMES_G_LO); 2132 xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO);
2100 2133
2101 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXLENGTHERROR)) 2134 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXLENGTHERROR))
2102 stats->rxlengtherror += 2135 stats->rxlengtherror +=
2103 XGMAC_IOREAD(pdata, MMC_RXLENGTHERROR_LO); 2136 xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO);
2104 2137
2105 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOUTOFRANGETYPE)) 2138 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOUTOFRANGETYPE))
2106 stats->rxoutofrangetype += 2139 stats->rxoutofrangetype +=
2107 XGMAC_IOREAD(pdata, MMC_RXOUTOFRANGETYPE_LO); 2140 xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO);
2108 2141
2109 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXPAUSEFRAMES)) 2142 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXPAUSEFRAMES))
2110 stats->rxpauseframes += 2143 stats->rxpauseframes +=
2111 XGMAC_IOREAD(pdata, MMC_RXPAUSEFRAMES_LO); 2144 xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO);
2112 2145
2113 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFIFOOVERFLOW)) 2146 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFIFOOVERFLOW))
2114 stats->rxfifooverflow += 2147 stats->rxfifooverflow +=
2115 XGMAC_IOREAD(pdata, MMC_RXFIFOOVERFLOW_LO); 2148 xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO);
2116 2149
2117 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXVLANFRAMES_GB)) 2150 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXVLANFRAMES_GB))
2118 stats->rxvlanframes_gb += 2151 stats->rxvlanframes_gb +=
2119 XGMAC_IOREAD(pdata, MMC_RXVLANFRAMES_GB_LO); 2152 xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO);
2120 2153
2121 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXWATCHDOGERROR)) 2154 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXWATCHDOGERROR))
2122 stats->rxwatchdogerror += 2155 stats->rxwatchdogerror +=
2123 XGMAC_IOREAD(pdata, MMC_RXWATCHDOGERROR); 2156 xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
2124} 2157}
2125 2158
2126static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata) 2159static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
@@ -2131,127 +2164,127 @@ static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
2131 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 1); 2164 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 1);
2132 2165
2133 stats->txoctetcount_gb += 2166 stats->txoctetcount_gb +=
2134 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_GB_LO); 2167 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO);
2135 2168
2136 stats->txframecount_gb += 2169 stats->txframecount_gb +=
2137 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_GB_LO); 2170 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO);
2138 2171
2139 stats->txbroadcastframes_g += 2172 stats->txbroadcastframes_g +=
2140 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_G_LO); 2173 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO);
2141 2174
2142 stats->txmulticastframes_g += 2175 stats->txmulticastframes_g +=
2143 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_G_LO); 2176 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO);
2144 2177
2145 stats->tx64octets_gb += 2178 stats->tx64octets_gb +=
2146 XGMAC_IOREAD(pdata, MMC_TX64OCTETS_GB_LO); 2179 xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO);
2147 2180
2148 stats->tx65to127octets_gb += 2181 stats->tx65to127octets_gb +=
2149 XGMAC_IOREAD(pdata, MMC_TX65TO127OCTETS_GB_LO); 2182 xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO);
2150 2183
2151 stats->tx128to255octets_gb += 2184 stats->tx128to255octets_gb +=
2152 XGMAC_IOREAD(pdata, MMC_TX128TO255OCTETS_GB_LO); 2185 xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO);
2153 2186
2154 stats->tx256to511octets_gb += 2187 stats->tx256to511octets_gb +=
2155 XGMAC_IOREAD(pdata, MMC_TX256TO511OCTETS_GB_LO); 2188 xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO);
2156 2189
2157 stats->tx512to1023octets_gb += 2190 stats->tx512to1023octets_gb +=
2158 XGMAC_IOREAD(pdata, MMC_TX512TO1023OCTETS_GB_LO); 2191 xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO);
2159 2192
2160 stats->tx1024tomaxoctets_gb += 2193 stats->tx1024tomaxoctets_gb +=
2161 XGMAC_IOREAD(pdata, MMC_TX1024TOMAXOCTETS_GB_LO); 2194 xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO);
2162 2195
2163 stats->txunicastframes_gb += 2196 stats->txunicastframes_gb +=
2164 XGMAC_IOREAD(pdata, MMC_TXUNICASTFRAMES_GB_LO); 2197 xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO);
2165 2198
2166 stats->txmulticastframes_gb += 2199 stats->txmulticastframes_gb +=
2167 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_GB_LO); 2200 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO);
2168 2201
2169 stats->txbroadcastframes_g += 2202 stats->txbroadcastframes_g +=
2170 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_GB_LO); 2203 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO);
2171 2204
2172 stats->txunderflowerror += 2205 stats->txunderflowerror +=
2173 XGMAC_IOREAD(pdata, MMC_TXUNDERFLOWERROR_LO); 2206 xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO);
2174 2207
2175 stats->txoctetcount_g += 2208 stats->txoctetcount_g +=
2176 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_G_LO); 2209 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO);
2177 2210
2178 stats->txframecount_g += 2211 stats->txframecount_g +=
2179 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_G_LO); 2212 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO);
2180 2213
2181 stats->txpauseframes += 2214 stats->txpauseframes +=
2182 XGMAC_IOREAD(pdata, MMC_TXPAUSEFRAMES_LO); 2215 xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO);
2183 2216
2184 stats->txvlanframes_g += 2217 stats->txvlanframes_g +=
2185 XGMAC_IOREAD(pdata, MMC_TXVLANFRAMES_G_LO); 2218 xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO);
2186 2219
2187 stats->rxframecount_gb += 2220 stats->rxframecount_gb +=
2188 XGMAC_IOREAD(pdata, MMC_RXFRAMECOUNT_GB_LO); 2221 xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO);
2189 2222
2190 stats->rxoctetcount_gb += 2223 stats->rxoctetcount_gb +=
2191 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_GB_LO); 2224 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO);
2192 2225
2193 stats->rxoctetcount_g += 2226 stats->rxoctetcount_g +=
2194 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_G_LO); 2227 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO);
2195 2228
2196 stats->rxbroadcastframes_g += 2229 stats->rxbroadcastframes_g +=
2197 XGMAC_IOREAD(pdata, MMC_RXBROADCASTFRAMES_G_LO); 2230 xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO);
2198 2231
2199 stats->rxmulticastframes_g += 2232 stats->rxmulticastframes_g +=
2200 XGMAC_IOREAD(pdata, MMC_RXMULTICASTFRAMES_G_LO); 2233 xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO);
2201 2234
2202 stats->rxcrcerror += 2235 stats->rxcrcerror +=
2203 XGMAC_IOREAD(pdata, MMC_RXCRCERROR_LO); 2236 xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO);
2204 2237
2205 stats->rxrunterror += 2238 stats->rxrunterror +=
2206 XGMAC_IOREAD(pdata, MMC_RXRUNTERROR); 2239 xgbe_mmc_read(pdata, MMC_RXRUNTERROR);
2207 2240
2208 stats->rxjabbererror += 2241 stats->rxjabbererror +=
2209 XGMAC_IOREAD(pdata, MMC_RXJABBERERROR); 2242 xgbe_mmc_read(pdata, MMC_RXJABBERERROR);
2210 2243
2211 stats->rxundersize_g += 2244 stats->rxundersize_g +=
2212 XGMAC_IOREAD(pdata, MMC_RXUNDERSIZE_G); 2245 xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G);
2213 2246
2214 stats->rxoversize_g += 2247 stats->rxoversize_g +=
2215 XGMAC_IOREAD(pdata, MMC_RXOVERSIZE_G); 2248 xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G);
2216 2249
2217 stats->rx64octets_gb += 2250 stats->rx64octets_gb +=
2218 XGMAC_IOREAD(pdata, MMC_RX64OCTETS_GB_LO); 2251 xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO);
2219 2252
2220 stats->rx65to127octets_gb += 2253 stats->rx65to127octets_gb +=
2221 XGMAC_IOREAD(pdata, MMC_RX65TO127OCTETS_GB_LO); 2254 xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO);
2222 2255
2223 stats->rx128to255octets_gb += 2256 stats->rx128to255octets_gb +=
2224 XGMAC_IOREAD(pdata, MMC_RX128TO255OCTETS_GB_LO); 2257 xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO);
2225 2258
2226 stats->rx256to511octets_gb += 2259 stats->rx256to511octets_gb +=
2227 XGMAC_IOREAD(pdata, MMC_RX256TO511OCTETS_GB_LO); 2260 xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO);
2228 2261
2229 stats->rx512to1023octets_gb += 2262 stats->rx512to1023octets_gb +=
2230 XGMAC_IOREAD(pdata, MMC_RX512TO1023OCTETS_GB_LO); 2263 xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO);
2231 2264
2232 stats->rx1024tomaxoctets_gb += 2265 stats->rx1024tomaxoctets_gb +=
2233 XGMAC_IOREAD(pdata, MMC_RX1024TOMAXOCTETS_GB_LO); 2266 xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO);
2234 2267
2235 stats->rxunicastframes_g += 2268 stats->rxunicastframes_g +=
2236 XGMAC_IOREAD(pdata, MMC_RXUNICASTFRAMES_G_LO); 2269 xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO);
2237 2270
2238 stats->rxlengtherror += 2271 stats->rxlengtherror +=
2239 XGMAC_IOREAD(pdata, MMC_RXLENGTHERROR_LO); 2272 xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO);
2240 2273
2241 stats->rxoutofrangetype += 2274 stats->rxoutofrangetype +=
2242 XGMAC_IOREAD(pdata, MMC_RXOUTOFRANGETYPE_LO); 2275 xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO);
2243 2276
2244 stats->rxpauseframes += 2277 stats->rxpauseframes +=
2245 XGMAC_IOREAD(pdata, MMC_RXPAUSEFRAMES_LO); 2278 xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO);
2246 2279
2247 stats->rxfifooverflow += 2280 stats->rxfifooverflow +=
2248 XGMAC_IOREAD(pdata, MMC_RXFIFOOVERFLOW_LO); 2281 xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO);
2249 2282
2250 stats->rxvlanframes_gb += 2283 stats->rxvlanframes_gb +=
2251 XGMAC_IOREAD(pdata, MMC_RXVLANFRAMES_GB_LO); 2284 xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO);
2252 2285
2253 stats->rxwatchdogerror += 2286 stats->rxwatchdogerror +=
2254 XGMAC_IOREAD(pdata, MMC_RXWATCHDOGERROR); 2287 xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
2255 2288
2256 /* Un-freeze counters */ 2289 /* Un-freeze counters */
2257 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0); 2290 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0);
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index dc84f7193c2d..b26d75856553 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -361,6 +361,8 @@ void xgbe_get_all_hw_features(struct xgbe_prv_data *pdata)
361 361
362 memset(hw_feat, 0, sizeof(*hw_feat)); 362 memset(hw_feat, 0, sizeof(*hw_feat));
363 363
364 hw_feat->version = XGMAC_IOREAD(pdata, MAC_VR);
365
364 /* Hardware feature register 0 */ 366 /* Hardware feature register 0 */
365 hw_feat->gmii = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, GMIISEL); 367 hw_feat->gmii = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, GMIISEL);
366 hw_feat->vlhash = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, VLHASH); 368 hw_feat->vlhash = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, VLHASH);
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
index a076aca138a1..46f613028e9c 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
@@ -361,15 +361,16 @@ static void xgbe_get_drvinfo(struct net_device *netdev,
361 struct ethtool_drvinfo *drvinfo) 361 struct ethtool_drvinfo *drvinfo)
362{ 362{
363 struct xgbe_prv_data *pdata = netdev_priv(netdev); 363 struct xgbe_prv_data *pdata = netdev_priv(netdev);
364 struct xgbe_hw_features *hw_feat = &pdata->hw_feat;
364 365
365 strlcpy(drvinfo->driver, XGBE_DRV_NAME, sizeof(drvinfo->driver)); 366 strlcpy(drvinfo->driver, XGBE_DRV_NAME, sizeof(drvinfo->driver));
366 strlcpy(drvinfo->version, XGBE_DRV_VERSION, sizeof(drvinfo->version)); 367 strlcpy(drvinfo->version, XGBE_DRV_VERSION, sizeof(drvinfo->version));
367 strlcpy(drvinfo->bus_info, dev_name(pdata->dev), 368 strlcpy(drvinfo->bus_info, dev_name(pdata->dev),
368 sizeof(drvinfo->bus_info)); 369 sizeof(drvinfo->bus_info));
369 snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "%d.%d.%d", 370 snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "%d.%d.%d",
370 XGMAC_IOREAD_BITS(pdata, MAC_VR, USERVER), 371 XGMAC_GET_BITS(hw_feat->version, MAC_VR, USERVER),
371 XGMAC_IOREAD_BITS(pdata, MAC_VR, DEVID), 372 XGMAC_GET_BITS(hw_feat->version, MAC_VR, DEVID),
372 XGMAC_IOREAD_BITS(pdata, MAC_VR, SNPSVER)); 373 XGMAC_GET_BITS(hw_feat->version, MAC_VR, SNPSVER));
373 drvinfo->n_stats = XGBE_STATS_COUNT; 374 drvinfo->n_stats = XGBE_STATS_COUNT;
374} 375}
375 376
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
index 8aa6a9353f7b..bdf9cfa70e88 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
@@ -172,7 +172,7 @@ static struct xgbe_channel *xgbe_alloc_rings(struct xgbe_prv_data *pdata)
172 } 172 }
173 173
174 if (i < pdata->rx_ring_count) { 174 if (i < pdata->rx_ring_count) {
175 spin_lock_init(&tx_ring->lock); 175 spin_lock_init(&rx_ring->lock);
176 channel->rx_ring = rx_ring++; 176 channel->rx_ring = rx_ring++;
177 } 177 }
178 178
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
index 07bf70a82908..e9fe6e6ddcc3 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
@@ -183,6 +183,7 @@
183#define XGMAC_DRIVER_CONTEXT 1 183#define XGMAC_DRIVER_CONTEXT 1
184#define XGMAC_IOCTL_CONTEXT 2 184#define XGMAC_IOCTL_CONTEXT 2
185 185
186#define XGBE_FIFO_MAX 81920
186#define XGBE_FIFO_SIZE_B(x) (x) 187#define XGBE_FIFO_SIZE_B(x) (x)
187#define XGBE_FIFO_SIZE_KB(x) (x * 1024) 188#define XGBE_FIFO_SIZE_KB(x) (x * 1024)
188 189
@@ -526,6 +527,9 @@ struct xgbe_desc_if {
526 * or configurations are present in the device. 527 * or configurations are present in the device.
527 */ 528 */
528struct xgbe_hw_features { 529struct xgbe_hw_features {
530 /* HW Version */
531 unsigned int version;
532
529 /* HW Feature Register0 */ 533 /* HW Feature Register0 */
530 unsigned int gmii; /* 1000 Mbps support */ 534 unsigned int gmii; /* 1000 Mbps support */
531 unsigned int vlhash; /* VLAN Hash Filter */ 535 unsigned int vlhash; /* VLAN Hash Filter */
diff --git a/drivers/net/ethernet/apm/xgene/Kconfig b/drivers/net/ethernet/apm/xgene/Kconfig
index 616dff6d3f5f..f4054d242f3c 100644
--- a/drivers/net/ethernet/apm/xgene/Kconfig
+++ b/drivers/net/ethernet/apm/xgene/Kconfig
@@ -1,5 +1,6 @@
1config NET_XGENE 1config NET_XGENE
2 tristate "APM X-Gene SoC Ethernet Driver" 2 tristate "APM X-Gene SoC Ethernet Driver"
3 depends on HAS_DMA
3 select PHYLIB 4 select PHYLIB
4 help 5 help
5 This is the Ethernet driver for the on-chip ethernet interface on the 6 This is the Ethernet driver for the on-chip ethernet interface on the
diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig
index 7dcfb19a31c8..d8d07a818b89 100644
--- a/drivers/net/ethernet/broadcom/Kconfig
+++ b/drivers/net/ethernet/broadcom/Kconfig
@@ -84,7 +84,7 @@ config BNX2
84 84
85config CNIC 85config CNIC
86 tristate "QLogic CNIC support" 86 tristate "QLogic CNIC support"
87 depends on PCI 87 depends on PCI && (IPV6 || IPV6=n)
88 select BNX2 88 select BNX2
89 select UIO 89 select UIO
90 ---help--- 90 ---help---
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
index 5ba8af50c84f..c4daa068f1db 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
@@ -2233,7 +2233,12 @@ struct shmem2_region {
2233 u32 reserved3; /* Offset 0x14C */ 2233 u32 reserved3; /* Offset 0x14C */
2234 u32 reserved4; /* Offset 0x150 */ 2234 u32 reserved4; /* Offset 0x150 */
2235 u32 link_attr_sync[PORT_MAX]; /* Offset 0x154 */ 2235 u32 link_attr_sync[PORT_MAX]; /* Offset 0x154 */
2236 #define LINK_ATTR_SYNC_KR2_ENABLE (1<<0) 2236 #define LINK_ATTR_SYNC_KR2_ENABLE 0x00000001
2237 #define LINK_SFP_EEPROM_COMP_CODE_MASK 0x0000ff00
2238 #define LINK_SFP_EEPROM_COMP_CODE_SHIFT 8
2239 #define LINK_SFP_EEPROM_COMP_CODE_SR 0x00001000
2240 #define LINK_SFP_EEPROM_COMP_CODE_LR 0x00002000
2241 #define LINK_SFP_EEPROM_COMP_CODE_LRM 0x00004000
2237 2242
2238 u32 reserved5[2]; 2243 u32 reserved5[2];
2239 u32 reserved6[PORT_MAX]; 2244 u32 reserved6[PORT_MAX];
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
index 53fb4fa61b40..549549eaf580 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
@@ -154,15 +154,22 @@ typedef int (*read_sfp_module_eeprom_func_p)(struct bnx2x_phy *phy,
154 LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE) 154 LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE)
155 155
156#define SFP_EEPROM_CON_TYPE_ADDR 0x2 156#define SFP_EEPROM_CON_TYPE_ADDR 0x2
157 #define SFP_EEPROM_CON_TYPE_VAL_UNKNOWN 0x0
157 #define SFP_EEPROM_CON_TYPE_VAL_LC 0x7 158 #define SFP_EEPROM_CON_TYPE_VAL_LC 0x7
158 #define SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21 159 #define SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21
159 #define SFP_EEPROM_CON_TYPE_VAL_RJ45 0x22 160 #define SFP_EEPROM_CON_TYPE_VAL_RJ45 0x22
160 161
161 162
162#define SFP_EEPROM_COMP_CODE_ADDR 0x3 163#define SFP_EEPROM_10G_COMP_CODE_ADDR 0x3
163 #define SFP_EEPROM_COMP_CODE_SR_MASK (1<<4) 164 #define SFP_EEPROM_10G_COMP_CODE_SR_MASK (1<<4)
164 #define SFP_EEPROM_COMP_CODE_LR_MASK (1<<5) 165 #define SFP_EEPROM_10G_COMP_CODE_LR_MASK (1<<5)
165 #define SFP_EEPROM_COMP_CODE_LRM_MASK (1<<6) 166 #define SFP_EEPROM_10G_COMP_CODE_LRM_MASK (1<<6)
167
168#define SFP_EEPROM_1G_COMP_CODE_ADDR 0x6
169 #define SFP_EEPROM_1G_COMP_CODE_SX (1<<0)
170 #define SFP_EEPROM_1G_COMP_CODE_LX (1<<1)
171 #define SFP_EEPROM_1G_COMP_CODE_CX (1<<2)
172 #define SFP_EEPROM_1G_COMP_CODE_BASE_T (1<<3)
166 173
167#define SFP_EEPROM_FC_TX_TECH_ADDR 0x8 174#define SFP_EEPROM_FC_TX_TECH_ADDR 0x8
168 #define SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE 0x4 175 #define SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE 0x4
@@ -3633,8 +3640,8 @@ static void bnx2x_warpcore_enable_AN_KR2(struct bnx2x_phy *phy,
3633 reg_set[i].val); 3640 reg_set[i].val);
3634 3641
3635 /* Start KR2 work-around timer which handles BCM8073 link-parner */ 3642 /* Start KR2 work-around timer which handles BCM8073 link-parner */
3636 vars->link_attr_sync |= LINK_ATTR_SYNC_KR2_ENABLE; 3643 params->link_attr_sync |= LINK_ATTR_SYNC_KR2_ENABLE;
3637 bnx2x_update_link_attr(params, vars->link_attr_sync); 3644 bnx2x_update_link_attr(params, params->link_attr_sync);
3638} 3645}
3639 3646
3640static void bnx2x_disable_kr2(struct link_params *params, 3647static void bnx2x_disable_kr2(struct link_params *params,
@@ -3666,8 +3673,8 @@ static void bnx2x_disable_kr2(struct link_params *params,
3666 for (i = 0; i < ARRAY_SIZE(reg_set); i++) 3673 for (i = 0; i < ARRAY_SIZE(reg_set); i++)
3667 bnx2x_cl45_write(bp, phy, reg_set[i].devad, reg_set[i].reg, 3674 bnx2x_cl45_write(bp, phy, reg_set[i].devad, reg_set[i].reg,
3668 reg_set[i].val); 3675 reg_set[i].val);
3669 vars->link_attr_sync &= ~LINK_ATTR_SYNC_KR2_ENABLE; 3676 params->link_attr_sync &= ~LINK_ATTR_SYNC_KR2_ENABLE;
3670 bnx2x_update_link_attr(params, vars->link_attr_sync); 3677 bnx2x_update_link_attr(params, params->link_attr_sync);
3671 3678
3672 vars->check_kr2_recovery_cnt = CHECK_KR2_RECOVERY_CNT; 3679 vars->check_kr2_recovery_cnt = CHECK_KR2_RECOVERY_CNT;
3673} 3680}
@@ -4810,7 +4817,7 @@ void bnx2x_link_status_update(struct link_params *params,
4810 ~FEATURE_CONFIG_PFC_ENABLED; 4817 ~FEATURE_CONFIG_PFC_ENABLED;
4811 4818
4812 if (SHMEM2_HAS(bp, link_attr_sync)) 4819 if (SHMEM2_HAS(bp, link_attr_sync))
4813 vars->link_attr_sync = SHMEM2_RD(bp, 4820 params->link_attr_sync = SHMEM2_RD(bp,
4814 link_attr_sync[params->port]); 4821 link_attr_sync[params->port]);
4815 4822
4816 DP(NETIF_MSG_LINK, "link_status 0x%x phy_link_up %x int_mask 0x%x\n", 4823 DP(NETIF_MSG_LINK, "link_status 0x%x phy_link_up %x int_mask 0x%x\n",
@@ -8057,21 +8064,24 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8057{ 8064{
8058 struct bnx2x *bp = params->bp; 8065 struct bnx2x *bp = params->bp;
8059 u32 sync_offset = 0, phy_idx, media_types; 8066 u32 sync_offset = 0, phy_idx, media_types;
8060 u8 gport, val[2], check_limiting_mode = 0; 8067 u8 val[SFP_EEPROM_FC_TX_TECH_ADDR + 1], check_limiting_mode = 0;
8061 *edc_mode = EDC_MODE_LIMITING; 8068 *edc_mode = EDC_MODE_LIMITING;
8062 phy->media_type = ETH_PHY_UNSPECIFIED; 8069 phy->media_type = ETH_PHY_UNSPECIFIED;
8063 /* First check for copper cable */ 8070 /* First check for copper cable */
8064 if (bnx2x_read_sfp_module_eeprom(phy, 8071 if (bnx2x_read_sfp_module_eeprom(phy,
8065 params, 8072 params,
8066 I2C_DEV_ADDR_A0, 8073 I2C_DEV_ADDR_A0,
8067 SFP_EEPROM_CON_TYPE_ADDR, 8074 0,
8068 2, 8075 SFP_EEPROM_FC_TX_TECH_ADDR + 1,
8069 (u8 *)val) != 0) { 8076 (u8 *)val) != 0) {
8070 DP(NETIF_MSG_LINK, "Failed to read from SFP+ module EEPROM\n"); 8077 DP(NETIF_MSG_LINK, "Failed to read from SFP+ module EEPROM\n");
8071 return -EINVAL; 8078 return -EINVAL;
8072 } 8079 }
8073 8080 params->link_attr_sync &= ~LINK_SFP_EEPROM_COMP_CODE_MASK;
8074 switch (val[0]) { 8081 params->link_attr_sync |= val[SFP_EEPROM_10G_COMP_CODE_ADDR] <<
8082 LINK_SFP_EEPROM_COMP_CODE_SHIFT;
8083 bnx2x_update_link_attr(params, params->link_attr_sync);
8084 switch (val[SFP_EEPROM_CON_TYPE_ADDR]) {
8075 case SFP_EEPROM_CON_TYPE_VAL_COPPER: 8085 case SFP_EEPROM_CON_TYPE_VAL_COPPER:
8076 { 8086 {
8077 u8 copper_module_type; 8087 u8 copper_module_type;
@@ -8079,17 +8089,7 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8079 /* Check if its active cable (includes SFP+ module) 8089 /* Check if its active cable (includes SFP+ module)
8080 * of passive cable 8090 * of passive cable
8081 */ 8091 */
8082 if (bnx2x_read_sfp_module_eeprom(phy, 8092 copper_module_type = val[SFP_EEPROM_FC_TX_TECH_ADDR];
8083 params,
8084 I2C_DEV_ADDR_A0,
8085 SFP_EEPROM_FC_TX_TECH_ADDR,
8086 1,
8087 &copper_module_type) != 0) {
8088 DP(NETIF_MSG_LINK,
8089 "Failed to read copper-cable-type"
8090 " from SFP+ EEPROM\n");
8091 return -EINVAL;
8092 }
8093 8093
8094 if (copper_module_type & 8094 if (copper_module_type &
8095 SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE) { 8095 SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE) {
@@ -8115,16 +8115,18 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8115 } 8115 }
8116 break; 8116 break;
8117 } 8117 }
8118 case SFP_EEPROM_CON_TYPE_VAL_UNKNOWN:
8118 case SFP_EEPROM_CON_TYPE_VAL_LC: 8119 case SFP_EEPROM_CON_TYPE_VAL_LC:
8119 case SFP_EEPROM_CON_TYPE_VAL_RJ45: 8120 case SFP_EEPROM_CON_TYPE_VAL_RJ45:
8120 check_limiting_mode = 1; 8121 check_limiting_mode = 1;
8121 if ((val[1] & (SFP_EEPROM_COMP_CODE_SR_MASK | 8122 if ((val[SFP_EEPROM_10G_COMP_CODE_ADDR] &
8122 SFP_EEPROM_COMP_CODE_LR_MASK | 8123 (SFP_EEPROM_10G_COMP_CODE_SR_MASK |
8123 SFP_EEPROM_COMP_CODE_LRM_MASK)) == 0) { 8124 SFP_EEPROM_10G_COMP_CODE_LR_MASK |
8125 SFP_EEPROM_10G_COMP_CODE_LRM_MASK)) == 0) {
8124 DP(NETIF_MSG_LINK, "1G SFP module detected\n"); 8126 DP(NETIF_MSG_LINK, "1G SFP module detected\n");
8125 gport = params->port;
8126 phy->media_type = ETH_PHY_SFP_1G_FIBER; 8127 phy->media_type = ETH_PHY_SFP_1G_FIBER;
8127 if (phy->req_line_speed != SPEED_1000) { 8128 if (phy->req_line_speed != SPEED_1000) {
8129 u8 gport = params->port;
8128 phy->req_line_speed = SPEED_1000; 8130 phy->req_line_speed = SPEED_1000;
8129 if (!CHIP_IS_E1x(bp)) { 8131 if (!CHIP_IS_E1x(bp)) {
8130 gport = BP_PATH(bp) + 8132 gport = BP_PATH(bp) +
@@ -8134,6 +8136,12 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8134 "Warning: Link speed was forced to 1000Mbps. Current SFP module in port %d is not compliant with 10G Ethernet\n", 8136 "Warning: Link speed was forced to 1000Mbps. Current SFP module in port %d is not compliant with 10G Ethernet\n",
8135 gport); 8137 gport);
8136 } 8138 }
8139 if (val[SFP_EEPROM_1G_COMP_CODE_ADDR] &
8140 SFP_EEPROM_1G_COMP_CODE_BASE_T) {
8141 bnx2x_sfp_set_transmitter(params, phy, 0);
8142 msleep(40);
8143 bnx2x_sfp_set_transmitter(params, phy, 1);
8144 }
8137 } else { 8145 } else {
8138 int idx, cfg_idx = 0; 8146 int idx, cfg_idx = 0;
8139 DP(NETIF_MSG_LINK, "10G Optic module detected\n"); 8147 DP(NETIF_MSG_LINK, "10G Optic module detected\n");
@@ -8149,7 +8157,7 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8149 break; 8157 break;
8150 default: 8158 default:
8151 DP(NETIF_MSG_LINK, "Unable to determine module type 0x%x !!!\n", 8159 DP(NETIF_MSG_LINK, "Unable to determine module type 0x%x !!!\n",
8152 val[0]); 8160 val[SFP_EEPROM_CON_TYPE_ADDR]);
8153 return -EINVAL; 8161 return -EINVAL;
8154 } 8162 }
8155 sync_offset = params->shmem_base + 8163 sync_offset = params->shmem_base +
@@ -13507,7 +13515,7 @@ static void bnx2x_check_kr2_wa(struct link_params *params,
13507 13515
13508 sigdet = bnx2x_warpcore_get_sigdet(phy, params); 13516 sigdet = bnx2x_warpcore_get_sigdet(phy, params);
13509 if (!sigdet) { 13517 if (!sigdet) {
13510 if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) { 13518 if (!(params->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
13511 bnx2x_kr2_recovery(params, vars, phy); 13519 bnx2x_kr2_recovery(params, vars, phy);
13512 DP(NETIF_MSG_LINK, "No sigdet\n"); 13520 DP(NETIF_MSG_LINK, "No sigdet\n");
13513 } 13521 }
@@ -13525,7 +13533,7 @@ static void bnx2x_check_kr2_wa(struct link_params *params,
13525 13533
13526 /* CL73 has not begun yet */ 13534 /* CL73 has not begun yet */
13527 if (base_page == 0) { 13535 if (base_page == 0) {
13528 if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) { 13536 if (!(params->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
13529 bnx2x_kr2_recovery(params, vars, phy); 13537 bnx2x_kr2_recovery(params, vars, phy);
13530 DP(NETIF_MSG_LINK, "No BP\n"); 13538 DP(NETIF_MSG_LINK, "No BP\n");
13531 } 13539 }
@@ -13541,7 +13549,7 @@ static void bnx2x_check_kr2_wa(struct link_params *params,
13541 ((next_page & 0xe0) == 0x20)))); 13549 ((next_page & 0xe0) == 0x20))));
13542 13550
13543 /* In case KR2 is already disabled, check if we need to re-enable it */ 13551 /* In case KR2 is already disabled, check if we need to re-enable it */
13544 if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) { 13552 if (!(params->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) {
13545 if (!not_kr2_device) { 13553 if (!not_kr2_device) {
13546 DP(NETIF_MSG_LINK, "BP=0x%x, NP=0x%x\n", base_page, 13554 DP(NETIF_MSG_LINK, "BP=0x%x, NP=0x%x\n", base_page,
13547 next_page); 13555 next_page);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
index 389f5f8cb0a3..d9cce4c3899b 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
@@ -323,6 +323,9 @@ struct link_params {
323#define LINK_FLAGS_INT_DISABLED (1<<0) 323#define LINK_FLAGS_INT_DISABLED (1<<0)
324#define PHY_INITIALIZED (1<<1) 324#define PHY_INITIALIZED (1<<1)
325 u32 lfa_base; 325 u32 lfa_base;
326
327 /* The same definitions as the shmem2 parameter */
328 u32 link_attr_sync;
326}; 329};
327 330
328/* Output parameters */ 331/* Output parameters */
@@ -364,8 +367,6 @@ struct link_vars {
364 u8 rx_tx_asic_rst; 367 u8 rx_tx_asic_rst;
365 u8 turn_to_run_wc_rt; 368 u8 turn_to_run_wc_rt;
366 u16 rsrv2; 369 u16 rsrv2;
367 /* The same definitions as the shmem2 parameter */
368 u32 link_attr_sync;
369}; 370};
370 371
371/***********************************************************/ 372/***********************************************************/
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 900cab420810..d1c093dcb054 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -6849,6 +6849,37 @@ static void bnx2x__common_init_phy(struct bnx2x *bp)
6849 bnx2x_release_phy_lock(bp); 6849 bnx2x_release_phy_lock(bp);
6850} 6850}
6851 6851
6852static void bnx2x_config_endianity(struct bnx2x *bp, u32 val)
6853{
6854 REG_WR(bp, PXP2_REG_RQ_QM_ENDIAN_M, val);
6855 REG_WR(bp, PXP2_REG_RQ_TM_ENDIAN_M, val);
6856 REG_WR(bp, PXP2_REG_RQ_SRC_ENDIAN_M, val);
6857 REG_WR(bp, PXP2_REG_RQ_CDU_ENDIAN_M, val);
6858 REG_WR(bp, PXP2_REG_RQ_DBG_ENDIAN_M, val);
6859
6860 /* make sure this value is 0 */
6861 REG_WR(bp, PXP2_REG_RQ_HC_ENDIAN_M, 0);
6862
6863 REG_WR(bp, PXP2_REG_RD_QM_SWAP_MODE, val);
6864 REG_WR(bp, PXP2_REG_RD_TM_SWAP_MODE, val);
6865 REG_WR(bp, PXP2_REG_RD_SRC_SWAP_MODE, val);
6866 REG_WR(bp, PXP2_REG_RD_CDURD_SWAP_MODE, val);
6867}
6868
6869static void bnx2x_set_endianity(struct bnx2x *bp)
6870{
6871#ifdef __BIG_ENDIAN
6872 bnx2x_config_endianity(bp, 1);
6873#else
6874 bnx2x_config_endianity(bp, 0);
6875#endif
6876}
6877
6878static void bnx2x_reset_endianity(struct bnx2x *bp)
6879{
6880 bnx2x_config_endianity(bp, 0);
6881}
6882
6852/** 6883/**
6853 * bnx2x_init_hw_common - initialize the HW at the COMMON phase. 6884 * bnx2x_init_hw_common - initialize the HW at the COMMON phase.
6854 * 6885 *
@@ -6915,23 +6946,7 @@ static int bnx2x_init_hw_common(struct bnx2x *bp)
6915 6946
6916 bnx2x_init_block(bp, BLOCK_PXP2, PHASE_COMMON); 6947 bnx2x_init_block(bp, BLOCK_PXP2, PHASE_COMMON);
6917 bnx2x_init_pxp(bp); 6948 bnx2x_init_pxp(bp);
6918 6949 bnx2x_set_endianity(bp);
6919#ifdef __BIG_ENDIAN
6920 REG_WR(bp, PXP2_REG_RQ_QM_ENDIAN_M, 1);
6921 REG_WR(bp, PXP2_REG_RQ_TM_ENDIAN_M, 1);
6922 REG_WR(bp, PXP2_REG_RQ_SRC_ENDIAN_M, 1);
6923 REG_WR(bp, PXP2_REG_RQ_CDU_ENDIAN_M, 1);
6924 REG_WR(bp, PXP2_REG_RQ_DBG_ENDIAN_M, 1);
6925 /* make sure this value is 0 */
6926 REG_WR(bp, PXP2_REG_RQ_HC_ENDIAN_M, 0);
6927
6928/* REG_WR(bp, PXP2_REG_RD_PBF_SWAP_MODE, 1); */
6929 REG_WR(bp, PXP2_REG_RD_QM_SWAP_MODE, 1);
6930 REG_WR(bp, PXP2_REG_RD_TM_SWAP_MODE, 1);
6931 REG_WR(bp, PXP2_REG_RD_SRC_SWAP_MODE, 1);
6932 REG_WR(bp, PXP2_REG_RD_CDURD_SWAP_MODE, 1);
6933#endif
6934
6935 bnx2x_ilt_init_page_size(bp, INITOP_SET); 6950 bnx2x_ilt_init_page_size(bp, INITOP_SET);
6936 6951
6937 if (CHIP_REV_IS_FPGA(bp) && CHIP_IS_E1H(bp)) 6952 if (CHIP_REV_IS_FPGA(bp) && CHIP_IS_E1H(bp))
@@ -13169,9 +13184,15 @@ static void __bnx2x_remove(struct pci_dev *pdev,
13169 bnx2x_iov_remove_one(bp); 13184 bnx2x_iov_remove_one(bp);
13170 13185
13171 /* Power on: we can't let PCI layer write to us while we are in D3 */ 13186 /* Power on: we can't let PCI layer write to us while we are in D3 */
13172 if (IS_PF(bp)) 13187 if (IS_PF(bp)) {
13173 bnx2x_set_power_state(bp, PCI_D0); 13188 bnx2x_set_power_state(bp, PCI_D0);
13174 13189
13190 /* Set endianity registers to reset values in case next driver
13191 * boots in different endianty environment.
13192 */
13193 bnx2x_reset_endianity(bp);
13194 }
13195
13175 /* Disable MSI/MSI-X */ 13196 /* Disable MSI/MSI-X */
13176 bnx2x_disable_msi(bp); 13197 bnx2x_disable_msi(bp);
13177 13198
diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index 27861a6c7ca5..a6a9f284c8dd 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -31,7 +31,7 @@
31#include <linux/if_vlan.h> 31#include <linux/if_vlan.h>
32#include <linux/prefetch.h> 32#include <linux/prefetch.h>
33#include <linux/random.h> 33#include <linux/random.h>
34#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) 34#if IS_ENABLED(CONFIG_VLAN_8021Q)
35#define BCM_VLAN 1 35#define BCM_VLAN 1
36#endif 36#endif
37#include <net/ip.h> 37#include <net/ip.h>
@@ -3685,7 +3685,7 @@ static int cnic_get_v4_route(struct sockaddr_in *dst_addr,
3685static int cnic_get_v6_route(struct sockaddr_in6 *dst_addr, 3685static int cnic_get_v6_route(struct sockaddr_in6 *dst_addr,
3686 struct dst_entry **dst) 3686 struct dst_entry **dst)
3687{ 3687{
3688#if defined(CONFIG_IPV6) || (defined(CONFIG_IPV6_MODULE) && defined(MODULE)) 3688#if IS_ENABLED(CONFIG_IPV6)
3689 struct flowi6 fl6; 3689 struct flowi6 fl6;
3690 3690
3691 memset(&fl6, 0, sizeof(fl6)); 3691 memset(&fl6, 0, sizeof(fl6));
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 3ac5d23454a8..cb77ae93d89a 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -11617,6 +11617,12 @@ static int tg3_open(struct net_device *dev)
11617 struct tg3 *tp = netdev_priv(dev); 11617 struct tg3 *tp = netdev_priv(dev);
11618 int err; 11618 int err;
11619 11619
11620 if (tp->pcierr_recovery) {
11621 netdev_err(dev, "Failed to open device. PCI error recovery "
11622 "in progress\n");
11623 return -EAGAIN;
11624 }
11625
11620 if (tp->fw_needed) { 11626 if (tp->fw_needed) {
11621 err = tg3_request_firmware(tp); 11627 err = tg3_request_firmware(tp);
11622 if (tg3_asic_rev(tp) == ASIC_REV_57766) { 11628 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
@@ -11674,6 +11680,12 @@ static int tg3_close(struct net_device *dev)
11674{ 11680{
11675 struct tg3 *tp = netdev_priv(dev); 11681 struct tg3 *tp = netdev_priv(dev);
11676 11682
11683 if (tp->pcierr_recovery) {
11684 netdev_err(dev, "Failed to close device. PCI error recovery "
11685 "in progress\n");
11686 return -EAGAIN;
11687 }
11688
11677 tg3_ptp_fini(tp); 11689 tg3_ptp_fini(tp);
11678 11690
11679 tg3_stop(tp); 11691 tg3_stop(tp);
@@ -17561,6 +17573,7 @@ static int tg3_init_one(struct pci_dev *pdev,
17561 tp->rx_mode = TG3_DEF_RX_MODE; 17573 tp->rx_mode = TG3_DEF_RX_MODE;
17562 tp->tx_mode = TG3_DEF_TX_MODE; 17574 tp->tx_mode = TG3_DEF_TX_MODE;
17563 tp->irq_sync = 1; 17575 tp->irq_sync = 1;
17576 tp->pcierr_recovery = false;
17564 17577
17565 if (tg3_debug > 0) 17578 if (tg3_debug > 0)
17566 tp->msg_enable = tg3_debug; 17579 tp->msg_enable = tg3_debug;
@@ -18071,6 +18084,8 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18071 18084
18072 rtnl_lock(); 18085 rtnl_lock();
18073 18086
18087 tp->pcierr_recovery = true;
18088
18074 /* We probably don't have netdev yet */ 18089 /* We probably don't have netdev yet */
18075 if (!netdev || !netif_running(netdev)) 18090 if (!netdev || !netif_running(netdev))
18076 goto done; 18091 goto done;
@@ -18195,6 +18210,7 @@ static void tg3_io_resume(struct pci_dev *pdev)
18195 tg3_phy_start(tp); 18210 tg3_phy_start(tp);
18196 18211
18197done: 18212done:
18213 tp->pcierr_recovery = false;
18198 rtnl_unlock(); 18214 rtnl_unlock();
18199} 18215}
18200 18216
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
index 461accaf0aa4..31c9f8295953 100644
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -3407,6 +3407,7 @@ struct tg3 {
3407 3407
3408 struct device *hwmon_dev; 3408 struct device *hwmon_dev;
3409 bool link_up; 3409 bool link_up;
3410 bool pcierr_recovery;
3410}; 3411};
3411 3412
3412/* Accessor macros for chip and asic attributes 3413/* Accessor macros for chip and asic attributes
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
index ff8cae5e2535..ffc92a41d75b 100644
--- a/drivers/net/ethernet/brocade/bna/bnad.c
+++ b/drivers/net/ethernet/brocade/bna/bnad.c
@@ -2506,7 +2506,7 @@ bnad_tso_prepare(struct bnad *bnad, struct sk_buff *skb)
2506 * For TSO, the TCP checksum field is seeded with pseudo-header sum 2506 * For TSO, the TCP checksum field is seeded with pseudo-header sum
2507 * excluding the length field. 2507 * excluding the length field.
2508 */ 2508 */
2509 if (skb->protocol == htons(ETH_P_IP)) { 2509 if (vlan_get_protocol(skb) == htons(ETH_P_IP)) {
2510 struct iphdr *iph = ip_hdr(skb); 2510 struct iphdr *iph = ip_hdr(skb);
2511 2511
2512 /* Do we really need these? */ 2512 /* Do we really need these? */
@@ -2870,12 +2870,13 @@ bnad_txq_wi_prepare(struct bnad *bnad, struct bna_tcb *tcb,
2870 } 2870 }
2871 2871
2872 if (skb->ip_summed == CHECKSUM_PARTIAL) { 2872 if (skb->ip_summed == CHECKSUM_PARTIAL) {
2873 __be16 net_proto = vlan_get_protocol(skb);
2873 u8 proto = 0; 2874 u8 proto = 0;
2874 2875
2875 if (skb->protocol == htons(ETH_P_IP)) 2876 if (net_proto == htons(ETH_P_IP))
2876 proto = ip_hdr(skb)->protocol; 2877 proto = ip_hdr(skb)->protocol;
2877#ifdef NETIF_F_IPV6_CSUM 2878#ifdef NETIF_F_IPV6_CSUM
2878 else if (skb->protocol == htons(ETH_P_IPV6)) { 2879 else if (net_proto == htons(ETH_P_IPV6)) {
2879 /* nexthdr may not be TCP immediately. */ 2880 /* nexthdr may not be TCP immediately. */
2880 proto = ipv6_hdr(skb)->nexthdr; 2881 proto = ipv6_hdr(skb)->nexthdr;
2881 } 2882 }
diff --git a/drivers/net/ethernet/calxeda/Kconfig b/drivers/net/ethernet/calxeda/Kconfig
index 184a063bed5f..07d2201530d2 100644
--- a/drivers/net/ethernet/calxeda/Kconfig
+++ b/drivers/net/ethernet/calxeda/Kconfig
@@ -1,6 +1,7 @@
1config NET_CALXEDA_XGMAC 1config NET_CALXEDA_XGMAC
2 tristate "Calxeda 1G/10G XGMAC Ethernet driver" 2 tristate "Calxeda 1G/10G XGMAC Ethernet driver"
3 depends on HAS_IOMEM && HAS_DMA 3 depends on HAS_IOMEM && HAS_DMA
4 depends on ARCH_HIGHBANK || COMPILE_TEST
4 select CRC32 5 select CRC32
5 help 6 help
6 This is the driver for the XGMAC Ethernet IP block found on Calxeda 7 This is the driver for the XGMAC Ethernet IP block found on Calxeda
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 18fb9c61d7ba..8c34811a1128 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -1253,7 +1253,9 @@ freeout: t4_free_sge_resources(adap);
1253 goto freeout; 1253 goto freeout;
1254 } 1254 }
1255 1255
1256 t4_write_reg(adap, MPS_TRC_RSS_CONTROL, 1256 t4_write_reg(adap, is_t4(adap->params.chip) ?
1257 MPS_TRC_RSS_CONTROL :
1258 MPS_T5_TRC_RSS_CONTROL,
1257 RSSCONTROL(netdev2pinfo(adap->port[0])->tx_chan) | 1259 RSSCONTROL(netdev2pinfo(adap->port[0])->tx_chan) |
1258 QUEUENUMBER(s->ethrxq[0].rspq.abs_id)); 1260 QUEUENUMBER(s->ethrxq[0].rspq.abs_id));
1259 return 0; 1261 return 0;
@@ -1761,7 +1763,8 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1761 0xd004, 0xd03c, 1763 0xd004, 0xd03c,
1762 0xdfc0, 0xdfe0, 1764 0xdfc0, 0xdfe0,
1763 0xe000, 0xea7c, 1765 0xe000, 0xea7c,
1764 0xf000, 0x11190, 1766 0xf000, 0x11110,
1767 0x11118, 0x11190,
1765 0x19040, 0x1906c, 1768 0x19040, 0x1906c,
1766 0x19078, 0x19080, 1769 0x19078, 0x19080,
1767 0x1908c, 0x19124, 1770 0x1908c, 0x19124,
@@ -1968,7 +1971,8 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
1968 0xd004, 0xd03c, 1971 0xd004, 0xd03c,
1969 0xdfc0, 0xdfe0, 1972 0xdfc0, 0xdfe0,
1970 0xe000, 0x11088, 1973 0xe000, 0x11088,
1971 0x1109c, 0x1117c, 1974 0x1109c, 0x11110,
1975 0x11118, 0x1117c,
1972 0x11190, 0x11204, 1976 0x11190, 0x11204,
1973 0x19040, 0x1906c, 1977 0x19040, 0x1906c,
1974 0x19078, 0x19080, 1978 0x19078, 0x19080,
@@ -5955,7 +5959,8 @@ static int adap_init0(struct adapter *adap)
5955 params[3] = FW_PARAM_PFVF(CQ_END); 5959 params[3] = FW_PARAM_PFVF(CQ_END);
5956 params[4] = FW_PARAM_PFVF(OCQ_START); 5960 params[4] = FW_PARAM_PFVF(OCQ_START);
5957 params[5] = FW_PARAM_PFVF(OCQ_END); 5961 params[5] = FW_PARAM_PFVF(OCQ_END);
5958 ret = t4_query_params(adap, 0, 0, 0, 6, params, val); 5962 ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 6, params,
5963 val);
5959 if (ret < 0) 5964 if (ret < 0)
5960 goto bye; 5965 goto bye;
5961 adap->vres.qp.start = val[0]; 5966 adap->vres.qp.start = val[0];
@@ -5967,7 +5972,8 @@ static int adap_init0(struct adapter *adap)
5967 5972
5968 params[0] = FW_PARAM_DEV(MAXORDIRD_QP); 5973 params[0] = FW_PARAM_DEV(MAXORDIRD_QP);
5969 params[1] = FW_PARAM_DEV(MAXIRD_ADAPTER); 5974 params[1] = FW_PARAM_DEV(MAXIRD_ADAPTER);
5970 ret = t4_query_params(adap, 0, 0, 0, 2, params, val); 5975 ret = t4_query_params(adap, adap->mbox, adap->fn, 0, 2, params,
5976 val);
5971 if (ret < 0) { 5977 if (ret < 0) {
5972 adap->params.max_ordird_qp = 8; 5978 adap->params.max_ordird_qp = 8;
5973 adap->params.max_ird_adapter = 32 * adap->tids.ntids; 5979 adap->params.max_ird_adapter = 32 * adap->tids.ntids;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index a853133d8db8..41d04462b72e 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -168,6 +168,34 @@ void t4_hw_pci_read_cfg4(struct adapter *adap, int reg, u32 *val)
168} 168}
169 169
170/* 170/*
171 * t4_report_fw_error - report firmware error
172 * @adap: the adapter
173 *
174 * The adapter firmware can indicate error conditions to the host.
175 * If the firmware has indicated an error, print out the reason for
176 * the firmware error.
177 */
178static void t4_report_fw_error(struct adapter *adap)
179{
180 static const char *const reason[] = {
181 "Crash", /* PCIE_FW_EVAL_CRASH */
182 "During Device Preparation", /* PCIE_FW_EVAL_PREP */
183 "During Device Configuration", /* PCIE_FW_EVAL_CONF */
184 "During Device Initialization", /* PCIE_FW_EVAL_INIT */
185 "Unexpected Event", /* PCIE_FW_EVAL_UNEXPECTEDEVENT */
186 "Insufficient Airflow", /* PCIE_FW_EVAL_OVERHEAT */
187 "Device Shutdown", /* PCIE_FW_EVAL_DEVICESHUTDOWN */
188 "Reserved", /* reserved */
189 };
190 u32 pcie_fw;
191
192 pcie_fw = t4_read_reg(adap, MA_PCIE_FW);
193 if (pcie_fw & FW_PCIE_FW_ERR)
194 dev_err(adap->pdev_dev, "Firmware reports adapter error: %s\n",
195 reason[FW_PCIE_FW_EVAL_GET(pcie_fw)]);
196}
197
198/*
171 * Get the reply to a mailbox command and store it in @rpl in big-endian order. 199 * Get the reply to a mailbox command and store it in @rpl in big-endian order.
172 */ 200 */
173static void get_mbox_rpl(struct adapter *adap, __be64 *rpl, int nflit, 201static void get_mbox_rpl(struct adapter *adap, __be64 *rpl, int nflit,
@@ -300,6 +328,7 @@ int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
300 dump_mbox(adap, mbox, data_reg); 328 dump_mbox(adap, mbox, data_reg);
301 dev_err(adap->pdev_dev, "command %#x in mailbox %d timed out\n", 329 dev_err(adap->pdev_dev, "command %#x in mailbox %d timed out\n",
302 *(const u8 *)cmd, mbox); 330 *(const u8 *)cmd, mbox);
331 t4_report_fw_error(adap);
303 return -ETIMEDOUT; 332 return -ETIMEDOUT;
304} 333}
305 334
@@ -566,6 +595,7 @@ int t4_memory_rw(struct adapter *adap, int win, int mtype, u32 addr,
566#define VPD_BASE 0x400 595#define VPD_BASE 0x400
567#define VPD_BASE_OLD 0 596#define VPD_BASE_OLD 0
568#define VPD_LEN 1024 597#define VPD_LEN 1024
598#define CHELSIO_VPD_UNIQUE_ID 0x82
569 599
570/** 600/**
571 * t4_seeprom_wp - enable/disable EEPROM write protection 601 * t4_seeprom_wp - enable/disable EEPROM write protection
@@ -603,7 +633,14 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
603 ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd); 633 ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd);
604 if (ret < 0) 634 if (ret < 0)
605 goto out; 635 goto out;
606 addr = *vpd == 0x82 ? VPD_BASE : VPD_BASE_OLD; 636
637 /* The VPD shall have a unique identifier specified by the PCI SIG.
638 * For chelsio adapters, the identifier is 0x82. The first byte of a VPD
639 * shall be CHELSIO_VPD_UNIQUE_ID (0x82). The VPD programming software
640 * is expected to automatically put this entry at the
641 * beginning of the VPD.
642 */
643 addr = *vpd == CHELSIO_VPD_UNIQUE_ID ? VPD_BASE : VPD_BASE_OLD;
607 644
608 ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd); 645 ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd);
609 if (ret < 0) 646 if (ret < 0)
@@ -667,6 +704,7 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
667 i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE); 704 i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE);
668 memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN)); 705 memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN));
669 strim(p->sn); 706 strim(p->sn);
707 i = pci_vpd_info_field_size(vpd + pn - PCI_VPD_INFO_FLD_HDR_SIZE);
670 memcpy(p->pn, vpd + pn, min(i, PN_LEN)); 708 memcpy(p->pn, vpd + pn, min(i, PN_LEN));
671 strim(p->pn); 709 strim(p->pn);
672 710
@@ -1394,15 +1432,18 @@ static void pcie_intr_handler(struct adapter *adapter)
1394 1432
1395 int fat; 1433 int fat;
1396 1434
1397 fat = t4_handle_intr_status(adapter, 1435 if (is_t4(adapter->params.chip))
1398 PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS, 1436 fat = t4_handle_intr_status(adapter,
1399 sysbus_intr_info) + 1437 PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS,
1400 t4_handle_intr_status(adapter, 1438 sysbus_intr_info) +
1401 PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS, 1439 t4_handle_intr_status(adapter,
1402 pcie_port_intr_info) + 1440 PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS,
1403 t4_handle_intr_status(adapter, PCIE_INT_CAUSE, 1441 pcie_port_intr_info) +
1404 is_t4(adapter->params.chip) ? 1442 t4_handle_intr_status(adapter, PCIE_INT_CAUSE,
1405 pcie_intr_info : t5_pcie_intr_info); 1443 pcie_intr_info);
1444 else
1445 fat = t4_handle_intr_status(adapter, PCIE_INT_CAUSE,
1446 t5_pcie_intr_info);
1406 1447
1407 if (fat) 1448 if (fat)
1408 t4_fatal_err(adapter); 1449 t4_fatal_err(adapter);
@@ -1521,6 +1562,9 @@ static void cim_intr_handler(struct adapter *adapter)
1521 1562
1522 int fat; 1563 int fat;
1523 1564
1565 if (t4_read_reg(adapter, MA_PCIE_FW) & FW_PCIE_FW_ERR)
1566 t4_report_fw_error(adapter);
1567
1524 fat = t4_handle_intr_status(adapter, CIM_HOST_INT_CAUSE, 1568 fat = t4_handle_intr_status(adapter, CIM_HOST_INT_CAUSE,
1525 cim_intr_info) + 1569 cim_intr_info) +
1526 t4_handle_intr_status(adapter, CIM_HOST_UPACC_INT_CAUSE, 1570 t4_handle_intr_status(adapter, CIM_HOST_UPACC_INT_CAUSE,
@@ -1768,10 +1812,16 @@ static void ma_intr_handler(struct adapter *adap)
1768{ 1812{
1769 u32 v, status = t4_read_reg(adap, MA_INT_CAUSE); 1813 u32 v, status = t4_read_reg(adap, MA_INT_CAUSE);
1770 1814
1771 if (status & MEM_PERR_INT_CAUSE) 1815 if (status & MEM_PERR_INT_CAUSE) {
1772 dev_alert(adap->pdev_dev, 1816 dev_alert(adap->pdev_dev,
1773 "MA parity error, parity status %#x\n", 1817 "MA parity error, parity status %#x\n",
1774 t4_read_reg(adap, MA_PARITY_ERROR_STATUS)); 1818 t4_read_reg(adap, MA_PARITY_ERROR_STATUS));
1819 if (is_t5(adap->params.chip))
1820 dev_alert(adap->pdev_dev,
1821 "MA parity error, parity status %#x\n",
1822 t4_read_reg(adap,
1823 MA_PARITY_ERROR_STATUS2));
1824 }
1775 if (status & MEM_WRAP_INT_CAUSE) { 1825 if (status & MEM_WRAP_INT_CAUSE) {
1776 v = t4_read_reg(adap, MA_INT_WRAP_STATUS); 1826 v = t4_read_reg(adap, MA_INT_WRAP_STATUS);
1777 dev_alert(adap->pdev_dev, "MA address wrap-around error by " 1827 dev_alert(adap->pdev_dev, "MA address wrap-around error by "
@@ -2733,12 +2783,16 @@ retry:
2733 /* 2783 /*
2734 * Issue the HELLO command to the firmware. If it's not successful 2784 * Issue the HELLO command to the firmware. If it's not successful
2735 * but indicates that we got a "busy" or "timeout" condition, retry 2785 * but indicates that we got a "busy" or "timeout" condition, retry
2736 * the HELLO until we exhaust our retry limit. 2786 * the HELLO until we exhaust our retry limit. If we do exceed our
2787 * retry limit, check to see if the firmware left us any error
2788 * information and report that if so.
2737 */ 2789 */
2738 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c); 2790 ret = t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
2739 if (ret < 0) { 2791 if (ret < 0) {
2740 if ((ret == -EBUSY || ret == -ETIMEDOUT) && retries-- > 0) 2792 if ((ret == -EBUSY || ret == -ETIMEDOUT) && retries-- > 0)
2741 goto retry; 2793 goto retry;
2794 if (t4_read_reg(adap, MA_PCIE_FW) & FW_PCIE_FW_ERR)
2795 t4_report_fw_error(adap);
2742 return ret; 2796 return ret;
2743 } 2797 }
2744 2798
@@ -3742,6 +3796,7 @@ int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl)
3742 lc->link_ok = link_ok; 3796 lc->link_ok = link_ok;
3743 lc->speed = speed; 3797 lc->speed = speed;
3744 lc->fc = fc; 3798 lc->fc = fc;
3799 lc->supported = be16_to_cpu(p->u.info.pcap);
3745 t4_os_link_changed(adap, port, link_ok); 3800 t4_os_link_changed(adap, port, link_ok);
3746 } 3801 }
3747 if (mod != pi->mod_type) { 3802 if (mod != pi->mod_type) {
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
index e3146e83df20..39fb325474f7 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
@@ -511,6 +511,7 @@
511#define MEM_WRAP_CLIENT_NUM_GET(x) (((x) & MEM_WRAP_CLIENT_NUM_MASK) >> MEM_WRAP_CLIENT_NUM_SHIFT) 511#define MEM_WRAP_CLIENT_NUM_GET(x) (((x) & MEM_WRAP_CLIENT_NUM_MASK) >> MEM_WRAP_CLIENT_NUM_SHIFT)
512#define MA_PCIE_FW 0x30b8 512#define MA_PCIE_FW 0x30b8
513#define MA_PARITY_ERROR_STATUS 0x77f4 513#define MA_PARITY_ERROR_STATUS 0x77f4
514#define MA_PARITY_ERROR_STATUS2 0x7804
514 515
515#define MA_EXT_MEMORY1_BAR 0x7808 516#define MA_EXT_MEMORY1_BAR 0x7808
516#define EDC_0_BASE_ADDR 0x7900 517#define EDC_0_BASE_ADDR 0x7900
@@ -959,6 +960,7 @@
959#define TRCMULTIFILTER 0x00000001U 960#define TRCMULTIFILTER 0x00000001U
960 961
961#define MPS_TRC_RSS_CONTROL 0x9808 962#define MPS_TRC_RSS_CONTROL 0x9808
963#define MPS_T5_TRC_RSS_CONTROL 0xa00c
962#define RSSCONTROL_MASK 0x00ff0000U 964#define RSSCONTROL_MASK 0x00ff0000U
963#define RSSCONTROL_SHIFT 16 965#define RSSCONTROL_SHIFT 16
964#define RSSCONTROL(x) ((x) << RSSCONTROL_SHIFT) 966#define RSSCONTROL(x) ((x) << RSSCONTROL_SHIFT)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
index 5f2729ebadbe..3409756a85b9 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
@@ -2228,6 +2228,10 @@ struct fw_debug_cmd {
2228#define FW_PCIE_FW_MASTER(x) ((x) << FW_PCIE_FW_MASTER_SHIFT) 2228#define FW_PCIE_FW_MASTER(x) ((x) << FW_PCIE_FW_MASTER_SHIFT)
2229#define FW_PCIE_FW_MASTER_GET(x) (((x) >> FW_PCIE_FW_MASTER_SHIFT) & \ 2229#define FW_PCIE_FW_MASTER_GET(x) (((x) >> FW_PCIE_FW_MASTER_SHIFT) & \
2230 FW_PCIE_FW_MASTER_MASK) 2230 FW_PCIE_FW_MASTER_MASK)
2231#define FW_PCIE_FW_EVAL_MASK 0x7
2232#define FW_PCIE_FW_EVAL_SHIFT 24
2233#define FW_PCIE_FW_EVAL_GET(x) (((x) >> FW_PCIE_FW_EVAL_SHIFT) & \
2234 FW_PCIE_FW_EVAL_MASK)
2231 2235
2232struct fw_hdr { 2236struct fw_hdr {
2233 u8 ver; 2237 u8 ver;
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index a0b418e007a0..566b17db135a 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -1994,7 +1994,7 @@ static void xmit_common(struct sk_buff *skb, struct ehea_swqe *swqe)
1994{ 1994{
1995 swqe->tx_control |= EHEA_SWQE_IMM_DATA_PRESENT | EHEA_SWQE_CRC; 1995 swqe->tx_control |= EHEA_SWQE_IMM_DATA_PRESENT | EHEA_SWQE_CRC;
1996 1996
1997 if (skb->protocol != htons(ETH_P_IP)) 1997 if (vlan_get_protocol(skb) != htons(ETH_P_IP))
1998 return; 1998 return;
1999 1999
2000 if (skb->ip_summed == CHECKSUM_PARTIAL) 2000 if (skb->ip_summed == CHECKSUM_PARTIAL)
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index cbc330b301cd..ad3d5d12173f 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -2674,7 +2674,8 @@ set_itr_now:
2674#define E1000_TX_FLAGS_VLAN_SHIFT 16 2674#define E1000_TX_FLAGS_VLAN_SHIFT 16
2675 2675
2676static int e1000_tso(struct e1000_adapter *adapter, 2676static int e1000_tso(struct e1000_adapter *adapter,
2677 struct e1000_tx_ring *tx_ring, struct sk_buff *skb) 2677 struct e1000_tx_ring *tx_ring, struct sk_buff *skb,
2678 __be16 protocol)
2678{ 2679{
2679 struct e1000_context_desc *context_desc; 2680 struct e1000_context_desc *context_desc;
2680 struct e1000_buffer *buffer_info; 2681 struct e1000_buffer *buffer_info;
@@ -2692,7 +2693,7 @@ static int e1000_tso(struct e1000_adapter *adapter,
2692 2693
2693 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); 2694 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
2694 mss = skb_shinfo(skb)->gso_size; 2695 mss = skb_shinfo(skb)->gso_size;
2695 if (skb->protocol == htons(ETH_P_IP)) { 2696 if (protocol == htons(ETH_P_IP)) {
2696 struct iphdr *iph = ip_hdr(skb); 2697 struct iphdr *iph = ip_hdr(skb);
2697 iph->tot_len = 0; 2698 iph->tot_len = 0;
2698 iph->check = 0; 2699 iph->check = 0;
@@ -2702,7 +2703,7 @@ static int e1000_tso(struct e1000_adapter *adapter,
2702 0); 2703 0);
2703 cmd_length = E1000_TXD_CMD_IP; 2704 cmd_length = E1000_TXD_CMD_IP;
2704 ipcse = skb_transport_offset(skb) - 1; 2705 ipcse = skb_transport_offset(skb) - 1;
2705 } else if (skb->protocol == htons(ETH_P_IPV6)) { 2706 } else if (skb_is_gso_v6(skb)) {
2706 ipv6_hdr(skb)->payload_len = 0; 2707 ipv6_hdr(skb)->payload_len = 0;
2707 tcp_hdr(skb)->check = 2708 tcp_hdr(skb)->check =
2708 ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, 2709 ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
@@ -2745,7 +2746,8 @@ static int e1000_tso(struct e1000_adapter *adapter,
2745} 2746}
2746 2747
2747static bool e1000_tx_csum(struct e1000_adapter *adapter, 2748static bool e1000_tx_csum(struct e1000_adapter *adapter,
2748 struct e1000_tx_ring *tx_ring, struct sk_buff *skb) 2749 struct e1000_tx_ring *tx_ring, struct sk_buff *skb,
2750 __be16 protocol)
2749{ 2751{
2750 struct e1000_context_desc *context_desc; 2752 struct e1000_context_desc *context_desc;
2751 struct e1000_buffer *buffer_info; 2753 struct e1000_buffer *buffer_info;
@@ -2756,7 +2758,7 @@ static bool e1000_tx_csum(struct e1000_adapter *adapter,
2756 if (skb->ip_summed != CHECKSUM_PARTIAL) 2758 if (skb->ip_summed != CHECKSUM_PARTIAL)
2757 return false; 2759 return false;
2758 2760
2759 switch (skb->protocol) { 2761 switch (protocol) {
2760 case cpu_to_be16(ETH_P_IP): 2762 case cpu_to_be16(ETH_P_IP):
2761 if (ip_hdr(skb)->protocol == IPPROTO_TCP) 2763 if (ip_hdr(skb)->protocol == IPPROTO_TCP)
2762 cmd_len |= E1000_TXD_CMD_TCP; 2764 cmd_len |= E1000_TXD_CMD_TCP;
@@ -3097,6 +3099,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
3097 int count = 0; 3099 int count = 0;
3098 int tso; 3100 int tso;
3099 unsigned int f; 3101 unsigned int f;
3102 __be16 protocol = vlan_get_protocol(skb);
3100 3103
3101 /* This goes back to the question of how to logically map a Tx queue 3104 /* This goes back to the question of how to logically map a Tx queue
3102 * to a flow. Right now, performance is impacted slightly negatively 3105 * to a flow. Right now, performance is impacted slightly negatively
@@ -3210,7 +3213,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
3210 3213
3211 first = tx_ring->next_to_use; 3214 first = tx_ring->next_to_use;
3212 3215
3213 tso = e1000_tso(adapter, tx_ring, skb); 3216 tso = e1000_tso(adapter, tx_ring, skb, protocol);
3214 if (tso < 0) { 3217 if (tso < 0) {
3215 dev_kfree_skb_any(skb); 3218 dev_kfree_skb_any(skb);
3216 return NETDEV_TX_OK; 3219 return NETDEV_TX_OK;
@@ -3220,10 +3223,10 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
3220 if (likely(hw->mac_type != e1000_82544)) 3223 if (likely(hw->mac_type != e1000_82544))
3221 tx_ring->last_tx_tso = true; 3224 tx_ring->last_tx_tso = true;
3222 tx_flags |= E1000_TX_FLAGS_TSO; 3225 tx_flags |= E1000_TX_FLAGS_TSO;
3223 } else if (likely(e1000_tx_csum(adapter, tx_ring, skb))) 3226 } else if (likely(e1000_tx_csum(adapter, tx_ring, skb, protocol)))
3224 tx_flags |= E1000_TX_FLAGS_CSUM; 3227 tx_flags |= E1000_TX_FLAGS_CSUM;
3225 3228
3226 if (likely(skb->protocol == htons(ETH_P_IP))) 3229 if (protocol == htons(ETH_P_IP))
3227 tx_flags |= E1000_TX_FLAGS_IPV4; 3230 tx_flags |= E1000_TX_FLAGS_IPV4;
3228 3231
3229 if (unlikely(skb->no_fcs)) 3232 if (unlikely(skb->no_fcs))
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 65c3aef2bd36..247335d2c7ec 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -5164,7 +5164,8 @@ link_up:
5164#define E1000_TX_FLAGS_VLAN_MASK 0xffff0000 5164#define E1000_TX_FLAGS_VLAN_MASK 0xffff0000
5165#define E1000_TX_FLAGS_VLAN_SHIFT 16 5165#define E1000_TX_FLAGS_VLAN_SHIFT 16
5166 5166
5167static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb) 5167static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb,
5168 __be16 protocol)
5168{ 5169{
5169 struct e1000_context_desc *context_desc; 5170 struct e1000_context_desc *context_desc;
5170 struct e1000_buffer *buffer_info; 5171 struct e1000_buffer *buffer_info;
@@ -5183,7 +5184,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
5183 5184
5184 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); 5185 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
5185 mss = skb_shinfo(skb)->gso_size; 5186 mss = skb_shinfo(skb)->gso_size;
5186 if (skb->protocol == htons(ETH_P_IP)) { 5187 if (protocol == htons(ETH_P_IP)) {
5187 struct iphdr *iph = ip_hdr(skb); 5188 struct iphdr *iph = ip_hdr(skb);
5188 iph->tot_len = 0; 5189 iph->tot_len = 0;
5189 iph->check = 0; 5190 iph->check = 0;
@@ -5231,7 +5232,8 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
5231 return 1; 5232 return 1;
5232} 5233}
5233 5234
5234static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb) 5235static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb,
5236 __be16 protocol)
5235{ 5237{
5236 struct e1000_adapter *adapter = tx_ring->adapter; 5238 struct e1000_adapter *adapter = tx_ring->adapter;
5237 struct e1000_context_desc *context_desc; 5239 struct e1000_context_desc *context_desc;
@@ -5239,16 +5241,10 @@ static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb)
5239 unsigned int i; 5241 unsigned int i;
5240 u8 css; 5242 u8 css;
5241 u32 cmd_len = E1000_TXD_CMD_DEXT; 5243 u32 cmd_len = E1000_TXD_CMD_DEXT;
5242 __be16 protocol;
5243 5244
5244 if (skb->ip_summed != CHECKSUM_PARTIAL) 5245 if (skb->ip_summed != CHECKSUM_PARTIAL)
5245 return false; 5246 return false;
5246 5247
5247 if (skb->protocol == cpu_to_be16(ETH_P_8021Q))
5248 protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto;
5249 else
5250 protocol = skb->protocol;
5251
5252 switch (protocol) { 5248 switch (protocol) {
5253 case cpu_to_be16(ETH_P_IP): 5249 case cpu_to_be16(ETH_P_IP):
5254 if (ip_hdr(skb)->protocol == IPPROTO_TCP) 5250 if (ip_hdr(skb)->protocol == IPPROTO_TCP)
@@ -5546,6 +5542,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
5546 int count = 0; 5542 int count = 0;
5547 int tso; 5543 int tso;
5548 unsigned int f; 5544 unsigned int f;
5545 __be16 protocol = vlan_get_protocol(skb);
5549 5546
5550 if (test_bit(__E1000_DOWN, &adapter->state)) { 5547 if (test_bit(__E1000_DOWN, &adapter->state)) {
5551 dev_kfree_skb_any(skb); 5548 dev_kfree_skb_any(skb);
@@ -5620,7 +5617,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
5620 5617
5621 first = tx_ring->next_to_use; 5618 first = tx_ring->next_to_use;
5622 5619
5623 tso = e1000_tso(tx_ring, skb); 5620 tso = e1000_tso(tx_ring, skb, protocol);
5624 if (tso < 0) { 5621 if (tso < 0) {
5625 dev_kfree_skb_any(skb); 5622 dev_kfree_skb_any(skb);
5626 return NETDEV_TX_OK; 5623 return NETDEV_TX_OK;
@@ -5628,14 +5625,14 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
5628 5625
5629 if (tso) 5626 if (tso)
5630 tx_flags |= E1000_TX_FLAGS_TSO; 5627 tx_flags |= E1000_TX_FLAGS_TSO;
5631 else if (e1000_tx_csum(tx_ring, skb)) 5628 else if (e1000_tx_csum(tx_ring, skb, protocol))
5632 tx_flags |= E1000_TX_FLAGS_CSUM; 5629 tx_flags |= E1000_TX_FLAGS_CSUM;
5633 5630
5634 /* Old method was to assume IPv4 packet by default if TSO was enabled. 5631 /* Old method was to assume IPv4 packet by default if TSO was enabled.
5635 * 82571 hardware supports TSO capabilities for IPv6 as well... 5632 * 82571 hardware supports TSO capabilities for IPv6 as well...
5636 * no longer assume, we must. 5633 * no longer assume, we must.
5637 */ 5634 */
5638 if (skb->protocol == htons(ETH_P_IP)) 5635 if (protocol == htons(ETH_P_IP))
5639 tx_flags |= E1000_TX_FLAGS_IPV4; 5636 tx_flags |= E1000_TX_FLAGS_IPV4;
5640 5637
5641 if (unlikely(skb->no_fcs)) 5638 if (unlikely(skb->no_fcs))
diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index a51aa37b7b5a..369848e107f8 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -2295,7 +2295,7 @@ static netdev_tx_t i40e_xmit_frame_ring(struct sk_buff *skb,
2295 goto out_drop; 2295 goto out_drop;
2296 2296
2297 /* obtain protocol of skb */ 2297 /* obtain protocol of skb */
2298 protocol = skb->protocol; 2298 protocol = vlan_get_protocol(skb);
2299 2299
2300 /* record the location of the first descriptor for this packet */ 2300 /* record the location of the first descriptor for this packet */
2301 first = &tx_ring->tx_bi[tx_ring->next_to_use]; 2301 first = &tx_ring->tx_bi[tx_ring->next_to_use];
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
index 79bf96ca6489..95a3ec236b49 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
@@ -1597,7 +1597,7 @@ static netdev_tx_t i40e_xmit_frame_ring(struct sk_buff *skb,
1597 goto out_drop; 1597 goto out_drop;
1598 1598
1599 /* obtain protocol of skb */ 1599 /* obtain protocol of skb */
1600 protocol = skb->protocol; 1600 protocol = vlan_get_protocol(skb);
1601 1601
1602 /* record the location of the first descriptor for this packet */ 1602 /* record the location of the first descriptor for this packet */
1603 first = &tx_ring->tx_bi[tx_ring->next_to_use]; 1603 first = &tx_ring->tx_bi[tx_ring->next_to_use];
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index c9f1d1b7ef37..ade067de1689 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -20,6 +20,7 @@
20#include <linux/mbus.h> 20#include <linux/mbus.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/interrupt.h> 22#include <linux/interrupt.h>
23#include <linux/if_vlan.h>
23#include <net/ip.h> 24#include <net/ip.h>
24#include <net/ipv6.h> 25#include <net/ipv6.h>
25#include <linux/io.h> 26#include <linux/io.h>
@@ -1371,15 +1372,16 @@ static u32 mvneta_skb_tx_csum(struct mvneta_port *pp, struct sk_buff *skb)
1371{ 1372{
1372 if (skb->ip_summed == CHECKSUM_PARTIAL) { 1373 if (skb->ip_summed == CHECKSUM_PARTIAL) {
1373 int ip_hdr_len = 0; 1374 int ip_hdr_len = 0;
1375 __be16 l3_proto = vlan_get_protocol(skb);
1374 u8 l4_proto; 1376 u8 l4_proto;
1375 1377
1376 if (skb->protocol == htons(ETH_P_IP)) { 1378 if (l3_proto == htons(ETH_P_IP)) {
1377 struct iphdr *ip4h = ip_hdr(skb); 1379 struct iphdr *ip4h = ip_hdr(skb);
1378 1380
1379 /* Calculate IPv4 checksum and L4 checksum */ 1381 /* Calculate IPv4 checksum and L4 checksum */
1380 ip_hdr_len = ip4h->ihl; 1382 ip_hdr_len = ip4h->ihl;
1381 l4_proto = ip4h->protocol; 1383 l4_proto = ip4h->protocol;
1382 } else if (skb->protocol == htons(ETH_P_IPV6)) { 1384 } else if (l3_proto == htons(ETH_P_IPV6)) {
1383 struct ipv6hdr *ip6h = ipv6_hdr(skb); 1385 struct ipv6hdr *ip6h = ipv6_hdr(skb);
1384 1386
1385 /* Read l4_protocol from one of IPv6 extra headers */ 1387 /* Read l4_protocol from one of IPv6 extra headers */
@@ -1390,7 +1392,7 @@ static u32 mvneta_skb_tx_csum(struct mvneta_port *pp, struct sk_buff *skb)
1390 return MVNETA_TX_L4_CSUM_NOT; 1392 return MVNETA_TX_L4_CSUM_NOT;
1391 1393
1392 return mvneta_txq_desc_csum(skb_network_offset(skb), 1394 return mvneta_txq_desc_csum(skb_network_offset(skb),
1393 skb->protocol, ip_hdr_len, l4_proto); 1395 l3_proto, ip_hdr_len, l4_proto);
1394 } 1396 }
1395 1397
1396 return MVNETA_TX_L4_CSUM_NOT; 1398 return MVNETA_TX_L4_CSUM_NOT;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index bb536aa613f4..abddcf8c40aa 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -474,39 +474,12 @@ static int mlx4_en_tunnel_steer_add(struct mlx4_en_priv *priv, unsigned char *ad
474 int qpn, u64 *reg_id) 474 int qpn, u64 *reg_id)
475{ 475{
476 int err; 476 int err;
477 struct mlx4_spec_list spec_eth_outer = { {NULL} };
478 struct mlx4_spec_list spec_vxlan = { {NULL} };
479 struct mlx4_spec_list spec_eth_inner = { {NULL} };
480
481 struct mlx4_net_trans_rule rule = {
482 .queue_mode = MLX4_NET_TRANS_Q_FIFO,
483 .exclusive = 0,
484 .allow_loopback = 1,
485 .promisc_mode = MLX4_FS_REGULAR,
486 .priority = MLX4_DOMAIN_NIC,
487 };
488
489 __be64 mac_mask = cpu_to_be64(MLX4_MAC_MASK << 16);
490 477
491 if (priv->mdev->dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN) 478 if (priv->mdev->dev->caps.tunnel_offload_mode != MLX4_TUNNEL_OFFLOAD_MODE_VXLAN)
492 return 0; /* do nothing */ 479 return 0; /* do nothing */
493 480
494 rule.port = priv->port; 481 err = mlx4_tunnel_steer_add(priv->mdev->dev, addr, priv->port, qpn,
495 rule.qpn = qpn; 482 MLX4_DOMAIN_NIC, reg_id);
496 INIT_LIST_HEAD(&rule.list);
497
498 spec_eth_outer.id = MLX4_NET_TRANS_RULE_ID_ETH;
499 memcpy(spec_eth_outer.eth.dst_mac, addr, ETH_ALEN);
500 memcpy(spec_eth_outer.eth.dst_mac_msk, &mac_mask, ETH_ALEN);
501
502 spec_vxlan.id = MLX4_NET_TRANS_RULE_ID_VXLAN; /* any vxlan header */
503 spec_eth_inner.id = MLX4_NET_TRANS_RULE_ID_ETH; /* any inner eth header */
504
505 list_add_tail(&spec_eth_outer.list, &rule.list);
506 list_add_tail(&spec_vxlan.list, &rule.list);
507 list_add_tail(&spec_eth_inner.list, &rule.list);
508
509 err = mlx4_flow_attach(priv->mdev->dev, &rule, reg_id);
510 if (err) { 483 if (err) {
511 en_err(priv, "failed to add vxlan steering rule, err %d\n", err); 484 en_err(priv, "failed to add vxlan steering rule, err %d\n", err);
512 return err; 485 return err;
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c
index d80e7a6fac74..ca0f98c95105 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mcg.c
+++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c
@@ -1020,6 +1020,44 @@ int mlx4_flow_detach(struct mlx4_dev *dev, u64 reg_id)
1020} 1020}
1021EXPORT_SYMBOL_GPL(mlx4_flow_detach); 1021EXPORT_SYMBOL_GPL(mlx4_flow_detach);
1022 1022
1023int mlx4_tunnel_steer_add(struct mlx4_dev *dev, unsigned char *addr,
1024 int port, int qpn, u16 prio, u64 *reg_id)
1025{
1026 int err;
1027 struct mlx4_spec_list spec_eth_outer = { {NULL} };
1028 struct mlx4_spec_list spec_vxlan = { {NULL} };
1029 struct mlx4_spec_list spec_eth_inner = { {NULL} };
1030
1031 struct mlx4_net_trans_rule rule = {
1032 .queue_mode = MLX4_NET_TRANS_Q_FIFO,
1033 .exclusive = 0,
1034 .allow_loopback = 1,
1035 .promisc_mode = MLX4_FS_REGULAR,
1036 };
1037
1038 __be64 mac_mask = cpu_to_be64(MLX4_MAC_MASK << 16);
1039
1040 rule.port = port;
1041 rule.qpn = qpn;
1042 rule.priority = prio;
1043 INIT_LIST_HEAD(&rule.list);
1044
1045 spec_eth_outer.id = MLX4_NET_TRANS_RULE_ID_ETH;
1046 memcpy(spec_eth_outer.eth.dst_mac, addr, ETH_ALEN);
1047 memcpy(spec_eth_outer.eth.dst_mac_msk, &mac_mask, ETH_ALEN);
1048
1049 spec_vxlan.id = MLX4_NET_TRANS_RULE_ID_VXLAN; /* any vxlan header */
1050 spec_eth_inner.id = MLX4_NET_TRANS_RULE_ID_ETH; /* any inner eth header */
1051
1052 list_add_tail(&spec_eth_outer.list, &rule.list);
1053 list_add_tail(&spec_vxlan.list, &rule.list);
1054 list_add_tail(&spec_eth_inner.list, &rule.list);
1055
1056 err = mlx4_flow_attach(dev, &rule, reg_id);
1057 return err;
1058}
1059EXPORT_SYMBOL(mlx4_tunnel_steer_add);
1060
1023int mlx4_FLOW_STEERING_IB_UC_QP_RANGE(struct mlx4_dev *dev, u32 min_range_qpn, 1061int mlx4_FLOW_STEERING_IB_UC_QP_RANGE(struct mlx4_dev *dev, u32 min_range_qpn,
1024 u32 max_range_qpn) 1062 u32 max_range_qpn)
1025{ 1063{
diff --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c
index 5020fd47825d..2f12c88c66ab 100644
--- a/drivers/net/ethernet/moxa/moxart_ether.c
+++ b/drivers/net/ethernet/moxa/moxart_ether.c
@@ -206,7 +206,7 @@ static int moxart_rx_poll(struct napi_struct *napi, int budget)
206 int rx_head = priv->rx_head; 206 int rx_head = priv->rx_head;
207 int rx = 0; 207 int rx = 0;
208 208
209 while (1) { 209 while (rx < budget) {
210 desc = priv->rx_desc_base + (RX_REG_DESC_SIZE * rx_head); 210 desc = priv->rx_desc_base + (RX_REG_DESC_SIZE * rx_head);
211 desc0 = readl(desc + RX_REG_OFFSET_DESC0); 211 desc0 = readl(desc + RX_REG_OFFSET_DESC0);
212 212
@@ -218,7 +218,7 @@ static int moxart_rx_poll(struct napi_struct *napi, int budget)
218 net_dbg_ratelimited("packet error\n"); 218 net_dbg_ratelimited("packet error\n");
219 priv->stats.rx_dropped++; 219 priv->stats.rx_dropped++;
220 priv->stats.rx_errors++; 220 priv->stats.rx_errors++;
221 continue; 221 goto rx_next;
222 } 222 }
223 223
224 len = desc0 & RX_DESC0_FRAME_LEN_MASK; 224 len = desc0 & RX_DESC0_FRAME_LEN_MASK;
@@ -226,13 +226,19 @@ static int moxart_rx_poll(struct napi_struct *napi, int budget)
226 if (len > RX_BUF_SIZE) 226 if (len > RX_BUF_SIZE)
227 len = RX_BUF_SIZE; 227 len = RX_BUF_SIZE;
228 228
229 skb = build_skb(priv->rx_buf[rx_head], priv->rx_buf_size); 229 dma_sync_single_for_cpu(&ndev->dev,
230 priv->rx_mapping[rx_head],
231 priv->rx_buf_size, DMA_FROM_DEVICE);
232 skb = netdev_alloc_skb_ip_align(ndev, len);
233
230 if (unlikely(!skb)) { 234 if (unlikely(!skb)) {
231 net_dbg_ratelimited("build_skb failed\n"); 235 net_dbg_ratelimited("netdev_alloc_skb_ip_align failed\n");
232 priv->stats.rx_dropped++; 236 priv->stats.rx_dropped++;
233 priv->stats.rx_errors++; 237 priv->stats.rx_errors++;
238 goto rx_next;
234 } 239 }
235 240
241 memcpy(skb->data, priv->rx_buf[rx_head], len);
236 skb_put(skb, len); 242 skb_put(skb, len);
237 skb->protocol = eth_type_trans(skb, ndev); 243 skb->protocol = eth_type_trans(skb, ndev);
238 napi_gro_receive(&priv->napi, skb); 244 napi_gro_receive(&priv->napi, skb);
@@ -244,18 +250,15 @@ static int moxart_rx_poll(struct napi_struct *napi, int budget)
244 if (desc0 & RX_DESC0_MULTICAST) 250 if (desc0 & RX_DESC0_MULTICAST)
245 priv->stats.multicast++; 251 priv->stats.multicast++;
246 252
253rx_next:
247 writel(RX_DESC0_DMA_OWN, desc + RX_REG_OFFSET_DESC0); 254 writel(RX_DESC0_DMA_OWN, desc + RX_REG_OFFSET_DESC0);
248 255
249 rx_head = RX_NEXT(rx_head); 256 rx_head = RX_NEXT(rx_head);
250 priv->rx_head = rx_head; 257 priv->rx_head = rx_head;
251
252 if (rx >= budget)
253 break;
254 } 258 }
255 259
256 if (rx < budget) { 260 if (rx < budget) {
257 napi_gro_flush(napi, false); 261 napi_complete(napi);
258 __napi_complete(napi);
259 } 262 }
260 263
261 priv->reg_imr |= RPKT_FINISH_M; 264 priv->reg_imr |= RPKT_FINISH_M;
@@ -346,10 +349,12 @@ static int moxart_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
346 len = ETH_ZLEN; 349 len = ETH_ZLEN;
347 } 350 }
348 351
349 txdes1 = readl(desc + TX_REG_OFFSET_DESC1); 352 dma_sync_single_for_device(&ndev->dev, priv->tx_mapping[tx_head],
350 txdes1 |= TX_DESC1_LTS | TX_DESC1_FTS; 353 priv->tx_buf_size, DMA_TO_DEVICE);
351 txdes1 &= ~(TX_DESC1_FIFO_COMPLETE | TX_DESC1_INTR_COMPLETE); 354
352 txdes1 |= (len & TX_DESC1_BUF_SIZE_MASK); 355 txdes1 = TX_DESC1_LTS | TX_DESC1_FTS | (len & TX_DESC1_BUF_SIZE_MASK);
356 if (tx_head == TX_DESC_NUM_MASK)
357 txdes1 |= TX_DESC1_END;
353 writel(txdes1, desc + TX_REG_OFFSET_DESC1); 358 writel(txdes1, desc + TX_REG_OFFSET_DESC1);
354 writel(TX_DESC0_DMA_OWN, desc + TX_REG_OFFSET_DESC0); 359 writel(TX_DESC0_DMA_OWN, desc + TX_REG_OFFSET_DESC0);
355 360
@@ -465,8 +470,7 @@ static int moxart_mac_probe(struct platform_device *pdev)
465 spin_lock_init(&priv->txlock); 470 spin_lock_init(&priv->txlock);
466 471
467 priv->tx_buf_size = TX_BUF_SIZE; 472 priv->tx_buf_size = TX_BUF_SIZE;
468 priv->rx_buf_size = RX_BUF_SIZE + 473 priv->rx_buf_size = RX_BUF_SIZE;
469 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
470 474
471 priv->tx_desc_base = dma_alloc_coherent(NULL, TX_REG_DESC_SIZE * 475 priv->tx_desc_base = dma_alloc_coherent(NULL, TX_REG_DESC_SIZE *
472 TX_DESC_NUM, &priv->tx_base, 476 TX_DESC_NUM, &priv->tx_base,
diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
index 8706c0dbd0c3..a44a03c45014 100644
--- a/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/drivers/net/ethernet/nxp/lpc_eth.c
@@ -1220,6 +1220,9 @@ static int lpc_eth_open(struct net_device *ndev)
1220 1220
1221 __lpc_eth_clock_enable(pldat, true); 1221 __lpc_eth_clock_enable(pldat, true);
1222 1222
1223 /* Suspended PHY makes LPC ethernet core block, so resume now */
1224 phy_resume(pldat->phy_dev);
1225
1223 /* Reset and initialize */ 1226 /* Reset and initialize */
1224 __lpc_eth_reset(pldat); 1227 __lpc_eth_reset(pldat);
1225 __lpc_eth_init(pldat); 1228 __lpc_eth_init(pldat);
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
index 188626e2a861..3e96f269150d 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
@@ -2556,6 +2556,7 @@ static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2556 2556
2557 if (skb_is_gso(skb)) { 2557 if (skb_is_gso(skb)) {
2558 int err; 2558 int err;
2559 __be16 l3_proto = vlan_get_protocol(skb);
2559 2560
2560 err = skb_cow_head(skb, 0); 2561 err = skb_cow_head(skb, 0);
2561 if (err < 0) 2562 if (err < 0)
@@ -2572,7 +2573,7 @@ static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2572 << OB_MAC_TRANSPORT_HDR_SHIFT); 2573 << OB_MAC_TRANSPORT_HDR_SHIFT);
2573 mac_iocb_ptr->mss = cpu_to_le16(skb_shinfo(skb)->gso_size); 2574 mac_iocb_ptr->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
2574 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_LSO; 2575 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_LSO;
2575 if (likely(skb->protocol == htons(ETH_P_IP))) { 2576 if (likely(l3_proto == htons(ETH_P_IP))) {
2576 struct iphdr *iph = ip_hdr(skb); 2577 struct iphdr *iph = ip_hdr(skb);
2577 iph->check = 0; 2578 iph->check = 0;
2578 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4; 2579 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
@@ -2580,7 +2581,7 @@ static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2580 iph->daddr, 0, 2581 iph->daddr, 0,
2581 IPPROTO_TCP, 2582 IPPROTO_TCP,
2582 0); 2583 0);
2583 } else if (skb->protocol == htons(ETH_P_IPV6)) { 2584 } else if (l3_proto == htons(ETH_P_IPV6)) {
2584 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP6; 2585 mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP6;
2585 tcp_hdr(skb)->check = 2586 tcp_hdr(skb)->check =
2586 ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, 2587 ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
diff --git a/drivers/net/ethernet/renesas/Kconfig b/drivers/net/ethernet/renesas/Kconfig
index 9e757c792d84..196e98a2d93b 100644
--- a/drivers/net/ethernet/renesas/Kconfig
+++ b/drivers/net/ethernet/renesas/Kconfig
@@ -5,6 +5,7 @@
5config SH_ETH 5config SH_ETH
6 tristate "Renesas SuperH Ethernet support" 6 tristate "Renesas SuperH Ethernet support"
7 depends on HAS_DMA 7 depends on HAS_DMA
8 depends on ARCH_SHMOBILE || SUPERH || COMPILE_TEST
8 select CRC32 9 select CRC32
9 select MII 10 select MII
10 select MDIO_BITBANG 11 select MDIO_BITBANG
diff --git a/drivers/net/ethernet/stmicro/stmmac/chain_mode.c b/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
index c553f6b5a913..cf28daba4346 100644
--- a/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
+++ b/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
@@ -28,7 +28,7 @@
28 28
29#include "stmmac.h" 29#include "stmmac.h"
30 30
31static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum) 31static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
32{ 32{
33 struct stmmac_priv *priv = (struct stmmac_priv *)p; 33 struct stmmac_priv *priv = (struct stmmac_priv *)p;
34 unsigned int txsize = priv->dma_tx_size; 34 unsigned int txsize = priv->dma_tx_size;
@@ -47,7 +47,9 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
47 47
48 desc->des2 = dma_map_single(priv->device, skb->data, 48 desc->des2 = dma_map_single(priv->device, skb->data,
49 bmax, DMA_TO_DEVICE); 49 bmax, DMA_TO_DEVICE);
50 priv->tx_skbuff_dma[entry] = desc->des2; 50 if (dma_mapping_error(priv->device, desc->des2))
51 return -1;
52 priv->tx_skbuff_dma[entry].buf = desc->des2;
51 priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum, STMMAC_CHAIN_MODE); 53 priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum, STMMAC_CHAIN_MODE);
52 54
53 while (len != 0) { 55 while (len != 0) {
@@ -59,7 +61,9 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
59 desc->des2 = dma_map_single(priv->device, 61 desc->des2 = dma_map_single(priv->device,
60 (skb->data + bmax * i), 62 (skb->data + bmax * i),
61 bmax, DMA_TO_DEVICE); 63 bmax, DMA_TO_DEVICE);
62 priv->tx_skbuff_dma[entry] = desc->des2; 64 if (dma_mapping_error(priv->device, desc->des2))
65 return -1;
66 priv->tx_skbuff_dma[entry].buf = desc->des2;
63 priv->hw->desc->prepare_tx_desc(desc, 0, bmax, csum, 67 priv->hw->desc->prepare_tx_desc(desc, 0, bmax, csum,
64 STMMAC_CHAIN_MODE); 68 STMMAC_CHAIN_MODE);
65 priv->hw->desc->set_tx_owner(desc); 69 priv->hw->desc->set_tx_owner(desc);
@@ -69,7 +73,9 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
69 desc->des2 = dma_map_single(priv->device, 73 desc->des2 = dma_map_single(priv->device,
70 (skb->data + bmax * i), len, 74 (skb->data + bmax * i), len,
71 DMA_TO_DEVICE); 75 DMA_TO_DEVICE);
72 priv->tx_skbuff_dma[entry] = desc->des2; 76 if (dma_mapping_error(priv->device, desc->des2))
77 return -1;
78 priv->tx_skbuff_dma[entry].buf = desc->des2;
73 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum, 79 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
74 STMMAC_CHAIN_MODE); 80 STMMAC_CHAIN_MODE);
75 priv->hw->desc->set_tx_owner(desc); 81 priv->hw->desc->set_tx_owner(desc);
diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
index de507c32036c..593e6c4144a7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/common.h
+++ b/drivers/net/ethernet/stmicro/stmmac/common.h
@@ -220,10 +220,10 @@ enum dma_irq_status {
220 handle_tx = 0x8, 220 handle_tx = 0x8,
221}; 221};
222 222
223#define CORE_IRQ_TX_PATH_IN_LPI_MODE (1 << 1) 223#define CORE_IRQ_TX_PATH_IN_LPI_MODE (1 << 0)
224#define CORE_IRQ_TX_PATH_EXIT_LPI_MODE (1 << 2) 224#define CORE_IRQ_TX_PATH_EXIT_LPI_MODE (1 << 1)
225#define CORE_IRQ_RX_PATH_IN_LPI_MODE (1 << 3) 225#define CORE_IRQ_RX_PATH_IN_LPI_MODE (1 << 2)
226#define CORE_IRQ_RX_PATH_EXIT_LPI_MODE (1 << 4) 226#define CORE_IRQ_RX_PATH_EXIT_LPI_MODE (1 << 3)
227 227
228#define CORE_PCS_ANE_COMPLETE (1 << 5) 228#define CORE_PCS_ANE_COMPLETE (1 << 5)
229#define CORE_PCS_LINK_STATUS (1 << 6) 229#define CORE_PCS_LINK_STATUS (1 << 6)
@@ -287,7 +287,7 @@ struct dma_features {
287 287
288/* Default LPI timers */ 288/* Default LPI timers */
289#define STMMAC_DEFAULT_LIT_LS 0x3E8 289#define STMMAC_DEFAULT_LIT_LS 0x3E8
290#define STMMAC_DEFAULT_TWT_LS 0x0 290#define STMMAC_DEFAULT_TWT_LS 0x1E
291 291
292#define STMMAC_CHAIN_MODE 0x1 292#define STMMAC_CHAIN_MODE 0x1
293#define STMMAC_RING_MODE 0x2 293#define STMMAC_RING_MODE 0x2
@@ -425,7 +425,7 @@ struct stmmac_mode_ops {
425 void (*init) (void *des, dma_addr_t phy_addr, unsigned int size, 425 void (*init) (void *des, dma_addr_t phy_addr, unsigned int size,
426 unsigned int extend_desc); 426 unsigned int extend_desc);
427 unsigned int (*is_jumbo_frm) (int len, int ehn_desc); 427 unsigned int (*is_jumbo_frm) (int len, int ehn_desc);
428 unsigned int (*jumbo_frm) (void *priv, struct sk_buff *skb, int csum); 428 int (*jumbo_frm)(void *priv, struct sk_buff *skb, int csum);
429 int (*set_16kib_bfsize)(int mtu); 429 int (*set_16kib_bfsize)(int mtu);
430 void (*init_desc3)(struct dma_desc *p); 430 void (*init_desc3)(struct dma_desc *p);
431 void (*refill_desc3) (void *priv, struct dma_desc *p); 431 void (*refill_desc3) (void *priv, struct dma_desc *p);
@@ -445,6 +445,7 @@ struct mac_device_info {
445 int multicast_filter_bins; 445 int multicast_filter_bins;
446 int unicast_filter_entries; 446 int unicast_filter_entries;
447 int mcast_bits_log2; 447 int mcast_bits_log2;
448 unsigned int rx_csum;
448}; 449};
449 450
450struct mac_device_info *dwmac1000_setup(void __iomem *ioaddr, int mcbins, 451struct mac_device_info *dwmac1000_setup(void __iomem *ioaddr, int mcbins,
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h b/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h
index 71b5419256c1..64d8f56a9c17 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h
@@ -153,7 +153,7 @@ enum inter_frame_gap {
153#define GMAC_CONTROL_RE 0x00000004 /* Receiver Enable */ 153#define GMAC_CONTROL_RE 0x00000004 /* Receiver Enable */
154 154
155#define GMAC_CORE_INIT (GMAC_CONTROL_JD | GMAC_CONTROL_PS | GMAC_CONTROL_ACS | \ 155#define GMAC_CORE_INIT (GMAC_CONTROL_JD | GMAC_CONTROL_PS | GMAC_CONTROL_ACS | \
156 GMAC_CONTROL_BE) 156 GMAC_CONTROL_BE | GMAC_CONTROL_DCRS)
157 157
158/* GMAC Frame Filter defines */ 158/* GMAC Frame Filter defines */
159#define GMAC_FRAME_FILTER_PR 0x00000001 /* Promiscuous Mode */ 159#define GMAC_FRAME_FILTER_PR 0x00000001 /* Promiscuous Mode */
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
index d8ef18786a1c..5efe60ea6526 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
@@ -58,7 +58,11 @@ static int dwmac1000_rx_ipc_enable(struct mac_device_info *hw)
58 void __iomem *ioaddr = hw->pcsr; 58 void __iomem *ioaddr = hw->pcsr;
59 u32 value = readl(ioaddr + GMAC_CONTROL); 59 u32 value = readl(ioaddr + GMAC_CONTROL);
60 60
61 value |= GMAC_CONTROL_IPC; 61 if (hw->rx_csum)
62 value |= GMAC_CONTROL_IPC;
63 else
64 value &= ~GMAC_CONTROL_IPC;
65
62 writel(value, ioaddr + GMAC_CONTROL); 66 writel(value, ioaddr + GMAC_CONTROL);
63 67
64 value = readl(ioaddr + GMAC_CONTROL); 68 value = readl(ioaddr + GMAC_CONTROL);
diff --git a/drivers/net/ethernet/stmicro/stmmac/mmc.h b/drivers/net/ethernet/stmicro/stmmac/mmc.h
index 8607488cbcfc..192c2491330b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/mmc.h
+++ b/drivers/net/ethernet/stmicro/stmmac/mmc.h
@@ -68,7 +68,7 @@ struct stmmac_counters {
68 unsigned int mmc_rx_octetcount_g; 68 unsigned int mmc_rx_octetcount_g;
69 unsigned int mmc_rx_broadcastframe_g; 69 unsigned int mmc_rx_broadcastframe_g;
70 unsigned int mmc_rx_multicastframe_g; 70 unsigned int mmc_rx_multicastframe_g;
71 unsigned int mmc_rx_crc_errror; 71 unsigned int mmc_rx_crc_error;
72 unsigned int mmc_rx_align_error; 72 unsigned int mmc_rx_align_error;
73 unsigned int mmc_rx_run_error; 73 unsigned int mmc_rx_run_error;
74 unsigned int mmc_rx_jabber_error; 74 unsigned int mmc_rx_jabber_error;
diff --git a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
index 50617c5a0bdb..08c483bd2ec7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
@@ -196,7 +196,7 @@ void dwmac_mmc_read(void __iomem *ioaddr, struct stmmac_counters *mmc)
196 mmc->mmc_rx_octetcount_g += readl(ioaddr + MMC_RX_OCTETCOUNT_G); 196 mmc->mmc_rx_octetcount_g += readl(ioaddr + MMC_RX_OCTETCOUNT_G);
197 mmc->mmc_rx_broadcastframe_g += readl(ioaddr + MMC_RX_BROADCASTFRAME_G); 197 mmc->mmc_rx_broadcastframe_g += readl(ioaddr + MMC_RX_BROADCASTFRAME_G);
198 mmc->mmc_rx_multicastframe_g += readl(ioaddr + MMC_RX_MULTICASTFRAME_G); 198 mmc->mmc_rx_multicastframe_g += readl(ioaddr + MMC_RX_MULTICASTFRAME_G);
199 mmc->mmc_rx_crc_errror += readl(ioaddr + MMC_RX_CRC_ERRROR); 199 mmc->mmc_rx_crc_error += readl(ioaddr + MMC_RX_CRC_ERRROR);
200 mmc->mmc_rx_align_error += readl(ioaddr + MMC_RX_ALIGN_ERROR); 200 mmc->mmc_rx_align_error += readl(ioaddr + MMC_RX_ALIGN_ERROR);
201 mmc->mmc_rx_run_error += readl(ioaddr + MMC_RX_RUN_ERROR); 201 mmc->mmc_rx_run_error += readl(ioaddr + MMC_RX_RUN_ERROR);
202 mmc->mmc_rx_jabber_error += readl(ioaddr + MMC_RX_JABBER_ERROR); 202 mmc->mmc_rx_jabber_error += readl(ioaddr + MMC_RX_JABBER_ERROR);
diff --git a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
index 650a4be6bce5..5dd50c6cda5b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
+++ b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
@@ -28,7 +28,7 @@
28 28
29#include "stmmac.h" 29#include "stmmac.h"
30 30
31static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum) 31static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
32{ 32{
33 struct stmmac_priv *priv = (struct stmmac_priv *)p; 33 struct stmmac_priv *priv = (struct stmmac_priv *)p;
34 unsigned int txsize = priv->dma_tx_size; 34 unsigned int txsize = priv->dma_tx_size;
@@ -53,7 +53,10 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
53 53
54 desc->des2 = dma_map_single(priv->device, skb->data, 54 desc->des2 = dma_map_single(priv->device, skb->data,
55 bmax, DMA_TO_DEVICE); 55 bmax, DMA_TO_DEVICE);
56 priv->tx_skbuff_dma[entry] = desc->des2; 56 if (dma_mapping_error(priv->device, desc->des2))
57 return -1;
58
59 priv->tx_skbuff_dma[entry].buf = desc->des2;
57 desc->des3 = desc->des2 + BUF_SIZE_4KiB; 60 desc->des3 = desc->des2 + BUF_SIZE_4KiB;
58 priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum, 61 priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum,
59 STMMAC_RING_MODE); 62 STMMAC_RING_MODE);
@@ -68,7 +71,9 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
68 71
69 desc->des2 = dma_map_single(priv->device, skb->data + bmax, 72 desc->des2 = dma_map_single(priv->device, skb->data + bmax,
70 len, DMA_TO_DEVICE); 73 len, DMA_TO_DEVICE);
71 priv->tx_skbuff_dma[entry] = desc->des2; 74 if (dma_mapping_error(priv->device, desc->des2))
75 return -1;
76 priv->tx_skbuff_dma[entry].buf = desc->des2;
72 desc->des3 = desc->des2 + BUF_SIZE_4KiB; 77 desc->des3 = desc->des2 + BUF_SIZE_4KiB;
73 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum, 78 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
74 STMMAC_RING_MODE); 79 STMMAC_RING_MODE);
@@ -77,7 +82,9 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
77 } else { 82 } else {
78 desc->des2 = dma_map_single(priv->device, skb->data, 83 desc->des2 = dma_map_single(priv->device, skb->data,
79 nopaged_len, DMA_TO_DEVICE); 84 nopaged_len, DMA_TO_DEVICE);
80 priv->tx_skbuff_dma[entry] = desc->des2; 85 if (dma_mapping_error(priv->device, desc->des2))
86 return -1;
87 priv->tx_skbuff_dma[entry].buf = desc->des2;
81 desc->des3 = desc->des2 + BUF_SIZE_4KiB; 88 desc->des3 = desc->des2 + BUF_SIZE_4KiB;
82 priv->hw->desc->prepare_tx_desc(desc, 1, nopaged_len, csum, 89 priv->hw->desc->prepare_tx_desc(desc, 1, nopaged_len, csum,
83 STMMAC_RING_MODE); 90 STMMAC_RING_MODE);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index ca01035634a7..58097c0e2ad5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -34,6 +34,11 @@
34#include <linux/ptp_clock_kernel.h> 34#include <linux/ptp_clock_kernel.h>
35#include <linux/reset.h> 35#include <linux/reset.h>
36 36
37struct stmmac_tx_info {
38 dma_addr_t buf;
39 bool map_as_page;
40};
41
37struct stmmac_priv { 42struct stmmac_priv {
38 /* Frequently used values are kept adjacent for cache effect */ 43 /* Frequently used values are kept adjacent for cache effect */
39 struct dma_extended_desc *dma_etx ____cacheline_aligned_in_smp; 44 struct dma_extended_desc *dma_etx ____cacheline_aligned_in_smp;
@@ -45,7 +50,7 @@ struct stmmac_priv {
45 u32 tx_count_frames; 50 u32 tx_count_frames;
46 u32 tx_coal_frames; 51 u32 tx_coal_frames;
47 u32 tx_coal_timer; 52 u32 tx_coal_timer;
48 dma_addr_t *tx_skbuff_dma; 53 struct stmmac_tx_info *tx_skbuff_dma;
49 dma_addr_t dma_tx_phy; 54 dma_addr_t dma_tx_phy;
50 int tx_coalesce; 55 int tx_coalesce;
51 int hwts_tx_en; 56 int hwts_tx_en;
@@ -105,6 +110,8 @@ struct stmmac_priv {
105 struct ptp_clock *ptp_clock; 110 struct ptp_clock *ptp_clock;
106 struct ptp_clock_info ptp_clock_ops; 111 struct ptp_clock_info ptp_clock_ops;
107 unsigned int default_addend; 112 unsigned int default_addend;
113 struct clk *clk_ptp_ref;
114 unsigned int clk_ptp_rate;
108 u32 adv_ts; 115 u32 adv_ts;
109 int use_riwt; 116 int use_riwt;
110 int irq_wake; 117 int irq_wake;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index 9af50bae4dde..cf4f38db1c0a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -175,7 +175,7 @@ static const struct stmmac_stats stmmac_mmc[] = {
175 STMMAC_MMC_STAT(mmc_rx_octetcount_g), 175 STMMAC_MMC_STAT(mmc_rx_octetcount_g),
176 STMMAC_MMC_STAT(mmc_rx_broadcastframe_g), 176 STMMAC_MMC_STAT(mmc_rx_broadcastframe_g),
177 STMMAC_MMC_STAT(mmc_rx_multicastframe_g), 177 STMMAC_MMC_STAT(mmc_rx_multicastframe_g),
178 STMMAC_MMC_STAT(mmc_rx_crc_errror), 178 STMMAC_MMC_STAT(mmc_rx_crc_error),
179 STMMAC_MMC_STAT(mmc_rx_align_error), 179 STMMAC_MMC_STAT(mmc_rx_align_error),
180 STMMAC_MMC_STAT(mmc_rx_run_error), 180 STMMAC_MMC_STAT(mmc_rx_run_error),
181 STMMAC_MMC_STAT(mmc_rx_jabber_error), 181 STMMAC_MMC_STAT(mmc_rx_jabber_error),
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 08addd653728..6e6ee226de04 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -275,6 +275,7 @@ static void stmmac_eee_ctrl_timer(unsigned long arg)
275 */ 275 */
276bool stmmac_eee_init(struct stmmac_priv *priv) 276bool stmmac_eee_init(struct stmmac_priv *priv)
277{ 277{
278 char *phy_bus_name = priv->plat->phy_bus_name;
278 bool ret = false; 279 bool ret = false;
279 280
280 /* Using PCS we cannot dial with the phy registers at this stage 281 /* Using PCS we cannot dial with the phy registers at this stage
@@ -284,6 +285,10 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
284 (priv->pcs == STMMAC_PCS_RTBI)) 285 (priv->pcs == STMMAC_PCS_RTBI))
285 goto out; 286 goto out;
286 287
288 /* Never init EEE in case of a switch is attached */
289 if (phy_bus_name && (!strcmp(phy_bus_name, "fixed")))
290 goto out;
291
287 /* MAC core supports the EEE feature. */ 292 /* MAC core supports the EEE feature. */
288 if (priv->dma_cap.eee) { 293 if (priv->dma_cap.eee) {
289 int tx_lpi_timer = priv->tx_lpi_timer; 294 int tx_lpi_timer = priv->tx_lpi_timer;
@@ -316,10 +321,9 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
316 priv->hw->mac->set_eee_timer(priv->hw, 321 priv->hw->mac->set_eee_timer(priv->hw,
317 STMMAC_DEFAULT_LIT_LS, 322 STMMAC_DEFAULT_LIT_LS,
318 tx_lpi_timer); 323 tx_lpi_timer);
319 } else 324 }
320 /* Set HW EEE according to the speed */ 325 /* Set HW EEE according to the speed */
321 priv->hw->mac->set_eee_pls(priv->hw, 326 priv->hw->mac->set_eee_pls(priv->hw, priv->phydev->link);
322 priv->phydev->link);
323 327
324 pr_debug("stmmac: Energy-Efficient Ethernet initialized\n"); 328 pr_debug("stmmac: Energy-Efficient Ethernet initialized\n");
325 329
@@ -603,16 +607,16 @@ static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
603 /* calculate default added value: 607 /* calculate default added value:
604 * formula is : 608 * formula is :
605 * addend = (2^32)/freq_div_ratio; 609 * addend = (2^32)/freq_div_ratio;
606 * where, freq_div_ratio = STMMAC_SYSCLOCK/50MHz 610 * where, freq_div_ratio = clk_ptp_ref_i/50MHz
607 * hence, addend = ((2^32) * 50MHz)/STMMAC_SYSCLOCK; 611 * hence, addend = ((2^32) * 50MHz)/clk_ptp_ref_i;
608 * NOTE: STMMAC_SYSCLOCK should be >= 50MHz to 612 * NOTE: clk_ptp_ref_i should be >= 50MHz to
609 * achive 20ns accuracy. 613 * achive 20ns accuracy.
610 * 614 *
611 * 2^x * y == (y << x), hence 615 * 2^x * y == (y << x), hence
612 * 2^32 * 50000000 ==> (50000000 << 32) 616 * 2^32 * 50000000 ==> (50000000 << 32)
613 */ 617 */
614 temp = (u64) (50000000ULL << 32); 618 temp = (u64) (50000000ULL << 32);
615 priv->default_addend = div_u64(temp, STMMAC_SYSCLOCK); 619 priv->default_addend = div_u64(temp, priv->clk_ptp_rate);
616 priv->hw->ptp->config_addend(priv->ioaddr, 620 priv->hw->ptp->config_addend(priv->ioaddr,
617 priv->default_addend); 621 priv->default_addend);
618 622
@@ -638,6 +642,16 @@ static int stmmac_init_ptp(struct stmmac_priv *priv)
638 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp)) 642 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
639 return -EOPNOTSUPP; 643 return -EOPNOTSUPP;
640 644
645 /* Fall-back to main clock in case of no PTP ref is passed */
646 priv->clk_ptp_ref = devm_clk_get(priv->device, "clk_ptp_ref");
647 if (IS_ERR(priv->clk_ptp_ref)) {
648 priv->clk_ptp_rate = clk_get_rate(priv->stmmac_clk);
649 priv->clk_ptp_ref = NULL;
650 } else {
651 clk_prepare_enable(priv->clk_ptp_ref);
652 priv->clk_ptp_rate = clk_get_rate(priv->clk_ptp_ref);
653 }
654
641 priv->adv_ts = 0; 655 priv->adv_ts = 0;
642 if (priv->dma_cap.atime_stamp && priv->extend_desc) 656 if (priv->dma_cap.atime_stamp && priv->extend_desc)
643 priv->adv_ts = 1; 657 priv->adv_ts = 1;
@@ -657,6 +671,8 @@ static int stmmac_init_ptp(struct stmmac_priv *priv)
657 671
658static void stmmac_release_ptp(struct stmmac_priv *priv) 672static void stmmac_release_ptp(struct stmmac_priv *priv)
659{ 673{
674 if (priv->clk_ptp_ref)
675 clk_disable_unprepare(priv->clk_ptp_ref);
660 stmmac_ptp_unregister(priv); 676 stmmac_ptp_unregister(priv);
661} 677}
662 678
@@ -1061,7 +1077,8 @@ static int init_dma_desc_rings(struct net_device *dev)
1061 else 1077 else
1062 p = priv->dma_tx + i; 1078 p = priv->dma_tx + i;
1063 p->des2 = 0; 1079 p->des2 = 0;
1064 priv->tx_skbuff_dma[i] = 0; 1080 priv->tx_skbuff_dma[i].buf = 0;
1081 priv->tx_skbuff_dma[i].map_as_page = false;
1065 priv->tx_skbuff[i] = NULL; 1082 priv->tx_skbuff[i] = NULL;
1066 } 1083 }
1067 1084
@@ -1100,17 +1117,24 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv)
1100 else 1117 else
1101 p = priv->dma_tx + i; 1118 p = priv->dma_tx + i;
1102 1119
1103 if (priv->tx_skbuff_dma[i]) { 1120 if (priv->tx_skbuff_dma[i].buf) {
1104 dma_unmap_single(priv->device, 1121 if (priv->tx_skbuff_dma[i].map_as_page)
1105 priv->tx_skbuff_dma[i], 1122 dma_unmap_page(priv->device,
1106 priv->hw->desc->get_tx_len(p), 1123 priv->tx_skbuff_dma[i].buf,
1107 DMA_TO_DEVICE); 1124 priv->hw->desc->get_tx_len(p),
1108 priv->tx_skbuff_dma[i] = 0; 1125 DMA_TO_DEVICE);
1126 else
1127 dma_unmap_single(priv->device,
1128 priv->tx_skbuff_dma[i].buf,
1129 priv->hw->desc->get_tx_len(p),
1130 DMA_TO_DEVICE);
1109 } 1131 }
1110 1132
1111 if (priv->tx_skbuff[i] != NULL) { 1133 if (priv->tx_skbuff[i] != NULL) {
1112 dev_kfree_skb_any(priv->tx_skbuff[i]); 1134 dev_kfree_skb_any(priv->tx_skbuff[i]);
1113 priv->tx_skbuff[i] = NULL; 1135 priv->tx_skbuff[i] = NULL;
1136 priv->tx_skbuff_dma[i].buf = 0;
1137 priv->tx_skbuff_dma[i].map_as_page = false;
1114 } 1138 }
1115 } 1139 }
1116} 1140}
@@ -1131,7 +1155,8 @@ static int alloc_dma_desc_resources(struct stmmac_priv *priv)
1131 if (!priv->rx_skbuff) 1155 if (!priv->rx_skbuff)
1132 goto err_rx_skbuff; 1156 goto err_rx_skbuff;
1133 1157
1134 priv->tx_skbuff_dma = kmalloc_array(txsize, sizeof(dma_addr_t), 1158 priv->tx_skbuff_dma = kmalloc_array(txsize,
1159 sizeof(*priv->tx_skbuff_dma),
1135 GFP_KERNEL); 1160 GFP_KERNEL);
1136 if (!priv->tx_skbuff_dma) 1161 if (!priv->tx_skbuff_dma)
1137 goto err_tx_skbuff_dma; 1162 goto err_tx_skbuff_dma;
@@ -1293,12 +1318,19 @@ static void stmmac_tx_clean(struct stmmac_priv *priv)
1293 pr_debug("%s: curr %d, dirty %d\n", __func__, 1318 pr_debug("%s: curr %d, dirty %d\n", __func__,
1294 priv->cur_tx, priv->dirty_tx); 1319 priv->cur_tx, priv->dirty_tx);
1295 1320
1296 if (likely(priv->tx_skbuff_dma[entry])) { 1321 if (likely(priv->tx_skbuff_dma[entry].buf)) {
1297 dma_unmap_single(priv->device, 1322 if (priv->tx_skbuff_dma[entry].map_as_page)
1298 priv->tx_skbuff_dma[entry], 1323 dma_unmap_page(priv->device,
1299 priv->hw->desc->get_tx_len(p), 1324 priv->tx_skbuff_dma[entry].buf,
1300 DMA_TO_DEVICE); 1325 priv->hw->desc->get_tx_len(p),
1301 priv->tx_skbuff_dma[entry] = 0; 1326 DMA_TO_DEVICE);
1327 else
1328 dma_unmap_single(priv->device,
1329 priv->tx_skbuff_dma[entry].buf,
1330 priv->hw->desc->get_tx_len(p),
1331 DMA_TO_DEVICE);
1332 priv->tx_skbuff_dma[entry].buf = 0;
1333 priv->tx_skbuff_dma[entry].map_as_page = false;
1302 } 1334 }
1303 priv->hw->mode->clean_desc3(priv, p); 1335 priv->hw->mode->clean_desc3(priv, p);
1304 1336
@@ -1637,6 +1669,13 @@ static int stmmac_hw_setup(struct net_device *dev)
1637 /* Initialize the MAC Core */ 1669 /* Initialize the MAC Core */
1638 priv->hw->mac->core_init(priv->hw, dev->mtu); 1670 priv->hw->mac->core_init(priv->hw, dev->mtu);
1639 1671
1672 ret = priv->hw->mac->rx_ipc(priv->hw);
1673 if (!ret) {
1674 pr_warn(" RX IPC Checksum Offload disabled\n");
1675 priv->plat->rx_coe = STMMAC_RX_COE_NONE;
1676 priv->hw->rx_csum = 0;
1677 }
1678
1640 /* Enable the MAC Rx/Tx */ 1679 /* Enable the MAC Rx/Tx */
1641 stmmac_set_mac(priv->ioaddr, true); 1680 stmmac_set_mac(priv->ioaddr, true);
1642 1681
@@ -1887,12 +1926,16 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
1887 if (likely(!is_jumbo)) { 1926 if (likely(!is_jumbo)) {
1888 desc->des2 = dma_map_single(priv->device, skb->data, 1927 desc->des2 = dma_map_single(priv->device, skb->data,
1889 nopaged_len, DMA_TO_DEVICE); 1928 nopaged_len, DMA_TO_DEVICE);
1890 priv->tx_skbuff_dma[entry] = desc->des2; 1929 if (dma_mapping_error(priv->device, desc->des2))
1930 goto dma_map_err;
1931 priv->tx_skbuff_dma[entry].buf = desc->des2;
1891 priv->hw->desc->prepare_tx_desc(desc, 1, nopaged_len, 1932 priv->hw->desc->prepare_tx_desc(desc, 1, nopaged_len,
1892 csum_insertion, priv->mode); 1933 csum_insertion, priv->mode);
1893 } else { 1934 } else {
1894 desc = first; 1935 desc = first;
1895 entry = priv->hw->mode->jumbo_frm(priv, skb, csum_insertion); 1936 entry = priv->hw->mode->jumbo_frm(priv, skb, csum_insertion);
1937 if (unlikely(entry < 0))
1938 goto dma_map_err;
1896 } 1939 }
1897 1940
1898 for (i = 0; i < nfrags; i++) { 1941 for (i = 0; i < nfrags; i++) {
@@ -1908,7 +1951,11 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
1908 1951
1909 desc->des2 = skb_frag_dma_map(priv->device, frag, 0, len, 1952 desc->des2 = skb_frag_dma_map(priv->device, frag, 0, len,
1910 DMA_TO_DEVICE); 1953 DMA_TO_DEVICE);
1911 priv->tx_skbuff_dma[entry] = desc->des2; 1954 if (dma_mapping_error(priv->device, desc->des2))
1955 goto dma_map_err; /* should reuse desc w/o issues */
1956
1957 priv->tx_skbuff_dma[entry].buf = desc->des2;
1958 priv->tx_skbuff_dma[entry].map_as_page = true;
1912 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum_insertion, 1959 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum_insertion,
1913 priv->mode); 1960 priv->mode);
1914 wmb(); 1961 wmb();
@@ -1975,7 +2022,12 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
1975 priv->hw->dma->enable_dma_transmission(priv->ioaddr); 2022 priv->hw->dma->enable_dma_transmission(priv->ioaddr);
1976 2023
1977 spin_unlock(&priv->tx_lock); 2024 spin_unlock(&priv->tx_lock);
2025 return NETDEV_TX_OK;
1978 2026
2027dma_map_err:
2028 dev_err(priv->device, "Tx dma map failed\n");
2029 dev_kfree_skb(skb);
2030 priv->dev->stats.tx_dropped++;
1979 return NETDEV_TX_OK; 2031 return NETDEV_TX_OK;
1980} 2032}
1981 2033
@@ -2028,7 +2080,12 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv)
2028 priv->rx_skbuff_dma[entry] = 2080 priv->rx_skbuff_dma[entry] =
2029 dma_map_single(priv->device, skb->data, bfsize, 2081 dma_map_single(priv->device, skb->data, bfsize,
2030 DMA_FROM_DEVICE); 2082 DMA_FROM_DEVICE);
2031 2083 if (dma_mapping_error(priv->device,
2084 priv->rx_skbuff_dma[entry])) {
2085 dev_err(priv->device, "Rx dma map failed\n");
2086 dev_kfree_skb(skb);
2087 break;
2088 }
2032 p->des2 = priv->rx_skbuff_dma[entry]; 2089 p->des2 = priv->rx_skbuff_dma[entry];
2033 2090
2034 priv->hw->mode->refill_desc3(priv, p); 2091 priv->hw->mode->refill_desc3(priv, p);
@@ -2055,7 +2112,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
2055 unsigned int entry = priv->cur_rx % rxsize; 2112 unsigned int entry = priv->cur_rx % rxsize;
2056 unsigned int next_entry; 2113 unsigned int next_entry;
2057 unsigned int count = 0; 2114 unsigned int count = 0;
2058 int coe = priv->plat->rx_coe; 2115 int coe = priv->hw->rx_csum;
2059 2116
2060 if (netif_msg_rx_status(priv)) { 2117 if (netif_msg_rx_status(priv)) {
2061 pr_debug("%s: descriptor ring:\n", __func__); 2118 pr_debug("%s: descriptor ring:\n", __func__);
@@ -2276,8 +2333,7 @@ static netdev_features_t stmmac_fix_features(struct net_device *dev,
2276 2333
2277 if (priv->plat->rx_coe == STMMAC_RX_COE_NONE) 2334 if (priv->plat->rx_coe == STMMAC_RX_COE_NONE)
2278 features &= ~NETIF_F_RXCSUM; 2335 features &= ~NETIF_F_RXCSUM;
2279 else if (priv->plat->rx_coe == STMMAC_RX_COE_TYPE1) 2336
2280 features &= ~NETIF_F_IPV6_CSUM;
2281 if (!priv->plat->tx_coe) 2337 if (!priv->plat->tx_coe)
2282 features &= ~NETIF_F_ALL_CSUM; 2338 features &= ~NETIF_F_ALL_CSUM;
2283 2339
@@ -2292,6 +2348,24 @@ static netdev_features_t stmmac_fix_features(struct net_device *dev,
2292 return features; 2348 return features;
2293} 2349}
2294 2350
2351static int stmmac_set_features(struct net_device *netdev,
2352 netdev_features_t features)
2353{
2354 struct stmmac_priv *priv = netdev_priv(netdev);
2355
2356 /* Keep the COE Type in case of csum is supporting */
2357 if (features & NETIF_F_RXCSUM)
2358 priv->hw->rx_csum = priv->plat->rx_coe;
2359 else
2360 priv->hw->rx_csum = 0;
2361 /* No check needed because rx_coe has been set before and it will be
2362 * fixed in case of issue.
2363 */
2364 priv->hw->mac->rx_ipc(priv->hw);
2365
2366 return 0;
2367}
2368
2295/** 2369/**
2296 * stmmac_interrupt - main ISR 2370 * stmmac_interrupt - main ISR
2297 * @irq: interrupt number. 2371 * @irq: interrupt number.
@@ -2572,6 +2646,7 @@ static const struct net_device_ops stmmac_netdev_ops = {
2572 .ndo_stop = stmmac_release, 2646 .ndo_stop = stmmac_release,
2573 .ndo_change_mtu = stmmac_change_mtu, 2647 .ndo_change_mtu = stmmac_change_mtu,
2574 .ndo_fix_features = stmmac_fix_features, 2648 .ndo_fix_features = stmmac_fix_features,
2649 .ndo_set_features = stmmac_set_features,
2575 .ndo_set_rx_mode = stmmac_set_rx_mode, 2650 .ndo_set_rx_mode = stmmac_set_rx_mode,
2576 .ndo_tx_timeout = stmmac_tx_timeout, 2651 .ndo_tx_timeout = stmmac_tx_timeout,
2577 .ndo_do_ioctl = stmmac_ioctl, 2652 .ndo_do_ioctl = stmmac_ioctl,
@@ -2592,7 +2667,6 @@ static const struct net_device_ops stmmac_netdev_ops = {
2592 */ 2667 */
2593static int stmmac_hw_init(struct stmmac_priv *priv) 2668static int stmmac_hw_init(struct stmmac_priv *priv)
2594{ 2669{
2595 int ret;
2596 struct mac_device_info *mac; 2670 struct mac_device_info *mac;
2597 2671
2598 /* Identify the MAC HW device */ 2672 /* Identify the MAC HW device */
@@ -2649,15 +2723,11 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
2649 /* To use alternate (extended) or normal descriptor structures */ 2723 /* To use alternate (extended) or normal descriptor structures */
2650 stmmac_selec_desc_mode(priv); 2724 stmmac_selec_desc_mode(priv);
2651 2725
2652 ret = priv->hw->mac->rx_ipc(priv->hw); 2726 if (priv->plat->rx_coe) {
2653 if (!ret) { 2727 priv->hw->rx_csum = priv->plat->rx_coe;
2654 pr_warn(" RX IPC Checksum Offload not configured.\n");
2655 priv->plat->rx_coe = STMMAC_RX_COE_NONE;
2656 }
2657
2658 if (priv->plat->rx_coe)
2659 pr_info(" RX Checksum Offload Engine supported (type %d)\n", 2728 pr_info(" RX Checksum Offload Engine supported (type %d)\n",
2660 priv->plat->rx_coe); 2729 priv->plat->rx_coe);
2730 }
2661 if (priv->plat->tx_coe) 2731 if (priv->plat->tx_coe)
2662 pr_info(" TX Checksum insertion supported\n"); 2732 pr_info(" TX Checksum insertion supported\n");
2663 2733
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
index b7ad3565566c..c5ee79d8a8c5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
@@ -206,6 +206,7 @@ void stmmac_ptp_unregister(struct stmmac_priv *priv)
206{ 206{
207 if (priv->ptp_clock) { 207 if (priv->ptp_clock) {
208 ptp_clock_unregister(priv->ptp_clock); 208 ptp_clock_unregister(priv->ptp_clock);
209 priv->ptp_clock = NULL;
209 pr_debug("Removed PTP HW clock successfully on %s\n", 210 pr_debug("Removed PTP HW clock successfully on %s\n",
210 priv->dev->name); 211 priv->dev->name);
211 } 212 }
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
index 3dbc047622fa..4535df37c227 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
@@ -25,8 +25,6 @@
25#ifndef __STMMAC_PTP_H__ 25#ifndef __STMMAC_PTP_H__
26#define __STMMAC_PTP_H__ 26#define __STMMAC_PTP_H__
27 27
28#define STMMAC_SYSCLOCK 62500000
29
30/* IEEE 1588 PTP register offsets */ 28/* IEEE 1588 PTP register offsets */
31#define PTP_TCR 0x0700 /* Timestamp Control Reg */ 29#define PTP_TCR 0x0700 /* Timestamp Control Reg */
32#define PTP_SSIR 0x0704 /* Sub-Second Increment Reg */ 30#define PTP_SSIR 0x0704 /* Sub-Second Increment Reg */
diff --git a/drivers/net/fddi/skfp/h/skfbi.h b/drivers/net/fddi/skfp/h/skfbi.h
index c1ba26c06d73..3de2f0d15fe2 100644
--- a/drivers/net/fddi/skfp/h/skfbi.h
+++ b/drivers/net/fddi/skfp/h/skfbi.h
@@ -147,11 +147,6 @@
147#define PCI_MEM64BIT (2<<1) /* Base addr anywhere in 64 Bit range */ 147#define PCI_MEM64BIT (2<<1) /* Base addr anywhere in 64 Bit range */
148#define PCI_MEMSPACE 0x00000001L /* Bit 0: Memory Space Indic. */ 148#define PCI_MEMSPACE 0x00000001L /* Bit 0: Memory Space Indic. */
149 149
150/* PCI_BASE_2ND 32 bit 2nd Base address */
151#define PCI_IOBASE 0xffffff00L /* Bit 31..8: I/O Base address */
152#define PCI_IOSIZE 0x000000fcL /* Bit 7..2: I/O Size Requirements */
153#define PCI_IOSPACE 0x00000001L /* Bit 0: I/O Space Indicator */
154
155/* PCI_SUB_VID 16 bit Subsystem Vendor ID */ 150/* PCI_SUB_VID 16 bit Subsystem Vendor ID */
156/* PCI_SUB_ID 16 bit Subsystem ID */ 151/* PCI_SUB_ID 16 bit Subsystem ID */
157 152
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index c94e2a27446a..a854d38c231d 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -1036,31 +1036,31 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
1036 /* First check if the EEE ability is supported */ 1036 /* First check if the EEE ability is supported */
1037 eee_cap = phy_read_mmd_indirect(phydev, MDIO_PCS_EEE_ABLE, 1037 eee_cap = phy_read_mmd_indirect(phydev, MDIO_PCS_EEE_ABLE,
1038 MDIO_MMD_PCS, phydev->addr); 1038 MDIO_MMD_PCS, phydev->addr);
1039 if (eee_cap < 0) 1039 if (eee_cap <= 0)
1040 return eee_cap; 1040 goto eee_exit_err;
1041 1041
1042 cap = mmd_eee_cap_to_ethtool_sup_t(eee_cap); 1042 cap = mmd_eee_cap_to_ethtool_sup_t(eee_cap);
1043 if (!cap) 1043 if (!cap)
1044 return -EPROTONOSUPPORT; 1044 goto eee_exit_err;
1045 1045
1046 /* Check which link settings negotiated and verify it in 1046 /* Check which link settings negotiated and verify it in
1047 * the EEE advertising registers. 1047 * the EEE advertising registers.
1048 */ 1048 */
1049 eee_lp = phy_read_mmd_indirect(phydev, MDIO_AN_EEE_LPABLE, 1049 eee_lp = phy_read_mmd_indirect(phydev, MDIO_AN_EEE_LPABLE,
1050 MDIO_MMD_AN, phydev->addr); 1050 MDIO_MMD_AN, phydev->addr);
1051 if (eee_lp < 0) 1051 if (eee_lp <= 0)
1052 return eee_lp; 1052 goto eee_exit_err;
1053 1053
1054 eee_adv = phy_read_mmd_indirect(phydev, MDIO_AN_EEE_ADV, 1054 eee_adv = phy_read_mmd_indirect(phydev, MDIO_AN_EEE_ADV,
1055 MDIO_MMD_AN, phydev->addr); 1055 MDIO_MMD_AN, phydev->addr);
1056 if (eee_adv < 0) 1056 if (eee_adv <= 0)
1057 return eee_adv; 1057 goto eee_exit_err;
1058 1058
1059 adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv); 1059 adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv);
1060 lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp); 1060 lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp);
1061 idx = phy_find_setting(phydev->speed, phydev->duplex); 1061 idx = phy_find_setting(phydev->speed, phydev->duplex);
1062 if (!(lp & adv & settings[idx].setting)) 1062 if (!(lp & adv & settings[idx].setting))
1063 return -EPROTONOSUPPORT; 1063 goto eee_exit_err;
1064 1064
1065 if (clk_stop_enable) { 1065 if (clk_stop_enable) {
1066 /* Configure the PHY to stop receiving xMII 1066 /* Configure the PHY to stop receiving xMII
@@ -1080,7 +1080,7 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
1080 1080
1081 return 0; /* EEE supported */ 1081 return 0; /* EEE supported */
1082 } 1082 }
1083 1083eee_exit_err:
1084 return -EPROTONOSUPPORT; 1084 return -EPROTONOSUPPORT;
1085} 1085}
1086EXPORT_SYMBOL(phy_init_eee); 1086EXPORT_SYMBOL(phy_init_eee);
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index d6e90c72c257..6dfcbf523936 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2056,7 +2056,6 @@ vmxnet3_set_mc(struct net_device *netdev)
2056 if (!netdev_mc_empty(netdev)) { 2056 if (!netdev_mc_empty(netdev)) {
2057 new_table = vmxnet3_copy_mc(netdev); 2057 new_table = vmxnet3_copy_mc(netdev);
2058 if (new_table) { 2058 if (new_table) {
2059 new_mode |= VMXNET3_RXM_MCAST;
2060 rxConf->mfTableLen = cpu_to_le16( 2059 rxConf->mfTableLen = cpu_to_le16(
2061 netdev_mc_count(netdev) * ETH_ALEN); 2060 netdev_mc_count(netdev) * ETH_ALEN);
2062 new_table_pa = dma_map_single( 2061 new_table_pa = dma_map_single(
@@ -2064,15 +2063,18 @@ vmxnet3_set_mc(struct net_device *netdev)
2064 new_table, 2063 new_table,
2065 rxConf->mfTableLen, 2064 rxConf->mfTableLen,
2066 PCI_DMA_TODEVICE); 2065 PCI_DMA_TODEVICE);
2066 }
2067
2068 if (new_table_pa) {
2069 new_mode |= VMXNET3_RXM_MCAST;
2067 rxConf->mfTablePA = cpu_to_le64(new_table_pa); 2070 rxConf->mfTablePA = cpu_to_le64(new_table_pa);
2068 } else { 2071 } else {
2069 netdev_info(netdev, "failed to copy mcast list" 2072 netdev_info(netdev,
2070 ", setting ALL_MULTI\n"); 2073 "failed to copy mcast list, setting ALL_MULTI\n");
2071 new_mode |= VMXNET3_RXM_ALL_MULTI; 2074 new_mode |= VMXNET3_RXM_ALL_MULTI;
2072 } 2075 }
2073 } 2076 }
2074 2077
2075
2076 if (!(new_mode & VMXNET3_RXM_MCAST)) { 2078 if (!(new_mode & VMXNET3_RXM_MCAST)) {
2077 rxConf->mfTableLen = 0; 2079 rxConf->mfTableLen = 0;
2078 rxConf->mfTablePA = 0; 2080 rxConf->mfTablePA = 0;
@@ -2091,11 +2093,10 @@ vmxnet3_set_mc(struct net_device *netdev)
2091 VMXNET3_CMD_UPDATE_MAC_FILTERS); 2093 VMXNET3_CMD_UPDATE_MAC_FILTERS);
2092 spin_unlock_irqrestore(&adapter->cmd_lock, flags); 2094 spin_unlock_irqrestore(&adapter->cmd_lock, flags);
2093 2095
2094 if (new_table) { 2096 if (new_table_pa)
2095 dma_unmap_single(&adapter->pdev->dev, new_table_pa, 2097 dma_unmap_single(&adapter->pdev->dev, new_table_pa,
2096 rxConf->mfTableLen, PCI_DMA_TODEVICE); 2098 rxConf->mfTableLen, PCI_DMA_TODEVICE);
2097 kfree(new_table); 2099 kfree(new_table);
2098 }
2099} 2100}
2100 2101
2101void 2102void
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 29ee77f2c97f..3759479f959a 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -69,10 +69,10 @@
69/* 69/*
70 * Version numbers 70 * Version numbers
71 */ 71 */
72#define VMXNET3_DRIVER_VERSION_STRING "1.2.0.0-k" 72#define VMXNET3_DRIVER_VERSION_STRING "1.2.1.0-k"
73 73
74/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ 74/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
75#define VMXNET3_DRIVER_VERSION_NUM 0x01020000 75#define VMXNET3_DRIVER_VERSION_NUM 0x01020100
76 76
77#if defined(CONFIG_PCI_MSI) 77#if defined(CONFIG_PCI_MSI)
78 /* RSS only makes sense if MSI-X is supported. */ 78 /* RSS only makes sense if MSI-X is supported. */
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 1fb7b37d1402..beb377b2d4b7 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -1327,7 +1327,7 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb)
1327 } else if (vxlan->flags & VXLAN_F_L3MISS) { 1327 } else if (vxlan->flags & VXLAN_F_L3MISS) {
1328 union vxlan_addr ipa = { 1328 union vxlan_addr ipa = {
1329 .sin.sin_addr.s_addr = tip, 1329 .sin.sin_addr.s_addr = tip,
1330 .sa.sa_family = AF_INET, 1330 .sin.sin_family = AF_INET,
1331 }; 1331 };
1332 1332
1333 vxlan_ip_miss(dev, &ipa); 1333 vxlan_ip_miss(dev, &ipa);
@@ -1488,7 +1488,7 @@ static int neigh_reduce(struct net_device *dev, struct sk_buff *skb)
1488 } else if (vxlan->flags & VXLAN_F_L3MISS) { 1488 } else if (vxlan->flags & VXLAN_F_L3MISS) {
1489 union vxlan_addr ipa = { 1489 union vxlan_addr ipa = {
1490 .sin6.sin6_addr = msg->target, 1490 .sin6.sin6_addr = msg->target,
1491 .sa.sa_family = AF_INET6, 1491 .sin6.sin6_family = AF_INET6,
1492 }; 1492 };
1493 1493
1494 vxlan_ip_miss(dev, &ipa); 1494 vxlan_ip_miss(dev, &ipa);
@@ -1521,7 +1521,7 @@ static bool route_shortcircuit(struct net_device *dev, struct sk_buff *skb)
1521 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) { 1521 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) {
1522 union vxlan_addr ipa = { 1522 union vxlan_addr ipa = {
1523 .sin.sin_addr.s_addr = pip->daddr, 1523 .sin.sin_addr.s_addr = pip->daddr,
1524 .sa.sa_family = AF_INET, 1524 .sin.sin_family = AF_INET,
1525 }; 1525 };
1526 1526
1527 vxlan_ip_miss(dev, &ipa); 1527 vxlan_ip_miss(dev, &ipa);
@@ -1542,7 +1542,7 @@ static bool route_shortcircuit(struct net_device *dev, struct sk_buff *skb)
1542 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) { 1542 if (!n && (vxlan->flags & VXLAN_F_L3MISS)) {
1543 union vxlan_addr ipa = { 1543 union vxlan_addr ipa = {
1544 .sin6.sin6_addr = pip6->daddr, 1544 .sin6.sin6_addr = pip6->daddr,
1545 .sa.sa_family = AF_INET6, 1545 .sin6.sin6_family = AF_INET6,
1546 }; 1546 };
1547 1547
1548 vxlan_ip_miss(dev, &ipa); 1548 vxlan_ip_miss(dev, &ipa);
diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c
index 334c2ece855a..da92bfa76b7c 100644
--- a/drivers/net/wireless/at76c50x-usb.c
+++ b/drivers/net/wireless/at76c50x-usb.c
@@ -2423,8 +2423,6 @@ static void at76_delete_device(struct at76_priv *priv)
2423 2423
2424 kfree_skb(priv->rx_skb); 2424 kfree_skb(priv->rx_skb);
2425 2425
2426 usb_put_dev(priv->udev);
2427
2428 at76_dbg(DBG_PROC_ENTRY, "%s: before freeing priv/ieee80211_hw", 2426 at76_dbg(DBG_PROC_ENTRY, "%s: before freeing priv/ieee80211_hw",
2429 __func__); 2427 __func__);
2430 ieee80211_free_hw(priv->hw); 2428 ieee80211_free_hw(priv->hw);
@@ -2558,6 +2556,7 @@ static void at76_disconnect(struct usb_interface *interface)
2558 2556
2559 wiphy_info(priv->hw->wiphy, "disconnecting\n"); 2557 wiphy_info(priv->hw->wiphy, "disconnecting\n");
2560 at76_delete_device(priv); 2558 at76_delete_device(priv);
2559 usb_put_dev(priv->udev);
2561 dev_info(&interface->dev, "disconnected\n"); 2560 dev_info(&interface->dev, "disconnected\n");
2562} 2561}
2563 2562
diff --git a/drivers/net/wireless/ath/ath9k/spectral.c b/drivers/net/wireless/ath/ath9k/spectral.c
index 5fe29b9f8fa2..8f68426ca653 100644
--- a/drivers/net/wireless/ath/ath9k/spectral.c
+++ b/drivers/net/wireless/ath/ath9k/spectral.c
@@ -253,7 +253,7 @@ static ssize_t write_file_spec_scan_ctl(struct file *file,
253 253
254 if (strncmp("trigger", buf, 7) == 0) { 254 if (strncmp("trigger", buf, 7) == 0) {
255 ath9k_spectral_scan_trigger(sc->hw); 255 ath9k_spectral_scan_trigger(sc->hw);
256 } else if (strncmp("background", buf, 9) == 0) { 256 } else if (strncmp("background", buf, 10) == 0) {
257 ath9k_spectral_scan_config(sc->hw, SPECTRAL_BACKGROUND); 257 ath9k_spectral_scan_config(sc->hw, SPECTRAL_BACKGROUND);
258 ath_dbg(common, CONFIG, "spectral scan: background mode enabled\n"); 258 ath_dbg(common, CONFIG, "spectral scan: background mode enabled\n");
259 } else if (strncmp("chanscan", buf, 8) == 0) { 259 } else if (strncmp("chanscan", buf, 8) == 0) {
diff --git a/drivers/net/wireless/iwlwifi/Kconfig b/drivers/net/wireless/iwlwifi/Kconfig
index 6451d2b6abcf..824f5e287783 100644
--- a/drivers/net/wireless/iwlwifi/Kconfig
+++ b/drivers/net/wireless/iwlwifi/Kconfig
@@ -51,7 +51,6 @@ config IWLWIFI_LEDS
51 51
52config IWLDVM 52config IWLDVM
53 tristate "Intel Wireless WiFi DVM Firmware support" 53 tristate "Intel Wireless WiFi DVM Firmware support"
54 depends on m
55 default IWLWIFI 54 default IWLWIFI
56 help 55 help
57 This is the driver that supports the DVM firmware which is 56 This is the driver that supports the DVM firmware which is
@@ -60,7 +59,6 @@ config IWLDVM
60 59
61config IWLMVM 60config IWLMVM
62 tristate "Intel Wireless WiFi MVM Firmware support" 61 tristate "Intel Wireless WiFi MVM Firmware support"
63 depends on m
64 help 62 help
65 This is the driver that supports the MVM firmware which is 63 This is the driver that supports the MVM firmware which is
66 currently only available for 7260 and 3160 devices. 64 currently only available for 7260 and 3160 devices.
diff --git a/drivers/net/wireless/iwlwifi/dvm/rxon.c b/drivers/net/wireless/iwlwifi/dvm/rxon.c
index 6dc5dd3ced44..ed50de6362ed 100644
--- a/drivers/net/wireless/iwlwifi/dvm/rxon.c
+++ b/drivers/net/wireless/iwlwifi/dvm/rxon.c
@@ -1068,6 +1068,13 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
1068 /* recalculate basic rates */ 1068 /* recalculate basic rates */
1069 iwl_calc_basic_rates(priv, ctx); 1069 iwl_calc_basic_rates(priv, ctx);
1070 1070
1071 /*
1072 * force CTS-to-self frames protection if RTS-CTS is not preferred
1073 * one aggregation protection method
1074 */
1075 if (!priv->hw_params.use_rts_for_aggregation)
1076 ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
1077
1071 if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) || 1078 if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
1072 !(ctx->staging.flags & RXON_FLG_BAND_24G_MSK)) 1079 !(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
1073 ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK; 1080 ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
@@ -1473,6 +1480,11 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
1473 else 1480 else
1474 ctx->staging.flags &= ~RXON_FLG_TGG_PROTECT_MSK; 1481 ctx->staging.flags &= ~RXON_FLG_TGG_PROTECT_MSK;
1475 1482
1483 if (bss_conf->use_cts_prot)
1484 ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
1485 else
1486 ctx->staging.flags &= ~RXON_FLG_SELF_CTS_EN;
1487
1476 memcpy(ctx->staging.bssid_addr, bss_conf->bssid, ETH_ALEN); 1488 memcpy(ctx->staging.bssid_addr, bss_conf->bssid, ETH_ALEN);
1477 1489
1478 if (vif->type == NL80211_IFTYPE_AP || 1490 if (vif->type == NL80211_IFTYPE_AP ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-7000.c b/drivers/net/wireless/iwlwifi/iwl-7000.c
index 48730064da73..d67a37a786aa 100644
--- a/drivers/net/wireless/iwlwifi/iwl-7000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-7000.c
@@ -67,8 +67,8 @@
67#include "iwl-agn-hw.h" 67#include "iwl-agn-hw.h"
68 68
69/* Highest firmware API version supported */ 69/* Highest firmware API version supported */
70#define IWL7260_UCODE_API_MAX 9 70#define IWL7260_UCODE_API_MAX 10
71#define IWL3160_UCODE_API_MAX 9 71#define IWL3160_UCODE_API_MAX 10
72 72
73/* Oldest version we won't warn about */ 73/* Oldest version we won't warn about */
74#define IWL7260_UCODE_API_OK 9 74#define IWL7260_UCODE_API_OK 9
diff --git a/drivers/net/wireless/iwlwifi/iwl-8000.c b/drivers/net/wireless/iwlwifi/iwl-8000.c
index 44b19e015102..e93c6972290b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-8000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-8000.c
@@ -67,7 +67,7 @@
67#include "iwl-agn-hw.h" 67#include "iwl-agn-hw.h"
68 68
69/* Highest firmware API version supported */ 69/* Highest firmware API version supported */
70#define IWL8000_UCODE_API_MAX 9 70#define IWL8000_UCODE_API_MAX 10
71 71
72/* Oldest version we won't warn about */ 72/* Oldest version we won't warn about */
73#define IWL8000_UCODE_API_OK 8 73#define IWL8000_UCODE_API_OK 8
diff --git a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
index 33da3dfcfa4f..d4bd550f505c 100644
--- a/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
+++ b/drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
@@ -101,7 +101,7 @@ static bool halbtc_legacy(struct rtl_priv *adapter)
101 101
102 bool is_legacy = false; 102 bool is_legacy = false;
103 103
104 if ((mac->mode == WIRELESS_MODE_B) || (mac->mode == WIRELESS_MODE_B)) 104 if ((mac->mode == WIRELESS_MODE_B) || (mac->mode == WIRELESS_MODE_G))
105 is_legacy = true; 105 is_legacy = true;
106 106
107 return is_legacy; 107 return is_legacy;
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
index 361435f8608a..1ac6383e7947 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
@@ -317,6 +317,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
317 {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/ 317 {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/
318 {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ 318 {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
319 {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ 319 {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
320 {RTL_USB_DEVICE(0x0df6, 0x0070, rtl92cu_hal_cfg)}, /*Sitecom - 150N */
320 {RTL_USB_DEVICE(0x0df6, 0x0077, rtl92cu_hal_cfg)}, /*Sitecom-WLA2100V2*/ 321 {RTL_USB_DEVICE(0x0df6, 0x0077, rtl92cu_hal_cfg)}, /*Sitecom-WLA2100V2*/
321 {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ 322 {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/
322 {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/ 323 {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
index e29e15dca86e..f379689dde30 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
@@ -576,6 +576,9 @@ int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref,
576 init_waitqueue_head(&queue->dealloc_wq); 576 init_waitqueue_head(&queue->dealloc_wq);
577 atomic_set(&queue->inflight_packets, 0); 577 atomic_set(&queue->inflight_packets, 0);
578 578
579 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
580 XENVIF_NAPI_WEIGHT);
581
579 if (tx_evtchn == rx_evtchn) { 582 if (tx_evtchn == rx_evtchn) {
580 /* feature-split-event-channels == 0 */ 583 /* feature-split-event-channels == 0 */
581 err = bind_interdomain_evtchn_to_irqhandler( 584 err = bind_interdomain_evtchn_to_irqhandler(
@@ -629,9 +632,6 @@ int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref,
629 wake_up_process(queue->task); 632 wake_up_process(queue->task);
630 wake_up_process(queue->dealloc_task); 633 wake_up_process(queue->dealloc_task);
631 634
632 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
633 XENVIF_NAPI_WEIGHT);
634
635 return 0; 635 return 0;
636 636
637err_rx_unbind: 637err_rx_unbind:
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/Kconfig b/drivers/pci/host/Kconfig
index 8922c376456a..90f5ccacce4b 100644
--- a/drivers/pci/host/Kconfig
+++ b/drivers/pci/host/Kconfig
@@ -56,7 +56,7 @@ config PCI_HOST_GENERIC
56 controller, such as the one emulated by kvmtool. 56 controller, such as the one emulated by kvmtool.
57 57
58config PCIE_SPEAR13XX 58config PCIE_SPEAR13XX
59 tristate "STMicroelectronics SPEAr PCIe controller" 59 bool "STMicroelectronics SPEAr PCIe controller"
60 depends on ARCH_SPEAR13XX 60 depends on ARCH_SPEAR13XX
61 select PCIEPORTBUS 61 select PCIEPORTBUS
62 select PCIE_DW 62 select PCIE_DW
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 0dd742719154..4ff8cbb620d3 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.
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-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/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index fc468a3d95ce..02152de135b5 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -88,7 +88,6 @@ struct ideapad_private {
88 struct dentry *debug; 88 struct dentry *debug;
89 unsigned long cfg; 89 unsigned long cfg;
90 bool has_hw_rfkill_switch; 90 bool has_hw_rfkill_switch;
91 bool has_touchpad_control;
92}; 91};
93 92
94static bool no_bt_rfkill; 93static bool no_bt_rfkill;
@@ -456,7 +455,7 @@ struct ideapad_rfk_data {
456 int type; 455 int type;
457}; 456};
458 457
459const const struct ideapad_rfk_data ideapad_rfk_data[] = { 458static const struct ideapad_rfk_data ideapad_rfk_data[] = {
460 { "ideapad_wlan", CFG_WIFI_BIT, VPCCMD_W_WIFI, RFKILL_TYPE_WLAN }, 459 { "ideapad_wlan", CFG_WIFI_BIT, VPCCMD_W_WIFI, RFKILL_TYPE_WLAN },
461 { "ideapad_bluetooth", CFG_BT_BIT, VPCCMD_W_BT, RFKILL_TYPE_BLUETOOTH }, 460 { "ideapad_bluetooth", CFG_BT_BIT, VPCCMD_W_BT, RFKILL_TYPE_BLUETOOTH },
462 { "ideapad_3g", CFG_3G_BIT, VPCCMD_W_3G, RFKILL_TYPE_WWAN }, 461 { "ideapad_3g", CFG_3G_BIT, VPCCMD_W_3G, RFKILL_TYPE_WWAN },
@@ -767,9 +766,6 @@ static void ideapad_sync_touchpad_state(struct ideapad_private *priv)
767{ 766{
768 unsigned long value; 767 unsigned long value;
769 768
770 if (!priv->has_touchpad_control)
771 return;
772
773 /* Without reading from EC touchpad LED doesn't switch state */ 769 /* Without reading from EC touchpad LED doesn't switch state */
774 if (!read_ec_data(priv->adev->handle, VPCCMD_R_TOUCHPAD, &value)) { 770 if (!read_ec_data(priv->adev->handle, VPCCMD_R_TOUCHPAD, &value)) {
775 /* Some IdeaPads don't really turn off touchpad - they only 771 /* Some IdeaPads don't really turn off touchpad - they only
@@ -833,29 +829,7 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
833 * always results in 0 on these models, causing ideapad_laptop to wrongly 829 * always results in 0 on these models, causing ideapad_laptop to wrongly
834 * report all radios as hardware-blocked. 830 * report all radios as hardware-blocked.
835 */ 831 */
836static struct dmi_system_id no_hw_rfkill_list[] = { 832static const struct dmi_system_id no_hw_rfkill_list[] = {
837 {
838 .ident = "Lenovo Yoga 2 11 / 13 / Pro",
839 .matches = {
840 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
841 DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
842 },
843 },
844 {}
845};
846
847/*
848 * Some models don't offer touchpad ctrl through the ideapad interface, causing
849 * ideapad_sync_touchpad_state to send wrong touchpad enable/disable events.
850 */
851static struct dmi_system_id no_touchpad_ctrl_list[] = {
852 {
853 .ident = "Lenovo Yoga 1 series",
854 .matches = {
855 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
856 DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo IdeaPad Yoga"),
857 },
858 },
859 { 833 {
860 .ident = "Lenovo Yoga 2 11 / 13 / Pro", 834 .ident = "Lenovo Yoga 2 11 / 13 / Pro",
861 .matches = { 835 .matches = {
@@ -889,7 +863,6 @@ static int ideapad_acpi_add(struct platform_device *pdev)
889 priv->adev = adev; 863 priv->adev = adev;
890 priv->platform_device = pdev; 864 priv->platform_device = pdev;
891 priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); 865 priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list);
892 priv->has_touchpad_control = !dmi_check_system(no_touchpad_ctrl_list);
893 866
894 ret = ideapad_sysfs_init(priv); 867 ret = ideapad_sysfs_init(priv);
895 if (ret) 868 if (ret)
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
index b062d3d7b373..d0dce734b2ed 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -1255,10 +1255,15 @@ static ssize_t toshiba_kbd_bl_mode_store(struct device *dev,
1255 const char *buf, size_t count) 1255 const char *buf, size_t count)
1256{ 1256{
1257 struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev); 1257 struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1258 int mode = -1; 1258 int mode;
1259 int time = -1; 1259 int time;
1260 int ret;
1260 1261
1261 if (sscanf(buf, "%i", &mode) != 1 && (mode != 2 || mode != 1)) 1262
1263 ret = kstrtoint(buf, 0, &mode);
1264 if (ret)
1265 return ret;
1266 if (mode != SCI_KBD_MODE_FNZ && mode != SCI_KBD_MODE_AUTO)
1262 return -EINVAL; 1267 return -EINVAL;
1263 1268
1264 /* Set the Keyboard Backlight Mode where: 1269 /* Set the Keyboard Backlight Mode where:
@@ -1266,11 +1271,12 @@ static ssize_t toshiba_kbd_bl_mode_store(struct device *dev,
1266 * Auto - KBD backlight turns off automatically in given time 1271 * Auto - KBD backlight turns off automatically in given time
1267 * FN-Z - KBD backlight "toggles" when hotkey pressed 1272 * FN-Z - KBD backlight "toggles" when hotkey pressed
1268 */ 1273 */
1269 if (mode != -1 && toshiba->kbd_mode != mode) { 1274 if (toshiba->kbd_mode != mode) {
1270 time = toshiba->kbd_time << HCI_MISC_SHIFT; 1275 time = toshiba->kbd_time << HCI_MISC_SHIFT;
1271 time = time + toshiba->kbd_mode; 1276 time = time + toshiba->kbd_mode;
1272 if (toshiba_kbd_illum_status_set(toshiba, time) < 0) 1277 ret = toshiba_kbd_illum_status_set(toshiba, time);
1273 return -EIO; 1278 if (ret)
1279 return ret;
1274 toshiba->kbd_mode = mode; 1280 toshiba->kbd_mode = mode;
1275 } 1281 }
1276 1282
@@ -1857,9 +1863,16 @@ static int toshiba_acpi_resume(struct device *device)
1857{ 1863{
1858 struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device)); 1864 struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
1859 u32 result; 1865 u32 result;
1866 acpi_status status;
1867
1868 if (dev->hotkey_dev) {
1869 status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB",
1870 NULL, NULL);
1871 if (ACPI_FAILURE(status))
1872 pr_info("Unable to re-enable hotkeys\n");
1860 1873
1861 if (dev->hotkey_dev)
1862 hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE, &result); 1874 hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE, &result);
1875 }
1863 1876
1864 return 0; 1877 return 0;
1865} 1878}
diff --git a/drivers/powercap/intel_rapl.c b/drivers/powercap/intel_rapl.c
index b1cda6ffdbcc..45e05b32f9b6 100644
--- a/drivers/powercap/intel_rapl.c
+++ b/drivers/powercap/intel_rapl.c
@@ -953,6 +953,7 @@ static const struct x86_cpu_id rapl_ids[] = {
953 { X86_VENDOR_INTEL, 6, 0x3a},/* Ivy Bridge */ 953 { X86_VENDOR_INTEL, 6, 0x3a},/* Ivy Bridge */
954 { X86_VENDOR_INTEL, 6, 0x3c},/* Haswell */ 954 { X86_VENDOR_INTEL, 6, 0x3c},/* Haswell */
955 { X86_VENDOR_INTEL, 6, 0x3d},/* Broadwell */ 955 { X86_VENDOR_INTEL, 6, 0x3d},/* Broadwell */
956 { X86_VENDOR_INTEL, 6, 0x3f},/* Haswell */
956 { X86_VENDOR_INTEL, 6, 0x45},/* Haswell ULT */ 957 { X86_VENDOR_INTEL, 6, 0x45},/* Haswell ULT */
957 /* TODO: Add more CPU IDs after testing */ 958 /* TODO: Add more CPU IDs after testing */
958 {} 959 {}
@@ -1166,11 +1167,10 @@ static int rapl_detect_domains(struct rapl_package *rp, int cpu)
1166 1167
1167 for (i = 0; i < RAPL_DOMAIN_MAX; i++) { 1168 for (i = 0; i < RAPL_DOMAIN_MAX; i++) {
1168 /* use physical package id to read counters */ 1169 /* use physical package id to read counters */
1169 if (!rapl_check_domain(cpu, i)) 1170 if (!rapl_check_domain(cpu, i)) {
1170 rp->domain_map |= 1 << i; 1171 rp->domain_map |= 1 << i;
1171 else 1172 pr_info("Found RAPL domain %s\n", rapl_domain_names[i]);
1172 pr_warn("RAPL domain %s detection failed\n", 1173 }
1173 rapl_domain_names[i]);
1174 } 1174 }
1175 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); 1175 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX);
1176 if (!rp->nr_domains) { 1176 if (!rp->nr_domains) {
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/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
index 97ef37b51068..e7646ce3d659 100644
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -889,6 +889,7 @@ extern const struct attribute_group *qeth_generic_attr_groups[];
889extern const struct attribute_group *qeth_osn_attr_groups[]; 889extern const struct attribute_group *qeth_osn_attr_groups[];
890extern struct workqueue_struct *qeth_wq; 890extern struct workqueue_struct *qeth_wq;
891 891
892int qeth_card_hw_is_reachable(struct qeth_card *);
892const char *qeth_get_cardname_short(struct qeth_card *); 893const char *qeth_get_cardname_short(struct qeth_card *);
893int qeth_realloc_buffer_pool(struct qeth_card *, int); 894int qeth_realloc_buffer_pool(struct qeth_card *, int);
894int qeth_core_load_discipline(struct qeth_card *, enum qeth_discipline_id); 895int qeth_core_load_discipline(struct qeth_card *, enum qeth_discipline_id);
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index c0d6ba8655c7..fd22c811cbe1 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -73,6 +73,13 @@ static int qeth_init_qdio_out_buf(struct qeth_qdio_out_q *, int);
73struct workqueue_struct *qeth_wq; 73struct workqueue_struct *qeth_wq;
74EXPORT_SYMBOL_GPL(qeth_wq); 74EXPORT_SYMBOL_GPL(qeth_wq);
75 75
76int qeth_card_hw_is_reachable(struct qeth_card *card)
77{
78 return (card->state == CARD_STATE_SOFTSETUP) ||
79 (card->state == CARD_STATE_UP);
80}
81EXPORT_SYMBOL_GPL(qeth_card_hw_is_reachable);
82
76static void qeth_close_dev_handler(struct work_struct *work) 83static void qeth_close_dev_handler(struct work_struct *work)
77{ 84{
78 struct qeth_card *card; 85 struct qeth_card *card;
@@ -5790,6 +5797,7 @@ int qeth_core_ethtool_get_settings(struct net_device *netdev,
5790 struct qeth_card *card = netdev->ml_priv; 5797 struct qeth_card *card = netdev->ml_priv;
5791 enum qeth_link_types link_type; 5798 enum qeth_link_types link_type;
5792 struct carrier_info carrier_info; 5799 struct carrier_info carrier_info;
5800 int rc;
5793 u32 speed; 5801 u32 speed;
5794 5802
5795 if ((card->info.type == QETH_CARD_TYPE_IQD) || (card->info.guestlan)) 5803 if ((card->info.type == QETH_CARD_TYPE_IQD) || (card->info.guestlan))
@@ -5832,8 +5840,14 @@ int qeth_core_ethtool_get_settings(struct net_device *netdev,
5832 /* Check if we can obtain more accurate information. */ 5840 /* Check if we can obtain more accurate information. */
5833 /* If QUERY_CARD_INFO command is not supported or fails, */ 5841 /* If QUERY_CARD_INFO command is not supported or fails, */
5834 /* just return the heuristics that was filled above. */ 5842 /* just return the heuristics that was filled above. */
5835 if (qeth_query_card_info(card, &carrier_info) != 0) 5843 if (!qeth_card_hw_is_reachable(card))
5844 return -ENODEV;
5845 rc = qeth_query_card_info(card, &carrier_info);
5846 if (rc == -EOPNOTSUPP) /* for old hardware, return heuristic */
5836 return 0; 5847 return 0;
5848 if (rc) /* report error from the hardware operation */
5849 return rc;
5850 /* on success, fill in the information got from the hardware */
5837 5851
5838 netdev_dbg(netdev, 5852 netdev_dbg(netdev,
5839 "card info: card_type=0x%02x, port_mode=0x%04x, port_speed=0x%08x\n", 5853 "card info: card_type=0x%02x, port_mode=0x%04x, port_speed=0x%08x\n",
diff --git a/drivers/s390/net/qeth_l2_sys.c b/drivers/s390/net/qeth_l2_sys.c
index ae1bc04b8653..59e3aa538b4d 100644
--- a/drivers/s390/net/qeth_l2_sys.c
+++ b/drivers/s390/net/qeth_l2_sys.c
@@ -5,17 +5,12 @@
5 5
6#include <linux/slab.h> 6#include <linux/slab.h>
7#include <asm/ebcdic.h> 7#include <asm/ebcdic.h>
8#include "qeth_core.h"
8#include "qeth_l2.h" 9#include "qeth_l2.h"
9 10
10#define QETH_DEVICE_ATTR(_id, _name, _mode, _show, _store) \ 11#define QETH_DEVICE_ATTR(_id, _name, _mode, _show, _store) \
11struct device_attribute dev_attr_##_id = __ATTR(_name, _mode, _show, _store) 12struct device_attribute dev_attr_##_id = __ATTR(_name, _mode, _show, _store)
12 13
13static int qeth_card_hw_is_reachable(struct qeth_card *card)
14{
15 return (card->state == CARD_STATE_SOFTSETUP) ||
16 (card->state == CARD_STATE_UP);
17}
18
19static ssize_t qeth_bridge_port_role_state_show(struct device *dev, 14static ssize_t qeth_bridge_port_role_state_show(struct device *dev,
20 struct device_attribute *attr, char *buf, 15 struct device_attribute *attr, char *buf,
21 int show_state) 16 int show_state)
diff --git a/drivers/ssb/b43_pci_bridge.c b/drivers/ssb/b43_pci_bridge.c
index 19396dc4ee47..bed2fedeb057 100644
--- a/drivers/ssb/b43_pci_bridge.c
+++ b/drivers/ssb/b43_pci_bridge.c
@@ -38,6 +38,7 @@ static const struct pci_device_id b43_pci_bridge_tbl[] = {
38 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x432b) }, 38 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x432b) },
39 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x432c) }, 39 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x432c) },
40 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4350) }, 40 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4350) },
41 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4351) },
41 { 0, }, 42 { 0, },
42}; 43};
43MODULE_DEVICE_TABLE(pci, b43_pci_bridge_tbl); 44MODULE_DEVICE_TABLE(pci, b43_pci_bridge_tbl);
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/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/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/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..60cfcbc78552 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -741,6 +741,12 @@ UNUSUAL_DEV( 0x059b, 0x0001, 0x0100, 0x0100,
741 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 741 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
742 US_FL_SINGLE_LUN ), 742 US_FL_SINGLE_LUN ),
743 743
744UNUSUAL_DEV( 0x059b, 0x0040, 0x0100, 0x0100,
745 "Iomega",
746 "Jaz USB Adapter",
747 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
748 US_FL_SINGLE_LUN ),
749
744/* Reported by <Hendryk.Pfeiffer@gmx.de> */ 750/* Reported by <Hendryk.Pfeiffer@gmx.de> */
745UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000, 751UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000,
746 "LaCie", 752 "LaCie",
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 */