summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaura Abbott <labbott@fedoraproject.org>2015-09-01 15:03:08 -0700
committerLaura Abbott <labbott@fedoraproject.org>2015-09-01 15:59:56 -0700
commitd07b889185195409a6090ed3e12fff475b4258f4 (patch)
treec2b98784a9c45c2ba5420c4a256c03d1c1c2e125
parent07775e21b6d0c7b9c2251deb8cb5ef3052a38c6e (diff)
downloadkernel-d07b889185195409a6090ed3e12fff475b4258f4.tar.gz
kernel-d07b889185195409a6090ed3e12fff475b4258f4.tar.xz
kernel-d07b889185195409a6090ed3e12fff475b4258f4.zip
Linux v4.2
This is a squashed patch of the history from F22 + the 4.2 rebase
-rw-r--r--.gitignore2
-rw-r--r--0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch2201
-rw-r--r--0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch102
-rw-r--r--0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch1001
-rw-r--r--0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch89
-rw-r--r--0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch138
-rw-r--r--ACPI-Limit-access-to-custom_method.patch27
-rw-r--r--ARM-tegra-usb-no-reset.patch28
-rw-r--r--Add-EFI-signature-data-types.patch53
-rw-r--r--Add-an-EFI-signature-blob-parser-and-key-loader.patch175
-rw-r--r--Add-option-to-automatically-enforce-module-signature.patch182
-rw-r--r--Add-secure_modules-call.patch59
-rw-r--r--Add-sysrq-option-to-disable-secure-boot-mode.patch (renamed from sysrq-secure-boot.patch)78
-rw-r--r--HID-chicony-Add-support-for-Acer-Aspire-Switch-12.patch103
-rw-r--r--HID-hid-input-Fix-accessing-freed-memory-during-devi.patch53
-rw-r--r--HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch60
-rw-r--r--Input-synaptics-pin-3-touches-when-the-firmware-repo.patch47
-rw-r--r--KEYS-Add-a-system-blacklist-keyring.patch108
-rw-r--r--Kbuild-Add-an-option-to-enable-GCC-VTA.patch89
-rw-r--r--MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch182
-rw-r--r--MODSIGN-Support-not-importing-certs-from-db.patch80
-rw-r--r--Makefile13
-rw-r--r--Makefile.config40
-rw-r--r--Makefile.release13
-rw-r--r--NFS-populate-net-in-mount-data-when-remounting.patch39
-rw-r--r--PCI-Lock-down-BAR-access-when-module-security-is-ena.patch113
-rw-r--r--PatchList.txt38
-rw-r--r--Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch38
-rw-r--r--Revert-userns-Allow-unprivileged-users-to-create-use.patch44
-rw-r--r--TODO6
-rw-r--r--acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch40
-rw-r--r--acer-wmi-Switch-to-acpi_video_unregister_backlight.patch64
-rw-r--r--acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch35
-rw-r--r--acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch112
-rw-r--r--acpi-video-Add-force-native-backlight-quirk-for-Leno.patch81
-rw-r--r--acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch45
-rw-r--r--acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch41
-rw-r--r--acpi-video-Allow-forcing-native-backlight-on-non-win.patch73
-rw-r--r--acpi-video-Don-t-register-acpi_video_resume-notifier.patch214
-rw-r--r--acpi-video-Unregister-the-backlight-device-if-a-raw-.patch130
-rw-r--r--aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch48
-rw-r--r--aio-fix-kernel-memory-disclosure-in-io_getevents-int.patch46
-rw-r--r--amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch10411
-rw-r--r--amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch1870
-rw-r--r--arm-beagle.patch460
-rw-r--r--arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch42
-rw-r--r--arm-dts-am335x-bone-common-setup-default-pinmux-http.patch268
-rw-r--r--arm-dts-am335x-boneblack-add-cpu0-opp-points.patch38
-rw-r--r--arm-dts-am335x-boneblack-lcdc-add-panel-info.patch36
-rw-r--r--arm-i.MX6-Utilite-device-dtb.patch (renamed from arm-imx6-utilite.patch)10
-rw-r--r--arm-tegra-usb-no-reset-linux33.patch16
-rw-r--r--arm64-avoid-needing-console-to-enable-serial-console.patch42
-rw-r--r--asus-wmi-Add-a-no-backlight-quirk.patch69
-rw-r--r--asus-wmi-Restrict-debugfs-interface-when-module-load.patch50
-rw-r--r--ath9k-rx-dma-stop-check.patch (renamed from ath9k_rx_dma_stop_check.patch)14
-rw-r--r--backlight-Add-backlight-device-un-registration-notif.patch132
-rw-r--r--compile-fixes.patch6
-rw-r--r--config-arm-generic148
-rw-r--r--config-arm64159
-rw-r--r--config-armv7395
-rw-r--r--config-armv7-generic665
-rw-r--r--config-armv7-lpae121
-rw-r--r--config-debug14
-rw-r--r--config-generic1019
-rw-r--r--config-i686-PAE1
-rw-r--r--config-nodebug16
-rw-r--r--config-powerpc32-generic180
-rw-r--r--config-powerpc32-smp3
-rw-r--r--config-powerpc64280
-rw-r--r--config-powerpc64-generic (renamed from config-powerpc-generic)373
-rw-r--r--config-powerpc64le3
-rw-r--r--config-powerpc64p7182
-rw-r--r--config-s390x75
-rw-r--r--config-x86-32-generic32
-rw-r--r--config-x86-generic133
-rw-r--r--config-x86_64-generic47
-rw-r--r--crash-driver.patch122
-rw-r--r--criu-no-expert.patch20
-rw-r--r--defaults-acpi-video.patch13
-rw-r--r--die-floppy-die.patch17
-rw-r--r--disable-i8042-check-on-apple-mac.patch19
-rw-r--r--disable-libdw-unwind-on-non-x86.patch15
-rw-r--r--dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch43
-rw-r--r--drm-i915-hush-check-crtc-state.patch26
-rw-r--r--drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch113
-rw-r--r--drm-i915-turn-off-wc-mmaps.patch21
-rw-r--r--drm-qxl-validate-monitors-config-modes.patch148
-rw-r--r--drm-radeon-Disable-writeback-by-default-on-ppc.patch85
-rw-r--r--drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch60
-rw-r--r--e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch287
-rw-r--r--eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch50
-rw-r--r--efi-Add-EFI_SECURE_BOOT-bit.patch39
-rw-r--r--efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch54
-rw-r--r--efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch26
-rw-r--r--elantech-Deal-with-clickpads-reporting-right-button-.patch79
-rw-r--r--ext4-dont-manipulate-recovery-flag-when-freezing.patch66
-rwxr-xr-xfilter-aarch64.sh14
-rwxr-xr-xfilter-armv7hl.sh14
-rwxr-xr-xfilter-i686.sh14
-rwxr-xr-xfilter-modules.sh143
-rwxr-xr-xfilter-ppc64.sh14
-rwxr-xr-xfilter-ppc64le.sh14
-rwxr-xr-xfilter-ppc64p7.sh14
-rwxr-xr-xfilter-s390x.sh12
-rwxr-xr-xfilter-x86_64.sh12
-rw-r--r--firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch89
-rw-r--r--hibernate-Disable-in-a-signed-modules-environment.patch35
-rw-r--r--hibernate-freeze-filesystems.patch287
-rw-r--r--iSCSI-let-session-recovery_tmo-sysfs-writes-persist.patch89
-rw-r--r--ideapad-laptop-Add-Lenovo-Yoga-3-14-to-no_hw_rfkill-.patch40
-rw-r--r--ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch73
-rw-r--r--input-kill-stupid-messages.patch14
-rw-r--r--input-silence-i8042-noise.patch (renamed from silence-noise.patch)59
-rw-r--r--intel_pstate-Fix-setting-VID.patch133
-rw-r--r--intel_pstate-Update-documentation-of-max-min_perf_pct-sysfs-files.patch97
-rw-r--r--intel_pstate-dont-touch-turbo-bit-if-turbo-disabled-or-unavailable.patch163
-rw-r--r--kbuild-AFTER_LINK.patch (renamed from makefile-after_link.patch)36
-rw-r--r--kernel.spec3508
-rw-r--r--kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch40
-rw-r--r--kexec-uefi-copy-secure_boot-flag-in-boot-params.patch30
-rw-r--r--lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch (renamed from 0001-lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch)14
-rw-r--r--lis3-improve-handling-of-null-rate.patch30
-rw-r--r--mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch203
-rw-r--r--mod-extra.list7
-rw-r--r--modsign-uefi.patch624
-rw-r--r--netfilter-nf_nat-fix-oops-on-netns-removal.patch98
-rw-r--r--no-pcspkr-modalias.patch14
-rw-r--r--nouveau-Don-t-check-acpi_video_backlight_support-bef.patch79
-rw-r--r--nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch33
-rw-r--r--pinctrl-pinctrl-single-must-be-initialized-early.patch34
-rw-r--r--revert-input-wacom-testing-result-shows-get_report-is-unnecessary.patch40
-rw-r--r--s390-appldata-add-slab.h-for-kzalloc-kfree.patch28
-rw-r--r--samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch41
-rw-r--r--sb-hibernate.patch115
-rw-r--r--scripts/check-configs.pl83
-rw-r--r--scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch20
-rw-r--r--secure-modules.patch877
-rw-r--r--serial-460800.patch70
-rw-r--r--silence-fbcon-logo.patch18
-rw-r--r--sources5
-rw-r--r--thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch45
-rw-r--r--upstream-reverts.patch1
-rw-r--r--usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch40
-rw-r--r--vmwgfx-Rework-device-initialization.patch890
-rw-r--r--watchdog-Disable-watchdog-on-virtual-machines.patch (renamed from nowatchdog-on-virt.patch)26
-rw-r--r--weird-root-dentry-name-debug.patch19
-rw-r--r--x86-Lock-down-IO-port-access-when-module-security-is.patch67
-rw-r--r--x86-Restrict-MSR-access-when-module-loading-is-restr.patch39
-rw-r--r--x86_32-entry-Do-syscall-exit-work-on-badsys.patch130
-rw-r--r--xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch48
150 files changed, 20950 insertions, 12475 deletions
diff --git a/.gitignore b/.gitignore
index b30f1f64f..2a888b23d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,5 +3,5 @@ clog
*.bz2
*.rpm
*.orig
-kernel-[23].*/
+kernel-[234].*/
perf-man-*.tar.gz
diff --git a/0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch b/0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch
deleted file mode 100644
index de006062f..000000000
--- a/0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch
+++ /dev/null
@@ -1,2201 +0,0 @@
-From 528a5cd576861f90f51398c707c602a79623492d Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Thu, 5 Sep 2013 19:52:41 -0300
-Subject: [PATCH] ARM: sunxi: Add driver for SD/MMC hosts found on Allwinner
- sunxi SoCs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The Allwinner sunxi mmc host uses dma in bus-master mode using a built-in
-designware idmac controller, which is identical to the one found in the mmc-dw
-hosts. However the rest of the host is not identical to mmc-dw, it deals with
-sending stop commands in hardware which makes it significantly different
-from the mmc-dw devices.
-
-Signed-off-by: David Lanzendörfer <david.lanzendoerfer@o2s.ch>
-Signed-off-by: Emilio López <emilio@elopez.com.ar>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- .../devicetree/bindings/mmc/sunxi-mmc.txt | 43 +
- arch/arm/boot/dts/Makefile | 1 +
- arch/arm/boot/dts/sun4i-a10-a1000.dts | 9 +
- arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 9 +
- arch/arm/boot/dts/sun4i-a10-hackberry.dts | 9 +
- arch/arm/boot/dts/sun4i-a10-inet97fv2.dts | 9 +
- arch/arm/boot/dts/sun4i-a10-mini-xplus.dts | 9 +
- arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts | 9 +
- arch/arm/boot/dts/sun4i-a10-pcduino.dts | 9 +
- arch/arm/boot/dts/sun4i-a10.dtsi | 50 +
- arch/arm/boot/dts/sun5i-a10s-olinuxino-micro.dts | 32 +
- arch/arm/boot/dts/sun5i-a10s.dtsi | 41 +
- arch/arm/boot/dts/sun5i-a13-olinuxino-micro.dts | 16 +
- arch/arm/boot/dts/sun5i-a13-olinuxino.dts | 16 +
- arch/arm/boot/dts/sun5i-a13.dtsi | 25 +
- arch/arm/boot/dts/sun6i-a31-m9.dts | 46 +
- arch/arm/boot/dts/sun6i-a31.dtsi | 91 ++
- arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 9 +
- arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 40 +
- arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 25 +
- arch/arm/boot/dts/sun7i-a20.dtsi | 57 +
- drivers/clk/sunxi/clk-factors.c | 36 +
- drivers/clk/sunxi/clk-sunxi.c | 36 +
- drivers/mmc/host/Kconfig | 7 +
- drivers/mmc/host/Makefile | 2 +
- drivers/mmc/host/sunxi-mmc.c | 1125 ++++++++++++++++++++
- include/linux/clk/sunxi.h | 22 +
- 27 files changed, 1783 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/mmc/sunxi-mmc.txt
- create mode 100644 arch/arm/boot/dts/sun6i-a31-m9.dts
- create mode 100644 drivers/mmc/host/sunxi-mmc.c
- create mode 100644 include/linux/clk/sunxi.h
-
-diff --git a/Documentation/devicetree/bindings/mmc/sunxi-mmc.txt b/Documentation/devicetree/bindings/mmc/sunxi-mmc.txt
-new file mode 100644
-index 0000000..f0c06e7
---- /dev/null
-+++ b/Documentation/devicetree/bindings/mmc/sunxi-mmc.txt
-@@ -0,0 +1,43 @@
-+* Allwinner sunxi MMC controller
-+
-+The highspeed MMC host controller on Allwinner SoCs provides an interface
-+for MMC, SD and SDIO types of memory cards.
-+
-+Supported maximum speeds are the ones of the eMMC standard 4.5 as well
-+as the speed of SD standard 3.0.
-+Absolute maximum transfer rate is 200MB/s
-+
-+Required properties:
-+ - compatible : "allwinner,sun4i-a10-mmc" or "allwinner,sun5i-a13-mmc"
-+ - reg : mmc controller base registers
-+ - clocks : a list with 2 phandle + clock specifier pairs
-+ - clock-names : must contain "ahb" and "mod"
-+ - interrupts : mmc controller interrupt
-+
-+Optional properties:
-+ - resets : phandle + reset specifier pair
-+ - reset-names : must contain "ahb"
-+ - for cd, bus-width and additional generic mmc parameters
-+ please refer to mmc.txt within this directory
-+
-+Examples:
-+ - Within .dtsi:
-+ mmc0: mmc@01c0f000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c0f000 0x1000>;
-+ clocks = <&ahb_gates 8>, <&mmc0_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <0 32 4>;
-+ status = "disabled";
-+ };
-+
-+ - Within dts:
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default", "default";
-+ pinctrl-0 = <&mmc0_pins_a>;
-+ pinctrl-1 = <&mmc0_cd_pin_reference_design>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index 35c146f..1cd137d 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -351,6 +351,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += \
- sun5i-a13-olinuxino.dtb \
- sun5i-a13-olinuxino-micro.dtb \
- sun6i-a31-colombus.dtb \
-+ sun6i-a31-m9.dtb \
- sun7i-a20-cubieboard2.dtb \
- sun7i-a20-cubietruck.dtb \
- sun7i-a20-olinuxino-micro.dtb
-diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts
-index fa746aea..3056db5 100644
---- a/arch/arm/boot/dts/sun4i-a10-a1000.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts
-@@ -36,6 +36,15 @@
- };
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-index 4684cbe..ad9321b 100644
---- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-@@ -34,6 +34,15 @@
- };
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts
-index d7c17e4..62defd5 100644
---- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts
-@@ -36,6 +36,15 @@
- };
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts b/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts
-index fe9272e..d1a9e34 100644
---- a/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-inet97fv2.dts
-@@ -24,6 +24,15 @@
- };
-
- soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- uart0: serial@01c28000 {
- pinctrl-names = "default";
- pinctrl-0 = <&uart0_pins_a>;
-diff --git a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts
-index dd84a9e..07a598f 100644
---- a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts
-@@ -20,6 +20,15 @@
- compatible = "pineriver,mini-xplus", "allwinner,sun4i-a10";
-
- soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-index 66cf0c7..8d5d321 100644
---- a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-@@ -33,6 +33,15 @@
- };
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun4i-a10-pcduino.dts b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-index 255b47e..ce02086 100644
---- a/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-+++ b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-@@ -34,6 +34,15 @@
- };
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index 9174724..29fd4f5 100644
---- a/arch/arm/boot/dts/sun4i-a10.dtsi
-+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -377,6 +377,42 @@
- #size-cells = <0>;
- };
-
-+ mmc0: mmc@01c0f000 {
-+ compatible = "allwinner,sun4i-a10-mmc";
-+ reg = <0x01c0f000 0x1000>;
-+ clocks = <&ahb_gates 8>, <&mmc0_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <32>;
-+ status = "disabled";
-+ };
-+
-+ mmc1: mmc@01c10000 {
-+ compatible = "allwinner,sun4i-a10-mmc";
-+ reg = <0x01c10000 0x1000>;
-+ clocks = <&ahb_gates 9>, <&mmc1_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <33>;
-+ status = "disabled";
-+ };
-+
-+ mmc2: mmc@01c11000 {
-+ compatible = "allwinner,sun4i-a10-mmc";
-+ reg = <0x01c11000 0x1000>;
-+ clocks = <&ahb_gates 10>, <&mmc2_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <34>;
-+ status = "disabled";
-+ };
-+
-+ mmc3: mmc@01c12000 {
-+ compatible = "allwinner,sun4i-a10-mmc";
-+ reg = <0x01c12000 0x1000>;
-+ clocks = <&ahb_gates 11>, <&mmc3_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <35>;
-+ status = "disabled";
-+ };
-+
- usbphy: phy@01c13400 {
- #phy-cells = <1>;
- compatible = "allwinner,sun4i-a10-usb-phy";
-@@ -529,6 +565,20 @@
- allwinner,drive = <0>;
- allwinner,pull = <0>;
- };
-+
-+ mmc0_pins_a: mmc0@0 {
-+ allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
-+ allwinner,function = "mmc0";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
-+
-+ mmc0_cd_pin_a: mmc0_cd_pin@0 {
-+ allwinner,pins = "PH1";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
- };
-
- timer@01c20c00 {
-diff --git a/arch/arm/boot/dts/sun5i-a10s-olinuxino-micro.dts b/arch/arm/boot/dts/sun5i-a10s-olinuxino-micro.dts
-index 23611b7..de91308 100644
---- a/arch/arm/boot/dts/sun5i-a10s-olinuxino-micro.dts
-+++ b/arch/arm/boot/dts/sun5i-a10s-olinuxino-micro.dts
-@@ -35,6 +35,24 @@
- };
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_olinuxino_micro>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 6 1 0>; /* PG1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
-+ mmc1: mmc@01c10000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc1_pins_a>, <&mmc1_cd_pin_olinuxino_micro>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 6 13 0>; /* PG13 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- status = "okay";
-@@ -49,6 +67,20 @@
- };
-
- pinctrl@01c20800 {
-+ mmc0_cd_pin_olinuxino_micro: mmc0_cd_pin@0 {
-+ allwinner,pins = "PG1";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
-+ mmc1_cd_pin_olinuxino_micro: mmc1_cd_pin@0 {
-+ allwinner,pins = "PG13";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
- led_pins_olinuxino: led_pins@0 {
- allwinner,pins = "PE3";
- allwinner,function = "gpio_out";
-diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi
-index 79989ed..fb345c2 100644
---- a/arch/arm/boot/dts/sun5i-a10s.dtsi
-+++ b/arch/arm/boot/dts/sun5i-a10s.dtsi
-@@ -338,6 +338,33 @@
- #size-cells = <0>;
- };
-
-+ mmc0: mmc@01c0f000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c0f000 0x1000>;
-+ clocks = <&ahb_gates 8>, <&mmc0_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <32>;
-+ status = "disabled";
-+ };
-+
-+ mmc1: mmc@01c10000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c10000 0x1000>;
-+ clocks = <&ahb_gates 9>, <&mmc1_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <33>;
-+ status = "disabled";
-+ };
-+
-+ mmc2: mmc@01c11000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c11000 0x1000>;
-+ clocks = <&ahb_gates 10>, <&mmc2_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <34>;
-+ status = "disabled";
-+ };
-+
- usbphy: phy@01c13400 {
- #phy-cells = <1>;
- compatible = "allwinner,sun5i-a13-usb-phy";
-@@ -451,6 +478,20 @@
- allwinner,drive = <0>;
- allwinner,pull = <0>;
- };
-+
-+ mmc0_pins_a: mmc0@0 {
-+ allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
-+ allwinner,function = "mmc0";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
-+
-+ mmc1_pins_a: mmc1@0 {
-+ allwinner,pins = "PG3","PG4","PG5","PG6","PG7","PG8";
-+ allwinner,function = "mmc1";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
- };
-
- timer@01c20c00 {
-diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino-micro.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino-micro.dts
-index 11169d5..8515f19 100644
---- a/arch/arm/boot/dts/sun5i-a13-olinuxino-micro.dts
-+++ b/arch/arm/boot/dts/sun5i-a13-olinuxino-micro.dts
-@@ -21,6 +21,15 @@
- compatible = "olimex,a13-olinuxino-micro", "allwinner,sun5i-a13";
-
- soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_olinuxinom>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 6 0 0>; /* PG0 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- status = "okay";
-@@ -35,6 +44,13 @@
- };
-
- pinctrl@01c20800 {
-+ mmc0_cd_pin_olinuxinom: mmc0_cd_pin@0 {
-+ allwinner,pins = "PG0";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
- led_pins_olinuxinom: led_pins@0 {
- allwinner,pins = "PG9";
- allwinner,function = "gpio_out";
-diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-index 7a9187b..51a9438 100644
---- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-+++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-@@ -20,6 +20,15 @@
- compatible = "olimex,a13-olinuxino", "allwinner,sun5i-a13";
-
- soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_olinuxino>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 6 0 0>; /* PG0 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- status = "okay";
-@@ -34,6 +43,13 @@
- };
-
- pinctrl@01c20800 {
-+ mmc0_cd_pin_olinuxino: mmc0_cd_pin@0 {
-+ allwinner,pins = "PG0";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
- led_pins_olinuxino: led_pins@0 {
- allwinner,pins = "PG9";
- allwinner,function = "gpio_out";
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index f01c315..48ffa51 100644
---- a/arch/arm/boot/dts/sun5i-a13.dtsi
-+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -320,6 +320,24 @@
- #size-cells = <0>;
- };
-
-+ mmc0: mmc@01c0f000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c0f000 0x1000>;
-+ clocks = <&ahb_gates 8>, <&mmc0_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <32>;
-+ status = "disabled";
-+ };
-+
-+ mmc2: mmc@01c11000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c11000 0x1000>;
-+ clocks = <&ahb_gates 10>, <&mmc2_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <34>;
-+ status = "disabled";
-+ };
-+
- usbphy: phy@01c13400 {
- #phy-cells = <1>;
- compatible = "allwinner,sun5i-a13-usb-phy";
-@@ -415,6 +433,13 @@
- allwinner,drive = <0>;
- allwinner,pull = <0>;
- };
-+
-+ mmc0_pins_a: mmc0@0 {
-+ allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
-+ allwinner,function = "mmc0";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
- };
-
- timer@01c20c00 {
-diff --git a/arch/arm/boot/dts/sun6i-a31-m9.dts b/arch/arm/boot/dts/sun6i-a31-m9.dts
-new file mode 100644
-index 0000000..a188721
---- /dev/null
-+++ b/arch/arm/boot/dts/sun6i-a31-m9.dts
-@@ -0,0 +1,46 @@
-+/*
-+ * Copyright 2014 Hans de Goede <hdegoede@redhat.com>
-+ *
-+ * The code contained herein is licensed under the GNU General Public
-+ * License. You may obtain a copy of the GNU General Public License
-+ * Version 2 or later at the following locations:
-+ *
-+ * http://www.opensource.org/licenses/gpl-license.html
-+ * http://www.gnu.org/copyleft/gpl.html
-+ */
-+
-+/dts-v1/;
-+/include/ "sun6i-a31.dtsi"
-+
-+/ {
-+ model = "Mele M9 / A1000G Quad top set box";
-+ compatible = "mele,m9", "allwinner,sun6i-a31";
-+
-+ chosen {
-+ bootargs = "earlyprintk console=ttyS0,115200";
-+ };
-+
-+ soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_m9>;
-+ cd-gpios = <&pio 7 22 0>; /* PH22 */
-+ status = "okay";
-+ };
-+
-+ pio: pinctrl@01c20800 {
-+ mmc0_cd_pin_m9: mmc0_cd_pin@0 {
-+ allwinner,pins = "PH22";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+ };
-+
-+ uart0: serial@01c28000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart0_pins_a>;
-+ status = "okay";
-+ };
-+ };
-+};
-diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi
-index d45efa7..0939fc1 100644
---- a/arch/arm/boot/dts/sun6i-a31.dtsi
-+++ b/arch/arm/boot/dts/sun6i-a31.dtsi
-@@ -198,6 +198,38 @@
- "apb2_uart4", "apb2_uart5";
- };
-
-+ mmc0_clk: clk@01c20088 {
-+ #clock-cells = <0>;
-+ compatible = "allwinner,sun4i-a10-mod0-clk";
-+ reg = <0x01c20088 0x4>;
-+ clocks = <&osc24M>, <&pll6>;
-+ clock-output-names = "mmc0";
-+ };
-+
-+ mmc1_clk: clk@01c2008c {
-+ #clock-cells = <0>;
-+ compatible = "allwinner,sun4i-a10-mod0-clk";
-+ reg = <0x01c2008c 0x4>;
-+ clocks = <&osc24M>, <&pll6>;
-+ clock-output-names = "mmc1";
-+ };
-+
-+ mmc2_clk: clk@01c20090 {
-+ #clock-cells = <0>;
-+ compatible = "allwinner,sun4i-a10-mod0-clk";
-+ reg = <0x01c20090 0x4>;
-+ clocks = <&osc24M>, <&pll6>;
-+ clock-output-names = "mmc2";
-+ };
-+
-+ mmc3_clk: clk@01c20094 {
-+ #clock-cells = <0>;
-+ compatible = "allwinner,sun4i-a10-mod0-clk";
-+ reg = <0x01c20094 0x4>;
-+ clocks = <&osc24M>, <&pll6>;
-+ clock-output-names = "mmc3";
-+ };
-+
- spi0_clk: clk@01c200a0 {
- #clock-cells = <0>;
- compatible = "allwinner,sun4i-a10-mod0-clk";
-@@ -237,6 +269,58 @@
- #size-cells = <1>;
- ranges;
-
-+ mmc0: mmc@01c0f000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c0f000 0x1000>;
-+ clocks = <&ahb1_gates 8>, <&mmc0_clk>;
-+ clock-names = "ahb", "mod";
-+ resets = <&ahb1_rst 8>;
-+ reset-names = "ahb";
-+ interrupts = <0 60 4>;
-+ bus-width = <4>;
-+ cd-inverted;
-+ status = "disabled";
-+ };
-+
-+ mmc1: mmc@01c10000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c10000 0x1000>;
-+ clocks = <&ahb1_gates 9>, <&mmc1_clk>;
-+ clock-names = "ahb", "mod";
-+ resets = <&ahb1_rst 9>;
-+ reset-names = "reset";
-+ interrupts = <0 61 4>;
-+ bus-width = <4>;
-+ cd-inverted;
-+ status = "disabled";
-+ };
-+
-+ mmc2: mmc@01c11000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c11000 0x1000>;
-+ clocks = <&ahb1_gates 10>, <&mmc2_clk>;
-+ clock-names = "ahb", "mod";
-+ resets = <&ahb1_rst 10>;
-+ reset-names = "reset";
-+ interrupts = <0 62 4>;
-+ bus-width = <4>;
-+ cd-inverted;
-+ status = "disabled";
-+ };
-+
-+ mmc3: mmc@01c12000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c12000 0x1000>;
-+ clocks = <&ahb1_gates 11>, <&mmc3_clk>;
-+ clock-names = "ahb", "mod";
-+ resets = <&ahb1_rst 11>;
-+ reset-names = "reset";
-+ interrupts = <0 63 4>;
-+ bus-width = <4>;
-+ cd-inverted;
-+ status = "disabled";
-+ };
-+
- nmi_intc: interrupt-controller@01f00c0c {
- compatible = "allwinner,sun6i-a31-sc-nmi";
- interrupt-controller;
-@@ -286,6 +370,13 @@
- allwinner,drive = <0>;
- allwinner,pull = <0>;
- };
-+
-+ mmc0_pins_a: mmc0@0 {
-+ allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
-+ allwinner,function = "mmc0";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
- };
-
- ahb1_rst: reset@01c202c0 {
-diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-index 68de89f..b41aa99 100644
---- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-+++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-@@ -20,6 +20,15 @@
- compatible = "cubietech,cubieboard2", "allwinner,sun7i-a20";
-
- soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-index cb25d3c..270bac0 100644
---- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-+++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-@@ -20,6 +20,23 @@
- compatible = "cubietech,cubietruck", "allwinner,sun7i-a20";
-
- soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
-+ mmc3: mmc@01c12000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc3_pins_a>;
-+ vmmc-supply = <&reg_vmmc3>;
-+ non-removable;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-@@ -48,6 +65,18 @@
- };
-
- pinctrl@01c20800 {
-+ mmc3_pins_a: mmc3@0 {
-+ /* AP6210 requires pull-up */
-+ allwinner,pull = <1>;
-+ };
-+
-+ vmmc3_pin_cubietruck: vmmc3_pin@0 {
-+ allwinner,pins = "PH9";
-+ allwinner,function = "gpio_out";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <0>;
-+ };
-+
- ahci_pwr_pin_cubietruck: ahci_pwr_pin@1 {
- allwinner,pins = "PH12";
- allwinner,function = "gpio_out";
-@@ -139,4 +168,15 @@
- reg_usb2_vbus: usb2-vbus {
- status = "okay";
- };
-+
-+ reg_vmmc3: vmmc3 {
-+ compatible = "regulator-fixed";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&vmmc3_pin_cubietruck>;
-+ regulator-name = "vmmc3";
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ enable-active-high;
-+ gpio = <&pio 7 9 0>;
-+ };
- };
-diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-index eeadf76..f989554 100644
---- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-+++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-@@ -31,6 +31,24 @@
- status = "okay";
- };
-
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_a>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 1 0>; /* PH1 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
-+ mmc3: mmc@01c12000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc3_pins_a>, <&mmc3_cd_pin_olinuxinom>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 11 0>; /* PH11 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
- usbphy: phy@01c13400 {
- usb1_vbus-supply = <&reg_usb1_vbus>;
- usb2_vbus-supply = <&reg_usb2_vbus>;
-@@ -65,6 +83,13 @@
- };
-
- pinctrl@01c20800 {
-+ mmc3_cd_pin_olinuxinom: mmc3_cd_pin@0 {
-+ allwinner,pins = "PH11";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
- led_pins_olinuxino: led_pins@0 {
- allwinner,pins = "PH2";
- allwinner,function = "gpio_out";
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 32efc10..99e8336 100644
---- a/arch/arm/boot/dts/sun7i-a20.dtsi
-+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -447,6 +447,42 @@
- #size-cells = <0>;
- };
-
-+ mmc0: mmc@01c0f000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c0f000 0x1000>;
-+ clocks = <&ahb_gates 8>, <&mmc0_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <0 32 4>;
-+ status = "disabled";
-+ };
-+
-+ mmc1: mmc@01c10000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c10000 0x1000>;
-+ clocks = <&ahb_gates 9>, <&mmc1_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <0 33 4>;
-+ status = "disabled";
-+ };
-+
-+ mmc2: mmc@01c11000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c11000 0x1000>;
-+ clocks = <&ahb_gates 10>, <&mmc2_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <0 34 4>;
-+ status = "disabled";
-+ };
-+
-+ mmc3: mmc@01c12000 {
-+ compatible = "allwinner,sun5i-a13-mmc";
-+ reg = <0x01c12000 0x1000>;
-+ clocks = <&ahb_gates 11>, <&mmc3_clk>;
-+ clock-names = "ahb", "mod";
-+ interrupts = <0 35 4>;
-+ status = "disabled";
-+ };
-+
- usbphy: phy@01c13400 {
- #phy-cells = <1>;
- compatible = "allwinner,sun7i-a20-usb-phy";
-@@ -653,6 +689,27 @@
- allwinner,drive = <0>;
- allwinner,pull = <0>;
- };
-+
-+ mmc0_pins_a: mmc0@0 {
-+ allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
-+ allwinner,function = "mmc0";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
-+
-+ mmc0_cd_pin_a: mmc0_cd_pin@0 {
-+ allwinner,pins = "PH1";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
-+ mmc3_pins_a: mmc3@0 {
-+ allwinner,pins = "PI4","PI5","PI6","PI7","PI8","PI9";
-+ allwinner,function = "mmc3";
-+ allwinner,drive = <2>;
-+ allwinner,pull = <0>;
-+ };
- };
-
- timer@01c20c00 {
-diff --git a/drivers/clk/sunxi/clk-factors.c b/drivers/clk/sunxi/clk-factors.c
-index 9e23264..3806d97 100644
---- a/drivers/clk/sunxi/clk-factors.c
-+++ b/drivers/clk/sunxi/clk-factors.c
-@@ -77,6 +77,41 @@ static long clk_factors_round_rate(struct clk_hw *hw, unsigned long rate,
- return rate;
- }
-
-+static long clk_factors_determine_rate(struct clk_hw *hw, unsigned long rate,
-+ unsigned long *best_parent_rate,
-+ struct clk **best_parent_p)
-+{
-+ struct clk *clk = hw->clk, *parent, *best_parent = NULL;
-+ int i, num_parents;
-+ unsigned long parent_rate, best = 0, child_rate, best_child_rate = 0;
-+
-+ /* find the parent that can help provide the fastest rate <= rate */
-+ num_parents = __clk_get_num_parents(clk);
-+ for (i = 0; i < num_parents; i++) {
-+ parent = clk_get_parent_by_index(clk, i);
-+ if (!parent)
-+ continue;
-+ if (__clk_get_flags(clk) & CLK_SET_RATE_PARENT)
-+ parent_rate = __clk_round_rate(parent, rate);
-+ else
-+ parent_rate = __clk_get_rate(parent);
-+
-+ child_rate = clk_factors_round_rate(hw, rate, &parent_rate);
-+
-+ if (child_rate <= rate && child_rate > best_child_rate) {
-+ best_parent = parent;
-+ best = parent_rate;
-+ best_child_rate = child_rate;
-+ }
-+ }
-+
-+ if (best_parent)
-+ *best_parent_p = best_parent;
-+ *best_parent_rate = best;
-+
-+ return best_child_rate;
-+}
-+
- static int clk_factors_set_rate(struct clk_hw *hw, unsigned long rate,
- unsigned long parent_rate)
- {
-@@ -113,6 +148,7 @@ static int clk_factors_set_rate(struct clk_hw *hw, unsigned long rate,
- }
-
- const struct clk_ops clk_factors_ops = {
-+ .determine_rate = clk_factors_determine_rate,
- .recalc_rate = clk_factors_recalc_rate,
- .round_rate = clk_factors_round_rate,
- .set_rate = clk_factors_set_rate,
-diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
-index bd7dc73..59f9040 100644
---- a/drivers/clk/sunxi/clk-sunxi.c
-+++ b/drivers/clk/sunxi/clk-sunxi.c
-@@ -507,6 +507,42 @@ CLK_OF_DECLARE(sun7i_a20_gmac, "allwinner,sun7i-a20-gmac-clk",
-
-
- /**
-+ * clk_sunxi_mmc_phase_control() - configures MMC clock phase control
-+ */
-+
-+void clk_sunxi_mmc_phase_control(struct clk_hw *hw, u8 sample, u8 output)
-+{
-+ #define to_clk_composite(_hw) container_of(_hw, struct clk_composite, hw)
-+ #define to_clk_factors(_hw) container_of(_hw, struct clk_factors, hw)
-+
-+ struct clk_composite *composite = to_clk_composite(hw);
-+ struct clk_hw *rate_hw = composite->rate_hw;
-+ struct clk_factors *factors = to_clk_factors(rate_hw);
-+ unsigned long flags = 0;
-+ u32 reg;
-+
-+ if (factors->lock)
-+ spin_lock_irqsave(factors->lock, flags);
-+
-+ reg = readl(factors->reg);
-+
-+ /* set sample clock phase control */
-+ reg &= ~(0x7 << 20);
-+ reg |= ((sample & 0x7) << 20);
-+
-+ /* set output clock phase control */
-+ reg &= ~(0x7 << 8);
-+ reg |= ((output & 0x7) << 8);
-+
-+ writel(reg, factors->reg);
-+
-+ if (factors->lock)
-+ spin_unlock_irqrestore(factors->lock, flags);
-+}
-+EXPORT_SYMBOL(clk_sunxi_mmc_phase_control);
-+
-+
-+/**
- * sunxi_factors_clk_setup() - Setup function for factor clocks
- */
-
-diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
-index 8aaf8c1..d50ac1c 100644
---- a/drivers/mmc/host/Kconfig
-+++ b/drivers/mmc/host/Kconfig
-@@ -694,3 +694,10 @@ config MMC_REALTEK_PCI
- help
- Say Y here to include driver code to support SD/MMC card interface
- of Realtek PCI-E card reader
-+
-+config MMC_SUNXI
-+ tristate "Allwinner sunxi SD/MMC Host Controller support"
-+ depends on ARCH_SUNXI
-+ help
-+ This selects support for the SD/MMC Host Controller on
-+ Allwinner sunxi SoCs.
-diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
-index 0c8aa5e..c706c0f 100644
---- a/drivers/mmc/host/Makefile
-+++ b/drivers/mmc/host/Makefile
-@@ -53,6 +53,8 @@ obj-$(CONFIG_MMC_WMT) += wmt-sdmmc.o
-
- obj-$(CONFIG_MMC_REALTEK_PCI) += rtsx_pci_sdmmc.o
-
-+obj-$(CONFIG_MMC_SUNXI) += sunxi-mmc.o
-+
- obj-$(CONFIG_MMC_SDHCI_PLTFM) += sdhci-pltfm.o
- obj-$(CONFIG_MMC_SDHCI_CNS3XXX) += sdhci-cns3xxx.o
- obj-$(CONFIG_MMC_SDHCI_ESDHC_IMX) += sdhci-esdhc-imx.o
-diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
-new file mode 100644
-index 0000000..f1de52c
---- /dev/null
-+++ b/drivers/mmc/host/sunxi-mmc.c
-@@ -0,0 +1,1125 @@
-+/*
-+ * Driver for sunxi SD/MMC host controllers
-+ * (C) Copyright 2007-2011 Reuuimlla Technology Co., Ltd.
-+ * (C) Copyright 2007-2011 Aaron Maoye <leafy.myeh@reuuimllatech.com>
-+ * (C) Copyright 2013-2014 O2S GmbH <www.o2s.ch>
-+ * (C) Copyright 2013-2014 David Lanzendörfer <david.lanzendoerfer@o2s.ch>
-+ * (C) Copyright 2013-2014 Hans de Goede <hdegoede@redhat.com>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/io.h>
-+#include <linux/device.h>
-+#include <linux/interrupt.h>
-+#include <linux/delay.h>
-+#include <linux/err.h>
-+
-+#include <linux/clk.h>
-+#include <linux/clk-private.h>
-+#include <linux/clk/sunxi.h>
-+
-+#include <linux/gpio.h>
-+#include <linux/platform_device.h>
-+#include <linux/spinlock.h>
-+#include <linux/scatterlist.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/slab.h>
-+#include <linux/regulator/consumer.h>
-+#include <linux/reset.h>
-+
-+#include <linux/of_address.h>
-+#include <linux/of_gpio.h>
-+#include <linux/of_platform.h>
-+
-+#include <linux/mmc/host.h>
-+#include <linux/mmc/sd.h>
-+#include <linux/mmc/sdio.h>
-+#include <linux/mmc/mmc.h>
-+#include <linux/mmc/core.h>
-+#include <linux/mmc/card.h>
-+#include <linux/mmc/slot-gpio.h>
-+
-+/* register offset definitions */
-+#define SDXC_REG_GCTRL (0x00) /* SMC Global Control Register */
-+#define SDXC_REG_CLKCR (0x04) /* SMC Clock Control Register */
-+#define SDXC_REG_TMOUT (0x08) /* SMC Time Out Register */
-+#define SDXC_REG_WIDTH (0x0C) /* SMC Bus Width Register */
-+#define SDXC_REG_BLKSZ (0x10) /* SMC Block Size Register */
-+#define SDXC_REG_BCNTR (0x14) /* SMC Byte Count Register */
-+#define SDXC_REG_CMDR (0x18) /* SMC Command Register */
-+#define SDXC_REG_CARG (0x1C) /* SMC Argument Register */
-+#define SDXC_REG_RESP0 (0x20) /* SMC Response Register 0 */
-+#define SDXC_REG_RESP1 (0x24) /* SMC Response Register 1 */
-+#define SDXC_REG_RESP2 (0x28) /* SMC Response Register 2 */
-+#define SDXC_REG_RESP3 (0x2C) /* SMC Response Register 3 */
-+#define SDXC_REG_IMASK (0x30) /* SMC Interrupt Mask Register */
-+#define SDXC_REG_MISTA (0x34) /* SMC Masked Interrupt Status Register */
-+#define SDXC_REG_RINTR (0x38) /* SMC Raw Interrupt Status Register */
-+#define SDXC_REG_STAS (0x3C) /* SMC Status Register */
-+#define SDXC_REG_FTRGL (0x40) /* SMC FIFO Threshold Watermark Registe */
-+#define SDXC_REG_FUNS (0x44) /* SMC Function Select Register */
-+#define SDXC_REG_CBCR (0x48) /* SMC CIU Byte Count Register */
-+#define SDXC_REG_BBCR (0x4C) /* SMC BIU Byte Count Register */
-+#define SDXC_REG_DBGC (0x50) /* SMC Debug Enable Register */
-+#define SDXC_REG_HWRST (0x78) /* SMC Card Hardware Reset for Register */
-+#define SDXC_REG_DMAC (0x80) /* SMC IDMAC Control Register */
-+#define SDXC_REG_DLBA (0x84) /* SMC IDMAC Descriptor List Base Addre */
-+#define SDXC_REG_IDST (0x88) /* SMC IDMAC Status Register */
-+#define SDXC_REG_IDIE (0x8C) /* SMC IDMAC Interrupt Enable Register */
-+#define SDXC_REG_CHDA (0x90)
-+#define SDXC_REG_CBDA (0x94)
-+
-+#define mci_readl(host, reg) \
-+ readl((host)->reg_base + SDXC_##reg)
-+#define mci_writel(host, reg, value) \
-+ writel((value), (host)->reg_base + SDXC_##reg)
-+
-+/* global control register bits */
-+#define SDXC_SOFT_RESET BIT(0)
-+#define SDXC_FIFO_RESET BIT(1)
-+#define SDXC_DMA_RESET BIT(2)
-+#define SDXC_INTERRUPT_ENABLE_BIT BIT(4)
-+#define SDXC_DMA_ENABLE_BIT BIT(5)
-+#define SDXC_DEBOUNCE_ENABLE_BIT BIT(8)
-+#define SDXC_POSEDGE_LATCH_DATA BIT(9)
-+#define SDXC_DDR_MODE BIT(10)
-+#define SDXC_MEMORY_ACCESS_DONE BIT(29)
-+#define SDXC_ACCESS_DONE_DIRECT BIT(30)
-+#define SDXC_ACCESS_BY_AHB BIT(31)
-+#define SDXC_ACCESS_BY_DMA (0 << 31)
-+#define SDXC_HARDWARE_RESET \
-+ (SDXC_SOFT_RESET | SDXC_FIFO_RESET | SDXC_DMA_RESET)
-+
-+/* clock control bits */
-+#define SDXC_CARD_CLOCK_ON BIT(16)
-+#define SDXC_LOW_POWER_ON BIT(17)
-+
-+/* bus width */
-+#define SDXC_WIDTH1 0
-+#define SDXC_WIDTH4 1
-+#define SDXC_WIDTH8 2
-+
-+/* smc command bits */
-+#define SDXC_RESP_EXPIRE BIT(6)
-+#define SDXC_LONG_RESPONSE BIT(7)
-+#define SDXC_CHECK_RESPONSE_CRC BIT(8)
-+#define SDXC_DATA_EXPIRE BIT(9)
-+#define SDXC_WRITE BIT(10)
-+#define SDXC_SEQUENCE_MODE BIT(11)
-+#define SDXC_SEND_AUTO_STOP BIT(12)
-+#define SDXC_WAIT_PRE_OVER BIT(13)
-+#define SDXC_STOP_ABORT_CMD BIT(14)
-+#define SDXC_SEND_INIT_SEQUENCE BIT(15)
-+#define SDXC_UPCLK_ONLY BIT(21)
-+#define SDXC_READ_CEATA_DEV BIT(22)
-+#define SDXC_CCS_EXPIRE BIT(23)
-+#define SDXC_ENABLE_BIT_BOOT BIT(24)
-+#define SDXC_ALT_BOOT_OPTIONS BIT(25)
-+#define SDXC_BOOT_ACK_EXPIRE BIT(26)
-+#define SDXC_BOOT_ABORT BIT(27)
-+#define SDXC_VOLTAGE_SWITCH BIT(28)
-+#define SDXC_USE_HOLD_REGISTER BIT(29)
-+#define SDXC_START BIT(31)
-+
-+/* interrupt bits */
-+#define SDXC_RESP_ERROR BIT(1)
-+#define SDXC_COMMAND_DONE BIT(2)
-+#define SDXC_DATA_OVER BIT(3)
-+#define SDXC_TX_DATA_REQUEST BIT(4)
-+#define SDXC_RX_DATA_REQUEST BIT(5)
-+#define SDXC_RESP_CRC_ERROR BIT(6)
-+#define SDXC_DATA_CRC_ERROR BIT(7)
-+#define SDXC_RESP_TIMEOUT BIT(8)
-+#define SDXC_DATA_TIMEOUT BIT(9)
-+#define SDXC_VOLTAGE_CHANGE_DONE BIT(10)
-+#define SDXC_FIFO_RUN_ERROR BIT(11)
-+#define SDXC_HARD_WARE_LOCKED BIT(12)
-+#define SDXC_START_BIT_ERROR BIT(13)
-+#define SDXC_AUTO_COMMAND_DONE BIT(14)
-+#define SDXC_END_BIT_ERROR BIT(15)
-+#define SDXC_SDIO_INTERRUPT BIT(16)
-+#define SDXC_CARD_INSERT BIT(30)
-+#define SDXC_CARD_REMOVE BIT(31)
-+#define SDXC_INTERRUPT_ERROR_BIT \
-+ (SDXC_RESP_ERROR | SDXC_RESP_CRC_ERROR | SDXC_DATA_CRC_ERROR | \
-+ SDXC_RESP_TIMEOUT | SDXC_DATA_TIMEOUT | SDXC_FIFO_RUN_ERROR | \
-+ SDXC_HARD_WARE_LOCKED | SDXC_START_BIT_ERROR | SDXC_END_BIT_ERROR)
-+#define SDXC_INTERRUPT_DONE_BIT \
-+ (SDXC_AUTO_COMMAND_DONE | SDXC_DATA_OVER | \
-+ SDXC_COMMAND_DONE | SDXC_VOLTAGE_CHANGE_DONE)
-+
-+/* status */
-+#define SDXC_RXWL_FLAG BIT(0)
-+#define SDXC_TXWL_FLAG BIT(1)
-+#define SDXC_FIFO_EMPTY BIT(2)
-+#define SDXC_FIFO_FULL BIT(3)
-+#define SDXC_CARD_PRESENT BIT(8)
-+#define SDXC_CARD_DATA_BUSY BIT(9)
-+#define SDXC_DATA_FSM_BUSY BIT(10)
-+#define SDXC_DMA_REQUEST BIT(31)
-+#define SDXC_FIFO_SIZE 16
-+
-+/* Function select */
-+#define SDXC_CEATA_ON (0xceaa << 16)
-+#define SDXC_SEND_IRQ_RESPONSE BIT(0)
-+#define SDXC_SDIO_READ_WAIT BIT(1)
-+#define SDXC_ABORT_READ_DATA BIT(2)
-+#define SDXC_SEND_CCSD BIT(8)
-+#define SDXC_SEND_AUTO_STOPCCSD BIT(9)
-+#define SDXC_CEATA_DEV_IRQ_ENABLE BIT(10)
-+
-+/* IDMA controller bus mod bit field */
-+#define SDXC_IDMAC_SOFT_RESET BIT(0)
-+#define SDXC_IDMAC_FIX_BURST BIT(1)
-+#define SDXC_IDMAC_IDMA_ON BIT(7)
-+#define SDXC_IDMAC_REFETCH_DES BIT(31)
-+
-+/* IDMA status bit field */
-+#define SDXC_IDMAC_TRANSMIT_INTERRUPT BIT(0)
-+#define SDXC_IDMAC_RECEIVE_INTERRUPT BIT(1)
-+#define SDXC_IDMAC_FATAL_BUS_ERROR BIT(2)
-+#define SDXC_IDMAC_DESTINATION_INVALID BIT(4)
-+#define SDXC_IDMAC_CARD_ERROR_SUM BIT(5)
-+#define SDXC_IDMAC_NORMAL_INTERRUPT_SUM BIT(8)
-+#define SDXC_IDMAC_ABNORMAL_INTERRUPT_SUM BIT(9)
-+#define SDXC_IDMAC_HOST_ABORT_INTERRUPT BIT(10)
-+#define SDXC_IDMAC_IDLE (0 << 13)
-+#define SDXC_IDMAC_SUSPEND (1 << 13)
-+#define SDXC_IDMAC_DESC_READ (2 << 13)
-+#define SDXC_IDMAC_DESC_CHECK (3 << 13)
-+#define SDXC_IDMAC_READ_REQUEST_WAIT (4 << 13)
-+#define SDXC_IDMAC_WRITE_REQUEST_WAIT (5 << 13)
-+#define SDXC_IDMAC_READ (6 << 13)
-+#define SDXC_IDMAC_WRITE (7 << 13)
-+#define SDXC_IDMAC_DESC_CLOSE (8 << 13)
-+
-+/*
-+* If the idma-des-size-bits of property is ie 13, bufsize bits are:
-+* Bits 0-12: buf1 size
-+* Bits 13-25: buf2 size
-+* Bits 26-31: not used
-+* Since we only ever set buf1 size, we can simply store it directly.
-+*/
-+#define SDXC_IDMAC_DES0_DIC BIT(1) /* disable interrupt on completion */
-+#define SDXC_IDMAC_DES0_LD BIT(2) /* last descriptor */
-+#define SDXC_IDMAC_DES0_FD BIT(3) /* first descriptor */
-+#define SDXC_IDMAC_DES0_CH BIT(4) /* chain mode */
-+#define SDXC_IDMAC_DES0_ER BIT(5) /* end of ring */
-+#define SDXC_IDMAC_DES0_CES BIT(30) /* card error summary */
-+#define SDXC_IDMAC_DES0_OWN BIT(31) /* 1-idma owns it, 0-host owns it */
-+
-+struct sunxi_idma_des {
-+ u32 config;
-+ u32 buf_size;
-+ u32 buf_addr_ptr1;
-+ u32 buf_addr_ptr2;
-+};
-+
-+struct sunxi_mmc_host {
-+ struct mmc_host *mmc;
-+ struct regulator *vmmc;
-+ struct reset_control *reset;
-+
-+ /* IO mapping base */
-+ void __iomem *reg_base;
-+
-+ spinlock_t lock;
-+ struct tasklet_struct manual_stop_tasklet;
-+
-+ /* clock management */
-+ struct clk *clk_ahb;
-+ struct clk *clk_mod;
-+
-+ /* ios information */
-+ u32 clk_mod_rate;
-+ u32 bus_width;
-+ u32 idma_des_size_bits;
-+ u32 ddr;
-+ u32 voltage_switching;
-+
-+ /* irq */
-+ int irq;
-+ u32 int_sum;
-+ u32 sdio_imask;
-+
-+ /* flags */
-+ bool wait_dma;
-+
-+ dma_addr_t sg_dma;
-+ void *sg_cpu;
-+
-+ struct mmc_request *mrq;
-+ struct mmc_request *manual_stop_mrq;
-+ u32 ferror;
-+};
-+
-+static int sunxi_mmc_init_host(struct mmc_host *mmc)
-+{
-+ u32 rval;
-+ struct sunxi_mmc_host *smc_host = mmc_priv(mmc);
-+ int ret;
-+
-+ ret = clk_prepare_enable(smc_host->clk_ahb);
-+ if (ret) {
-+ dev_err(mmc_dev(smc_host->mmc), "AHB clk err %d\n", ret);
-+ return ret;
-+ }
-+
-+ ret = clk_prepare_enable(smc_host->clk_mod);
-+ if (ret) {
-+ dev_err(mmc_dev(smc_host->mmc), "MOD clk err %d\n", ret);
-+ clk_disable_unprepare(smc_host->clk_ahb);
-+ return ret;
-+ }
-+
-+ if (smc_host->reset) {
-+ ret = reset_control_deassert(smc_host->reset);
-+ if (ret) {
-+ dev_err(mmc_dev(smc_host->mmc), "reset err %d\n", ret);
-+ clk_disable_unprepare(smc_host->clk_ahb);
-+ clk_disable_unprepare(smc_host->clk_mod);
-+ return ret;
-+ }
-+ }
-+
-+ /* reset controller */
-+ rval = mci_readl(smc_host, REG_GCTRL);
-+ rval |= SDXC_HARDWARE_RESET;
-+ mci_writel(smc_host, REG_GCTRL, rval);
-+
-+ mci_writel(smc_host, REG_FTRGL, 0x20070008);
-+ mci_writel(smc_host, REG_TMOUT, 0xffffffff);
-+ mci_writel(smc_host, REG_IMASK, smc_host->sdio_imask);
-+ mci_writel(smc_host, REG_RINTR, 0xffffffff);
-+ mci_writel(smc_host, REG_DBGC, 0xdeb);
-+ mci_writel(smc_host, REG_FUNS, SDXC_CEATA_ON);
-+ mci_writel(smc_host, REG_DLBA, smc_host->sg_dma);
-+
-+ rval = mci_readl(smc_host, REG_GCTRL);
-+ rval |= SDXC_INTERRUPT_ENABLE_BIT;
-+ rval &= ~SDXC_ACCESS_DONE_DIRECT;
-+ mci_writel(smc_host, REG_GCTRL, rval);
-+
-+ return 0;
-+}
-+
-+static void sunxi_mmc_exit_host(struct sunxi_mmc_host *smc_host)
-+{
-+ mci_writel(smc_host, REG_GCTRL, SDXC_HARDWARE_RESET);
-+
-+ if (smc_host->reset)
-+ reset_control_assert(smc_host->reset);
-+
-+ clk_disable_unprepare(smc_host->clk_ahb);
-+ clk_disable_unprepare(smc_host->clk_mod);
-+}
-+
-+/* /\* UHS-I Operation Modes */
-+/* * DS 25MHz 12.5MB/s 3.3V */
-+/* * HS 50MHz 25MB/s 3.3V */
-+/* * SDR12 25MHz 12.5MB/s 1.8V */
-+/* * SDR25 50MHz 25MB/s 1.8V */
-+/* * SDR50 100MHz 50MB/s 1.8V */
-+/* * SDR104 208MHz 104MB/s 1.8V */
-+/* * DDR50 50MHz 50MB/s 1.8V */
-+/* * MMC Operation Modes */
-+/* * DS 26MHz 26MB/s 3/1.8/1.2V */
-+/* * HS 52MHz 52MB/s 3/1.8/1.2V */
-+/* * HSDDR 52MHz 104MB/s 3/1.8/1.2V */
-+/* * HS200 200MHz 200MB/s 1.8/1.2V */
-+/* * */
-+/* * Spec. Timing */
-+/* * SD3.0 */
-+/* * Fcclk Tcclk Fsclk Tsclk Tis Tih odly RTis RTih */
-+/* * 400K 2.5us 24M 41ns 5ns 5ns 1 2209ns 41ns */
-+/* * 25M 40ns 600M 1.67ns 5ns 5ns 3 14.99ns 5.01ns */
-+/* * 50M 20ns 600M 1.67ns 6ns 2ns 3 14.99ns 5.01ns */
-+/* * 50MDDR 20ns 600M 1.67ns 6ns 0.8ns 2 6.67ns 3.33ns */
-+/* * 104M 9.6ns 600M 1.67ns 3ns 0.8ns 1 7.93ns 1.67ns */
-+/* * 208M 4.8ns 600M 1.67ns 1.4ns 0.8ns 1 3.33ns 1.67ns */
-+
-+/* * 25M 40ns 300M 3.33ns 5ns 5ns 2 13.34ns 6.66ns */
-+/* * 50M 20ns 300M 3.33ns 6ns 2ns 2 13.34ns 6.66ns */
-+/* * 50MDDR 20ns 300M 3.33ns 6ns 0.8ns 1 6.67ns 3.33ns */
-+/* * 104M 9.6ns 300M 3.33ns 3ns 0.8ns 0 7.93ns 1.67ns */
-+/* * 208M 4.8ns 300M 3.33ns 1.4ns 0.8ns 0 3.13ns 1.67ns */
-+
-+/* * eMMC4.5 */
-+/* * 400K 2.5us 24M 41ns 3ns 3ns 1 2209ns 41ns */
-+/* * 25M 40ns 600M 1.67ns 3ns 3ns 3 14.99ns 5.01ns */
-+/* * 50M 20ns 600M 1.67ns 3ns 3ns 3 14.99ns 5.01ns */
-+/* * 50MDDR 20ns 600M 1.67ns 2.5ns 2.5ns 2 6.67ns 3.33ns */
-+/* * 200M 5ns 600M 1.67ns 1.4ns 0.8ns 1 3.33ns 1.67ns */
-+/* *\/ */
-+
-+static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host,
-+ struct mmc_data *data)
-+{
-+ struct sunxi_idma_des *pdes = (struct sunxi_idma_des *)host->sg_cpu;
-+ struct sunxi_idma_des *pdes_pa = (struct sunxi_idma_des *)host->sg_dma;
-+ int i, max_len = (1 << host->idma_des_size_bits);
-+
-+ for (i = 0; i < data->sg_len; i++) {
-+ pdes[i].config = SDXC_IDMAC_DES0_CH | SDXC_IDMAC_DES0_OWN |
-+ SDXC_IDMAC_DES0_DIC;
-+
-+ if (data->sg[i].length == max_len)
-+ pdes[i].buf_size = 0; /* 0 == max_len */
-+ else
-+ pdes[i].buf_size = data->sg[i].length;
-+
-+ pdes[i].buf_addr_ptr1 = sg_dma_address(&data->sg[i]);
-+ pdes[i].buf_addr_ptr2 = (u32)&pdes_pa[i + 1];
-+ }
-+
-+ pdes[0].config |= SDXC_IDMAC_DES0_FD;
-+ pdes[i - 1].config = SDXC_IDMAC_DES0_OWN | SDXC_IDMAC_DES0_LD;
-+
-+ /*
-+ * Avoid the io-store starting the idmac hitting io-mem before the
-+ * descriptors hit the main-mem.
-+ */
-+ wmb();
-+}
-+
-+static enum dma_data_direction sunxi_mmc_get_dma_dir(struct mmc_data *data)
-+{
-+ if (data->flags & MMC_DATA_WRITE)
-+ return DMA_TO_DEVICE;
-+ else
-+ return DMA_FROM_DEVICE;
-+}
-+
-+static int sunxi_mmc_map_dma(struct sunxi_mmc_host *smc_host,
-+ struct mmc_data *data)
-+{
-+ u32 i, dma_len;
-+ struct scatterlist *sg;
-+
-+ dma_len = dma_map_sg(mmc_dev(smc_host->mmc), data->sg, data->sg_len,
-+ sunxi_mmc_get_dma_dir(data));
-+ if (dma_len == 0) {
-+ dev_err(mmc_dev(smc_host->mmc), "dma_map_sg failed\n");
-+ return -ENOMEM;
-+ }
-+
-+ for_each_sg(data->sg, sg, data->sg_len, i) {
-+ if (sg->offset & 3 || sg->length & 3) {
-+ dev_err(mmc_dev(smc_host->mmc),
-+ "unaligned scatterlist: os %x length %d\n",
-+ sg->offset, sg->length);
-+ return -EINVAL;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static void sunxi_mmc_start_dma(struct sunxi_mmc_host *smc_host,
-+ struct mmc_data *data)
-+{
-+ u32 rval;
-+
-+ sunxi_mmc_init_idma_des(smc_host, data);
-+
-+ rval = mci_readl(smc_host, REG_GCTRL);
-+ rval |= SDXC_DMA_ENABLE_BIT;
-+ mci_writel(smc_host, REG_GCTRL, rval);
-+ rval |= SDXC_DMA_RESET;
-+ mci_writel(smc_host, REG_GCTRL, rval);
-+
-+ mci_writel(smc_host, REG_DMAC, SDXC_IDMAC_SOFT_RESET);
-+
-+ if (!(data->flags & MMC_DATA_WRITE))
-+ mci_writel(smc_host, REG_IDIE, SDXC_IDMAC_RECEIVE_INTERRUPT);
-+
-+ mci_writel(smc_host, REG_DMAC,
-+ SDXC_IDMAC_FIX_BURST | SDXC_IDMAC_IDMA_ON);
-+}
-+
-+static void sunxi_mmc_send_manual_stop(struct sunxi_mmc_host *host,
-+ struct mmc_request *req)
-+{
-+ u32 cmd_val = SDXC_START | SDXC_RESP_EXPIRE | SDXC_STOP_ABORT_CMD
-+ | SDXC_CHECK_RESPONSE_CRC | MMC_STOP_TRANSMISSION;
-+ u32 ri = 0;
-+ unsigned long expire = jiffies + msecs_to_jiffies(1000);
-+
-+ mci_writel(host, REG_CARG, 0);
-+ mci_writel(host, REG_CMDR, cmd_val);
-+
-+ do {
-+ ri = mci_readl(host, REG_RINTR);
-+ } while (!(ri & (SDXC_COMMAND_DONE | SDXC_INTERRUPT_ERROR_BIT)) &&
-+ time_before(jiffies, expire));
-+
-+ if (ri & SDXC_INTERRUPT_ERROR_BIT) {
-+ dev_err(mmc_dev(host->mmc), "send stop command failed\n");
-+ if (req->stop)
-+ req->stop->resp[0] = -ETIMEDOUT;
-+ } else {
-+ if (req->stop)
-+ req->stop->resp[0] = mci_readl(host, REG_RESP0);
-+ }
-+
-+ mci_writel(host, REG_RINTR, 0xffff);
-+}
-+
-+static void sunxi_mmc_dump_errinfo(struct sunxi_mmc_host *smc_host)
-+{
-+ struct mmc_command *cmd = smc_host->mrq->cmd;
-+ struct mmc_data *data = smc_host->mrq->data;
-+
-+ /* For some cmds timeout is normal with sd/mmc cards */
-+ if ((smc_host->int_sum & SDXC_INTERRUPT_ERROR_BIT) ==
-+ SDXC_RESP_TIMEOUT && (cmd->opcode == SD_IO_SEND_OP_COND ||
-+ cmd->opcode == SD_IO_RW_DIRECT))
-+ return;
-+
-+ dev_err(mmc_dev(smc_host->mmc),
-+ "smc %d err, cmd %d,%s%s%s%s%s%s%s%s%s%s !!\n",
-+ smc_host->mmc->index, cmd->opcode,
-+ data ? (data->flags & MMC_DATA_WRITE ? " WR" : " RD") : "",
-+ smc_host->int_sum & SDXC_RESP_ERROR ? " RE" : "",
-+ smc_host->int_sum & SDXC_RESP_CRC_ERROR ? " RCE" : "",
-+ smc_host->int_sum & SDXC_DATA_CRC_ERROR ? " DCE" : "",
-+ smc_host->int_sum & SDXC_RESP_TIMEOUT ? " RTO" : "",
-+ smc_host->int_sum & SDXC_DATA_TIMEOUT ? " DTO" : "",
-+ smc_host->int_sum & SDXC_FIFO_RUN_ERROR ? " FE" : "",
-+ smc_host->int_sum & SDXC_HARD_WARE_LOCKED ? " HL" : "",
-+ smc_host->int_sum & SDXC_START_BIT_ERROR ? " SBE" : "",
-+ smc_host->int_sum & SDXC_END_BIT_ERROR ? " EBE" : ""
-+ );
-+}
-+
-+/* Called in interrupt context! */
-+static int sunxi_mmc_finalize_request(struct sunxi_mmc_host *host)
-+{
-+ struct mmc_request *mrq = host->mrq;
-+
-+ mci_writel(host, REG_IMASK, host->sdio_imask);
-+ mci_writel(host, REG_IDIE, 0);
-+
-+ if (host->int_sum & SDXC_INTERRUPT_ERROR_BIT) {
-+ sunxi_mmc_dump_errinfo(host);
-+ mrq->cmd->error = -ETIMEDOUT;
-+
-+ if (mrq->data)
-+ mrq->data->error = -ETIMEDOUT;
-+
-+ if (mrq->stop)
-+ mrq->stop->error = -ETIMEDOUT;
-+ } else {
-+ if (mrq->cmd->flags & MMC_RSP_136) {
-+ mrq->cmd->resp[0] = mci_readl(host, REG_RESP3);
-+ mrq->cmd->resp[1] = mci_readl(host, REG_RESP2);
-+ mrq->cmd->resp[2] = mci_readl(host, REG_RESP1);
-+ mrq->cmd->resp[3] = mci_readl(host, REG_RESP0);
-+ } else {
-+ mrq->cmd->resp[0] = mci_readl(host, REG_RESP0);
-+ }
-+
-+ if (mrq->data)
-+ mrq->data->bytes_xfered =
-+ mrq->data->blocks * mrq->data->blksz;
-+ }
-+
-+ if (mrq->data) {
-+ struct mmc_data *data = mrq->data;
-+ u32 rval;
-+
-+ mci_writel(host, REG_IDST, 0x337);
-+ mci_writel(host, REG_DMAC, 0);
-+ rval = mci_readl(host, REG_GCTRL);
-+ rval |= SDXC_DMA_RESET;
-+ mci_writel(host, REG_GCTRL, rval);
-+ rval &= ~SDXC_DMA_ENABLE_BIT;
-+ mci_writel(host, REG_GCTRL, rval);
-+ rval |= SDXC_FIFO_RESET;
-+ mci_writel(host, REG_GCTRL, rval);
-+ dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
-+ sunxi_mmc_get_dma_dir(data));
-+ }
-+
-+ mci_writel(host, REG_RINTR, 0xffff);
-+
-+ dev_dbg(mmc_dev(host->mmc), "req done, resp %08x %08x %08x %08x\n",
-+ mrq->cmd->resp[0], mrq->cmd->resp[1],
-+ mrq->cmd->resp[2], mrq->cmd->resp[3]);
-+
-+ host->mrq = NULL;
-+ host->int_sum = 0;
-+ host->wait_dma = false;
-+
-+ if (mrq->data && mrq->data->error) {
-+ host->manual_stop_mrq = mrq;
-+ tasklet_schedule(&host->manual_stop_tasklet);
-+ return -EBUSY;
-+ }
-+
-+ return 0;
-+}
-+
-+static irqreturn_t sunxi_mmc_irq(int irq, void *dev_id)
-+{
-+ struct sunxi_mmc_host *host = dev_id;
-+ struct mmc_request *mrq;
-+ bool finalize = false;
-+ bool complete = false;
-+ bool sdio_int = false;
-+ u32 msk_int;
-+ u32 idma_int;
-+
-+ spin_lock(&host->lock);
-+
-+ idma_int = mci_readl(host, REG_IDST);
-+ msk_int = mci_readl(host, REG_MISTA);
-+
-+ dev_dbg(mmc_dev(host->mmc), "irq: rq %p mi %08x idi %08x\n",
-+ host->mrq, msk_int, idma_int);
-+
-+ mrq = host->mrq;
-+ if (mrq) {
-+ if (idma_int & SDXC_IDMAC_RECEIVE_INTERRUPT)
-+ host->wait_dma = false;
-+
-+ host->int_sum |= msk_int;
-+
-+ /* Wait for COMMAND_DONE on RESPONSE_TIMEOUT before finalize */
-+ if ((host->int_sum & SDXC_RESP_TIMEOUT) &&
-+ !(host->int_sum & SDXC_COMMAND_DONE))
-+ mci_writel(host, REG_IMASK,
-+ host->sdio_imask | SDXC_COMMAND_DONE);
-+ /* Don't wait for dma on error */
-+ else if (host->int_sum & SDXC_INTERRUPT_ERROR_BIT)
-+ finalize = true;
-+ else if ((host->int_sum & SDXC_INTERRUPT_DONE_BIT) &&
-+ !host->wait_dma)
-+ finalize = true;
-+ }
-+
-+ if (msk_int & SDXC_SDIO_INTERRUPT)
-+ sdio_int = true;
-+
-+ mci_writel(host, REG_RINTR, msk_int);
-+ mci_writel(host, REG_IDST, idma_int);
-+
-+ if (finalize) {
-+ if (sunxi_mmc_finalize_request(host) == 0)
-+ complete = true;
-+ }
-+
-+ spin_unlock(&host->lock);
-+
-+ if (complete)
-+ mmc_request_done(host->mmc, mrq);
-+
-+ if (sdio_int)
-+ mmc_signal_sdio_irq(host->mmc);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static void sunxi_mmc_manual_stop_tasklet(unsigned long data)
-+{
-+ struct sunxi_mmc_host *host = (struct sunxi_mmc_host *) data;
-+ struct mmc_request *mrq;
-+ unsigned long iflags;
-+
-+ spin_lock_irqsave(&host->lock, iflags);
-+ mrq = host->manual_stop_mrq;
-+ spin_unlock_irqrestore(&host->lock, iflags);
-+
-+ if (!mrq) {
-+ dev_err(mmc_dev(host->mmc), "no request for manual stop\n");
-+ return;
-+ }
-+
-+ dev_err(mmc_dev(host->mmc), "data error, sending stop command\n");
-+ sunxi_mmc_send_manual_stop(host, mrq);
-+
-+ spin_lock_irqsave(&host->lock, iflags);
-+ host->manual_stop_mrq = NULL;
-+ spin_unlock_irqrestore(&host->lock, iflags);
-+
-+ mmc_request_done(host->mmc, mrq);
-+}
-+
-+static void sunxi_mmc_oclk_onoff(struct sunxi_mmc_host *host, u32 oclk_en)
-+{
-+ unsigned long expire = jiffies + msecs_to_jiffies(2000);
-+ u32 rval;
-+
-+ rval = mci_readl(host, REG_CLKCR);
-+ rval &= ~(SDXC_CARD_CLOCK_ON | SDXC_LOW_POWER_ON);
-+
-+ if (oclk_en)
-+ rval |= SDXC_CARD_CLOCK_ON;
-+
-+ mci_writel(host, REG_CLKCR, rval);
-+
-+ rval = SDXC_START | SDXC_UPCLK_ONLY | SDXC_WAIT_PRE_OVER;
-+ if (host->voltage_switching)
-+ rval |= SDXC_VOLTAGE_SWITCH;
-+ mci_writel(host, REG_CMDR, rval);
-+
-+ do {
-+ rval = mci_readl(host, REG_CMDR);
-+ } while (time_before(jiffies, expire) && (rval & SDXC_START));
-+
-+ if (rval & SDXC_START) {
-+ dev_err(mmc_dev(host->mmc), "fatal err update clk timeout\n");
-+ host->ferror = 1;
-+ }
-+}
-+
-+static void sunxi_mmc_clk_set_rate(struct sunxi_mmc_host *smc_host,
-+ unsigned int rate)
-+{
-+ u32 newrate, oclk_dly, rval, sclk_dly, src_clk;
-+ struct clk_hw *hw = __clk_get_hw(smc_host->clk_mod);
-+
-+ newrate = clk_round_rate(smc_host->clk_mod, rate);
-+ if (smc_host->clk_mod_rate == newrate) {
-+ dev_dbg(mmc_dev(smc_host->mmc), "clk already %d, rounded %d\n",
-+ rate, newrate);
-+ return;
-+ }
-+
-+ dev_dbg(mmc_dev(smc_host->mmc), "setting clk to %d, rounded %d\n",
-+ rate, newrate);
-+
-+ /* setting clock rate */
-+ clk_set_rate(smc_host->clk_mod, newrate);
-+ smc_host->clk_mod_rate = clk_get_rate(smc_host->clk_mod);
-+ dev_dbg(mmc_dev(smc_host->mmc), "clk is now %d\n",
-+ smc_host->clk_mod_rate);
-+
-+ sunxi_mmc_oclk_onoff(smc_host, 0);
-+ /* clear internal divider */
-+ rval = mci_readl(smc_host, REG_CLKCR);
-+ rval &= ~0xff;
-+ mci_writel(smc_host, REG_CLKCR, rval);
-+
-+ /* determine delays */
-+ if (rate <= 400000) {
-+ oclk_dly = 0;
-+ sclk_dly = 7;
-+ } else if (rate <= 25000000) {
-+ oclk_dly = 0;
-+ sclk_dly = 5;
-+ } else if (rate <= 50000000) {
-+ if (smc_host->ddr) {
-+ oclk_dly = 2;
-+ sclk_dly = 4;
-+ } else {
-+ oclk_dly = 3;
-+ sclk_dly = 5;
-+ }
-+ } else {
-+ /* rate > 50000000 */
-+ oclk_dly = 2;
-+ sclk_dly = 4;
-+ }
-+
-+ src_clk = clk_get_rate(clk_get_parent(smc_host->clk_mod));
-+ if (src_clk >= 300000000 && src_clk <= 400000000) {
-+ if (oclk_dly)
-+ oclk_dly--;
-+ if (sclk_dly)
-+ sclk_dly--;
-+ }
-+
-+ clk_sunxi_mmc_phase_control(hw, sclk_dly, oclk_dly);
-+ sunxi_mmc_oclk_onoff(smc_host, 1);
-+
-+ /* oclk_onoff sets various irq status bits, clear these */
-+ mci_writel(smc_host, REG_RINTR,
-+ mci_readl(smc_host, REG_RINTR) & ~SDXC_SDIO_INTERRUPT);
-+}
-+
-+static void sunxi_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
-+{
-+ struct sunxi_mmc_host *host = mmc_priv(mmc);
-+ u32 rval;
-+ s32 err;
-+
-+ /* Set the power state */
-+ switch (ios->power_mode) {
-+ case MMC_POWER_ON:
-+ break;
-+
-+ case MMC_POWER_UP:
-+ if (!IS_ERR(host->vmmc)) {
-+ mmc_regulator_set_ocr(host->mmc, host->vmmc, ios->vdd);
-+ udelay(200);
-+ }
-+
-+ err = sunxi_mmc_init_host(mmc);
-+ if (err) {
-+ host->ferror = 1;
-+ return;
-+ }
-+
-+ enable_irq(host->irq);
-+
-+ dev_dbg(mmc_dev(host->mmc), "power on!\n");
-+ host->ferror = 0;
-+ break;
-+
-+ case MMC_POWER_OFF:
-+ dev_dbg(mmc_dev(host->mmc), "power off!\n");
-+ disable_irq(host->irq);
-+ sunxi_mmc_exit_host(host);
-+ if (!IS_ERR(host->vmmc))
-+ mmc_regulator_set_ocr(host->mmc, host->vmmc, 0);
-+
-+ host->ferror = 0;
-+ break;
-+ }
-+
-+ /* set bus width */
-+ switch (ios->bus_width) {
-+ case MMC_BUS_WIDTH_1:
-+ mci_writel(host, REG_WIDTH, SDXC_WIDTH1);
-+ host->bus_width = 1;
-+ break;
-+ case MMC_BUS_WIDTH_4:
-+ mci_writel(host, REG_WIDTH, SDXC_WIDTH4);
-+ host->bus_width = 4;
-+ break;
-+ case MMC_BUS_WIDTH_8:
-+ mci_writel(host, REG_WIDTH, SDXC_WIDTH8);
-+ host->bus_width = 8;
-+ break;
-+ }
-+
-+ /* set ddr mode */
-+ rval = mci_readl(host, REG_GCTRL);
-+ if (ios->timing == MMC_TIMING_UHS_DDR50) {
-+ rval |= SDXC_DDR_MODE;
-+ host->ddr = 1;
-+ } else {
-+ rval &= ~SDXC_DDR_MODE;
-+ host->ddr = 0;
-+ }
-+ mci_writel(host, REG_GCTRL, rval);
-+
-+ /* set up clock */
-+ if (ios->clock && ios->power_mode) {
-+ dev_dbg(mmc_dev(host->mmc), "ios->clock: %d\n", ios->clock);
-+ sunxi_mmc_clk_set_rate(host, ios->clock);
-+ usleep_range(50000, 55000);
-+ }
-+}
-+
-+static void sunxi_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable)
-+{
-+ struct sunxi_mmc_host *smc_host = mmc_priv(mmc);
-+ unsigned long flags;
-+ u32 imask;
-+
-+ spin_lock_irqsave(&smc_host->lock, flags);
-+
-+ imask = mci_readl(smc_host, REG_IMASK);
-+ if (enable) {
-+ smc_host->sdio_imask = SDXC_SDIO_INTERRUPT;
-+ imask |= SDXC_SDIO_INTERRUPT;
-+ } else {
-+ smc_host->sdio_imask = 0;
-+ imask &= ~SDXC_SDIO_INTERRUPT;
-+ }
-+ mci_writel(smc_host, REG_IMASK, imask);
-+ spin_unlock_irqrestore(&smc_host->lock, flags);
-+}
-+
-+static void sunxi_mmc_hw_reset(struct mmc_host *mmc)
-+{
-+ struct sunxi_mmc_host *smc_host = mmc_priv(mmc);
-+ mci_writel(smc_host, REG_HWRST, 0);
-+ udelay(10);
-+ mci_writel(smc_host, REG_HWRST, 1);
-+ udelay(300);
-+}
-+
-+static void sunxi_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
-+{
-+ struct sunxi_mmc_host *host = mmc_priv(mmc);
-+ struct mmc_command *cmd = mrq->cmd;
-+ struct mmc_data *data = mrq->data;
-+ unsigned long iflags;
-+ u32 imask = SDXC_INTERRUPT_ERROR_BIT;
-+ u32 cmd_val = SDXC_START | (cmd->opcode & 0x3f);
-+ int ret;
-+
-+ if (!mmc_gpio_get_cd(mmc) || host->ferror) {
-+ dev_dbg(mmc_dev(host->mmc), "no medium present\n");
-+ mrq->cmd->error = -ENOMEDIUM;
-+ mmc_request_done(mmc, mrq);
-+ return;
-+ }
-+
-+ if (data) {
-+ ret = sunxi_mmc_map_dma(host, data);
-+ if (ret < 0) {
-+ dev_err(mmc_dev(host->mmc), "map DMA failed\n");
-+ cmd->error = ret;
-+ cmd->data->error = ret;
-+ mmc_request_done(host->mmc, mrq);
-+ return;
-+ }
-+ }
-+
-+ if (cmd->opcode == MMC_GO_IDLE_STATE) {
-+ cmd_val |= SDXC_SEND_INIT_SEQUENCE;
-+ imask |= SDXC_COMMAND_DONE;
-+ }
-+
-+ if (cmd->opcode == SD_SWITCH_VOLTAGE) {
-+ cmd_val |= SDXC_VOLTAGE_SWITCH;
-+ imask |= SDXC_VOLTAGE_CHANGE_DONE;
-+ host->voltage_switching = 1;
-+ sunxi_mmc_oclk_onoff(host, 1);
-+ }
-+
-+ if (cmd->flags & MMC_RSP_PRESENT) {
-+ cmd_val |= SDXC_RESP_EXPIRE;
-+ if (cmd->flags & MMC_RSP_136)
-+ cmd_val |= SDXC_LONG_RESPONSE;
-+ if (cmd->flags & MMC_RSP_CRC)
-+ cmd_val |= SDXC_CHECK_RESPONSE_CRC;
-+
-+ if ((cmd->flags & MMC_CMD_MASK) == MMC_CMD_ADTC) {
-+ cmd_val |= SDXC_DATA_EXPIRE | SDXC_WAIT_PRE_OVER;
-+ if (cmd->data->flags & MMC_DATA_STREAM) {
-+ imask |= SDXC_AUTO_COMMAND_DONE;
-+ cmd_val |= SDXC_SEQUENCE_MODE |
-+ SDXC_SEND_AUTO_STOP;
-+ }
-+
-+ if (cmd->data->stop) {
-+ imask |= SDXC_AUTO_COMMAND_DONE;
-+ cmd_val |= SDXC_SEND_AUTO_STOP;
-+ } else {
-+ imask |= SDXC_DATA_OVER;
-+ }
-+
-+ if (cmd->data->flags & MMC_DATA_WRITE)
-+ cmd_val |= SDXC_WRITE;
-+ else
-+ host->wait_dma = true;
-+ } else {
-+ imask |= SDXC_COMMAND_DONE;
-+ }
-+ } else {
-+ imask |= SDXC_COMMAND_DONE;
-+ }
-+
-+ dev_dbg(mmc_dev(host->mmc), "cmd %d(%08x) arg %x ie 0x%08x len %d\n",
-+ cmd_val & 0x3f, cmd_val, cmd->arg, imask,
-+ mrq->data ? mrq->data->blksz * mrq->data->blocks : 0);
-+
-+ spin_lock_irqsave(&host->lock, iflags);
-+
-+ if (host->mrq || host->manual_stop_mrq) {
-+ spin_unlock_irqrestore(&host->lock, iflags);
-+
-+ if (data)
-+ dma_unmap_sg(mmc_dev(host->mmc), data->sg,
-+ data->sg_len, sunxi_mmc_get_dma_dir(data));
-+
-+ dev_err(mmc_dev(host->mmc), "request already pending\n");
-+ mrq->cmd->error = -EBUSY;
-+ mmc_request_done(host->mmc, mrq);
-+ return;
-+ }
-+
-+ if (data) {
-+ mci_writel(host, REG_BLKSZ, data->blksz);
-+ mci_writel(host, REG_BCNTR, data->blksz * data->blocks);
-+ sunxi_mmc_start_dma(host, data);
-+ }
-+
-+ host->mrq = mrq;
-+ mci_writel(host, REG_IMASK, host->sdio_imask | imask);
-+ mci_writel(host, REG_CARG, cmd->arg);
-+ mci_writel(host, REG_CMDR, cmd_val);
-+
-+ spin_unlock_irqrestore(&host->lock, iflags);
-+}
-+
-+static const struct of_device_id sunxi_mmc_of_match[] = {
-+ { .compatible = "allwinner,sun4i-a10-mmc", },
-+ { .compatible = "allwinner,sun5i-a13-mmc", },
-+ { /* sentinel */ }
-+};
-+MODULE_DEVICE_TABLE(of, sunxi_mmc_of_match);
-+
-+static struct mmc_host_ops sunxi_mmc_ops = {
-+ .request = sunxi_mmc_request,
-+ .set_ios = sunxi_mmc_set_ios,
-+ .get_ro = mmc_gpio_get_ro,
-+ .get_cd = mmc_gpio_get_cd,
-+ .enable_sdio_irq = sunxi_mmc_enable_sdio_irq,
-+ .hw_reset = sunxi_mmc_hw_reset,
-+};
-+
-+static int sunxi_mmc_resource_request(struct sunxi_mmc_host *host,
-+ struct platform_device *pdev)
-+{
-+ struct device_node *np = pdev->dev.of_node;
-+ int ret;
-+
-+ if (of_device_is_compatible(np, "allwinner,sun4i-a10-mmc"))
-+ host->idma_des_size_bits = 13;
-+ else
-+ host->idma_des_size_bits = 16;
-+
-+ host->vmmc = devm_regulator_get_optional(&pdev->dev, "vmmc");
-+ if (IS_ERR(host->vmmc) && PTR_ERR(host->vmmc) == -EPROBE_DEFER)
-+ return -EPROBE_DEFER;
-+
-+ host->reg_base = devm_ioremap_resource(&pdev->dev,
-+ platform_get_resource(pdev, IORESOURCE_MEM, 0));
-+ if (IS_ERR(host->reg_base))
-+ return PTR_ERR(host->reg_base);
-+
-+ host->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
-+ if (IS_ERR(host->clk_ahb)) {
-+ dev_err(&pdev->dev, "Could not get ahb clock\n");
-+ return PTR_ERR(host->clk_ahb);
-+ }
-+
-+ host->clk_mod = devm_clk_get(&pdev->dev, "mod");
-+ if (IS_ERR(host->clk_mod)) {
-+ dev_err(&pdev->dev, "Could not get mod clock\n");
-+ return PTR_ERR(host->clk_mod);
-+ }
-+
-+ host->reset = devm_reset_control_get(&pdev->dev, "ahb");
-+ if (IS_ERR(host->reset))
-+ host->reset = NULL; /* Having a reset controller is optional */
-+
-+ /*
-+ * Sometimes the controller asserts the irq on boot for some reason,
-+ * and since it is not clocked there is no way to clear it. So make
-+ * sure the controller is in a sane state before enabling irqs.
-+ */
-+ ret = sunxi_mmc_init_host(host->mmc);
-+ if (ret)
-+ return ret;
-+
-+ host->irq = platform_get_irq(pdev, 0);
-+ ret = devm_request_irq(&pdev->dev, host->irq, sunxi_mmc_irq, 0,
-+ "sunxi-mmc", host);
-+ if (ret == 0)
-+ disable_irq(host->irq);
-+
-+ /* And disable the controller again */
-+ sunxi_mmc_exit_host(host);
-+
-+ return ret;
-+}
-+
-+static int sunxi_mmc_probe(struct platform_device *pdev)
-+{
-+ struct sunxi_mmc_host *host;
-+ struct mmc_host *mmc;
-+ int ret;
-+
-+ mmc = mmc_alloc_host(sizeof(struct sunxi_mmc_host), &pdev->dev);
-+ if (!mmc) {
-+ dev_err(&pdev->dev, "mmc alloc host failed\n");
-+ return -ENOMEM;
-+ }
-+
-+ host = mmc_priv(mmc);
-+ host->mmc = mmc;
-+ spin_lock_init(&host->lock);
-+ tasklet_init(&host->manual_stop_tasklet,
-+ sunxi_mmc_manual_stop_tasklet, (unsigned long)host);
-+
-+ ret = sunxi_mmc_resource_request(host, pdev);
-+ if (ret)
-+ goto error_free_host;
-+
-+ host->sg_cpu = dma_alloc_coherent(&pdev->dev, PAGE_SIZE,
-+ &host->sg_dma, GFP_KERNEL);
-+ if (!host->sg_cpu) {
-+ dev_err(&pdev->dev, "Failed to allocate DMA descriptor mem\n");
-+ ret = -ENOMEM;
-+ goto error_free_host;
-+ }
-+
-+ mmc->ops = &sunxi_mmc_ops;
-+ mmc->max_blk_count = 8192;
-+ mmc->max_blk_size = 4096;
-+ mmc->max_segs = PAGE_SIZE / sizeof(struct sunxi_idma_des);
-+ mmc->max_seg_size = (1 << host->idma_des_size_bits);
-+ mmc->max_req_size = mmc->max_seg_size * mmc->max_segs;
-+ /* 400kHz ~ 50MHz */
-+ mmc->f_min = 400000;
-+ mmc->f_max = 50000000;
-+ /* available voltages */
-+ if (!IS_ERR(host->vmmc))
-+ mmc->ocr_avail = mmc_regulator_get_ocrmask(host->vmmc);
-+ else
-+ mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
-+
-+ mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED;
-+ mmc->caps2 |= MMC_CAP2_NO_PRESCAN_POWERUP;
-+
-+ ret = mmc_of_parse(mmc);
-+ if (ret)
-+ goto error_free_dma;
-+
-+ ret = mmc_add_host(mmc);
-+ if (ret)
-+ goto error_free_dma;
-+
-+ dev_info(&pdev->dev, "base:0x%p irq:%u\n", host->reg_base, host->irq);
-+ platform_set_drvdata(pdev, mmc);
-+ return 0;
-+
-+error_free_dma:
-+ dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
-+error_free_host:
-+ mmc_free_host(mmc);
-+ return ret;
-+}
-+
-+static int sunxi_mmc_remove(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+ struct sunxi_mmc_host *host = mmc_priv(mmc);
-+
-+ mmc_remove_host(mmc);
-+ sunxi_mmc_exit_host(host);
-+ tasklet_disable(&host->manual_stop_tasklet);
-+ dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
-+ mmc_free_host(mmc);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver sunxi_mmc_driver = {
-+ .driver = {
-+ .name = "sunxi-mmc",
-+ .owner = THIS_MODULE,
-+ .of_match_table = of_match_ptr(sunxi_mmc_of_match),
-+ },
-+ .probe = sunxi_mmc_probe,
-+ .remove = sunxi_mmc_remove,
-+};
-+module_platform_driver(sunxi_mmc_driver);
-+
-+MODULE_DESCRIPTION("Allwinner's SD/MMC Card Controller Driver");
-+MODULE_LICENSE("GPL v2");
-+MODULE_AUTHOR("David Lanzendörfer <david.lanzendoerfer@o2s.ch>");
-+MODULE_ALIAS("platform:sunxi-mmc");
-diff --git a/include/linux/clk/sunxi.h b/include/linux/clk/sunxi.h
-new file mode 100644
-index 0000000..1ef5c89
---- /dev/null
-+++ b/include/linux/clk/sunxi.h
-@@ -0,0 +1,22 @@
-+/*
-+ * Copyright 2013 - Hans de Goede <hdegoede@redhat.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ */
-+
-+#ifndef __LINUX_CLK_SUNXI_H_
-+#define __LINUX_CLK_SUNXI_H_
-+
-+#include <linux/clk.h>
-+
-+void clk_sunxi_mmc_phase_control(struct clk_hw *hw, u8 sample, u8 output);
-+
-+#endif
---
-1.9.0
-
diff --git a/0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch b/0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch
deleted file mode 100644
index e9015c9ad..000000000
--- a/0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-Bugzilla: 1089583
-Upstream-status: Sent for 3.15
-
-From 4cebb979af8d7bd1ec463406eaf57a44bd5b9f04 Mon Sep 17 00:00:00 2001
-From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-Date: Tue, 22 Apr 2014 11:21:00 -0400
-Subject: [PATCH] HID: rmi: do not handle touchscreens through hid-rmi
-
-Currently, hid-rmi drives every Synaptics product, but the touchscreens
-on the Windows tablets should be handled through hid-multitouch.
-
-Instead of providing a long list of PIDs, rely on the scan_report
-capability to detect which should go to hid-multitouch, and which
-should not go to hid-rmi.
-
-We introduce a generic HID_GROUP_HAVE_SPECIAL_DRIVER which can be reused
-amoung other drivers if they want to have a catch rule but still
-have multitouch devices handled through hid-multitouch.
-
-related bug:
-https://bugzilla.kernel.org/show_bug.cgi?id=74241
-https://bugzilla.redhat.com/show_bug.cgi?id=1089583
-
-Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
----
- drivers/hid/hid-core.c | 10 ++++++++--
- drivers/hid/hid-rmi.c | 6 ++++--
- include/linux/hid.h | 13 +++++++++++++
- 3 files changed, 25 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 6ba2fd0..ea18639 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -776,6 +776,14 @@ static int hid_scan_report(struct hid_device *hid)
- (hid->group == HID_GROUP_MULTITOUCH))
- hid->group = HID_GROUP_MULTITOUCH_WIN_8;
-
-+ /*
-+ * Vendor specific handlings
-+ */
-+ if ((hid->vendor == USB_VENDOR_ID_SYNAPTICS) &&
-+ (hid->group == HID_GROUP_GENERIC))
-+ /* hid-rmi should take care of them, not hid-generic */
-+ hid->group = HID_GROUP_HAVE_SPECIAL_DRIVER;
-+
- vfree(parser);
- return 0;
- }
-@@ -1840,8 +1848,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
- { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) },
- { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-- { HID_I2C_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
- { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
- { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
- { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
-diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
-index a4f04d4..a97a373 100644
---- a/drivers/hid/hid-rmi.c
-+++ b/drivers/hid/hid-rmi.c
-@@ -863,8 +863,10 @@ static void rmi_remove(struct hid_device *hdev)
- }
-
- static const struct hid_device_id rmi_id[] = {
-- { HID_I2C_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-+ { HID_DEVICE(BUS_I2C, HID_GROUP_HAVE_SPECIAL_DRIVER,
-+ USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-+ { HID_DEVICE(BUS_USB, HID_GROUP_HAVE_SPECIAL_DRIVER,
-+ USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
- { }
- };
- MODULE_DEVICE_TABLE(hid, rmi_id);
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 1b5f1e9..2fdd612 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -299,6 +299,19 @@ struct hid_item {
- #define HID_GROUP_MULTITOUCH 0x0002
- #define HID_GROUP_SENSOR_HUB 0x0003
- #define HID_GROUP_MULTITOUCH_WIN_8 0x0004
-+#define HID_GROUP_HAVE_SPECIAL_DRIVER 0xffff
-+/*
-+ * HID_GROUP_HAVE_SPECIAL_DRIVER should be used when the device needs to be
-+ * scanned in case it is handled by either hid-multitouch, hid-generic,
-+ * hid-sensor-hub or any other generic hid driver.
-+ *
-+ * Devices declared in hid_have_special_driver[] in hid-core.c can use
-+ * HID_GROUP_ANY instead because there will be not overlap between their
-+ * specific driver and a generic one.
-+ *
-+ * Note: HID_GROUP_ANY is declared in linux/mod_devicetable.h
-+ * and has a value of 0x0000
-+ */
-
- /*
- * This is the global environment of the parser. This information is
---
-1.9.0
-
diff --git a/0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch b/0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
deleted file mode 100644
index 632174608..000000000
--- a/0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
+++ /dev/null
@@ -1,1001 +0,0 @@
-Bugzilla: 1048314
-Upstream-status: Queued for 3.16
-
-From 39141443c8ea2900af627d688a255e064e2b6e19 Mon Sep 17 00:00:00 2001
-From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-Date: Wed, 9 Apr 2014 11:09:21 -0400
-Subject: [PATCH] HID: rmi: introduce RMI driver for Synaptics touchpads
-
-This driver add support for RMI4 over USB or I2C.
-The current state is that it uses its own RMI4 implementation, but once
-RMI4 is merged upstream, the driver will be a transport driver for the
-RMI4 library.
-
-Part of this driver should be considered as temporary. Most of the RMI4
-processing and input handling will be deleted at some point.
-
-I based my work on Andrew's regarding its port of RMI4 over HID (see
-https://github.com/mightybigcar/synaptics-rmi4/tree/rmihid )
-This repo presents how the driver may looks like at the end:
-https://github.com/mightybigcar/synaptics-rmi4/blob/rmihid/drivers/input/rmi4/rmi_hid.c
-
-Without this temporary solution, the workaround we gave to users
-is to disable i2c-hid, which leads to disabling the touchscreen on the
-XPS 11 and 12 (Haswell generation).
-
-Related bugs:
-https://bugzilla.redhat.com/show_bug.cgi?id=1048314
-https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1218973
-
-Signed-off-by: Andrew Duggan <aduggan@synaptics.com>
-Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-
-- Removed obviously wrong hid_hw_stop() at the end of probe
-
-Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
----
- drivers/hid/Kconfig | 8 +
- drivers/hid/Makefile | 1 +
- drivers/hid/hid-core.c | 2 +
- drivers/hid/hid-rmi.c | 890 +++++++++++++++++++++++++++++++++++++++++++++++++
- include/linux/hid.h | 2 +
- 6 files changed, 946 insertions(+)
- create mode 100644 drivers/hid/hid-rmi.c
-
-diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 34e2d39..b2d733b 100644
---- a/drivers/hid/Kconfig
-+++ b/drivers/hid/Kconfig
-@@ -645,6 +645,14 @@ config HID_SUNPLUS
- ---help---
- Support for Sunplus wireless desktop.
-
-+config HID_RMI
-+ tristate "Synaptics RMI4 device support"
-+ depends on HID
-+ ---help---
-+ Support for Synaptics RMI4 touchpads.
-+ Say Y here if you have a Synaptics RMI4 touchpads over i2c-hid or usbhid
-+ and want support for its special functionalities.
-+
- config HID_GREENASIA
- tristate "GreenAsia (Product ID 0x12) game controller support"
- depends on HID
-diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index 30e4431..b326f79 100644
---- a/drivers/hid/Makefile
-+++ b/drivers/hid/Makefile
-@@ -96,6 +96,7 @@ obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o hid-roccat-common.o \
- hid-roccat-arvo.o hid-roccat-isku.o hid-roccat-kone.o \
- hid-roccat-koneplus.o hid-roccat-konepure.o hid-roccat-kovaplus.o \
- hid-roccat-lua.o hid-roccat-pyra.o hid-roccat-ryos.o hid-roccat-savu.o
-+obj-$(CONFIG_HID_RMI) += hid-rmi.o
- obj-$(CONFIG_HID_SAITEK) += hid-saitek.o
- obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o
- obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 253fe23..543dd1f 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -1836,6 +1836,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
- { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) },
- { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-+ { HID_I2C_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
- { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
- { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
- { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
-diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
-new file mode 100644
-index 0000000..a4f04d4
---- /dev/null
-+++ b/drivers/hid/hid-rmi.c
-@@ -0,0 +1,890 @@
-+/*
-+ * Copyright (c) 2013 Andrew Duggan <aduggan@synaptics.com>
-+ * Copyright (c) 2013 Synaptics Incorporated
-+ * Copyright (c) 2014 Benjamin Tissoires <benjamin.tissoires@gmail.com>
-+ * Copyright (c) 2014 Red Hat, Inc
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the Free
-+ * Software Foundation; either version 2 of the License, or (at your option)
-+ * any later version.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/hid.h>
-+#include <linux/input.h>
-+#include <linux/input/mt.h>
-+#include <linux/module.h>
-+#include <linux/pm.h>
-+#include <linux/slab.h>
-+#include <linux/wait.h>
-+#include <linux/sched.h>
-+#include "hid-ids.h"
-+
-+/* removed backported compat.h include */
-+
-+#define RMI_MOUSE_REPORT_ID 0x01 /* Mouse emulation Report */
-+#define RMI_WRITE_REPORT_ID 0x09 /* Output Report */
-+#define RMI_READ_ADDR_REPORT_ID 0x0a /* Output Report */
-+#define RMI_READ_DATA_REPORT_ID 0x0b /* Input Report */
-+#define RMI_ATTN_REPORT_ID 0x0c /* Input Report */
-+#define RMI_SET_RMI_MODE_REPORT_ID 0x0f /* Feature Report */
-+
-+/* flags */
-+#define RMI_READ_REQUEST_PENDING BIT(0)
-+#define RMI_READ_DATA_PENDING BIT(1)
-+#define RMI_STARTED BIT(2)
-+
-+enum rmi_mode_type {
-+ RMI_MODE_OFF = 0,
-+ RMI_MODE_ATTN_REPORTS = 1,
-+ RMI_MODE_NO_PACKED_ATTN_REPORTS = 2,
-+};
-+
-+struct rmi_function {
-+ unsigned page; /* page of the function */
-+ u16 query_base_addr; /* base address for queries */
-+ u16 command_base_addr; /* base address for commands */
-+ u16 control_base_addr; /* base address for controls */
-+ u16 data_base_addr; /* base address for datas */
-+ unsigned int interrupt_base; /* cross-function interrupt number
-+ * (uniq in the device)*/
-+ unsigned int interrupt_count; /* number of interrupts */
-+ unsigned int report_size; /* size of a report */
-+ unsigned long irq_mask; /* mask of the interrupts
-+ * (to be applied against ATTN IRQ) */
-+};
-+
-+/**
-+ * struct rmi_data - stores information for hid communication
-+ *
-+ * @page_mutex: Locks current page to avoid changing pages in unexpected ways.
-+ * @page: Keeps track of the current virtual page
-+ *
-+ * @wait: Used for waiting for read data
-+ *
-+ * @writeReport: output buffer when writing RMI registers
-+ * @readReport: input buffer when reading RMI registers
-+ *
-+ * @input_report_size: size of an input report (advertised by HID)
-+ * @output_report_size: size of an output report (advertised by HID)
-+ *
-+ * @flags: flags for the current device (started, reading, etc...)
-+ *
-+ * @f11: placeholder of internal RMI function F11 description
-+ * @f30: placeholder of internal RMI function F30 description
-+ *
-+ * @max_fingers: maximum finger count reported by the device
-+ * @max_x: maximum x value reported by the device
-+ * @max_y: maximum y value reported by the device
-+ *
-+ * @gpio_led_count: count of GPIOs + LEDs reported by F30
-+ * @button_count: actual physical buttons count
-+ * @button_mask: button mask used to decode GPIO ATTN reports
-+ * @button_state_mask: pull state of the buttons
-+ *
-+ * @input: pointer to the kernel input device
-+ *
-+ * @reset_work: worker which will be called in case of a mouse report
-+ * @hdev: pointer to the struct hid_device
-+ */
-+struct rmi_data {
-+ struct mutex page_mutex;
-+ int page;
-+
-+ wait_queue_head_t wait;
-+
-+ u8 *writeReport;
-+ u8 *readReport;
-+
-+ int input_report_size;
-+ int output_report_size;
-+
-+ unsigned long flags;
-+
-+ struct rmi_function f11;
-+ struct rmi_function f30;
-+
-+ unsigned int max_fingers;
-+ unsigned int max_x;
-+ unsigned int max_y;
-+ unsigned int x_size_mm;
-+ unsigned int y_size_mm;
-+
-+ unsigned int gpio_led_count;
-+ unsigned int button_count;
-+ unsigned long button_mask;
-+ unsigned long button_state_mask;
-+
-+ struct input_dev *input;
-+
-+ struct work_struct reset_work;
-+ struct hid_device *hdev;
-+};
-+
-+#define RMI_PAGE(addr) (((addr) >> 8) & 0xff)
-+
-+static int rmi_write_report(struct hid_device *hdev, u8 *report, int len);
-+
-+/**
-+ * rmi_set_page - Set RMI page
-+ * @hdev: The pointer to the hid_device struct
-+ * @page: The new page address.
-+ *
-+ * RMI devices have 16-bit addressing, but some of the physical
-+ * implementations (like SMBus) only have 8-bit addressing. So RMI implements
-+ * a page address at 0xff of every page so we can reliable page addresses
-+ * every 256 registers.
-+ *
-+ * The page_mutex lock must be held when this function is entered.
-+ *
-+ * Returns zero on success, non-zero on failure.
-+ */
-+static int rmi_set_page(struct hid_device *hdev, u8 page)
-+{
-+ struct rmi_data *data = hid_get_drvdata(hdev);
-+ int retval;
-+
-+ data->writeReport[0] = RMI_WRITE_REPORT_ID;
-+ data->writeReport[1] = 1;
-+ data->writeReport[2] = 0xFF;
-+ data->writeReport[4] = page;
-+
-+ retval = rmi_write_report(hdev, data->writeReport,
-+ data->output_report_size);
-+ if (retval != data->output_report_size) {
-+ dev_err(&hdev->dev,
-+ "%s: set page failed: %d.", __func__, retval);
-+ return retval;
-+ }
-+
-+ data->page = page;
-+ return 0;
-+}
-+
-+static int rmi_set_mode(struct hid_device *hdev, u8 mode)
-+{
-+ int ret;
-+ u8 txbuf[2] = {RMI_SET_RMI_MODE_REPORT_ID, mode};
-+
-+ ret = hid_hw_raw_request(hdev, RMI_SET_RMI_MODE_REPORT_ID, txbuf,
-+ sizeof(txbuf), HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
-+ if (ret < 0) {
-+ dev_err(&hdev->dev, "unable to set rmi mode to %d (%d)\n", mode,
-+ ret);
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static int rmi_write_report(struct hid_device *hdev, u8 *report, int len)
-+{
-+ int ret;
-+
-+ ret = hid_hw_output_report(hdev, (void *)report, len);
-+ if (ret < 0) {
-+ dev_err(&hdev->dev, "failed to write hid report (%d)\n", ret);
-+ return ret;
-+ }
-+
-+ return ret;
-+}
-+
-+static int rmi_read_block(struct hid_device *hdev, u16 addr, void *buf,
-+ const int len)
-+{
-+ struct rmi_data *data = hid_get_drvdata(hdev);
-+ int ret;
-+ int bytes_read;
-+ int bytes_needed;
-+ int retries;
-+ int read_input_count;
-+
-+ mutex_lock(&data->page_mutex);
-+
-+ if (RMI_PAGE(addr) != data->page) {
-+ ret = rmi_set_page(hdev, RMI_PAGE(addr));
-+ if (ret < 0)
-+ goto exit;
-+ }
-+
-+ for (retries = 5; retries > 0; retries--) {
-+ data->writeReport[0] = RMI_READ_ADDR_REPORT_ID;
-+ data->writeReport[1] = 0; /* old 1 byte read count */
-+ data->writeReport[2] = addr & 0xFF;
-+ data->writeReport[3] = (addr >> 8) & 0xFF;
-+ data->writeReport[4] = len & 0xFF;
-+ data->writeReport[5] = (len >> 8) & 0xFF;
-+
-+ set_bit(RMI_READ_REQUEST_PENDING, &data->flags);
-+
-+ ret = rmi_write_report(hdev, data->writeReport,
-+ data->output_report_size);
-+ if (ret != data->output_report_size) {
-+ clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
-+ dev_err(&hdev->dev,
-+ "failed to write request output report (%d)\n",
-+ ret);
-+ goto exit;
-+ }
-+
-+ bytes_read = 0;
-+ bytes_needed = len;
-+ while (bytes_read < len) {
-+ if (!wait_event_timeout(data->wait,
-+ test_bit(RMI_READ_DATA_PENDING, &data->flags),
-+ msecs_to_jiffies(1000))) {
-+ hid_warn(hdev, "%s: timeout elapsed\n",
-+ __func__);
-+ ret = -EAGAIN;
-+ break;
-+ }
-+
-+ read_input_count = data->readReport[1];
-+ memcpy(buf + bytes_read, &data->readReport[2],
-+ read_input_count < bytes_needed ?
-+ read_input_count : bytes_needed);
-+
-+ bytes_read += read_input_count;
-+ bytes_needed -= read_input_count;
-+ clear_bit(RMI_READ_DATA_PENDING, &data->flags);
-+ }
-+
-+ if (ret >= 0) {
-+ ret = 0;
-+ break;
-+ }
-+ }
-+
-+exit:
-+ clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
-+ mutex_unlock(&data->page_mutex);
-+ return ret;
-+}
-+
-+static inline int rmi_read(struct hid_device *hdev, u16 addr, void *buf)
-+{
-+ return rmi_read_block(hdev, addr, buf, 1);
-+}
-+
-+static void rmi_f11_process_touch(struct rmi_data *hdata, int slot,
-+ u8 finger_state, u8 *touch_data)
-+{
-+ int x, y, wx, wy;
-+ int wide, major, minor;
-+ int z;
-+
-+ input_mt_slot(hdata->input, slot);
-+ input_mt_report_slot_state(hdata->input, MT_TOOL_FINGER,
-+ finger_state == 0x01);
-+ if (finger_state == 0x01) {
-+ x = (touch_data[0] << 4) | (touch_data[2] & 0x07);
-+ y = (touch_data[1] << 4) | (touch_data[2] >> 4);
-+ wx = touch_data[3] & 0x07;
-+ wy = touch_data[3] >> 4;
-+ wide = (wx > wy);
-+ major = max(wx, wy);
-+ minor = min(wx, wy);
-+ z = touch_data[4];
-+
-+ /* y is inverted */
-+ y = hdata->max_y - y;
-+
-+ input_event(hdata->input, EV_ABS, ABS_MT_POSITION_X, x);
-+ input_event(hdata->input, EV_ABS, ABS_MT_POSITION_Y, y);
-+ input_event(hdata->input, EV_ABS, ABS_MT_ORIENTATION, wide);
-+ input_event(hdata->input, EV_ABS, ABS_MT_PRESSURE, z);
-+ input_event(hdata->input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
-+ input_event(hdata->input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
-+ }
-+}
-+
-+static void rmi_reset_work(struct work_struct *work)
-+{
-+ struct rmi_data *hdata = container_of(work, struct rmi_data,
-+ reset_work);
-+
-+ /* switch the device to RMI if we receive a generic mouse report */
-+ rmi_set_mode(hdata->hdev, RMI_MODE_ATTN_REPORTS);
-+}
-+
-+static inline int rmi_schedule_reset(struct hid_device *hdev)
-+{
-+ struct rmi_data *hdata = hid_get_drvdata(hdev);
-+ return schedule_work(&hdata->reset_work);
-+}
-+
-+static int rmi_f11_input_event(struct hid_device *hdev, u8 irq, u8 *data,
-+ int size)
-+{
-+ struct rmi_data *hdata = hid_get_drvdata(hdev);
-+ int offset;
-+ int i;
-+
-+ if (size < hdata->f11.report_size)
-+ return 0;
-+
-+ if (!(irq & hdata->f11.irq_mask))
-+ return 0;
-+
-+ offset = (hdata->max_fingers >> 2) + 1;
-+ for (i = 0; i < hdata->max_fingers; i++) {
-+ int fs_byte_position = i >> 2;
-+ int fs_bit_position = (i & 0x3) << 1;
-+ int finger_state = (data[fs_byte_position] >> fs_bit_position) &
-+ 0x03;
-+
-+ rmi_f11_process_touch(hdata, i, finger_state,
-+ &data[offset + 5 * i]);
-+ }
-+ input_mt_sync_frame(hdata->input);
-+ input_sync(hdata->input);
-+ return hdata->f11.report_size;
-+}
-+
-+static int rmi_f30_input_event(struct hid_device *hdev, u8 irq, u8 *data,
-+ int size)
-+{
-+ struct rmi_data *hdata = hid_get_drvdata(hdev);
-+ int i;
-+ int button = 0;
-+ bool value;
-+
-+ if (!(irq & hdata->f30.irq_mask))
-+ return 0;
-+
-+ for (i = 0; i < hdata->gpio_led_count; i++) {
-+ if (test_bit(i, &hdata->button_mask)) {
-+ value = (data[i / 8] >> (i & 0x07)) & BIT(0);
-+ if (test_bit(i, &hdata->button_state_mask))
-+ value = !value;
-+ input_event(hdata->input, EV_KEY, BTN_LEFT + button++,
-+ value);
-+ }
-+ }
-+ return hdata->f30.report_size;
-+}
-+
-+static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
-+{
-+ struct rmi_data *hdata = hid_get_drvdata(hdev);
-+ unsigned long irq_mask = 0;
-+ unsigned index = 2;
-+
-+ if (!(test_bit(RMI_STARTED, &hdata->flags)))
-+ return 0;
-+
-+ irq_mask |= hdata->f11.irq_mask;
-+ irq_mask |= hdata->f30.irq_mask;
-+
-+ if (data[1] & ~irq_mask)
-+ hid_warn(hdev, "unknown intr source:%02lx %s:%d\n",
-+ data[1] & ~irq_mask, __FILE__, __LINE__);
-+
-+ if (hdata->f11.interrupt_base < hdata->f30.interrupt_base) {
-+ index += rmi_f11_input_event(hdev, data[1], &data[index],
-+ size - index);
-+ index += rmi_f30_input_event(hdev, data[1], &data[index],
-+ size - index);
-+ } else {
-+ index += rmi_f30_input_event(hdev, data[1], &data[index],
-+ size - index);
-+ index += rmi_f11_input_event(hdev, data[1], &data[index],
-+ size - index);
-+ }
-+
-+ return 1;
-+}
-+
-+static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size)
-+{
-+ struct rmi_data *hdata = hid_get_drvdata(hdev);
-+
-+ if (!test_bit(RMI_READ_REQUEST_PENDING, &hdata->flags)) {
-+ hid_err(hdev, "no read request pending\n");
-+ return 0;
-+ }
-+
-+ memcpy(hdata->readReport, data, size < hdata->input_report_size ?
-+ size : hdata->input_report_size);
-+ set_bit(RMI_READ_DATA_PENDING, &hdata->flags);
-+ wake_up(&hdata->wait);
-+
-+ return 1;
-+}
-+
-+static int rmi_raw_event(struct hid_device *hdev,
-+ struct hid_report *report, u8 *data, int size)
-+{
-+ switch (data[0]) {
-+ case RMI_READ_DATA_REPORT_ID:
-+ return rmi_read_data_event(hdev, data, size);
-+ case RMI_ATTN_REPORT_ID:
-+ return rmi_input_event(hdev, data, size);
-+ case RMI_MOUSE_REPORT_ID:
-+ rmi_schedule_reset(hdev);
-+ break;
-+ }
-+
-+ return 0;
-+}
-+
-+static int rmi_post_reset(struct hid_device *hdev)
-+{
-+ return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
-+}
-+
-+static int rmi_post_resume(struct hid_device *hdev)
-+{
-+ return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
-+}
-+
-+#define RMI4_MAX_PAGE 0xff
-+#define RMI4_PAGE_SIZE 0x0100
-+
-+#define PDT_START_SCAN_LOCATION 0x00e9
-+#define PDT_END_SCAN_LOCATION 0x0005
-+#define RMI4_END_OF_PDT(id) ((id) == 0x00 || (id) == 0xff)
-+
-+struct pdt_entry {
-+ u8 query_base_addr:8;
-+ u8 command_base_addr:8;
-+ u8 control_base_addr:8;
-+ u8 data_base_addr:8;
-+ u8 interrupt_source_count:3;
-+ u8 bits3and4:2;
-+ u8 function_version:2;
-+ u8 bit7:1;
-+ u8 function_number:8;
-+} __attribute__((__packed__));
-+
-+static inline unsigned long rmi_gen_mask(unsigned irq_base, unsigned irq_count)
-+{
-+ return GENMASK(irq_count + irq_base - 1, irq_base);
-+}
-+
-+static void rmi_register_function(struct rmi_data *data,
-+ struct pdt_entry *pdt_entry, int page, unsigned interrupt_count)
-+{
-+ struct rmi_function *f = NULL;
-+ u16 page_base = page << 8;
-+
-+ switch (pdt_entry->function_number) {
-+ case 0x11:
-+ f = &data->f11;
-+ break;
-+ case 0x30:
-+ f = &data->f30;
-+ break;
-+ }
-+
-+ if (f) {
-+ f->page = page;
-+ f->query_base_addr = page_base | pdt_entry->query_base_addr;
-+ f->command_base_addr = page_base | pdt_entry->command_base_addr;
-+ f->control_base_addr = page_base | pdt_entry->control_base_addr;
-+ f->data_base_addr = page_base | pdt_entry->data_base_addr;
-+ f->interrupt_base = interrupt_count;
-+ f->interrupt_count = pdt_entry->interrupt_source_count;
-+ f->irq_mask = rmi_gen_mask(f->interrupt_base,
-+ f->interrupt_count);
-+ }
-+}
-+
-+static int rmi_scan_pdt(struct hid_device *hdev)
-+{
-+ struct rmi_data *data = hid_get_drvdata(hdev);
-+ struct pdt_entry entry;
-+ int page;
-+ bool page_has_function;
-+ int i;
-+ int retval;
-+ int interrupt = 0;
-+ u16 page_start, pdt_start , pdt_end;
-+
-+ hid_info(hdev, "Scanning PDT...\n");
-+
-+ for (page = 0; (page <= RMI4_MAX_PAGE); page++) {
-+ page_start = RMI4_PAGE_SIZE * page;
-+ pdt_start = page_start + PDT_START_SCAN_LOCATION;
-+ pdt_end = page_start + PDT_END_SCAN_LOCATION;
-+
-+ page_has_function = false;
-+ for (i = pdt_start; i >= pdt_end; i -= sizeof(entry)) {
-+ retval = rmi_read_block(hdev, i, &entry, sizeof(entry));
-+ if (retval) {
-+ hid_err(hdev,
-+ "Read of PDT entry at %#06x failed.\n",
-+ i);
-+ goto error_exit;
-+ }
-+
-+ if (RMI4_END_OF_PDT(entry.function_number))
-+ break;
-+
-+ page_has_function = true;
-+
-+ hid_info(hdev, "Found F%02X on page %#04x\n",
-+ entry.function_number, page);
-+
-+ rmi_register_function(data, &entry, page, interrupt);
-+ interrupt += entry.interrupt_source_count;
-+ }
-+
-+ if (!page_has_function)
-+ break;
-+ }
-+
-+ hid_info(hdev, "%s: Done with PDT scan.\n", __func__);
-+ retval = 0;
-+
-+error_exit:
-+ return retval;
-+}
-+
-+static int rmi_populate_f11(struct hid_device *hdev)
-+{
-+ struct rmi_data *data = hid_get_drvdata(hdev);
-+ u8 buf[20];
-+ int ret;
-+ bool has_query12;
-+ bool has_physical_props;
-+ unsigned x_size, y_size;
-+
-+ if (!data->f11.query_base_addr) {
-+ hid_err(hdev, "No 2D sensor found, giving up.\n");
-+ return -ENODEV;
-+ }
-+
-+ /* query 0 contains some useful information */
-+ ret = rmi_read(hdev, data->f11.query_base_addr, buf);
-+ if (ret) {
-+ hid_err(hdev, "can not get query 0: %d.\n", ret);
-+ return ret;
-+ }
-+ has_query12 = !!(buf[0] & BIT(5));
-+
-+ /* query 1 to get the max number of fingers */
-+ ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf);
-+ if (ret) {
-+ hid_err(hdev, "can not get NumberOfFingers: %d.\n", ret);
-+ return ret;
-+ }
-+ data->max_fingers = (buf[0] & 0x07) + 1;
-+ if (data->max_fingers > 5)
-+ data->max_fingers = 10;
-+
-+ data->f11.report_size = data->max_fingers * 5 +
-+ DIV_ROUND_UP(data->max_fingers, 4);
-+
-+ if (!(buf[0] & BIT(4))) {
-+ hid_err(hdev, "No absolute events, giving up.\n");
-+ return -ENODEV;
-+ }
-+
-+ /*
-+ * query 12 to know if the physical properties are reported
-+ * (query 12 is at offset 10 for HID devices)
-+ */
-+ if (has_query12) {
-+ ret = rmi_read(hdev, data->f11.query_base_addr + 10, buf);
-+ if (ret) {
-+ hid_err(hdev, "can not get query 12: %d.\n", ret);
-+ return ret;
-+ }
-+ has_physical_props = !!(buf[0] & BIT(5));
-+
-+ if (has_physical_props) {
-+ ret = rmi_read_block(hdev,
-+ data->f11.query_base_addr + 11, buf, 4);
-+ if (ret) {
-+ hid_err(hdev, "can not read query 15-18: %d.\n",
-+ ret);
-+ return ret;
-+ }
-+
-+ x_size = buf[0] | (buf[1] << 8);
-+ y_size = buf[2] | (buf[3] << 8);
-+
-+ data->x_size_mm = DIV_ROUND_CLOSEST(x_size, 10);
-+ data->y_size_mm = DIV_ROUND_CLOSEST(y_size, 10);
-+
-+ hid_info(hdev, "%s: size in mm: %d x %d\n",
-+ __func__, data->x_size_mm, data->y_size_mm);
-+ }
-+ }
-+
-+ /* retrieve the ctrl registers */
-+ ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 20);
-+ if (ret) {
-+ hid_err(hdev, "can not read ctrl block of size 20: %d.\n", ret);
-+ return ret;
-+ }
-+
-+ data->max_x = buf[6] | (buf[7] << 8);
-+ data->max_y = buf[8] | (buf[9] << 8);
-+
-+ return 0;
-+}
-+
-+static int rmi_populate_f30(struct hid_device *hdev)
-+{
-+ struct rmi_data *data = hid_get_drvdata(hdev);
-+ u8 buf[20];
-+ int ret;
-+ bool has_gpio, has_led;
-+ unsigned bytes_per_ctrl;
-+ u8 ctrl2_addr;
-+ int ctrl2_3_length;
-+ int i;
-+
-+ /* function F30 is for physical buttons */
-+ if (!data->f30.query_base_addr) {
-+ hid_err(hdev, "No GPIO/LEDs found, giving up.\n");
-+ return -ENODEV;
-+ }
-+
-+ ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2);
-+ if (ret) {
-+ hid_err(hdev, "can not get F30 query registers: %d.\n", ret);
-+ return ret;
-+ }
-+
-+ has_gpio = !!(buf[0] & BIT(3));
-+ has_led = !!(buf[0] & BIT(2));
-+ data->gpio_led_count = buf[1] & 0x1f;
-+
-+ /* retrieve ctrl 2 & 3 registers */
-+ bytes_per_ctrl = (data->gpio_led_count + 7) / 8;
-+ /* Ctrl0 is present only if both has_gpio and has_led are set*/
-+ ctrl2_addr = (has_gpio && has_led) ? bytes_per_ctrl : 0;
-+ /* Ctrl1 is always be present */
-+ ctrl2_addr += bytes_per_ctrl;
-+ ctrl2_3_length = 2 * bytes_per_ctrl;
-+
-+ data->f30.report_size = bytes_per_ctrl;
-+
-+ ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr,
-+ buf, ctrl2_3_length);
-+ if (ret) {
-+ hid_err(hdev, "can not read ctrl 2&3 block of size %d: %d.\n",
-+ ctrl2_3_length, ret);
-+ return ret;
-+ }
-+
-+ for (i = 0; i < data->gpio_led_count; i++) {
-+ int byte_position = i >> 3;
-+ int bit_position = i & 0x07;
-+ u8 dir_byte = buf[byte_position];
-+ u8 data_byte = buf[byte_position + bytes_per_ctrl];
-+ bool dir = (dir_byte >> bit_position) & BIT(0);
-+ bool dat = (data_byte >> bit_position) & BIT(0);
-+
-+ if (dir == 0) {
-+ /* input mode */
-+ if (dat) {
-+ /* actual buttons have pull up resistor */
-+ data->button_count++;
-+ set_bit(i, &data->button_mask);
-+ set_bit(i, &data->button_state_mask);
-+ }
-+ }
-+
-+ }
-+
-+ return 0;
-+}
-+
-+static int rmi_populate(struct hid_device *hdev)
-+{
-+ int ret;
-+
-+ ret = rmi_scan_pdt(hdev);
-+ if (ret) {
-+ hid_err(hdev, "PDT scan failed with code %d.\n", ret);
-+ return ret;
-+ }
-+
-+ ret = rmi_populate_f11(hdev);
-+ if (ret) {
-+ hid_err(hdev, "Error while initializing F11 (%d).\n", ret);
-+ return ret;
-+ }
-+
-+ ret = rmi_populate_f30(hdev);
-+ if (ret)
-+ hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
-+
-+ return 0;
-+}
-+
-+static void rmi_input_configured(struct hid_device *hdev, struct hid_input *hi)
-+{
-+ struct rmi_data *data = hid_get_drvdata(hdev);
-+ struct input_dev *input = hi->input;
-+ int ret;
-+ int res_x, res_y, i;
-+
-+ data->input = input;
-+
-+ hid_dbg(hdev, "Opening low level driver\n");
-+ ret = hid_hw_open(hdev);
-+ if (ret)
-+ return;
-+
-+ /* Allow incoming hid reports */
-+ hid_device_io_start(hdev);
-+
-+ ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
-+ if (ret < 0) {
-+ dev_err(&hdev->dev, "failed to set rmi mode\n");
-+ goto exit;
-+ }
-+
-+ ret = rmi_set_page(hdev, 0);
-+ if (ret < 0) {
-+ dev_err(&hdev->dev, "failed to set page select to 0.\n");
-+ goto exit;
-+ }
-+
-+ ret = rmi_populate(hdev);
-+ if (ret)
-+ goto exit;
-+
-+ __set_bit(EV_ABS, input->evbit);
-+ input_set_abs_params(input, ABS_MT_POSITION_X, 1, data->max_x, 0, 0);
-+ input_set_abs_params(input, ABS_MT_POSITION_Y, 1, data->max_y, 0, 0);
-+
-+ if (data->x_size_mm && data->x_size_mm) {
-+ res_x = (data->max_x - 1) / data->x_size_mm;
-+ res_y = (data->max_y - 1) / data->x_size_mm;
-+
-+ input_abs_set_res(input, ABS_MT_POSITION_X, res_x);
-+ input_abs_set_res(input, ABS_MT_POSITION_Y, res_y);
-+ }
-+
-+ input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0);
-+ input_set_abs_params(input, ABS_MT_PRESSURE, 0, 0xff, 0, 0);
-+ input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 0x0f, 0, 0);
-+ input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 0x0f, 0, 0);
-+
-+ input_mt_init_slots(input, data->max_fingers, INPUT_MT_POINTER);
-+
-+ if (data->button_count) {
-+ __set_bit(EV_KEY, input->evbit);
-+ for (i = 0; i < data->button_count; i++)
-+ __set_bit(BTN_LEFT + i, input->keybit);
-+
-+ if (data->button_count == 1)
-+ __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
-+ }
-+
-+ set_bit(RMI_STARTED, &data->flags);
-+
-+exit:
-+ hid_device_io_stop(hdev);
-+ hid_hw_close(hdev);
-+}
-+
-+static int rmi_input_mapping(struct hid_device *hdev,
-+ struct hid_input *hi, struct hid_field *field,
-+ struct hid_usage *usage, unsigned long **bit, int *max)
-+{
-+ /* we want to make HID ignore the advertised HID collection */
-+ return -1;
-+}
-+
-+static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
-+{
-+ struct rmi_data *data = NULL;
-+ int ret;
-+ size_t alloc_size;
-+
-+ data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL);
-+ if (!data)
-+ return -ENOMEM;
-+
-+ INIT_WORK(&data->reset_work, rmi_reset_work);
-+ data->hdev = hdev;
-+
-+ hid_set_drvdata(hdev, data);
-+
-+ hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
-+
-+ ret = hid_parse(hdev);
-+ if (ret) {
-+ hid_err(hdev, "parse failed\n");
-+ return ret;
-+ }
-+
-+ data->input_report_size = (hdev->report_enum[HID_INPUT_REPORT]
-+ .report_id_hash[RMI_ATTN_REPORT_ID]->size >> 3)
-+ + 1 /* report id */;
-+ data->output_report_size = (hdev->report_enum[HID_OUTPUT_REPORT]
-+ .report_id_hash[RMI_WRITE_REPORT_ID]->size >> 3)
-+ + 1 /* report id */;
-+
-+ alloc_size = data->output_report_size + data->input_report_size;
-+
-+ data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL);
-+ if (!data->writeReport) {
-+ ret = -ENOMEM;
-+ return ret;
-+ }
-+
-+ data->readReport = data->writeReport + data->output_report_size;
-+
-+ init_waitqueue_head(&data->wait);
-+
-+ mutex_init(&data->page_mutex);
-+
-+ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
-+ if (ret) {
-+ hid_err(hdev, "hw start failed\n");
-+ return ret;
-+ }
-+
-+ if (!test_bit(RMI_STARTED, &data->flags)) {
-+ hid_hw_stop(hdev);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static void rmi_remove(struct hid_device *hdev)
-+{
-+ struct rmi_data *hdata = hid_get_drvdata(hdev);
-+
-+ clear_bit(RMI_STARTED, &hdata->flags);
-+
-+ hid_hw_stop(hdev);
-+}
-+
-+static const struct hid_device_id rmi_id[] = {
-+ { HID_I2C_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, HID_ANY_ID) },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(hid, rmi_id);
-+
-+static struct hid_driver rmi_driver = {
-+ .name = "hid-rmi",
-+ .id_table = rmi_id,
-+ .probe = rmi_probe,
-+ .remove = rmi_remove,
-+ .raw_event = rmi_raw_event,
-+ .input_mapping = rmi_input_mapping,
-+ .input_configured = rmi_input_configured,
-+#ifdef CONFIG_PM
-+ .resume = rmi_post_resume,
-+ .reset_resume = rmi_post_reset,
-+#endif
-+};
-+
-+module_hid_driver(rmi_driver);
-+
-+MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
-+MODULE_DESCRIPTION("RMI HID driver");
-+MODULE_LICENSE("GPL");
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 31b9d29..1b5f1e9 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -571,6 +571,8 @@ struct hid_descriptor {
- .bus = BUS_USB, .vendor = (ven), .product = (prod)
- #define HID_BLUETOOTH_DEVICE(ven, prod) \
- .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod)
-+#define HID_I2C_DEVICE(ven, prod) \
-+ .bus = BUS_I2C, .vendor = (ven), .product = (prod)
-
- #define HID_REPORT_ID(rep) \
- .report_type = (rep)
---
-1.8.3.1
-
diff --git a/0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch b/0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
deleted file mode 100644
index dd7f27367..000000000
--- a/0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 5573624261ab5d54f2dea2a3e09a98729db9ecd9 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Wed, 30 Apr 2014 15:24:19 +0200
-Subject: [PATCH 1/2] acpi-video: Add 4 new models to the use_native_backlight
- dmi list
-
-Acer Aspire V5-171
-https://bugzilla.redhat.com/show_bug.cgi?id=983342
-
-Acer Aspire V5-471G
-Lenovo Yoga 2 11
-Reported-and-tested-by: Vincent Gerris <vgerris@gmail.com>
-
-HP EliteBook 8470p
-https://bugzilla.redhat.com/show_bug.cgi?id=1093120
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/acpi/video.c | 32 ++++++++++++++++++++++++++++++++
- 1 file changed, 32 insertions(+)
-
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index 8b6990e..48146fc 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -488,6 +488,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
- },
- },
- {
-+ .callback = video_set_use_native_backlight,
-+ .ident = "Lenovo Yoga 2 11",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
-+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2 11"),
-+ },
-+ },
-+ {
- .callback = video_set_use_native_backlight,
- .ident = "Thinkpad Helix",
- .matches = {
-@@ -513,6 +521,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
- },
- {
- .callback = video_set_use_native_backlight,
-+ .ident = "Acer Aspire V5-171",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "V5-171"),
-+ },
-+ },
-+ {
-+ .callback = video_set_use_native_backlight,
- .ident = "Acer Aspire V5-431",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
-@@ -520,6 +536,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
- },
- },
- {
-+ .callback = video_set_use_native_backlight,
-+ .ident = "Acer Aspire V5-471G",
-+ .matches = {
-+ DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-471G"),
-+ },
-+ },
-+ {
- .callback = video_set_use_native_backlight,
- .ident = "HP ProBook 4340s",
- .matches = {
-@@ -571,6 +595,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
- },
- {
- .callback = video_set_use_native_backlight,
-+ .ident = "HP EliteBook 8470p",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 8470p"),
-+ },
-+ },
-+ {
-+ .callback = video_set_use_native_backlight,
- .ident = "HP EliteBook 8780w",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
---
-1.9.0
-
diff --git a/0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch b/0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch
deleted file mode 100644
index aab1c4e32..000000000
--- a/0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1021036
-Upstream-status: Send upstream for 3.17
-
-From 0ad19912cb324f0a356a212433ec0b2a31f61acc Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Fri, 20 Jun 2014 10:29:16 +0200
-Subject: [PATCH] ideapad-laptop: Change Lenovo Yoga 2 series rfkill handling
-
-It seems that the same problems which lead to adding an rfkill blacklist and
-putting the Lenovo Yoga 2 11 on it are also present on the Lenovo Yoga 2 13
-and Lenovo Yoga 2 Pro too:
-https://bugzilla.redhat.com/show_bug.cgi?id=1021036
-https://forums.lenovo.com/t5/Linux-Discussion/Yoga-2-13-not-Pro-Linux-Warning/m-p/1517612
-
-Testing has shown that the firmware rfkill settings are persistent over
-reboots. So blacklisting the driver is not good enough, if the wifi is blocked
-at the firmware level the wifi needs to be explictly unblocked through the
-ideapad-laptop interface.
-
-And at least on the Lenovo Yoga 2 13 the VPCCMD_RF register which on devices
-with hardware kill switch reports the hardware switch state, needs to be
-explictly set to 1 (radio enabled / not blocked).
-
-So this patch does 3 things to get proper rfkill handling on these models:
-
-1) Instead of blacklisting the rfkill functionality, which means that people
-with a firmware blocked wifi get stuck in that situation, ignore the value
-reported by the not present hardware rfkill switch, as this is what is causing
-ideapad-laptop to wrongly report all radios as hardware blocks. But do register
-the rfkill interfaces so that the user can soft [un]block them.
-
-2) On models without a hardware rfkill switch, explictly set VPCCMD_RF to 1
-
-3) Drop the " 11" postfix from the dmi match string, as the entire Yoga 2
-series is affected.
-
-Yoga 2 11:
-Reported-and-tested-by: Vincent Gerris <vgerris@gmail.com>
-
-Yoga 2 13:
-Tested-by: madls05 <http://ubuntuforums.org/showthread.php?t=2215044>
-
-Yoga 2 Pro:
-Reported-and-tested-by: Peter F. Patel-Schneider <pfpschneider@gmail.com>
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/ideapad-laptop.c | 41 +++++++++++++++++++++++------------
- 1 file changed, 27 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
-index b4c495a..b0e3a2e 100644
---- a/drivers/platform/x86/ideapad-laptop.c
-+++ b/drivers/platform/x86/ideapad-laptop.c
-@@ -87,6 +87,7 @@ struct ideapad_private {
- struct backlight_device *blightdev;
- struct dentry *debug;
- unsigned long cfg;
-+ bool has_hw_rfkill_switch;
- };
-
- static bool no_bt_rfkill;
-@@ -473,12 +474,14 @@ static struct rfkill_ops ideapad_rfk_ops = {
-
- static void ideapad_sync_rfk_state(struct ideapad_private *priv)
- {
-- unsigned long hw_blocked;
-+ unsigned long hw_blocked = 0;
- int i;
-
-- if (read_ec_data(priv->adev->handle, VPCCMD_R_RF, &hw_blocked))
-- return;
-- hw_blocked = !hw_blocked;
-+ if (priv->has_hw_rfkill_switch) {
-+ if (read_ec_data(priv->adev->handle, VPCCMD_R_RF, &hw_blocked))
-+ return;
-+ hw_blocked = !hw_blocked;
-+ }
-
- for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++)
- if (priv->rfk[i])
-@@ -821,14 +824,17 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
- }
- }
-
--/* Blacklist for devices where the ideapad rfkill interface does not work */
--static struct dmi_system_id rfkill_blacklist[] = {
-- /* The Lenovo Yoga 2 11 always reports everything as blocked */
-+/*
-+ * Some ideapads don't have a hardware rfkill switch, reading VPCCMD_R_RF
-+ * always results in 0 on these models, causing ideapad_laptop to wrongly
-+ * report all radios as hardware-blocked.
-+ */
-+static struct dmi_system_id no_hw_rfkill_list[] = {
- {
-- .ident = "Lenovo Yoga 2 11",
-+ .ident = "Lenovo Yoga 2 11 / 13 / Pro",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
-- DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2 11"),
-+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
- },
- },
- {}
-@@ -856,6 +862,7 @@ static int ideapad_acpi_add(struct platform_device *pdev)
- priv->cfg = cfg;
- priv->adev = adev;
- priv->platform_device = pdev;
-+ priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list);
-
- ret = ideapad_sysfs_init(priv);
- if (ret)
-@@ -869,11 +876,17 @@ static int ideapad_acpi_add(struct platform_device *pdev)
- if (ret)
- goto input_failed;
-
-- if (!dmi_check_system(rfkill_blacklist)) {
-- for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++)
-- if (test_bit(ideapad_rfk_data[i].cfgbit, &priv->cfg))
-- ideapad_register_rfkill(priv, i);
-- }
-+ /*
-+ * On some models without a hw-switch (the yoga 2 13 at least)
-+ * VPCCMD_W_RF must be explicitly set to 1 for the wifi to work.
-+ */
-+ if (!priv->has_hw_rfkill_switch)
-+ write_ec_cmd(priv->adev->handle, VPCCMD_W_RF, 1);
-+
-+ for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++)
-+ if (test_bit(ideapad_rfk_data[i].cfgbit, &priv->cfg))
-+ ideapad_register_rfkill(priv, i);
-+
- ideapad_sync_rfk_state(priv);
- ideapad_sync_touchpad_state(priv);
-
---
-2.0.0
-
diff --git a/ACPI-Limit-access-to-custom_method.patch b/ACPI-Limit-access-to-custom_method.patch
new file mode 100644
index 000000000..88709a324
--- /dev/null
+++ b/ACPI-Limit-access-to-custom_method.patch
@@ -0,0 +1,27 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 9 Mar 2012 08:39:37 -0500
+Subject: [PATCH] ACPI: Limit access to custom_method
+
+custom_method effectively allows arbitrary access to system memory, making
+it possible for an attacker to circumvent restrictions on module loading.
+Disable it if any such restrictions have been enabled.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ drivers/acpi/custom_method.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c
+index c68e72414a67..4277938af700 100644
+--- a/drivers/acpi/custom_method.c
++++ b/drivers/acpi/custom_method.c
+@@ -29,6 +29,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
+ struct acpi_table_header table;
+ acpi_status status;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (!(*ppos)) {
+ /* parse the table header to get the table length */
+ if (count <= sizeof(struct acpi_table_header))
diff --git a/ARM-tegra-usb-no-reset.patch b/ARM-tegra-usb-no-reset.patch
new file mode 100644
index 000000000..75e4a3107
--- /dev/null
+++ b/ARM-tegra-usb-no-reset.patch
@@ -0,0 +1,28 @@
+From: Peter Robinson <pbrobinson@gmail.com>
+Date: Thu, 3 May 2012 20:27:11 +0100
+Subject: [PATCH] ARM: tegra: usb no reset
+
+Patch for disconnect issues with storage attached to a
+ tegra-ehci controller
+---
+ drivers/usb/core/hub.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
+index 3b7151687776..4b19e7e5bc01 100644
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -5006,6 +5006,13 @@ static void hub_event(struct work_struct *work)
+ (u16) hub->change_bits[0],
+ (u16) hub->event_bits[0]);
+
++ /* Don't disconnect USB-SATA on TrimSlice */
++ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) {
++ if ((hdev->state == 7) && (hub->change_bits[0] == 0) &&
++ (hub->event_bits[0] == 0x2))
++ hub->event_bits[0] = 0;
++ }
++
+ /* Lock the device, then check to see if we were
+ * disconnected while waiting for the lock to succeed. */
+ usb_lock_device(hdev);
diff --git a/Add-EFI-signature-data-types.patch b/Add-EFI-signature-data-types.patch
new file mode 100644
index 000000000..1137652b5
--- /dev/null
+++ b/Add-EFI-signature-data-types.patch
@@ -0,0 +1,53 @@
+From: Dave Howells <dhowells@redhat.com>
+Date: Tue, 23 Oct 2012 09:30:54 -0400
+Subject: [PATCH] Add EFI signature data types
+
+Add the data types that are used for containing hashes, keys and certificates
+for cryptographic verification.
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard for now
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+---
+ include/linux/efi.h | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index c74cbd892032..1293d0e0bf90 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -589,6 +589,12 @@ void efi_native_runtime_setup(void);
+ #define DEVICE_TREE_GUID \
+ EFI_GUID( 0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 )
+
++#define EFI_CERT_SHA256_GUID \
++ EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 )
++
++#define EFI_CERT_X509_GUID \
++ EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
++
+ typedef struct {
+ efi_guid_t guid;
+ u64 table;
+@@ -804,6 +810,20 @@ typedef struct _efi_file_io_interface {
+
+ #define EFI_INVALID_TABLE_ADDR (~0UL)
+
++typedef struct {
++ efi_guid_t signature_owner;
++ u8 signature_data[];
++} efi_signature_data_t;
++
++typedef struct {
++ efi_guid_t signature_type;
++ u32 signature_list_size;
++ u32 signature_header_size;
++ u32 signature_size;
++ u8 signature_header[];
++ /* efi_signature_data_t signatures[][] */
++} efi_signature_list_t;
++
+ /*
+ * All runtime access to EFI goes through this structure:
+ */
diff --git a/Add-an-EFI-signature-blob-parser-and-key-loader.patch b/Add-an-EFI-signature-blob-parser-and-key-loader.patch
new file mode 100644
index 000000000..8c5cff61b
--- /dev/null
+++ b/Add-an-EFI-signature-blob-parser-and-key-loader.patch
@@ -0,0 +1,175 @@
+From: Dave Howells <dhowells@redhat.com>
+Date: Tue, 23 Oct 2012 09:36:28 -0400
+Subject: [PATCH] Add an EFI signature blob parser and key loader.
+
+X.509 certificates are loaded into the specified keyring as asymmetric type
+keys.
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+---
+ crypto/asymmetric_keys/Kconfig | 8 +++
+ crypto/asymmetric_keys/Makefile | 1 +
+ crypto/asymmetric_keys/efi_parser.c | 109 ++++++++++++++++++++++++++++++++++++
+ include/linux/efi.h | 4 ++
+ 4 files changed, 122 insertions(+)
+ create mode 100644 crypto/asymmetric_keys/efi_parser.c
+
+diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig
+index 4870f28403f5..4a1b50d73b80 100644
+--- a/crypto/asymmetric_keys/Kconfig
++++ b/crypto/asymmetric_keys/Kconfig
+@@ -67,4 +67,12 @@ config SIGNED_PE_FILE_VERIFICATION
+ This option provides support for verifying the signature(s) on a
+ signed PE binary.
+
++config EFI_SIGNATURE_LIST_PARSER
++ bool "EFI signature list parser"
++ depends on EFI
++ select X509_CERTIFICATE_PARSER
++ help
++ This option provides support for parsing EFI signature lists for
++ X.509 certificates and turning them into keys.
++
+ endif # ASYMMETRIC_KEY_TYPE
+diff --git a/crypto/asymmetric_keys/Makefile b/crypto/asymmetric_keys/Makefile
+index e47fcd9ac5e8..6512f6596785 100644
+--- a/crypto/asymmetric_keys/Makefile
++++ b/crypto/asymmetric_keys/Makefile
+@@ -8,6 +8,7 @@ asymmetric_keys-y := asymmetric_type.o signature.o
+
+ obj-$(CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE) += public_key.o
+ obj-$(CONFIG_PUBLIC_KEY_ALGO_RSA) += rsa.o
++obj-$(CONFIG_EFI_SIGNATURE_LIST_PARSER) += efi_parser.o
+
+ #
+ # X.509 Certificate handling
+diff --git a/crypto/asymmetric_keys/efi_parser.c b/crypto/asymmetric_keys/efi_parser.c
+new file mode 100644
+index 000000000000..424896a0b169
+--- /dev/null
++++ b/crypto/asymmetric_keys/efi_parser.c
+@@ -0,0 +1,109 @@
++/* EFI signature/key/certificate list parser
++ *
++ * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
++ * Written by David Howells (dhowells@redhat.com)
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public Licence
++ * as published by the Free Software Foundation; either version
++ * 2 of the Licence, or (at your option) any later version.
++ */
++
++#define pr_fmt(fmt) "EFI: "fmt
++#include <linux/module.h>
++#include <linux/printk.h>
++#include <linux/err.h>
++#include <linux/efi.h>
++#include <keys/asymmetric-type.h>
++
++static __initdata efi_guid_t efi_cert_x509_guid = EFI_CERT_X509_GUID;
++
++/**
++ * parse_efi_signature_list - Parse an EFI signature list for certificates
++ * @data: The data blob to parse
++ * @size: The size of the data blob
++ * @keyring: The keyring to add extracted keys to
++ */
++int __init parse_efi_signature_list(const void *data, size_t size, struct key *keyring)
++{
++ unsigned offs = 0;
++ size_t lsize, esize, hsize, elsize;
++
++ pr_devel("-->%s(,%zu)\n", __func__, size);
++
++ while (size > 0) {
++ efi_signature_list_t list;
++ const efi_signature_data_t *elem;
++ key_ref_t key;
++
++ if (size < sizeof(list))
++ return -EBADMSG;
++
++ memcpy(&list, data, sizeof(list));
++ pr_devel("LIST[%04x] guid=%pUl ls=%x hs=%x ss=%x\n",
++ offs,
++ list.signature_type.b, list.signature_list_size,
++ list.signature_header_size, list.signature_size);
++
++ lsize = list.signature_list_size;
++ hsize = list.signature_header_size;
++ esize = list.signature_size;
++ elsize = lsize - sizeof(list) - hsize;
++
++ if (lsize > size) {
++ pr_devel("<--%s() = -EBADMSG [overrun @%x]\n",
++ __func__, offs);
++ return -EBADMSG;
++ }
++ if (lsize < sizeof(list) ||
++ lsize - sizeof(list) < hsize ||
++ esize < sizeof(*elem) ||
++ elsize < esize ||
++ elsize % esize != 0) {
++ pr_devel("- bad size combo @%x\n", offs);
++ return -EBADMSG;
++ }
++
++ if (efi_guidcmp(list.signature_type, efi_cert_x509_guid) != 0) {
++ data += lsize;
++ size -= lsize;
++ offs += lsize;
++ continue;
++ }
++
++ data += sizeof(list) + hsize;
++ size -= sizeof(list) + hsize;
++ offs += sizeof(list) + hsize;
++
++ for (; elsize > 0; elsize -= esize) {
++ elem = data;
++
++ pr_devel("ELEM[%04x]\n", offs);
++
++ key = key_create_or_update(
++ make_key_ref(keyring, 1),
++ "asymmetric",
++ NULL,
++ &elem->signature_data,
++ esize - sizeof(*elem),
++ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
++ KEY_USR_VIEW,
++ KEY_ALLOC_NOT_IN_QUOTA |
++ KEY_ALLOC_TRUSTED);
++
++ if (IS_ERR(key))
++ pr_err("Problem loading in-kernel X.509 certificate (%ld)\n",
++ PTR_ERR(key));
++ else
++ pr_notice("Loaded cert '%s' linked to '%s'\n",
++ key_ref_to_ptr(key)->description,
++ keyring->description);
++
++ data += esize;
++ size -= esize;
++ offs += esize;
++ }
++ }
++
++ return 0;
++}
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index 1293d0e0bf90..706b16fa6de8 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -925,6 +925,10 @@ extern bool efi_poweroff_required(void);
+ char * __init efi_md_typeattr_format(char *buf, size_t size,
+ const efi_memory_desc_t *md);
+
++struct key;
++extern int __init parse_efi_signature_list(const void *data, size_t size,
++ struct key *keyring);
++
+ /**
+ * efi_range_is_wc - check the WC bit on an address range
+ * @start: starting kvirt address
diff --git a/Add-option-to-automatically-enforce-module-signature.patch b/Add-option-to-automatically-enforce-module-signature.patch
new file mode 100644
index 000000000..4d375fa1d
--- /dev/null
+++ b/Add-option-to-automatically-enforce-module-signature.patch
@@ -0,0 +1,182 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 9 Aug 2013 18:36:30 -0400
+Subject: [PATCH] Add option to automatically enforce module signatures when in
+ Secure Boot mode
+
+UEFI Secure Boot provides a mechanism for ensuring that the firmware will
+only load signed bootloaders and kernels. Certain use cases may also
+require that all kernel modules also be signed. Add a configuration option
+that enforces this automatically when enabled.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ Documentation/x86/zero-page.txt | 2 ++
+ arch/x86/Kconfig | 10 ++++++++++
+ arch/x86/boot/compressed/eboot.c | 36 +++++++++++++++++++++++++++++++++++
+ arch/x86/include/uapi/asm/bootparam.h | 3 ++-
+ arch/x86/kernel/setup.c | 6 ++++++
+ include/linux/module.h | 6 ++++++
+ kernel/module.c | 7 +++++++
+ 7 files changed, 69 insertions(+), 1 deletion(-)
+
+diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt
+index 82fbdbc1e0b0..a811210ad486 100644
+--- a/Documentation/x86/zero-page.txt
++++ b/Documentation/x86/zero-page.txt
+@@ -30,6 +30,8 @@ Offset Proto Name Meaning
+ 1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below)
+ 1EA/001 ALL edd_mbr_sig_buf_entries Number of entries in edd_mbr_sig_buffer
+ (below)
++1EB/001 ALL kbd_status Numlock is enabled
++1EC/001 ALL secure_boot Secure boot is enabled in the firmware
+ 1EF/001 ALL sentinel Used to detect broken bootloaders
+ 290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
+ 2D0/A00 ALL e820_map E820 memory map table
+diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
+index b7d31ca55187..ab403a636357 100644
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -1695,6 +1695,16 @@ config EFI_MIXED
+
+ If unsure, say N.
+
++config EFI_SECURE_BOOT_SIG_ENFORCE
++ def_bool n
++ prompt "Force module signing when UEFI Secure Boot is enabled"
++ ---help---
++ UEFI Secure Boot provides a mechanism for ensuring that the
++ firmware will only load signed bootloaders and kernels. Certain
++ use cases may also require that all kernel modules also be signed.
++ Say Y here to automatically enable module signature enforcement
++ when a system boots with UEFI Secure Boot enabled.
++
+ config SECCOMP
+ def_bool y
+ prompt "Enable seccomp to safely compute untrusted bytecode"
+diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
+index ef17683484e9..105e7360d747 100644
+--- a/arch/x86/boot/compressed/eboot.c
++++ b/arch/x86/boot/compressed/eboot.c
+@@ -12,6 +12,7 @@
+ #include <asm/efi.h>
+ #include <asm/setup.h>
+ #include <asm/desc.h>
++#include <asm/bootparam_utils.h>
+
+ #include "../string.h"
+ #include "eboot.h"
+@@ -827,6 +828,37 @@ out:
+ return status;
+ }
+
++static int get_secure_boot(void)
++{
++ u8 sb, setup;
++ unsigned long datasize = sizeof(sb);
++ efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
++ efi_status_t status;
++
++ status = efi_early->call((unsigned long)sys_table->runtime->get_variable,
++ L"SecureBoot", &var_guid, NULL, &datasize, &sb);
++
++ if (status != EFI_SUCCESS)
++ return 0;
++
++ if (sb == 0)
++ return 0;
++
++
++ status = efi_early->call((unsigned long)sys_table->runtime->get_variable,
++ L"SetupMode", &var_guid, NULL, &datasize,
++ &setup);
++
++ if (status != EFI_SUCCESS)
++ return 0;
++
++ if (setup == 1)
++ return 0;
++
++ return 1;
++}
++
++
+ /*
+ * See if we have Graphics Output Protocol
+ */
+@@ -1406,6 +1438,10 @@ struct boot_params *efi_main(struct efi_config *c,
+ else
+ setup_boot_services32(efi_early);
+
++ sanitize_boot_params(boot_params);
++
++ boot_params->secure_boot = get_secure_boot();
++
+ setup_graphics(boot_params);
+
+ setup_efi_pci(boot_params);
+diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h
+index 225b0988043a..90dbfb73e11f 100644
+--- a/arch/x86/include/uapi/asm/bootparam.h
++++ b/arch/x86/include/uapi/asm/bootparam.h
+@@ -133,7 +133,8 @@ struct boot_params {
+ __u8 eddbuf_entries; /* 0x1e9 */
+ __u8 edd_mbr_sig_buf_entries; /* 0x1ea */
+ __u8 kbd_status; /* 0x1eb */
+- __u8 _pad5[3]; /* 0x1ec */
++ __u8 secure_boot; /* 0x1ec */
++ __u8 _pad5[2]; /* 0x1ed */
+ /*
+ * The sentinel is set to a nonzero value (0xff) in header.S.
+ *
+diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
+index 0a2421cca01f..a3d8174dedf9 100644
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -1151,6 +1151,12 @@ void __init setup_arch(char **cmdline_p)
+
+ io_delay_init();
+
++#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
++ if (boot_params.secure_boot) {
++ enforce_signed_modules();
++ }
++#endif
++
+ /*
+ * Parse the ACPI tables for possible boot-time SMP configuration.
+ */
+diff --git a/include/linux/module.h b/include/linux/module.h
+index b033dab5c8bf..f526b6e02f59 100644
+--- a/include/linux/module.h
++++ b/include/linux/module.h
+@@ -188,6 +188,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add);
+
+ struct notifier_block;
+
++#ifdef CONFIG_MODULE_SIG
++extern void enforce_signed_modules(void);
++#else
++static inline void enforce_signed_modules(void) {};
++#endif
++
+ #ifdef CONFIG_MODULES
+
+ extern int modules_disabled; /* for sysctl */
+diff --git a/kernel/module.c b/kernel/module.c
+index f3489ef9e409..3bb7c01b3c9f 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -3912,6 +3912,13 @@ void module_layout(struct module *mod,
+ EXPORT_SYMBOL(module_layout);
+ #endif
+
++#ifdef CONFIG_MODULE_SIG
++void enforce_signed_modules(void)
++{
++ sig_enforce = true;
++}
++#endif
++
+ bool secure_modules(void)
+ {
+ #ifdef CONFIG_MODULE_SIG
diff --git a/Add-secure_modules-call.patch b/Add-secure_modules-call.patch
new file mode 100644
index 000000000..158e7f1d2
--- /dev/null
+++ b/Add-secure_modules-call.patch
@@ -0,0 +1,59 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 9 Aug 2013 17:58:15 -0400
+Subject: [PATCH] Add secure_modules() call
+
+Provide a single call to allow kernel code to determine whether the system
+has been configured to either disable module loading entirely or to load
+only modules signed with a trusted key.
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard. Replaced by securelevels, but that was nak'd
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ include/linux/module.h | 6 ++++++
+ kernel/module.c | 10 ++++++++++
+ 2 files changed, 16 insertions(+)
+
+diff --git a/include/linux/module.h b/include/linux/module.h
+index d67b1932cc59..57474384b66b 100644
+--- a/include/linux/module.h
++++ b/include/linux/module.h
+@@ -551,6 +551,8 @@ static inline bool module_requested_async_probing(struct module *module)
+ return module && module->async_probe_requested;
+ }
+
++extern bool secure_modules(void);
++
+ #else /* !CONFIG_MODULES... */
+
+ /* Given an address, look for it in the exception tables. */
+@@ -667,6 +669,10 @@ static inline bool module_requested_async_probing(struct module *module)
+ return false;
+ }
+
++static inline bool secure_modules(void)
++{
++ return false;
++}
+ #endif /* CONFIG_MODULES */
+
+ #ifdef CONFIG_SYSFS
+diff --git a/kernel/module.c b/kernel/module.c
+index 4d2b82e610e2..e9869c497175 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -4083,3 +4083,13 @@ void module_layout(struct module *mod,
+ }
+ EXPORT_SYMBOL(module_layout);
+ #endif
++
++bool secure_modules(void)
++{
++#ifdef CONFIG_MODULE_SIG
++ return (sig_enforce || modules_disabled);
++#else
++ return modules_disabled;
++#endif
++}
++EXPORT_SYMBOL(secure_modules);
diff --git a/sysrq-secure-boot.patch b/Add-sysrq-option-to-disable-secure-boot-mode.patch
index c73e3d252..ffc460849 100644
--- a/sysrq-secure-boot.patch
+++ b/Add-sysrq-option-to-disable-secure-boot-mode.patch
@@ -1,11 +1,9 @@
-Bugzilla: N/A
-Upstream-status: Fedora mustard
-
-From 29c1f71a2d0845a71ea2ebd2fb33542373dc52dd Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle@redhat.com>
Date: Fri, 30 Aug 2013 09:28:51 -0400
Subject: [PATCH] Add sysrq option to disable secure boot mode
+Bugzilla: N/A
+Upstream-status: Fedora mustard
---
arch/x86/kernel/setup.c | 36 ++++++++++++++++++++++++++++++++++++
drivers/input/misc/uinput.c | 1 +
@@ -13,11 +11,11 @@ Subject: [PATCH] Add sysrq option to disable secure boot mode
include/linux/input.h | 5 +++++
include/linux/sysrq.h | 8 +++++++-
kernel/debug/kdb/kdb_main.c | 2 +-
- kernel/module.c | 4 ++--
- 7 files changed, 65 insertions(+), 10 deletions(-)
+ kernel/module.c | 2 +-
+ 7 files changed, 64 insertions(+), 9 deletions(-)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index c773add..92c480c 100644
+index 5def6b4143fa..1eac9d22cb0b 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -70,6 +70,11 @@
@@ -32,7 +30,7 @@ index c773add..92c480c 100644
#include <video/edid.h>
#include <asm/mtrr.h>
-@@ -1275,6 +1280,37 @@ void __init i386_reserve_resources(void)
+@@ -1286,6 +1291,37 @@ void __init i386_reserve_resources(void)
#endif /* CONFIG_X86_32 */
@@ -71,10 +69,10 @@ index c773add..92c480c 100644
.notifier_call = dump_kernel_offset
};
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
-index 7728359..a3e8ba8 100644
+index 421e29e4cd81..61c1eb97806c 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
-@@ -351,6 +351,7 @@ static int uinput_allocate_device(struct uinput_device *udev)
+@@ -366,6 +366,7 @@ static int uinput_allocate_device(struct uinput_device *udev)
if (!udev->dev)
return -ENOMEM;
@@ -83,18 +81,18 @@ index 7728359..a3e8ba8 100644
input_set_drvdata(udev->dev, udev);
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
-index ce396ec..aee594a 100644
+index b5b427888b24..289c7898a3b0 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
-@@ -462,6 +462,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
- &sysrq_showstate_blocked_op, /* w */
+@@ -465,6 +465,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
+ /* x: May be registered on mips for TLB dump */
/* x: May be registered on ppc/powerpc for xmon */
/* x: May be registered on sparc64 for global PMU dump */
+ /* x: May be registered on x86_64 for disabling secure boot */
NULL, /* x */
/* y: May be registered on sparc64 for global register dump */
NULL, /* y */
-@@ -505,7 +506,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
+@@ -508,7 +509,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
sysrq_key_table[i] = op_p;
}
@@ -103,7 +101,7 @@ index ce396ec..aee594a 100644
{
struct sysrq_key_op *op_p;
int orig_log_level;
-@@ -525,11 +526,15 @@ void __handle_sysrq(int key, bool check_mask)
+@@ -528,11 +529,15 @@ void __handle_sysrq(int key, bool check_mask)
op_p = __sysrq_get_key_op(key);
if (op_p) {
@@ -117,10 +115,10 @@ index ce396ec..aee594a 100644
*/
- if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
+ if (from == SYSRQ_FROM_KERNEL || sysrq_on_mask(op_p->enable_mask)) {
- printk("%s\n", op_p->action_msg);
+ pr_cont("%s\n", op_p->action_msg);
console_loglevel = orig_log_level;
op_p->handler(key);
-@@ -560,7 +565,7 @@ void __handle_sysrq(int key, bool check_mask)
+@@ -564,7 +569,7 @@ void __handle_sysrq(int key, bool check_mask)
void handle_sysrq(int key)
{
if (sysrq_on())
@@ -129,7 +127,7 @@ index ce396ec..aee594a 100644
}
EXPORT_SYMBOL(handle_sysrq);
-@@ -640,7 +645,7 @@ static void sysrq_do_reset(unsigned long _state)
+@@ -645,7 +650,7 @@ static void sysrq_do_reset(unsigned long _state)
static void sysrq_handle_reset_request(struct sysrq_state *state)
{
if (state->reset_requested)
@@ -138,7 +136,7 @@ index ce396ec..aee594a 100644
if (sysrq_reset_downtime_ms)
mod_timer(&state->keyreset_timer,
-@@ -791,8 +796,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
+@@ -796,8 +801,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
default:
if (sysrq->active && value && value != 2) {
@@ -150,7 +148,7 @@ index ce396ec..aee594a 100644
}
break;
}
-@@ -1080,7 +1087,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
+@@ -1077,7 +1084,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
if (get_user(c, buf))
return -EFAULT;
@@ -160,7 +158,7 @@ index ce396ec..aee594a 100644
return count;
diff --git a/include/linux/input.h b/include/linux/input.h
-index 82ce323..9e534f2 100644
+index 82ce323b9986..9e534f228945 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -42,6 +42,7 @@ struct input_value {
@@ -190,7 +188,7 @@ index 82ce323..9e534f2 100644
* Verify that we are in sync with input_device_id mod_devicetable.h #defines
*/
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h
-index 387fa7d..4b07e30 100644
+index 387fa7d05c98..4b07e30b3279 100644
--- a/include/linux/sysrq.h
+++ b/include/linux/sysrq.h
@@ -28,6 +28,8 @@
@@ -217,34 +215,28 @@ index 387fa7d..4b07e30 100644
int unregister_sysrq_key(int key, struct sysrq_key_op *op);
struct sysrq_key_op *__sysrq_get_key_op(int key);
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
-index 0b097c8..18b400d 100644
+index 4121345498e0..0ff3cef5df96 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
-@@ -1924,7 +1924,7 @@ static int kdb_sr(int argc, const char **argv)
- if (argc != 1)
+@@ -1968,7 +1968,7 @@ static int kdb_sr(int argc, const char **argv)
return KDB_ARGCOUNT;
+
kdb_trap_printk++;
-- __handle_sysrq(*argv[1], false);
-+ __handle_sysrq(*argv[1], SYSRQ_FROM_KERNEL);
+- __handle_sysrq(*argv[1], check_mask);
++ __handle_sysrq(*argv[1], check_mask & SYSRQ_FROM_KERNEL);
kdb_trap_printk--;
return 0;
diff --git a/kernel/module.c b/kernel/module.c
-index 92b73b1..a44fb2a 100644
+index 87fa14fedc88..61385e686d49 100644
--- a/kernel/module.c
+++ b/kernel/module.c
-@@ -109,9 +109,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
-
- #ifdef CONFIG_MODULE_SIG
- #ifdef CONFIG_MODULE_SIG_FORCE
--static bool sig_enforce = true;
-+bool sig_enforce = true;
- #else
--static bool sig_enforce = false;
-+bool sig_enforce = false;
-
- static int param_set_bool_enable_only(const char *val,
- const struct kernel_param *kp)
---
-1.8.4.2
-
+@@ -292,7 +292,7 @@ static void module_assert_mutex_or_preempt(void)
+ #endif
+ }
+
+-static bool sig_enforce = IS_ENABLED(CONFIG_MODULE_SIG_FORCE);
++bool sig_enforce = IS_ENABLED(CONFIG_MODULE_SIG_FORCE);
+ #ifndef CONFIG_MODULE_SIG_FORCE
+ module_param(sig_enforce, bool_enable_only, 0644);
+ #endif /* !CONFIG_MODULE_SIG_FORCE */
diff --git a/HID-chicony-Add-support-for-Acer-Aspire-Switch-12.patch b/HID-chicony-Add-support-for-Acer-Aspire-Switch-12.patch
new file mode 100644
index 000000000..2baf72e4c
--- /dev/null
+++ b/HID-chicony-Add-support-for-Acer-Aspire-Switch-12.patch
@@ -0,0 +1,103 @@
+From 98f07385212073536f303c07ece455acdd4d267f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=9A=D1=83?=
+ =?UTF-8?q?=D0=B4=D1=80=D1=8F=D0=B2=D1=86=D0=B5=D0=B2?=
+ <nkudriavtsev@gmail.com>
+Date: Tue, 21 Jul 2015 13:31:52 +0300
+Subject: [PATCH] HID: chicony: Add support for Acer Aspire Switch 12
+
+Acer Aspire Switch 12 keyboard Chicony's controller reports too big usage
+index on the 1st interface. The patch fixes the report. The work based on
+solution from drivers/hid/hid-holtek-mouse.c
+
+Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=101721
+
+Signed-off-by: Nicholas Kudriavtsev <nkudriavtsev@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+---
+ drivers/hid/hid-chicony.c | 26 ++++++++++++++++++++++++++
+ drivers/hid/hid-core.c | 1 +
+ drivers/hid/hid-ids.h | 1 +
+ 3 files changed, 28 insertions(+)
+
+diff --git a/drivers/hid/hid-chicony.c b/drivers/hid/hid-chicony.c
+index b613d5a79684..bc3cec199fee 100644
+--- a/drivers/hid/hid-chicony.c
++++ b/drivers/hid/hid-chicony.c
+@@ -20,6 +20,7 @@
+ #include <linux/input.h>
+ #include <linux/hid.h>
+ #include <linux/module.h>
++#include <linux/usb.h>
+
+ #include "hid-ids.h"
+
+@@ -57,10 +58,34 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ return 1;
+ }
+
++static __u8 *ch_switch12_report_fixup(struct hid_device *hdev, __u8 *rdesc,
++ unsigned int *rsize)
++{
++ struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
++
++ if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
++ /* Change usage maximum and logical maximum from 0x7fff to
++ * 0x2fff, so they don't exceed HID_MAX_USAGES */
++ switch (hdev->product) {
++ case USB_DEVICE_ID_CHICONY_ACER_SWITCH12:
++ if (*rsize >= 128 && rdesc[64] == 0xff && rdesc[65] == 0x7f
++ && rdesc[69] == 0xff && rdesc[70] == 0x7f) {
++ hid_info(hdev, "Fixing up report descriptor\n");
++ rdesc[65] = rdesc[70] = 0x2f;
++ }
++ break;
++ }
++
++ }
++ return rdesc;
++}
++
++
+ static const struct hid_device_id ch_devices[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
+ { }
+ };
+ MODULE_DEVICE_TABLE(hid, ch_devices);
+@@ -68,6 +93,7 @@ MODULE_DEVICE_TABLE(hid, ch_devices);
+ static struct hid_driver ch_driver = {
+ .name = "chicony",
+ .id_table = ch_devices,
++ .report_fixup = ch_switch12_report_fixup,
+ .input_mapping = ch_input_mapping,
+ };
+ module_hid_driver(ch_driver);
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index e6fce23b121a..f90ca6574221 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1807,6 +1807,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index b3b225b75d0a..79210ca8eff1 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -233,6 +233,7 @@
+ #define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE 0x1053
+ #define USB_DEVICE_ID_CHICONY_WIRELESS2 0x1123
+ #define USB_DEVICE_ID_CHICONY_AK1D 0x1125
++#define USB_DEVICE_ID_CHICONY_ACER_SWITCH12 0x1421
+
+ #define USB_VENDOR_ID_CHUNGHWAT 0x2247
+ #define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001
+--
+2.4.3
+
diff --git a/HID-hid-input-Fix-accessing-freed-memory-during-devi.patch b/HID-hid-input-Fix-accessing-freed-memory-during-devi.patch
new file mode 100644
index 000000000..6a64910b5
--- /dev/null
+++ b/HID-hid-input-Fix-accessing-freed-memory-during-devi.patch
@@ -0,0 +1,53 @@
+From 0621809e37936e7c2b3eac9165cf2aad7f9189eb Mon Sep 17 00:00:00 2001
+From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
+Date: Mon, 3 Aug 2015 14:57:30 +0900
+Subject: [PATCH] HID: hid-input: Fix accessing freed memory during device
+ disconnect
+
+During unbinding the driver was dereferencing a pointer to memory
+already freed by power_supply_unregister().
+
+Driver was freeing its internal description of battery through pointers
+stored in power_supply structure. However, because the core owns the
+power supply instance, after calling power_supply_unregister() this
+memory is freed and the driver cannot access these members.
+
+Fix this by storing the pointer to internal description of battery in a
+local variable before calling power_supply_unregister(), so the pointer
+remains valid.
+
+Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
+Reported-by: H.J. Lu <hjl.tools@gmail.com>
+Fixes: 297d716f6260 ("power_supply: Change ownership from driver to core")
+Cc: <stable@vger.kernel.org>
+Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+---
+ drivers/hid/hid-input.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
+index 3511bbab..e3c6364 100644
+--- a/drivers/hid/hid-input.c
++++ b/drivers/hid/hid-input.c
+@@ -462,12 +462,15 @@ out:
+
+ static void hidinput_cleanup_battery(struct hid_device *dev)
+ {
++ const struct power_supply_desc *psy_desc;
++
+ if (!dev->battery)
+ return;
+
++ psy_desc = dev->battery->desc;
+ power_supply_unregister(dev->battery);
+- kfree(dev->battery->desc->name);
+- kfree(dev->battery->desc);
++ kfree(psy_desc->name);
++ kfree(psy_desc);
+ dev->battery = NULL;
+ }
+ #else /* !CONFIG_HID_BATTERY_STRENGTH */
+--
+2.4.3
+
diff --git a/HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch b/HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch
deleted file mode 100644
index 972a1b142..000000000
--- a/HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Bugzilla: 1090161
-Upstream-status: sent https://patchwork.kernel.org/patch/4055781/
-
-From patchwork Thu Apr 24 22:26:38 2014
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: HID: rmi: do not fetch more than 16 bytes in a query
-From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-X-Patchwork-Id: 4055781
-Message-Id: <1398378398-24825-1-git-send-email-benjamin.tissoires@redhat.com>
-To: Andrew Duggan <aduggan@synaptics.com>,
- Christopher Heiny <cheiny@synaptics.com>,
- Jiri Kosina <jkosina@suse.cz>, linux-input@vger.kernel.org,
- linux-kernel@vger.kernel.org
-Date: Thu, 24 Apr 2014 18:26:38 -0400
-
-A firmware bug is present on the XPS Haswell edition which silently
-split the request in two responses when the caller ask for a read of
-more than 16 bytes.
-The FW sends the first 16 then the 4 next, but it says that it answered
-the 20 bytes in the first report.
-
-This occurs only on the retrieving of the min/max of X and Y of the F11
-function.
-We only use the first 10 bytes of the Ctrl register, so we can get only
-those 10 bytes to prevent the bug from happening.
-
-Resolves:
-https://bugzilla.redhat.com/show_bug.cgi?id=1090161
-
-Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-
----
-drivers/hid/hid-rmi.c | 11 ++++++++---
- 1 file changed, 8 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
-index 7da9509..cee89c9 100644
---- a/drivers/hid/hid-rmi.c
-+++ b/drivers/hid/hid-rmi.c
-@@ -613,10 +613,15 @@ static int rmi_populate_f11(struct hid_device *hdev)
- }
- }
-
-- /* retrieve the ctrl registers */
-- ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 20);
-+ /*
-+ * retrieve the ctrl registers
-+ * the ctrl register has a size of 20 but a fw bug split it into 16 + 4,
-+ * and there is no way to know if the first 20 bytes are here or not.
-+ * We use only the first 10 bytes, so get only them.
-+ */
-+ ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, 10);
- if (ret) {
-- hid_err(hdev, "can not read ctrl block of size 20: %d.\n", ret);
-+ hid_err(hdev, "can not read ctrl block of size 10: %d.\n", ret);
- return ret;
- }
-
diff --git a/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch b/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
new file mode 100644
index 000000000..e697968c7
--- /dev/null
+++ b/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
@@ -0,0 +1,47 @@
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Thu, 16 Apr 2015 13:01:46 -0400
+Subject: [PATCH] Input - synaptics: pin 3 touches when the firmware reports 3
+ fingers
+
+Synaptics PS/2 touchpad can send only 2 touches in a report. They can
+detect 4 or 5 and this information is valuable.
+
+In commit 63c4fda (Input: synaptics - allocate 3 slots to keep stability
+in image sensors), we allocate 3 slots, but we still continue to report
+the 2 available fingers. That means that the client sees 2 used slots while
+there is a total of 3 fingers advertised by BTN_TOOL_TRIPLETAP.
+
+For old kernels this is not a problem because max_slots was 2 and libinput/
+xorg-synaptics knew how to deal with that. Now that max_slot is 3, the
+clients ignore BTN_TOOL_TRIPLETAP and count the actual used slots (so 2).
+It then gets confused when receiving the BTN_TOOL_TRIPLETAP and DOUBLETAP
+information, and goes wild.
+
+We can pin the 3 slots until we get a total number of fingers below 2.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1212230
+
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+---
+ drivers/input/mouse/synaptics.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 3a32caf06bf1..58102970f94f 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -940,6 +940,14 @@ static void synaptics_report_mt_data(struct psmouse *psmouse,
+ input_report_abs(dev, ABS_MT_PRESSURE, hw[i]->z);
+ }
+
++ /* keep (slot count <= num_fingers) by pinning all slots */
++ if (num_fingers >= 3) {
++ for (i = 0; i < 3; i++) {
++ input_mt_slot(dev, i);
++ input_mt_report_slot_state(dev, MT_TOOL_FINGER, true);
++ }
++ }
++
+ input_mt_drop_unused(dev);
+
+ /* Don't use active slot count to generate BTN_TOOL events. */
diff --git a/KEYS-Add-a-system-blacklist-keyring.patch b/KEYS-Add-a-system-blacklist-keyring.patch
new file mode 100644
index 000000000..44cb027bb
--- /dev/null
+++ b/KEYS-Add-a-system-blacklist-keyring.patch
@@ -0,0 +1,108 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Fri, 26 Oct 2012 12:36:24 -0400
+Subject: [PATCH] KEYS: Add a system blacklist keyring
+
+This adds an additional keyring that is used to store certificates that
+are blacklisted. This keyring is searched first when loading signed modules
+and if the module's certificate is found, it will refuse to load. This is
+useful in cases where third party certificates are used for module signing.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ include/keys/system_keyring.h | 4 ++++
+ init/Kconfig | 9 +++++++++
+ kernel/module_signing.c | 12 ++++++++++++
+ kernel/system_keyring.c | 17 +++++++++++++++++
+ 4 files changed, 42 insertions(+)
+
+diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h
+index 72665eb80692..2c7b80d31366 100644
+--- a/include/keys/system_keyring.h
++++ b/include/keys/system_keyring.h
+@@ -28,4 +28,8 @@ static inline struct key *get_system_trusted_keyring(void)
+ }
+ #endif
+
++#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
++extern struct key *system_blacklist_keyring;
++#endif
++
+ #endif /* _KEYS_SYSTEM_KEYRING_H */
+diff --git a/init/Kconfig b/init/Kconfig
+index f5dbc6d4261b..eca8ab59ae7f 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1734,6 +1734,15 @@ config SYSTEM_TRUSTED_KEYRING
+
+ Keys in this keyring are used by module signature checking.
+
++config SYSTEM_BLACKLIST_KEYRING
++ bool "Provide system-wide ring of blacklisted keys"
++ depends on KEYS
++ help
++ Provide a system keyring to which blacklisted keys can be added.
++ Keys in the keyring are considered entirely untrusted. Keys in this
++ keyring are used by the module signature checking to reject loading
++ of modules signed with a blacklisted key.
++
+ config PROFILING
+ bool "Profiling support"
+ help
+diff --git a/kernel/module_signing.c b/kernel/module_signing.c
+index be5b8fac4bd0..fed815fcdaf2 100644
+--- a/kernel/module_signing.c
++++ b/kernel/module_signing.c
+@@ -158,6 +158,18 @@ static struct key *request_asymmetric_key(const char *signer, size_t signer_len,
+
+ pr_debug("Look up: \"%s\"\n", id);
+
++#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
++ key = keyring_search(make_key_ref(system_blacklist_keyring, 1),
++ &key_type_asymmetric, id);
++ if (!IS_ERR(key)) {
++ /* module is signed with a cert in the blacklist. reject */
++ pr_err("Module key '%s' is in blacklist\n", id);
++ key_ref_put(key);
++ kfree(id);
++ return ERR_PTR(-EKEYREJECTED);
++ }
++#endif
++
+ key = keyring_search(make_key_ref(system_trusted_keyring, 1),
+ &key_type_asymmetric, id);
+ if (IS_ERR(key))
+diff --git a/kernel/system_keyring.c b/kernel/system_keyring.c
+index 875f64e8935b..c15e93f5a418 100644
+--- a/kernel/system_keyring.c
++++ b/kernel/system_keyring.c
+@@ -20,6 +20,9 @@
+
+ struct key *system_trusted_keyring;
+ EXPORT_SYMBOL_GPL(system_trusted_keyring);
++#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
++struct key *system_blacklist_keyring;
++#endif
+
+ extern __initconst const u8 system_certificate_list[];
+ extern __initconst const unsigned long system_certificate_list_size;
+@@ -41,6 +44,20 @@ static __init int system_trusted_keyring_init(void)
+ panic("Can't allocate system trusted keyring\n");
+
+ set_bit(KEY_FLAG_TRUSTED_ONLY, &system_trusted_keyring->flags);
++
++#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
++ system_blacklist_keyring = keyring_alloc(".system_blacklist_keyring",
++ KUIDT_INIT(0), KGIDT_INIT(0),
++ current_cred(),
++ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
++ KEY_USR_VIEW | KEY_USR_READ,
++ KEY_ALLOC_NOT_IN_QUOTA, NULL);
++ if (IS_ERR(system_blacklist_keyring))
++ panic("Can't allocate system blacklist keyring\n");
++
++ set_bit(KEY_FLAG_TRUSTED_ONLY, &system_blacklist_keyring->flags);
++#endif
++
+ return 0;
+ }
+
diff --git a/Kbuild-Add-an-option-to-enable-GCC-VTA.patch b/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
new file mode 100644
index 000000000..4908a98ba
--- /dev/null
+++ b/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
@@ -0,0 +1,89 @@
+From: Josh Stone <jistone@redhat.com>
+Date: Fri, 21 Nov 2014 10:40:00 -0800
+Subject: [PATCH] Kbuild: Add an option to enable GCC VTA
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Due to recent codegen issues, gcc -fvar-tracking-assignments was
+unconditionally disabled in commit 2062afb4f804a ("Fix gcc-4.9.0
+miscompilation of load_balance() in scheduler"). However, this reduces
+the debuginfo coverage for variable locations, especially in inline
+functions. VTA is certainly not perfect either in those cases, but it
+is much better than without. With compiler versions that have fixed the
+codegen bugs, we would prefer to have the better details for SystemTap,
+and surely other debuginfo consumers like perf will benefit as well.
+
+This patch simply makes CONFIG_DEBUG_INFO_VTA an option. I considered
+Frank and Linus's discussion of a cc-option-like -fcompare-debug test,
+but I'm convinced that a narrow test of an arch-specific codegen issue
+is not really useful. GCC has their own regression tests for this, so
+I'd suggest GCC_COMPARE_DEBUG=-fvar-tracking-assignments-toggle is more
+useful for kernel developers to test confidence.
+
+In fact, I ran into a couple more issues when testing for this patch[1],
+although neither of those had any codegen impact.
+ [1] https://bugzilla.redhat.com/show_bug.cgi?id=1140872
+
+With gcc-4.9.2-1.fc22, I can now build v3.18-rc5 with Fedora's i686 and
+x86_64 configs, and this is completely clean with GCC_COMPARE_DEBUG.
+
+Cc: Frank Ch. Eigler <fche@redhat.com>
+Cc: Jakub Jelinek <jakub@redhat.com>
+Cc: Josh Boyer <jwboyer@fedoraproject.org>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Markus Trippelsdorf <markus@trippelsdorf.de>
+Cc: Michel Dänzer <michel@daenzer.net>
+Signed-off-by: Josh Stone <jistone@redhat.com>
+---
+ Makefile | 4 ++++
+ lib/Kconfig.debug | 18 +++++++++++++++++-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index af6da040b952..2796a22bb0a4 100644
+--- a/Makefile
++++ b/Makefile
+@@ -706,7 +706,11 @@ KBUILD_CFLAGS += -fomit-frame-pointer
+ endif
+ endif
+
++ifdef CONFIG_DEBUG_INFO_VTA
++KBUILD_CFLAGS += $(call cc-option, -fvar-tracking-assignments)
++else
+ KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
++endif
+
+ ifdef CONFIG_DEBUG_INFO
+ ifdef CONFIG_DEBUG_INFO_SPLIT
+diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
+index c5cefb3c009c..b663e8e211b0 100644
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -165,7 +165,23 @@ config DEBUG_INFO_DWARF4
+ Generate dwarf4 debug info. This requires recent versions
+ of gcc and gdb. It makes the debug information larger.
+ But it significantly improves the success of resolving
+- variables in gdb on optimized code.
++ variables in gdb on optimized code. The gcc docs also
++ recommend enabling -fvar-tracking-assignments for maximum
++ benefit. (see DEBUG_INFO_VTA)
++
++config DEBUG_INFO_VTA
++ bool "Enable var-tracking-assignments for debuginfo"
++ depends on DEBUG_INFO
++ help
++ Enable gcc -fvar-tracking-assignments for improved debug
++ information on variable locations in optimized code. Per
++ gcc, DEBUG_INFO_DWARF4 is recommended for best use of VTA.
++
++ VTA has been implicated in codegen bugs (gcc PR61801,
++ PR61904), so this may deserve some caution. One can set
++ GCC_COMPARE_DEBUG=-fvar-tracking-assignments-toggle in the
++ environment to automatically compile everything both ways,
++ generating an error if anything differs.
+
+ config GDB_SCRIPTS
+ bool "Provide GDB scripts for kernel debugging"
diff --git a/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch b/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
new file mode 100644
index 000000000..b136acaf0
--- /dev/null
+++ b/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
@@ -0,0 +1,182 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Fri, 26 Oct 2012 12:42:16 -0400
+Subject: [PATCH] MODSIGN: Import certificates from UEFI Secure Boot
+
+Secure Boot stores a list of allowed certificates in the 'db' variable.
+This imports those certificates into the system trusted keyring. This
+allows for a third party signing certificate to be used in conjunction
+with signed modules. By importing the public certificate into the 'db'
+variable, a user can allow a module signed with that certificate to
+load. The shim UEFI bootloader has a similar certificate list stored
+in the 'MokListRT' variable. We import those as well.
+
+In the opposite case, Secure Boot maintains a list of disallowed
+certificates in the 'dbx' variable. We load those certificates into
+the newly introduced system blacklist keyring and forbid any module
+signed with those from loading.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ include/linux/efi.h | 6 ++++
+ init/Kconfig | 9 +++++
+ kernel/Makefile | 3 ++
+ kernel/modsign_uefi.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 110 insertions(+)
+ create mode 100644 kernel/modsign_uefi.c
+
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index 706b16fa6de8..470e8dfcb517 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -595,6 +595,12 @@ void efi_native_runtime_setup(void);
+ #define EFI_CERT_X509_GUID \
+ EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
+
++#define EFI_IMAGE_SECURITY_DATABASE_GUID \
++ EFI_GUID( 0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f )
++
++#define EFI_SHIM_LOCK_GUID \
++ EFI_GUID( 0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 )
++
+ typedef struct {
+ efi_guid_t guid;
+ u64 table;
+diff --git a/init/Kconfig b/init/Kconfig
+index eca8ab59ae7f..9a782b02e4d5 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1888,6 +1888,15 @@ config MODULE_SIG_ALL
+ comment "Do not forget to sign required modules with scripts/sign-file"
+ depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL
+
++config MODULE_SIG_UEFI
++ bool "Allow modules signed with certs stored in UEFI"
++ depends on MODULE_SIG && SYSTEM_BLACKLIST_KEYRING && EFI
++ select EFI_SIGNATURE_LIST_PARSER
++ help
++ This will import certificates stored in UEFI and allow modules
++ signed with those to be loaded. It will also disallow loading
++ of modules stored in the UEFI dbx variable.
++
+ choice
+ prompt "Which hash algorithm should modules be signed with?"
+ depends on MODULE_SIG
+diff --git a/kernel/Makefile b/kernel/Makefile
+index 1408b3353a3c..8a3be67a3a15 100644
+--- a/kernel/Makefile
++++ b/kernel/Makefile
+@@ -46,6 +46,7 @@ obj-$(CONFIG_UID16) += uid16.o
+ obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o
+ obj-$(CONFIG_MODULES) += module.o
+ obj-$(CONFIG_MODULE_SIG) += module_signing.o
++obj-$(CONFIG_MODULE_SIG_UEFI) += modsign_uefi.o
+ obj-$(CONFIG_KALLSYMS) += kallsyms.o
+ obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
+ obj-$(CONFIG_KEXEC) += kexec.o
+@@ -99,6 +100,8 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o
+
+ $(obj)/configs.o: $(obj)/config_data.h
+
++$(obj)/modsign_uefi.o: KBUILD_CFLAGS += -fshort-wchar
++
+ # config_data.h contains the same information as ikconfig.h but gzipped.
+ # Info from config_data can be extracted from /proc/config*
+ targets += config_data.gz
+diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
+new file mode 100644
+index 000000000000..94b0eb38a284
+--- /dev/null
++++ b/kernel/modsign_uefi.c
+@@ -0,0 +1,92 @@
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/cred.h>
++#include <linux/err.h>
++#include <linux/efi.h>
++#include <linux/slab.h>
++#include <keys/asymmetric-type.h>
++#include <keys/system_keyring.h>
++#include "module-internal.h"
++
++static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size)
++{
++ efi_status_t status;
++ unsigned long lsize = 4;
++ unsigned long tmpdb[4];
++ void *db = NULL;
++
++ status = efi.get_variable(name, guid, NULL, &lsize, &tmpdb);
++ if (status != EFI_BUFFER_TOO_SMALL) {
++ pr_err("Couldn't get size: 0x%lx\n", status);
++ return NULL;
++ }
++
++ db = kmalloc(lsize, GFP_KERNEL);
++ if (!db) {
++ pr_err("Couldn't allocate memory for uefi cert list\n");
++ goto out;
++ }
++
++ status = efi.get_variable(name, guid, NULL, &lsize, db);
++ if (status != EFI_SUCCESS) {
++ kfree(db);
++ db = NULL;
++ pr_err("Error reading db var: 0x%lx\n", status);
++ }
++out:
++ *size = lsize;
++ return db;
++}
++
++/*
++ * * Load the certs contained in the UEFI databases
++ * */
++static int __init load_uefi_certs(void)
++{
++ efi_guid_t secure_var = EFI_IMAGE_SECURITY_DATABASE_GUID;
++ efi_guid_t mok_var = EFI_SHIM_LOCK_GUID;
++ void *db = NULL, *dbx = NULL, *mok = NULL;
++ unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
++ int rc = 0;
++
++ /* Check if SB is enabled and just return if not */
++ if (!efi_enabled(EFI_SECURE_BOOT))
++ return 0;
++
++ /* Get db, MokListRT, and dbx. They might not exist, so it isn't
++ * an error if we can't get them.
++ */
++ db = get_cert_list(L"db", &secure_var, &dbsize);
++ if (!db) {
++ pr_err("MODSIGN: Couldn't get UEFI db list\n");
++ } else {
++ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
++ if (rc)
++ pr_err("Couldn't parse db signatures: %d\n", rc);
++ kfree(db);
++ }
++
++ mok = get_cert_list(L"MokListRT", &mok_var, &moksize);
++ if (!mok) {
++ pr_info("MODSIGN: Couldn't get UEFI MokListRT\n");
++ } else {
++ rc = parse_efi_signature_list(mok, moksize, system_trusted_keyring);
++ if (rc)
++ pr_err("Couldn't parse MokListRT signatures: %d\n", rc);
++ kfree(mok);
++ }
++
++ dbx = get_cert_list(L"dbx", &secure_var, &dbxsize);
++ if (!dbx) {
++ pr_info("MODSIGN: Couldn't get UEFI dbx list\n");
++ } else {
++ rc = parse_efi_signature_list(dbx, dbxsize,
++ system_blacklist_keyring);
++ if (rc)
++ pr_err("Couldn't parse dbx signatures: %d\n", rc);
++ kfree(dbx);
++ }
++
++ return rc;
++}
++late_initcall(load_uefi_certs);
diff --git a/MODSIGN-Support-not-importing-certs-from-db.patch b/MODSIGN-Support-not-importing-certs-from-db.patch
new file mode 100644
index 000000000..4782e734f
--- /dev/null
+++ b/MODSIGN-Support-not-importing-certs-from-db.patch
@@ -0,0 +1,80 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Thu, 3 Oct 2013 10:14:23 -0400
+Subject: [PATCH] MODSIGN: Support not importing certs from db
+
+If a user tells shim to not use the certs/hashes in the UEFI db variable
+for verification purposes, shim will set a UEFI variable called MokIgnoreDB.
+Have the uefi import code look for this and not import things from the db
+variable.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ kernel/modsign_uefi.c | 40 +++++++++++++++++++++++++++++++---------
+ 1 file changed, 31 insertions(+), 9 deletions(-)
+
+diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
+index 94b0eb38a284..ae28b974d49a 100644
+--- a/kernel/modsign_uefi.c
++++ b/kernel/modsign_uefi.c
+@@ -8,6 +8,23 @@
+ #include <keys/system_keyring.h>
+ #include "module-internal.h"
+
++static __init int check_ignore_db(void)
++{
++ efi_status_t status;
++ unsigned int db = 0;
++ unsigned long size = sizeof(db);
++ efi_guid_t guid = EFI_SHIM_LOCK_GUID;
++
++ /* Check and see if the MokIgnoreDB variable exists. If that fails
++ * then we don't ignore DB. If it succeeds, we do.
++ */
++ status = efi.get_variable(L"MokIgnoreDB", &guid, NULL, &size, &db);
++ if (status != EFI_SUCCESS)
++ return 0;
++
++ return 1;
++}
++
+ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size)
+ {
+ efi_status_t status;
+@@ -47,23 +64,28 @@ static int __init load_uefi_certs(void)
+ efi_guid_t mok_var = EFI_SHIM_LOCK_GUID;
+ void *db = NULL, *dbx = NULL, *mok = NULL;
+ unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
+- int rc = 0;
++ int ignore_db, rc = 0;
+
+ /* Check if SB is enabled and just return if not */
+ if (!efi_enabled(EFI_SECURE_BOOT))
+ return 0;
+
++ /* See if the user has setup Ignore DB mode */
++ ignore_db = check_ignore_db();
++
+ /* Get db, MokListRT, and dbx. They might not exist, so it isn't
+ * an error if we can't get them.
+ */
+- db = get_cert_list(L"db", &secure_var, &dbsize);
+- if (!db) {
+- pr_err("MODSIGN: Couldn't get UEFI db list\n");
+- } else {
+- rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
+- if (rc)
+- pr_err("Couldn't parse db signatures: %d\n", rc);
+- kfree(db);
++ if (!ignore_db) {
++ db = get_cert_list(L"db", &secure_var, &dbsize);
++ if (!db) {
++ pr_err("MODSIGN: Couldn't get UEFI db list\n");
++ } else {
++ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
++ if (rc)
++ pr_err("Couldn't parse db signatures: %d\n", rc);
++ kfree(db);
++ }
+ }
+
+ mok = get_cert_list(L"MokListRT", &mok_var, &moksize);
diff --git a/Makefile b/Makefile
index 178f4f2e5..4f11a034b 100644
--- a/Makefile
+++ b/Makefile
@@ -26,14 +26,13 @@ extremedebug:
@perl -pi -e 's/# CONFIG_DEBUG_PAGEALLOC is not set/CONFIG_DEBUG_PAGEALLOC=y/' config-nodebug
debug:
- @perl -pi -e 's/# CONFIG_SLUB_DEBUG_ON is not set/CONFIG_SLUB_DEBUG_ON=y/' config-nodebug
@perl -pi -e 's/# CONFIG_LOCK_STAT is not set/CONFIG_LOCK_STAT=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_STACK_USAGE is not set/CONFIG_DEBUG_STACK_USAGE=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_SLAB is not set/CONFIG_DEBUG_SLAB=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_MUTEXES is not set/CONFIG_DEBUG_MUTEXES=y/' config-nodebug
- @perl -pi -e 's/# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set/CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_RT_MUTEXES is not set/CONFIG_DEBUG_RT_MUTEXES=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_LOCK_ALLOC is not set/CONFIG_DEBUG_LOCK_ALLOC=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_LOCK_TORTURE_TEST is not set/CONFIG_LOCK_TORTURE_TEST=m/' config-nodebug
@perl -pi -e 's/# CONFIG_PROVE_LOCKING is not set/CONFIG_PROVE_LOCKING=y/' config-nodebug
@perl -pi -e 's/# CONFIG_PROVE_RCU is not set/CONFIG_PROVE_RCU=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_SPINLOCK is not set/CONFIG_DEBUG_SPINLOCK=y/' config-nodebug
@@ -47,7 +46,7 @@ debug:
@perl -pi -e 's/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/CONFIG_FAULT_INJECTION_DEBUG_FS=y/' config-nodebug
@perl -pi -e 's/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_SG is not set/CONFIG_DEBUG_SG=y/' config-nodebug
- @perl -pi -e 's/# CONFIG_DEBUG_WRITECOUNT is not set/CONFIG_DEBUG_WRITECOUNT=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_PI_LIST is not set/CONFIG_DEBUG_PI_LIST=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS is not set/CONFIG_DEBUG_OBJECTS=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_FREE is not set/CONFIG_DEBUG_OBJECTS_FREE=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/CONFIG_DEBUG_OBJECTS_TIMERS=y/' config-nodebug
@@ -55,9 +54,10 @@ debug:
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/' config-nodebug
@perl -pi -e 's/# CONFIG_X86_PTDUMP is not set/CONFIG_X86_PTDUMP=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_ARM64_PTDUMP is not set/CONFIG_ARM64_PTDUMP=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_EFI_PGT_DUMP is not set/CONFIG_EFI_PGT_DUMP=y/' config-nodebug
@perl -pi -e 's/# CONFIG_CAN_DEBUG_DEVICES is not set/CONFIG_CAN_DEBUG_DEVICES=y/' config-nodebug
@perl -pi -e 's/# CONFIG_MODULE_FORCE_UNLOAD is not set/CONFIG_MODULE_FORCE_UNLOAD=y/' config-nodebug
- @perl -pi -e 's/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/CONFIG_SYSCTL_SYSCALL_CHECK=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_NOTIFIERS is not set/CONFIG_DEBUG_NOTIFIERS=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DMA_API_DEBUG is not set/CONFIG_DMA_API_DEBUG=y/' config-nodebug
@perl -pi -e 's/# CONFIG_PM_TEST_SUSPEND is not set/CONFIG_PM_TEST_SUSPEND=y/' config-generic
@@ -98,11 +98,7 @@ debug:
@perl -pi -e 's/# CONFIG_MAXSMP is not set/CONFIG_MAXSMP=y/' config-x86-generic
- @# Try out UAS in rawhide builds.
- @perl -pi -e 's/# CONFIG_USB_UAS is not set/CONFIG_USB_UAS=m/' config-generic
-
@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
- @perl -pi -e 's/^%define rawhide_skip_docs 0/%define rawhide_skip_docs 1/' kernel.spec
@rpmdev-bumpspec -c "Reenable debugging options." kernel.spec
nodebuginfo:
@@ -111,7 +107,6 @@ nodebug: release
@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
release: config-release
@perl -pi -e 's/^%define debugbuildsenabled 0/%define debugbuildsenabled 1/' kernel.spec
- @perl -pi -e 's/^%define rawhide_skip_docs 1/%define rawhide_skip_docs 0/' kernel.spec
@rpmdev-bumpspec -c "Disable debugging options." kernel.spec
include Makefile.release
diff --git a/Makefile.config b/Makefile.config
index 31f82a4b4..148e21fef 100644
--- a/Makefile.config
+++ b/Makefile.config
@@ -11,10 +11,10 @@ CONFIGFILES = \
$(CFG)-s390x.config \
$(CFG)-armv7hl.config $(CFG)-armv7hl-lpae.config \
$(CFG)-aarch64.config \
- $(CFG)-ppc.config $(CFG)-ppc-smp.config \
- $(CFG)-ppc64.config $(CFG)-ppc64p7.config $(CFG)-ppc64-debug.config
+ $(CFG)-ppc64.config $(CFG)-ppc64p7.config $(CFG)-ppc64-debug.config \
+ $(CFG)-ppc64le.config $(CFG)-ppc64le-debug.config
-PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x arm arm64
+PLATFORMS = x86 x86_64 powerpc s390x arm arm64
TEMPFILES = $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
configs: $(CONFIGFILES)
@@ -26,11 +26,11 @@ configs: $(CONFIGFILES)
clean ::
@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-$(VERSION)*config
-temp-generic: config-generic
- cat config-generic config-nodebug > temp-generic
+temp-generic: config-generic config-nodebug
+ cat $^ > temp-generic
-temp-debug-generic: config-generic
- cat config-generic config-debug > temp-debug-generic
+temp-debug-generic: config-generic config-debug
+ cat $^ > temp-debug-generic
temp-no-extra-generic: config-no-extra temp-generic
perl merge.pl $^ > $@
@@ -74,18 +74,12 @@ temp-x86_64-generic: temp-x86-64 temp-generic
temp-x86_64-debug-generic: temp-x86-64 temp-debug-generic
perl merge.pl $^ > $@
-temp-powerpc-generic: config-powerpc-generic temp-generic
+temp-powerpc64-generic: config-powerpc64-generic temp-generic
perl merge.pl $^ > $@
-temp-powerpc-debug-generic: config-powerpc-generic temp-debug-generic
+temp-powerpc64-debug-generic: config-powerpc64-generic temp-debug-generic
perl merge.pl $^ > $@
-temp-powerpc32-generic: config-powerpc32-generic temp-powerpc-generic
- perl merge.pl $^ > $@
-
-temp-powerpc64-generic: config-powerpc64 temp-powerpc-generic
- perl merge.pl $^ > $@
-
temp-s390-generic: config-s390x temp-generic
perl merge.pl $^ > $@
@@ -107,15 +101,21 @@ $(CFG)-x86_64.config: /dev/null temp-x86_64-generic
$(CFG)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic
perl merge.pl $^ x86_64 > $@
-$(CFG)-ppc64.config: /dev/null temp-powerpc64-generic
+$(CFG)-ppc64.config: config-powerpc64 temp-powerpc64-generic
perl merge.pl $^ powerpc > $@
-$(CFG)-ppc64-debug.config: temp-powerpc64-generic temp-powerpc-debug-generic
+$(CFG)-ppc64-debug.config: config-powerpc64 temp-powerpc64-debug-generic
perl merge.pl $^ powerpc > $@
$(CFG)-ppc64p7.config: config-powerpc64p7 temp-powerpc64-generic
perl merge.pl $^ powerpc > $@
+$(CFG)-ppc64le.config: config-powerpc64le temp-powerpc64-generic
+ perl merge.pl $^ powerpc > $@
+
+$(CFG)-ppc64le-debug.config: config-powerpc64le temp-powerpc64-debug-generic
+ perl merge.pl $^ powerpc > $@
+
$(CFG)-s390x.config: config-s390x temp-s390-generic
perl merge.pl $^ s390 > $@
@@ -127,9 +127,3 @@ $(CFG)-armv7hl-lpae.config: /dev/null temp-armv7-lpae
$(CFG)-aarch64.config: /dev/null temp-arm64
perl merge.pl $^ arm64 > $@
-
-$(CFG)-ppc.config: /dev/null temp-powerpc32-generic
- perl merge.pl $^ powerpc > $@
-
-$(CFG)-ppc-smp.config: config-powerpc32-smp temp-powerpc32-generic
- perl merge.pl $^ powerpc > $@
diff --git a/Makefile.release b/Makefile.release
index ef0d66b62..f7b704237 100644
--- a/Makefile.release
+++ b/Makefile.release
@@ -6,14 +6,13 @@
# Anything that changes kernel.spec itself should go in the main Makefile.
config-release:
- @perl -pi -e 's/CONFIG_SLUB_DEBUG_ON=y/# CONFIG_SLUB_DEBUG_ON is not set/' config-nodebug
@perl -pi -e 's/CONFIG_LOCK_STAT=y/# CONFIG_LOCK_STAT is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_STACK_USAGE=y/# CONFIG_DEBUG_STACK_USAGE is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_SLAB=y/# CONFIG_DEBUG_SLAB is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_MUTEXES=y/# CONFIG_DEBUG_MUTEXES is not set/' config-nodebug
- @perl -pi -e 's/CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y/# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_RT_MUTEXES=y/# CONFIG_DEBUG_RT_MUTEXES is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_LOCK_ALLOC=y/# CONFIG_DEBUG_LOCK_ALLOC is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_LOCK_TORTURE_TEST=m/# CONFIG_LOCK_TORTURE_TEST is not set/' config-nodebug
@perl -pi -e 's/CONFIG_PROVE_LOCKING=y/# CONFIG_PROVE_LOCKING is not set/' config-nodebug
@perl -pi -e 's/CONFIG_PROVE_RCU=y/# CONFIG_PROVE_RCU is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_SPINLOCK=y/# CONFIG_DEBUG_SPINLOCK is not set/' config-nodebug
@@ -27,17 +26,17 @@ config-release:
@perl -pi -e 's/CONFIG_FAULT_INJECTION_DEBUG_FS=y/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/' config-nodebug
@perl -pi -e 's/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_SG=y/# CONFIG_DEBUG_SG is not set/' config-nodebug
- @perl -pi -e 's/CONFIG_DEBUG_WRITECOUNT=y/# CONFIG_DEBUG_WRITECOUNT is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_PI_LIST=y/# CONFIG_DEBUG_PI_LIST is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS=y/# CONFIG_DEBUG_OBJECTS is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_FREE=y/# CONFIG_DEBUG_OBJECTS_FREE is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_TIMERS=y/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/' config-nodebug
- @perl -pi -e 's/CONFIG_X86_PTDUMP=y/# CONFIG_X86_PTDUMP is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_ARM64_PTDUMP=y/# CONFIG_ARM64_PTDUMP is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_EFI_PGT_DUMP=y/# CONFIG_EFI_PGT_DUMP is not set/' config-nodebug
@perl -pi -e 's/CONFIG_CAN_DEBUG_DEVICES=y/# CONFIG_CAN_DEBUG_DEVICES is not set/' config-nodebug
@perl -pi -e 's/CONFIG_MODULE_FORCE_UNLOAD=y/# CONFIG_MODULE_FORCE_UNLOAD is not set/' config-nodebug
- @perl -pi -e 's/CONFIG_SYSCTL_SYSCALL_CHECK=y/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_NOTIFIERS=y/# CONFIG_DEBUG_NOTIFIERS is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DMA_API_DEBUG=y/# CONFIG_DMA_API_DEBUG is not set/' config-nodebug
@perl -pi -e 's/CONFIG_PM_TEST_SUSPEND=y/# CONFIG_PM_TEST_SUSPEND is not set/' config-generic
@@ -64,6 +63,7 @@ config-release:
@perl -pi -e 's/CONFIG_QUOTA_DEBUG=y/# CONFIG_QUOTA_DEBUG is not set/' config-nodebug
@perl -pi -e 's/CONFIG_CPU_NOTIFIER_ERROR_INJECT=m/# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_PER_CPU_MAPS=y/# CONFIG_DEBUG_PER_CPU_MAPS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_PERCPU_TEST=m/# CONFIG_PERCPU_TEST is not set/' config-nodebug
@perl -pi -e 's/CONFIG_TEST_LIST_SORT=y/# CONFIG_TEST_LIST_SORT is not set/' config-nodebug
@perl -pi -e 's/CONFIG_TEST_STRING_HELPERS=m/# CONFIG_TEST_STRING_HELPERS is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_ATOMIC_SLEEP=y/# CONFIG_DEBUG_ATOMIC_SLEEP is not set/' config-nodebug
@@ -83,9 +83,6 @@ config-release:
@# Change defaults back to sane things.
@perl -pi -e 's/CONFIG_MAXSMP=y/# CONFIG_MAXSMP is not set/' config-x86-generic
- @# Disable UAS for release until it's ready. (#717633, #744099)
- @perl -pi -e 's/CONFIG_USB_UAS=m/# CONFIG_USB_UAS is not set/' config-generic
-
@perl -pi -e 's/CONFIG_SCHEDSTATS=y/# CONFIG_SCHEDSTATS is not set/' config-nodebug
@perl -pi -e 's/CONFIG_LATENCYTOP=y/# CONFIG_LATENCYTOP is not set/' config-nodebug
diff --git a/NFS-populate-net-in-mount-data-when-remounting.patch b/NFS-populate-net-in-mount-data-when-remounting.patch
deleted file mode 100644
index 223b50030..000000000
--- a/NFS-populate-net-in-mount-data-when-remounting.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Bugzilla: 1099761
-Upstream-status: 3.16 and CC'd for stable
-
-From a914722f333b3359d2f4f12919380a334176bb89 Mon Sep 17 00:00:00 2001
-From: Mateusz Guzik <mguzik@redhat.com>
-Date: Tue, 10 Jun 2014 12:44:12 +0200
-Subject: [PATCH] NFS: populate ->net in mount data when remounting
-
-Otherwise the kernel oopses when remounting with IPv6 server because
-net is dereferenced in dev_get_by_name.
-
-Use net ns of current thread so that dev_get_by_name does not operate on
-foreign ns. Changing the address is prohibited anyway so this should not
-affect anything.
-
-Signed-off-by: Mateusz Guzik <mguzik@redhat.com>
-Cc: linux-nfs@vger.kernel.org
-Cc: linux-kernel@vger.kernel.org
-Cc: stable@vger.kernel.org # 3.4+
-Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
----
- fs/nfs/super.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/fs/nfs/super.c b/fs/nfs/super.c
-index 1a6d7ac9d9d2..084af1060d79 100644
---- a/fs/nfs/super.c
-+++ b/fs/nfs/super.c
-@@ -2260,6 +2260,7 @@ nfs_remount(struct super_block *sb, int *flags, char *raw_data)
- data->nfs_server.addrlen = nfss->nfs_client->cl_addrlen;
- data->version = nfsvers;
- data->minorversion = nfss->nfs_client->cl_minorversion;
-+ data->net = current->nsproxy->net_ns;
- memcpy(&data->nfs_server.address, &nfss->nfs_client->cl_addr,
- data->nfs_server.addrlen);
-
---
-1.9.3
-
diff --git a/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch b/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
new file mode 100644
index 000000000..92e028d07
--- /dev/null
+++ b/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
@@ -0,0 +1,113 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Thu, 8 Mar 2012 10:10:38 -0500
+Subject: [PATCH] PCI: Lock down BAR access when module security is enabled
+
+Any hardware that can potentially generate DMA has to be locked down from
+userspace in order to avoid it being possible for an attacker to modify
+kernel code, allowing them to circumvent disabled module loading or module
+signing. Default to paranoid - in future we can potentially relax this for
+sufficiently IOMMU-isolated devices.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ drivers/pci/pci-sysfs.c | 10 ++++++++++
+ drivers/pci/proc.c | 8 +++++++-
+ drivers/pci/syscall.c | 3 ++-
+ 3 files changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
+index 312f23a8429c..93e6ac103dd0 100644
+--- a/drivers/pci/pci-sysfs.c
++++ b/drivers/pci/pci-sysfs.c
+@@ -30,6 +30,7 @@
+ #include <linux/vgaarb.h>
+ #include <linux/pm_runtime.h>
+ #include <linux/of.h>
++#include <linux/module.h>
+ #include "pci.h"
+
+ static int sysfs_initialized; /* = 0 */
+@@ -710,6 +711,9 @@ static ssize_t pci_write_config(struct file *filp, struct kobject *kobj,
+ loff_t init_off = off;
+ u8 *data = (u8 *) buf;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (off > dev->cfg_size)
+ return 0;
+ if (off + count > dev->cfg_size) {
+@@ -1004,6 +1008,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
+ resource_size_t start, end;
+ int i;
+
++ if (secure_modules())
++ return -EPERM;
++
+ for (i = 0; i < PCI_ROM_RESOURCE; i++)
+ if (res == &pdev->resource[i])
+ break;
+@@ -1105,6 +1112,9 @@ static ssize_t pci_write_resource_io(struct file *filp, struct kobject *kobj,
+ struct bin_attribute *attr, char *buf,
+ loff_t off, size_t count)
+ {
++ if (secure_modules())
++ return -EPERM;
++
+ return pci_resource_io(filp, kobj, attr, buf, off, count, true);
+ }
+
+diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
+index 3f155e78513f..4265ea07e3b0 100644
+--- a/drivers/pci/proc.c
++++ b/drivers/pci/proc.c
+@@ -116,6 +116,9 @@ static ssize_t proc_bus_pci_write(struct file *file, const char __user *buf,
+ int size = dev->cfg_size;
+ int cnt;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (pos >= size)
+ return 0;
+ if (nbytes >= size)
+@@ -195,6 +198,9 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd,
+ #endif /* HAVE_PCI_MMAP */
+ int ret = 0;
+
++ if (secure_modules())
++ return -EPERM;
++
+ switch (cmd) {
+ case PCIIOC_CONTROLLER:
+ ret = pci_domain_nr(dev->bus);
+@@ -233,7 +239,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma)
+ struct pci_filp_private *fpriv = file->private_data;
+ int i, ret;
+
+- if (!capable(CAP_SYS_RAWIO))
++ if (!capable(CAP_SYS_RAWIO) || secure_modules())
+ return -EPERM;
+
+ /* Make sure the caller is mapping a real resource for this device */
+diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
+index b91c4da68365..98f5637304d1 100644
+--- a/drivers/pci/syscall.c
++++ b/drivers/pci/syscall.c
+@@ -10,6 +10,7 @@
+ #include <linux/errno.h>
+ #include <linux/pci.h>
+ #include <linux/syscalls.h>
++#include <linux/module.h>
+ #include <asm/uaccess.h>
+ #include "pci.h"
+
+@@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
+ u32 dword;
+ int err = 0;
+
+- if (!capable(CAP_SYS_ADMIN))
++ if (!capable(CAP_SYS_ADMIN) || secure_modules())
+ return -EPERM;
+
+ dev = pci_get_bus_and_slot(bus, dfn);
diff --git a/PatchList.txt b/PatchList.txt
index 3759a643d..0b358213a 100644
--- a/PatchList.txt
+++ b/PatchList.txt
@@ -1,42 +1,11 @@
**** Backports and patches headed/already upsteram *****************************
-* net-flow_dissector-fail-on-evil-iph-ihl.patch (rhbz 1007939 1025647)
- - Should hit upstream and stable soon
-
-* rt2800usb-slow-down-TX-status-polling.patch (rhbz 984696)
- - Still pending upstream. Fixes https://bugzilla.kernel.org/show_bug.cgi?id=62781
-
-* btrfs-relocate-csums-properly-with-prealloc-ext.patch (rhbz 1011714)
- - Still pending upstream
-
* cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch (rhbz 1000439)
- Queued for next upstream release I believe. Fixes a segfault in cpupower
* dm-cache-policy-mq_fix-large-scale-table-allocation-bug.patch (rhbz 993744)
- Still pending upstream
-* 0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch (rhbz 896695)
- - Still pending upstream
-
-* vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch (rhbz 998732)
- - Still pending upstream
-
-* iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch (rhbz 982153)
- - Still pending upstream
-
-* rt2800-add-support-for-rf3070.patch (rhbz 974072)
- - Actually I'm unsure of what the upstream status on this one is.
-
-* elevator-Fix-a-race-in-elevator-switching-and-md.patch
-* elevator-acquire-q-sysfs_lock-in-elevator_change.patch (rhbz 902012)
- - I believe these are both queued for the next upstream release
-
-* ntp-Make-periodic-RTC-update-more-reliable.patch (rhbz 985522)
- - I believe this is queued in John Stultz's tree for 3.13
-
-* ansi_cprng-Fix-off-by-one-error-in-non-block-size-request.patch (rhbz 1007690 1009136)
- - Fixes CVE-2013-4345
-
* ath9k_rx_dma_stop_check.patch (rhbz 892811)
- Fixes some DMA issue on specific hardware. Taken from
https://dev.openwrt.org/browser/trunk/package/mac80211/patches/552-ath9k_rx_dma_stop_check.patch?rev=34910
@@ -48,12 +17,6 @@ https://dev.openwrt.org/browser/trunk/package/mac80211/patches/552-ath9k_rx_dma_
- Fedora secure boot support.
- Dear Matthew, this is your fault. Run sed already and get a new set out.
-* keys-expand-keyring.patch
-* keys-krb-support.patch
-* keys-x509-improv.patch
-* keyring-quota.patch
- - I believe these are all now queued for 3.13 in James Morris' tree.
-
**** Other stuff that should go upstream (in decreasing likelyhood) ************
* defaults-acpi-video.patch
@@ -64,7 +27,6 @@ https://dev.openwrt.org/browser/trunk/package/mac80211/patches/552-ath9k_rx_dma_
Turn into CONFIG_ options and upstream ?
* input-kill-stupid-messages.patch
-* silence-acpi-blacklist.patch
* silence-fbcon-logo.patch
* silence-noise.patch
Fedora local 'hush' patches. (TODO: push more upstream)
diff --git a/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch b/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
new file mode 100644
index 000000000..99cae0a0a
--- /dev/null
+++ b/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
@@ -0,0 +1,38 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 9 Mar 2012 09:28:15 -0500
+Subject: [PATCH] Restrict /dev/mem and /dev/kmem when module loading is
+ restricted
+
+Allowing users to write to address space makes it possible for the kernel
+to be subverted, avoiding module loading restrictions. Prevent this when
+any restrictions have been imposed on loading modules.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ drivers/char/mem.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/char/mem.c b/drivers/char/mem.c
+index efe38c1bc234..16b8af1188e1 100644
+--- a/drivers/char/mem.c
++++ b/drivers/char/mem.c
+@@ -167,6 +167,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
+ if (p != *ppos)
+ return -EFBIG;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (!valid_phys_addr_range(p, count))
+ return -EFAULT;
+
+@@ -513,6 +516,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
+ char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
+ int err = 0;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (p < (unsigned long) high_memory) {
+ unsigned long to_write = min_t(unsigned long, count,
+ (unsigned long)high_memory - p);
diff --git a/Revert-userns-Allow-unprivileged-users-to-create-use.patch b/Revert-userns-Allow-unprivileged-users-to-create-use.patch
deleted file mode 100644
index cea6bff01..000000000
--- a/Revert-userns-Allow-unprivileged-users-to-create-use.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-Bugzilla: 917708
-Upstream-status: Fedora mustard
-
-From e3da68be55914bfeedb8866f191cc0958579611d Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Wed, 13 Nov 2013 10:21:18 -0500
-Subject: [PATCH] Revert "userns: Allow unprivileged users to create user
- namespaces."
-
-This reverts commit 5eaf563e53294d6696e651466697eb9d491f3946.
-
-Conflicts:
- kernel/fork.c
----
- kernel/fork.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/kernel/fork.c b/kernel/fork.c
-index f6d11fc..e04c9a7 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -1573,6 +1573,19 @@ long do_fork(unsigned long clone_flags,
- long nr;
-
- /*
-+ * Do some preliminary argument and permissions checking before we
-+ * actually start allocating stuff
-+ */
-+ if (clone_flags & CLONE_NEWUSER) {
-+ /* hopefully this check will go away when userns support is
-+ * complete
-+ */
-+ if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SETUID) ||
-+ !capable(CAP_SETGID))
-+ return -EPERM;
-+ }
-+
-+ /*
- * Determine whether and which event to report to ptracer. When
- * called from kernel_thread or CLONE_UNTRACED is explicitly
- * requested, no event is reported; otherwise, report if the event
---
-1.8.3.1
-
diff --git a/TODO b/TODO
index b730fd591..4ef797a12 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,3 @@
-* Post 3.5:
-- Check if PaulMcK has fixed CONFIG_RCU_FAST_NO_HZ
-
Config TODOs:
* review & disable a bunch of the I2C, RTC, DVB, SOUND options.
@@ -11,6 +8,3 @@ Spec file TODOs:
- Don't fail the build if a module is listed but not built (maybe).
- See if it can be tied into Kconfig instead of module names.
-* investigate gzip modules. Everything should support this now?
- Looks like about 70M savings per kernel installed.
-
diff --git a/acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch b/acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch
deleted file mode 100644
index 668fa0956..000000000
--- a/acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Bugzilla: 1012674
-Upstream-status: Queued for 3.16
-
-From a94de796cd769fc5c4a9c57ebe99c0ae74b9c8a1 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:06 +0200
-Subject: [PATCH 09/14] acer-wmi: Add Aspire 5741 to video_vendor_dmi_table
-
-The Aspire 5741 has broken acpi-video backlight control, so add it to the
-quirk table.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1012674
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/acer-wmi.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
-index 3a746998f92a..bbf78b2d6d93 100644
---- a/drivers/platform/x86/acer-wmi.c
-+++ b/drivers/platform/x86/acer-wmi.c
-@@ -570,6 +570,14 @@ static const struct dmi_system_id video_vendor_dmi_table[] = {
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5750"),
- },
- },
-+ {
-+ .callback = video_set_backlight_video_vendor,
-+ .ident = "Acer Aspire 5741",
-+ .matches = {
-+ DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5741"),
-+ },
-+ },
- {}
- };
-
---
-1.9.0
-
diff --git a/acer-wmi-Switch-to-acpi_video_unregister_backlight.patch b/acer-wmi-Switch-to-acpi_video_unregister_backlight.patch
deleted file mode 100644
index 310e8a299..000000000
--- a/acer-wmi-Switch-to-acpi_video_unregister_backlight.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-Bugzilla: 1012674
-Upstream-status: Queued for 3.16
-
-From d8aceabf18681a92e8031c43d3917f6826ac6691 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:05 +0200
-Subject: [PATCH 08/14] acer-wmi: Switch to acpi_video_unregister_backlight
-
-Switch from acpi_video_unregister(), to acpi_video_unregister_backlight(),
-so that the hotkeys handler registered by acpi-video stays in place.
-
-Since there are no mappings for the atkbd raw codes for the brightness
-keys used by newer Acer models in /lib/udev/hwdb.d/60-keyboard.hwdb, and
-since we map the wmi events with a code of KE_IGNORE, we rely on acpi-video
-to do the hotkey handling for us.
-
-For laptops such as the Acer Aspire 5750 which uses intel gfx this works
-despite us calling acpi_video_unregister() because the following happens:
-
-1) acpi-video module gets loaded (as it is a dependency of acer-wmi and i915)
-2) acpi-video does NOT call acpi_video_register()
-3) acer-wmi loads (assume it loads before i915), calls
-acpi_video_dmi_promote_vendor(); which sets ACPI_VIDEO_BACKLIGHT_DMI_VENDOR
-4) calls acpi_video_unregister -> not registered, nop
-5) i915 loads, calls acpi_video_register
-6) acpi_video_register registers the acpi_notifier for the hotkeys,
- does NOT register a backlight device because of ACPI_VIDEO_BACKLIGHT_DMI_VENDOR
-
-But on the Acer Aspire 5750G, which uses nvidia graphics the following happens:
-1) acpi-video module gets loaded (as it is a dependency of acer-wmi)
-2) acpi-video calls acpi_video_register()
-3) acpi_video_register registers the acpi_notifier for the hotkeys,
- and a backlight device
-4) acer-wmi loads, calls acpi_video_dmi_promote_vendor()
-5) calls acpi_video_unregister, this unregisters BOTH the acpi_notifier for
- the hotkeys AND the backlight device
-
-And we end up without any handler for the brightness hotkeys. This patch fixes
-this by switching over to acpi_video_unregister_backlight() which keeps the
-hotkey handler in place.
-
-https://bugzilla.kernel.org/show_bug.cgi?id=35622
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/acer-wmi.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
-index c91f69b39db4..3a746998f92a 100644
---- a/drivers/platform/x86/acer-wmi.c
-+++ b/drivers/platform/x86/acer-wmi.c
-@@ -2228,7 +2228,7 @@ static int __init acer_wmi_init(void)
- pr_info("Brightness must be controlled by acpi video driver\n");
- } else {
- pr_info("Disabling ACPI video driver\n");
-- acpi_video_unregister();
-+ acpi_video_unregister_backlight();
- }
-
- if (wmi_has_guid(WMID_GUID3)) {
---
-1.9.0
-
diff --git a/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch b/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
new file mode 100644
index 000000000..7a83415cf
--- /dev/null
+++ b/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
@@ -0,0 +1,35 @@
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Mon, 25 Jun 2012 19:57:30 -0400
+Subject: [PATCH] acpi: Ignore acpi_rsdp kernel parameter when module loading
+ is restricted
+
+This option allows userspace to pass the RSDP address to the kernel, which
+makes it possible for a user to circumvent any restrictions imposed on
+loading modules. Disable it in that case.
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+---
+ drivers/acpi/osl.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
+index 5aa1f6e281d2..58ae459937a4 100644
+--- a/drivers/acpi/osl.c
++++ b/drivers/acpi/osl.c
+@@ -44,6 +44,7 @@
+ #include <linux/list.h>
+ #include <linux/jiffies.h>
+ #include <linux/semaphore.h>
++#include <linux/module.h>
+
+ #include <asm/io.h>
+ #include <asm/uaccess.h>
+@@ -252,7 +253,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
+ acpi_physical_address __init acpi_os_get_root_pointer(void)
+ {
+ #ifdef CONFIG_KEXEC
+- if (acpi_rsdp)
++ if (acpi_rsdp && !secure_modules())
+ return acpi_rsdp;
+ #endif
+
diff --git a/acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch b/acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch
deleted file mode 100644
index c956ad0c2..000000000
--- a/acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-Bugzilla: 1012674
-Upstream-status: Queued for 3.16
-
-From 4cf3eac89ed731d7cdb7d9d815a97109472af824 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:04 +0200
-Subject: [PATCH 07/14] acpi-video: Add an acpi_video_unregister_backlight
- function
-
-Add an acpi_video_unregister_backlight function, which only unregisters
-the backlight device, and leaves the acpi_notifier in place. Some acpi_vendor
-driver need this as they don't want the acpi_video# backlight device, but do
-need the acpi-video driver for hotkey handling.
-
-Chances are that this new acpi_video_unregister_backlight() is actually
-what existing acpi_vendor drivers have wanted all along. Currently acpi_vendor
-drivers which want to disable the acpi_video# backlight device, make 2 calls:
-
-acpi_video_dmi_promote_vendor();
-acpi_video_unregister();
-
-The intention here is to make things independent of when acpi_video_register()
-gets called. As acpi_video_register() will get called on acpi-video load time
-on non intel gfx machines, while it gets called on i915 load time on intel
-gfx machines.
-
-This leads to the following 2 interesting scenarios:
-
-a) intel gfx:
-1) acpi-video module gets loaded (as it is a dependency of acpi_vendor and i915)
-2) acpi-video does NOT call acpi_video_register()
-3) acpi_vendor loads (lets assume it loads before i915), calls
-acpi_video_dmi_promote_vendor(); which sets ACPI_VIDEO_BACKLIGHT_DMI_VENDOR
-4) calls acpi_video_unregister -> not registered, nop
-5) i915 loads, calls acpi_video_register
-6) acpi_video_register registers the acpi_notifier for the hotkeys,
- does NOT register a backlight device because of ACPI_VIDEO_BACKLIGHT_DMI_VENDOR
-
-b) non intel gfx
-1) acpi-video module gets loaded (as it is a dependency acpi_vendor)
-2) acpi-video calls acpi_video_register()
-3) acpi_video_register registers the acpi_notifier for the hotkeys,
- and a backlight device
-4) acpi_vendor loads, calls acpi_video_dmi_promote_vendor()
-5) calls acpi_video_unregister, this unregisters BOTH the acpi_notifier for
- the hotkeys AND the backlight device
-
-So here we have possibly the same acpi_vendor module, making the same calls,
-but with different results, in one cases acpi-video does handle hotkeys,
-in the other it does not.
-
-Note that the a) scenario turns into b) if we assume the i915 module loads
-before the vendor_acpi module, so we also have different behavior depending
-on module loading order!
-
-So as said I believe that quite a few existing acpi_vendor modules really
-always want the behavior of a), hence this patch adds a new
-acpi_video_unregister_backlight() which gives the behavior of a) independent
-of module loading order.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/acpi/video.c | 14 ++++++++++++++
- include/acpi/video.h | 2 ++
- 2 files changed, 16 insertions(+)
-
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index a68313720c9c..d4d6ea3ac77a 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -2070,6 +2070,20 @@ void acpi_video_unregister(void)
- }
- EXPORT_SYMBOL(acpi_video_unregister);
-
-+void acpi_video_unregister_backlight(void)
-+{
-+ struct acpi_video_bus *video;
-+
-+ if (!register_count)
-+ return;
-+
-+ mutex_lock(&video_list_lock);
-+ list_for_each_entry(video, &video_bus_head, entry)
-+ acpi_video_bus_unregister_backlight(video);
-+ mutex_unlock(&video_list_lock);
-+}
-+EXPORT_SYMBOL(acpi_video_unregister_backlight);
-+
- /*
- * This is kind of nasty. Hardware using Intel chipsets may require
- * the video opregion code to be run first in order to initialise
-diff --git a/include/acpi/video.h b/include/acpi/video.h
-index 61109f2609fc..ea4c7bbded4d 100644
---- a/include/acpi/video.h
-+++ b/include/acpi/video.h
-@@ -19,11 +19,13 @@ struct acpi_device;
- #if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
- extern int acpi_video_register(void);
- extern void acpi_video_unregister(void);
-+extern void acpi_video_unregister_backlight(void);
- extern int acpi_video_get_edid(struct acpi_device *device, int type,
- int device_id, void **edid);
- #else
- static inline int acpi_video_register(void) { return 0; }
- static inline void acpi_video_unregister(void) { return; }
-+static inline void acpi_video_unregister_backlight(void) { return; }
- static inline int acpi_video_get_edid(struct acpi_device *device, int type,
- int device_id, void **edid)
- {
---
-1.9.0
-
diff --git a/acpi-video-Add-force-native-backlight-quirk-for-Leno.patch b/acpi-video-Add-force-native-backlight-quirk-for-Leno.patch
new file mode 100644
index 000000000..706fc540d
--- /dev/null
+++ b/acpi-video-Add-force-native-backlight-quirk-for-Leno.patch
@@ -0,0 +1,81 @@
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Tue, 3 Mar 2015 08:31:24 +0100
+Subject: [PATCH] acpi: video: Add force native backlight quirk for Lenovo
+ Ideapad Z570
+
+The Lenovo Ideapad Z570 (which is an Acer in disguise like some other Ideapads)
+has a broken acpi_video interface, this was fixed in commmit a11d342fb8
+("ACPI / video: force vendor backlight on Lenovo Ideapad Z570").
+
+Which stops acpi_video from registering a backlight interface, but this is
+only a partial fix, because for people who have the ideapad-laptop module
+installed that module will now register a backlight interface, which also
+does not work, so we need to use the native intel_backlight interface.
+
+The Lenovo Ideapad 570 is a pre-win8 laptop / too old for the acpi-video code
+to automatically prefer the native backlight interface, so add a quirk for it.
+
+This commit also removes the previous incomplete fix.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1187004
+Cc: Stepan Bujnak <stepanbujnak@fastmail.fm>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/acpi/video.c | 17 +++++++++++++++++
+ drivers/acpi/video_detect.c | 8 --------
+ 2 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
+index 70ea37bea84f..d9bf8ba7d848 100644
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -425,6 +425,12 @@ static int __init video_disable_native_backlight(const struct dmi_system_id *d)
+ return 0;
+ }
+
++static int __init video_enable_native_backlight(const struct dmi_system_id *d)
++{
++ use_native_backlight_dmi = NATIVE_BACKLIGHT_ON;
++ return 0;
++}
++
+ static struct dmi_system_id video_dmi_table[] __initdata = {
+ /*
+ * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
+@@ -566,6 +572,17 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "XPS L521X"),
+ },
+ },
++
++ /* Non win8 machines which need native backlight nevertheless */
++ {
++ /* https://bugzilla.redhat.com/show_bug.cgi?id=1187004 */
++ .callback = video_enable_native_backlight,
++ .ident = "Lenovo Ideapad Z570",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "102434U"),
++ },
++ },
+ {}
+ };
+
+diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
+index 27c43499977a..c42feb2bacd0 100644
+--- a/drivers/acpi/video_detect.c
++++ b/drivers/acpi/video_detect.c
+@@ -174,14 +174,6 @@ static struct dmi_system_id video_detect_dmi_table[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5737"),
+ },
+ },
+- {
+- .callback = video_detect_force_vendor,
+- .ident = "Lenovo IdeaPad Z570",
+- .matches = {
+- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+- DMI_MATCH(DMI_PRODUCT_VERSION, "Ideapad Z570"),
+- },
+- },
+ { },
+ };
+
diff --git a/acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch b/acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch
deleted file mode 100644
index f3d36889f..000000000
--- a/acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Bugzilla: 1093171
-Upstream-status: Queued for 3.16
-
-From 7ac976d0109433d1ad0812f4f6889a904d9a0c40 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:10 +0200
-Subject: [PATCH 13/14] acpi-video: Add use native backlight quirk for the
- ThinkPad W530
-
-Like all of the other *30 ThinkPad models, the W530 has a broken acpi-video
-backlight control. Note in order for this to actually fix things on the
-ThinkPad W530 the commit titled:
-"nouveau: Don't check acpi_video_backlight_support() before registering backlight"
-is also needed.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1093171
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/acpi/video.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index ab7cd65ce21e..dcb0ef4c22f6 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -468,6 +468,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
- },
- {
- .callback = video_set_use_native_backlight,
-+ .ident = "ThinkPad W530",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
-+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W530"),
-+ },
-+ },
-+ {
-+ .callback = video_set_use_native_backlight,
- .ident = "ThinkPad X230",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
---
-1.9.0
-
diff --git a/acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch b/acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch
deleted file mode 100644
index c8c1f7aa2..000000000
--- a/acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-Bugzilla: 1025690
-Upstream-status: Waiting for feedback from reporter
-
-From dfe2c6722a6f6cb45f6b336b094b26a77acd8393 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:11 +0200
-Subject: [PATCH 14/14] acpi-video: Add use_native_backlight quirk for HP
- ProBook 4540s
-
-As reported here:
-https://bugzilla.redhat.com/show_bug.cgi?id=1025690
-This is yet another model which needs this quirk.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/acpi/video.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index dcb0ef4c22f6..3db16753f88a 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -548,6 +548,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
- },
- {
- .callback = video_set_use_native_backlight,
-+ .ident = "HP ProBook 4540s",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
-+ DMI_MATCH(DMI_PRODUCT_VERSION, "HP ProBook 4540s"),
-+ },
-+ },
-+ {
-+ .callback = video_set_use_native_backlight,
- .ident = "HP ProBook 2013 models",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
---
-1.9.0
-
diff --git a/acpi-video-Allow-forcing-native-backlight-on-non-win.patch b/acpi-video-Allow-forcing-native-backlight-on-non-win.patch
new file mode 100644
index 000000000..2e6627be3
--- /dev/null
+++ b/acpi-video-Allow-forcing-native-backlight-on-non-win.patch
@@ -0,0 +1,73 @@
+From: Aaron Lu <aaron.lu@intel.com>
+Date: Wed, 11 Mar 2015 14:14:56 +0800
+Subject: [PATCH] acpi: video: Allow forcing native backlight on non win8
+ machines
+
+The native backlight behavior (so not registering both the acpi-video
+and the vendor backlight driver) can be useful on some non win8 machines
+too, so change the behavior of the video.use_native_backlight=1 or 0
+kernel cmdline option to be: if user has set video.use_native_backlight=1
+or 0, use that no matter if it is a win8 system or not. Also, we will
+put some known systems into the DMI table to make them either use native
+backlight interface or not, and the use_native_backlight_dmi is used to
+reflect that.
+
+Original-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Aaron Lu <aaron.lu@intel.com>
+Acked-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/acpi/video.c | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
+index db70d550f526..70ea37bea84f 100644
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -82,9 +82,15 @@ module_param(allow_duplicates, bool, 0644);
+ * For Windows 8 systems: used to decide if video module
+ * should skip registering backlight interface of its own.
+ */
+-static int use_native_backlight_param = -1;
++enum {
++ NATIVE_BACKLIGHT_NOT_SET = -1,
++ NATIVE_BACKLIGHT_OFF,
++ NATIVE_BACKLIGHT_ON,
++};
++
++static int use_native_backlight_param = NATIVE_BACKLIGHT_NOT_SET;
+ module_param_named(use_native_backlight, use_native_backlight_param, int, 0444);
+-static bool use_native_backlight_dmi = true;
++static int use_native_backlight_dmi = NATIVE_BACKLIGHT_NOT_SET;
+
+ static int register_count;
+ static struct mutex video_list_lock;
+@@ -237,15 +243,16 @@ static void acpi_video_switch_brightness(struct work_struct *work);
+
+ static bool acpi_video_use_native_backlight(void)
+ {
+- if (use_native_backlight_param != -1)
++ if (use_native_backlight_param != NATIVE_BACKLIGHT_NOT_SET)
+ return use_native_backlight_param;
+- else
++ else if (use_native_backlight_dmi != NATIVE_BACKLIGHT_NOT_SET)
+ return use_native_backlight_dmi;
++ return acpi_osi_is_win8();
+ }
+
+ bool acpi_video_verify_backlight_support(void)
+ {
+- if (acpi_osi_is_win8() && acpi_video_use_native_backlight() &&
++ if (acpi_video_use_native_backlight() &&
+ backlight_device_registered(BACKLIGHT_RAW))
+ return false;
+ return acpi_video_backlight_support();
+@@ -414,7 +421,7 @@ static int __init video_set_bqc_offset(const struct dmi_system_id *d)
+
+ static int __init video_disable_native_backlight(const struct dmi_system_id *d)
+ {
+- use_native_backlight_dmi = false;
++ use_native_backlight_dmi = NATIVE_BACKLIGHT_OFF;
+ return 0;
+ }
+
diff --git a/acpi-video-Don-t-register-acpi_video_resume-notifier.patch b/acpi-video-Don-t-register-acpi_video_resume-notifier.patch
deleted file mode 100644
index ac40462cd..000000000
--- a/acpi-video-Don-t-register-acpi_video_resume-notifier.patch
+++ /dev/null
@@ -1,214 +0,0 @@
-Bugzilla: 1012674
-Upstream-status: Queued for 3.16
-
-From 5d9b5801af7cbeaab060fa07576ca6cd7dc3be89 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:03 +0200
-Subject: [PATCH 06/14] acpi-video: Don't register acpi_video_resume notifier
- without backlight devices
-
-If we're not going to be registering any backlight devices then
-acpi_video_resume is always nop, so don't register it in that case.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
---
-
-Note to reviewers the changes to acpi_video_dev_register_backlight() only
-remove the "if (!acpi_video_verify_backlight_support()) {" which surrounded
-the entire body of the function, as that is checked earlier now.
----
- drivers/acpi/video.c | 139 +++++++++++++++++++++++++++------------------------
- 1 file changed, 74 insertions(+), 65 deletions(-)
-
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index f8bc5a755dda..a68313720c9c 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -150,6 +150,7 @@ struct acpi_video_enumerated_device {
-
- struct acpi_video_bus {
- struct acpi_device *device;
-+ bool backlight_registered;
- u8 dos_setting;
- struct acpi_video_enumerated_device *attached_array;
- u8 attached_count;
-@@ -1658,88 +1659,89 @@ acpi_video_bus_match(acpi_handle handle, u32 level, void *context,
-
- static void acpi_video_dev_register_backlight(struct acpi_video_device *device)
- {
-- if (acpi_video_verify_backlight_support()) {
-- struct backlight_properties props;
-- struct pci_dev *pdev;
-- acpi_handle acpi_parent;
-- struct device *parent = NULL;
-- int result;
-- static int count;
-- char *name;
--
-- result = acpi_video_init_brightness(device);
-- if (result)
-- return;
-- name = kasprintf(GFP_KERNEL, "acpi_video%d", count);
-- if (!name)
-- return;
-- count++;
-+ struct backlight_properties props;
-+ struct pci_dev *pdev;
-+ acpi_handle acpi_parent;
-+ struct device *parent = NULL;
-+ int result;
-+ static int count;
-+ char *name;
-
-- acpi_get_parent(device->dev->handle, &acpi_parent);
-+ result = acpi_video_init_brightness(device);
-+ if (result)
-+ return;
-+ name = kasprintf(GFP_KERNEL, "acpi_video%d", count);
-+ if (!name)
-+ return;
-+ count++;
-
-- pdev = acpi_get_pci_dev(acpi_parent);
-- if (pdev) {
-- parent = &pdev->dev;
-- pci_dev_put(pdev);
-- }
-+ acpi_get_parent(device->dev->handle, &acpi_parent);
-
-- memset(&props, 0, sizeof(struct backlight_properties));
-- props.type = BACKLIGHT_FIRMWARE;
-- props.max_brightness = device->brightness->count - 3;
-- device->backlight = backlight_device_register(name,
-- parent,
-- device,
-- &acpi_backlight_ops,
-- &props);
-- kfree(name);
-- if (IS_ERR(device->backlight))
-- return;
-+ pdev = acpi_get_pci_dev(acpi_parent);
-+ if (pdev) {
-+ parent = &pdev->dev;
-+ pci_dev_put(pdev);
-+ }
-
-- /*
-- * Save current brightness level in case we have to restore it
-- * before acpi_video_device_lcd_set_level() is called next time.
-- */
-- device->backlight->props.brightness =
-- acpi_video_get_brightness(device->backlight);
-+ memset(&props, 0, sizeof(struct backlight_properties));
-+ props.type = BACKLIGHT_FIRMWARE;
-+ props.max_brightness = device->brightness->count - 3;
-+ device->backlight = backlight_device_register(name,
-+ parent,
-+ device,
-+ &acpi_backlight_ops,
-+ &props);
-+ kfree(name);
-+ if (IS_ERR(device->backlight))
-+ return;
-
-- device->cooling_dev = thermal_cooling_device_register("LCD",
-- device->dev, &video_cooling_ops);
-- if (IS_ERR(device->cooling_dev)) {
-- /*
-- * Set cooling_dev to NULL so we don't crash trying to
-- * free it.
-- * Also, why the hell we are returning early and
-- * not attempt to register video output if cooling
-- * device registration failed?
-- * -- dtor
-- */
-- device->cooling_dev = NULL;
-- return;
-- }
-+ /*
-+ * Save current brightness level in case we have to restore it
-+ * before acpi_video_device_lcd_set_level() is called next time.
-+ */
-+ device->backlight->props.brightness =
-+ acpi_video_get_brightness(device->backlight);
-
-- dev_info(&device->dev->dev, "registered as cooling_device%d\n",
-- device->cooling_dev->id);
-- result = sysfs_create_link(&device->dev->dev.kobj,
-- &device->cooling_dev->device.kobj,
-- "thermal_cooling");
-- if (result)
-- printk(KERN_ERR PREFIX "Create sysfs link\n");
-- result = sysfs_create_link(&device->cooling_dev->device.kobj,
-- &device->dev->dev.kobj, "device");
-- if (result)
-- printk(KERN_ERR PREFIX "Create sysfs link\n");
-+ device->cooling_dev = thermal_cooling_device_register("LCD",
-+ device->dev, &video_cooling_ops);
-+ if (IS_ERR(device->cooling_dev)) {
-+ /*
-+ * Set cooling_dev to NULL so we don't crash trying to free it.
-+ * Also, why the hell we are returning early and not attempt to
-+ * register video output if cooling device registration failed?
-+ * -- dtor
-+ */
-+ device->cooling_dev = NULL;
-+ return;
- }
-+
-+ dev_info(&device->dev->dev, "registered as cooling_device%d\n",
-+ device->cooling_dev->id);
-+ result = sysfs_create_link(&device->dev->dev.kobj,
-+ &device->cooling_dev->device.kobj,
-+ "thermal_cooling");
-+ if (result)
-+ printk(KERN_ERR PREFIX "Create sysfs link\n");
-+ result = sysfs_create_link(&device->cooling_dev->device.kobj,
-+ &device->dev->dev.kobj, "device");
-+ if (result)
-+ printk(KERN_ERR PREFIX "Create sysfs link\n");
- }
-
- static int acpi_video_bus_register_backlight(struct acpi_video_bus *video)
- {
- struct acpi_video_device *dev;
-
-+ if (!acpi_video_verify_backlight_support())
-+ return 0;
-+
- mutex_lock(&video->device_list_lock);
- list_for_each_entry(dev, &video->video_device_list, entry)
- acpi_video_dev_register_backlight(dev);
- mutex_unlock(&video->device_list_lock);
-
-+ video->backlight_registered = true;
-+
- video->pm_nb.notifier_call = acpi_video_resume;
- video->pm_nb.priority = 0;
- return register_pm_notifier(&video->pm_nb);
-@@ -1767,13 +1769,20 @@ static void acpi_video_dev_unregister_backlight(struct acpi_video_device *device
- static int acpi_video_bus_unregister_backlight(struct acpi_video_bus *video)
- {
- struct acpi_video_device *dev;
-- int error = unregister_pm_notifier(&video->pm_nb);
-+ int error;
-+
-+ if (!video->backlight_registered)
-+ return 0;
-+
-+ error = unregister_pm_notifier(&video->pm_nb);
-
- mutex_lock(&video->device_list_lock);
- list_for_each_entry(dev, &video->video_device_list, entry)
- acpi_video_dev_unregister_backlight(dev);
- mutex_unlock(&video->device_list_lock);
-
-+ video->backlight_registered = false;
-+
- return error;
- }
-
---
-1.9.0
-
diff --git a/acpi-video-Unregister-the-backlight-device-if-a-raw-.patch b/acpi-video-Unregister-the-backlight-device-if-a-raw-.patch
deleted file mode 100644
index f922d4235..000000000
--- a/acpi-video-Unregister-the-backlight-device-if-a-raw-.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-Bugzilla: 1093171
-Upstream-status: Queued for 3.16
-
-From 7f5b3e9378c0adfdb1cf2ffde6c4f890e05517c7 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:09 +0200
-Subject: [PATCH 12/14] acpi-video: Unregister the backlight device if a raw
- one shows up later
-
-When video.use_native_backlight=1 and non intel gfx are in use, the raw
-backlight device of the gfx driver will show up after acpi-video has done its
-acpi_video_verify_backlight_support() check.
-
-This causes video.use_native_backlight=1 to not have the desired result.
-
-This patch fixes this by adding a backlight notifier and when a raw
-backlight is registered or unregistered re-doing the
-acpi_video_verify_backlight_support() check.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/acpi/video.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 57 insertions(+)
-
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index d4d6ea3ac77a..ab7cd65ce21e 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -151,6 +151,7 @@ struct acpi_video_enumerated_device {
- struct acpi_video_bus {
- struct acpi_device *device;
- bool backlight_registered;
-+ bool backlight_notifier_registered;
- u8 dos_setting;
- struct acpi_video_enumerated_device *attached_array;
- u8 attached_count;
-@@ -162,6 +163,7 @@ struct acpi_video_bus {
- struct input_dev *input;
- char phys[32]; /* for input device */
- struct notifier_block pm_nb;
-+ struct notifier_block backlight_nb;
- };
-
- struct acpi_video_device_flags {
-@@ -1732,6 +1734,9 @@ static int acpi_video_bus_register_backlight(struct acpi_video_bus *video)
- {
- struct acpi_video_device *dev;
-
-+ if (video->backlight_registered)
-+ return 0;
-+
- if (!acpi_video_verify_backlight_support())
- return 0;
-
-@@ -1876,6 +1881,56 @@ static void acpi_video_bus_remove_notify_handler(struct acpi_video_bus *video)
- video->input = NULL;
- }
-
-+static int acpi_video_backlight_notify(struct notifier_block *nb,
-+ unsigned long val, void *bd)
-+{
-+ struct backlight_device *backlight = bd;
-+ struct acpi_video_bus *video;
-+
-+ /* acpi_video_verify_backlight_support only cares about raw devices */
-+ if (backlight->props.type != BACKLIGHT_RAW)
-+ return NOTIFY_DONE;
-+
-+ video = container_of(nb, struct acpi_video_bus, backlight_nb);
-+
-+ switch (val) {
-+ case BACKLIGHT_REGISTERED:
-+ if (!acpi_video_verify_backlight_support())
-+ acpi_video_bus_unregister_backlight(video);
-+ break;
-+ case BACKLIGHT_UNREGISTERED:
-+ acpi_video_bus_register_backlight(video);
-+ break;
-+ }
-+
-+ return NOTIFY_OK;
-+}
-+
-+static int acpi_video_bus_add_backlight_notify_handler(
-+ struct acpi_video_bus *video)
-+{
-+ int error;
-+
-+ video->backlight_nb.notifier_call = acpi_video_backlight_notify;
-+ video->backlight_nb.priority = 0;
-+ error = backlight_register_notifier(&video->backlight_nb);
-+ if (error == 0)
-+ video->backlight_notifier_registered = true;
-+
-+ return error;
-+}
-+
-+static int acpi_video_bus_remove_backlight_notify_handler(
-+ struct acpi_video_bus *video)
-+{
-+ if (!video->backlight_notifier_registered)
-+ return 0;
-+
-+ video->backlight_notifier_registered = false;
-+
-+ return backlight_unregister_notifier(&video->backlight_nb);
-+}
-+
- static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
- {
- struct acpi_video_device *dev, *next;
-@@ -1957,6 +2012,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
-
- acpi_video_bus_register_backlight(video);
- acpi_video_bus_add_notify_handler(video);
-+ acpi_video_bus_add_backlight_notify_handler(video);
-
- return 0;
-
-@@ -1980,6 +2036,7 @@ static int acpi_video_bus_remove(struct acpi_device *device)
-
- video = acpi_driver_data(device);
-
-+ acpi_video_bus_remove_backlight_notify_handler(video);
- acpi_video_bus_remove_notify_handler(video);
- acpi_video_bus_unregister_backlight(video);
- acpi_video_bus_put_devices(video);
---
-1.9.0
-
diff --git a/aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch b/aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch
deleted file mode 100644
index fa93d6622..000000000
--- a/aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-Bugzilla: 1112975
-Upstream-status: 3.16 and CC'd to stable
-
-From f8567a3845ac05bb28f3c1b478ef752762bd39ef Mon Sep 17 00:00:00 2001
-From: Benjamin LaHaise <bcrl@kvack.org>
-Date: Tue, 24 Jun 2014 13:12:55 -0400
-Subject: [PATCH] aio: fix aio request leak when events are reaped by userspace
-
-The aio cleanups and optimizations by kmo that were merged into the 3.10
-tree added a regression for userspace event reaping. Specifically, the
-reference counts are not decremented if the event is reaped in userspace,
-leading to the application being unable to submit further aio requests.
-This patch applies to 3.12+. A separate backport is required for 3.10/3.11.
-This issue was uncovered as part of CVE-2014-0206.
-
-Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
-Cc: stable@vger.kernel.org
-Cc: Kent Overstreet <kmo@daterainc.com>
-Cc: Mateusz Guzik <mguzik@redhat.com>
-Cc: Petr Matousek <pmatouse@redhat.com>
----
- fs/aio.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/fs/aio.c b/fs/aio.c
-index 4f078c054b41..6a9c7e489adf 100644
---- a/fs/aio.c
-+++ b/fs/aio.c
-@@ -1021,6 +1021,7 @@ void aio_complete(struct kiocb *iocb, long res, long res2)
-
- /* everything turned out well, dispose of the aiocb. */
- kiocb_free(iocb);
-+ put_reqs_available(ctx, 1);
-
- /*
- * We have to order our ring_info tail store above and test
-@@ -1100,8 +1101,6 @@ static long aio_read_events_ring(struct kioctx *ctx,
- flush_dcache_page(ctx->ring_pages[0]);
-
- pr_debug("%li h%u t%u\n", ret, head, tail);
--
-- put_reqs_available(ctx, ret);
- out:
- mutex_unlock(&ctx->ring_lock);
-
---
-1.9.3
-
diff --git a/aio-fix-kernel-memory-disclosure-in-io_getevents-int.patch b/aio-fix-kernel-memory-disclosure-in-io_getevents-int.patch
deleted file mode 100644
index 831a6a85f..000000000
--- a/aio-fix-kernel-memory-disclosure-in-io_getevents-int.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Bugzilla: 1112975
-Upstream-status: 3.16 and CC'd to stable
-
-From edfbbf388f293d70bf4b7c0bc38774d05e6f711a Mon Sep 17 00:00:00 2001
-From: Benjamin LaHaise <bcrl@kvack.org>
-Date: Tue, 24 Jun 2014 13:32:51 -0400
-Subject: [PATCH] aio: fix kernel memory disclosure in io_getevents()
- introduced in v3.10
-
-A kernel memory disclosure was introduced in aio_read_events_ring() in v3.10
-by commit a31ad380bed817aa25f8830ad23e1a0480fef797. The changes made to
-aio_read_events_ring() failed to correctly limit the index into
-ctx->ring_pages[], allowing an attacked to cause the subsequent kmap() of
-an arbitrary page with a copy_to_user() to copy the contents into userspace.
-This vulnerability has been assigned CVE-2014-0206. Thanks to Mateusz and
-Petr for disclosing this issue.
-
-This patch applies to v3.12+. A separate backport is needed for 3.10/3.11.
-
-Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
-Cc: Mateusz Guzik <mguzik@redhat.com>
-Cc: Petr Matousek <pmatouse@redhat.com>
-Cc: Kent Overstreet <kmo@daterainc.com>
-Cc: Jeff Moyer <jmoyer@redhat.com>
-Cc: stable@vger.kernel.org
----
- fs/aio.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/fs/aio.c b/fs/aio.c
-index 6a9c7e489adf..955947ef3e02 100644
---- a/fs/aio.c
-+++ b/fs/aio.c
-@@ -1063,6 +1063,9 @@ static long aio_read_events_ring(struct kioctx *ctx,
- if (head == tail)
- goto out;
-
-+ head %= ctx->nr_events;
-+ tail %= ctx->nr_events;
-+
- while (ret < nr) {
- long avail;
- struct io_event *ev;
---
-1.9.3
-
diff --git a/amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch b/amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch
new file mode 100644
index 000000000..fa39d8675
--- /dev/null
+++ b/amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch
@@ -0,0 +1,10411 @@
+From: Tom Lendacky <thomas.lendacky@amd.com>
+Date: Sat, 21 Feb 2015 12:25:12 -0500
+Subject: [PATCH] amd-xgbe-a0: Add support for XGBE on A0
+
+Add XGBE driver support for A0 hardware.
+
+Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
+[fixup timespec -> timespec64]
+Signed-off-by: Mark Salter <msalter@redhat.com>
+---
+ drivers/net/ethernet/amd/Makefile | 1 +
+ drivers/net/ethernet/amd/xgbe-a0/Makefile | 8 +
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h | 1142 +++++++++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c | 269 +++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c | 373 +++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c | 636 +++++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c | 2930 +++++++++++++++++++++++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c | 2218 +++++++++++++++++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c | 616 +++++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c | 643 +++++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c | 312 +++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c | 278 +++
+ drivers/net/ethernet/amd/xgbe-a0/xgbe.h | 868 +++++++
+ 13 files changed, 10294 insertions(+)
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/Makefile
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c
+ create mode 100644 drivers/net/ethernet/amd/xgbe-a0/xgbe.h
+
+diff --git a/drivers/net/ethernet/amd/Makefile b/drivers/net/ethernet/amd/Makefile
+index a38a2dce3eb3..bf0cf2f8d2db 100644
+--- a/drivers/net/ethernet/amd/Makefile
++++ b/drivers/net/ethernet/amd/Makefile
+@@ -18,3 +18,4 @@ obj-$(CONFIG_PCNET32) += pcnet32.o
+ obj-$(CONFIG_SUN3LANCE) += sun3lance.o
+ obj-$(CONFIG_SUNLANCE) += sunlance.o
+ obj-$(CONFIG_AMD_XGBE) += xgbe/
++obj-$(CONFIG_AMD_XGBE) += xgbe-a0/
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/Makefile b/drivers/net/ethernet/amd/xgbe-a0/Makefile
+new file mode 100644
+index 000000000000..561116faadae
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/Makefile
+@@ -0,0 +1,8 @@
++obj-$(CONFIG_AMD_XGBE) += amd-xgbe-a0.o
++
++amd-xgbe-a0-objs := xgbe-main.o xgbe-drv.o xgbe-dev.o \
++ xgbe-desc.o xgbe-ethtool.o xgbe-mdio.o \
++ xgbe-ptp.o
++
++amd-xgbe-a0-$(CONFIG_AMD_XGBE_DCB) += xgbe-dcb.o
++amd-xgbe-a0-$(CONFIG_DEBUG_FS) += xgbe-debugfs.o
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h b/drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h
+new file mode 100644
+index 000000000000..75b08c63d39f
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-common.h
+@@ -0,0 +1,1142 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifndef __XGBE_COMMON_H__
++#define __XGBE_COMMON_H__
++
++/* DMA register offsets */
++#define DMA_MR 0x3000
++#define DMA_SBMR 0x3004
++#define DMA_ISR 0x3008
++#define DMA_AXIARCR 0x3010
++#define DMA_AXIAWCR 0x3018
++#define DMA_DSR0 0x3020
++#define DMA_DSR1 0x3024
++
++/* DMA register entry bit positions and sizes */
++#define DMA_AXIARCR_DRC_INDEX 0
++#define DMA_AXIARCR_DRC_WIDTH 4
++#define DMA_AXIARCR_DRD_INDEX 4
++#define DMA_AXIARCR_DRD_WIDTH 2
++#define DMA_AXIARCR_TEC_INDEX 8
++#define DMA_AXIARCR_TEC_WIDTH 4
++#define DMA_AXIARCR_TED_INDEX 12
++#define DMA_AXIARCR_TED_WIDTH 2
++#define DMA_AXIARCR_THC_INDEX 16
++#define DMA_AXIARCR_THC_WIDTH 4
++#define DMA_AXIARCR_THD_INDEX 20
++#define DMA_AXIARCR_THD_WIDTH 2
++#define DMA_AXIAWCR_DWC_INDEX 0
++#define DMA_AXIAWCR_DWC_WIDTH 4
++#define DMA_AXIAWCR_DWD_INDEX 4
++#define DMA_AXIAWCR_DWD_WIDTH 2
++#define DMA_AXIAWCR_RPC_INDEX 8
++#define DMA_AXIAWCR_RPC_WIDTH 4
++#define DMA_AXIAWCR_RPD_INDEX 12
++#define DMA_AXIAWCR_RPD_WIDTH 2
++#define DMA_AXIAWCR_RHC_INDEX 16
++#define DMA_AXIAWCR_RHC_WIDTH 4
++#define DMA_AXIAWCR_RHD_INDEX 20
++#define DMA_AXIAWCR_RHD_WIDTH 2
++#define DMA_AXIAWCR_TDC_INDEX 24
++#define DMA_AXIAWCR_TDC_WIDTH 4
++#define DMA_AXIAWCR_TDD_INDEX 28
++#define DMA_AXIAWCR_TDD_WIDTH 2
++#define DMA_ISR_MACIS_INDEX 17
++#define DMA_ISR_MACIS_WIDTH 1
++#define DMA_ISR_MTLIS_INDEX 16
++#define DMA_ISR_MTLIS_WIDTH 1
++#define DMA_MR_SWR_INDEX 0
++#define DMA_MR_SWR_WIDTH 1
++#define DMA_SBMR_EAME_INDEX 11
++#define DMA_SBMR_EAME_WIDTH 1
++#define DMA_SBMR_BLEN_256_INDEX 7
++#define DMA_SBMR_BLEN_256_WIDTH 1
++#define DMA_SBMR_UNDEF_INDEX 0
++#define DMA_SBMR_UNDEF_WIDTH 1
++
++/* DMA register values */
++#define DMA_DSR_RPS_WIDTH 4
++#define DMA_DSR_TPS_WIDTH 4
++#define DMA_DSR_Q_WIDTH (DMA_DSR_RPS_WIDTH + DMA_DSR_TPS_WIDTH)
++#define DMA_DSR0_RPS_START 8
++#define DMA_DSR0_TPS_START 12
++#define DMA_DSRX_FIRST_QUEUE 3
++#define DMA_DSRX_INC 4
++#define DMA_DSRX_QPR 4
++#define DMA_DSRX_RPS_START 0
++#define DMA_DSRX_TPS_START 4
++#define DMA_TPS_STOPPED 0x00
++#define DMA_TPS_SUSPENDED 0x06
++
++/* DMA channel register offsets
++ * Multiple channels can be active. The first channel has registers
++ * that begin at 0x3100. Each subsequent channel has registers that
++ * are accessed using an offset of 0x80 from the previous channel.
++ */
++#define DMA_CH_BASE 0x3100
++#define DMA_CH_INC 0x80
++
++#define DMA_CH_CR 0x00
++#define DMA_CH_TCR 0x04
++#define DMA_CH_RCR 0x08
++#define DMA_CH_TDLR_HI 0x10
++#define DMA_CH_TDLR_LO 0x14
++#define DMA_CH_RDLR_HI 0x18
++#define DMA_CH_RDLR_LO 0x1c
++#define DMA_CH_TDTR_LO 0x24
++#define DMA_CH_RDTR_LO 0x2c
++#define DMA_CH_TDRLR 0x30
++#define DMA_CH_RDRLR 0x34
++#define DMA_CH_IER 0x38
++#define DMA_CH_RIWT 0x3c
++#define DMA_CH_CATDR_LO 0x44
++#define DMA_CH_CARDR_LO 0x4c
++#define DMA_CH_CATBR_HI 0x50
++#define DMA_CH_CATBR_LO 0x54
++#define DMA_CH_CARBR_HI 0x58
++#define DMA_CH_CARBR_LO 0x5c
++#define DMA_CH_SR 0x60
++
++/* DMA channel register entry bit positions and sizes */
++#define DMA_CH_CR_PBLX8_INDEX 16
++#define DMA_CH_CR_PBLX8_WIDTH 1
++#define DMA_CH_CR_SPH_INDEX 24
++#define DMA_CH_CR_SPH_WIDTH 1
++#define DMA_CH_IER_AIE_INDEX 15
++#define DMA_CH_IER_AIE_WIDTH 1
++#define DMA_CH_IER_FBEE_INDEX 12
++#define DMA_CH_IER_FBEE_WIDTH 1
++#define DMA_CH_IER_NIE_INDEX 16
++#define DMA_CH_IER_NIE_WIDTH 1
++#define DMA_CH_IER_RBUE_INDEX 7
++#define DMA_CH_IER_RBUE_WIDTH 1
++#define DMA_CH_IER_RIE_INDEX 6
++#define DMA_CH_IER_RIE_WIDTH 1
++#define DMA_CH_IER_RSE_INDEX 8
++#define DMA_CH_IER_RSE_WIDTH 1
++#define DMA_CH_IER_TBUE_INDEX 2
++#define DMA_CH_IER_TBUE_WIDTH 1
++#define DMA_CH_IER_TIE_INDEX 0
++#define DMA_CH_IER_TIE_WIDTH 1
++#define DMA_CH_IER_TXSE_INDEX 1
++#define DMA_CH_IER_TXSE_WIDTH 1
++#define DMA_CH_RCR_PBL_INDEX 16
++#define DMA_CH_RCR_PBL_WIDTH 6
++#define DMA_CH_RCR_RBSZ_INDEX 1
++#define DMA_CH_RCR_RBSZ_WIDTH 14
++#define DMA_CH_RCR_SR_INDEX 0
++#define DMA_CH_RCR_SR_WIDTH 1
++#define DMA_CH_RIWT_RWT_INDEX 0
++#define DMA_CH_RIWT_RWT_WIDTH 8
++#define DMA_CH_SR_FBE_INDEX 12
++#define DMA_CH_SR_FBE_WIDTH 1
++#define DMA_CH_SR_RBU_INDEX 7
++#define DMA_CH_SR_RBU_WIDTH 1
++#define DMA_CH_SR_RI_INDEX 6
++#define DMA_CH_SR_RI_WIDTH 1
++#define DMA_CH_SR_RPS_INDEX 8
++#define DMA_CH_SR_RPS_WIDTH 1
++#define DMA_CH_SR_TBU_INDEX 2
++#define DMA_CH_SR_TBU_WIDTH 1
++#define DMA_CH_SR_TI_INDEX 0
++#define DMA_CH_SR_TI_WIDTH 1
++#define DMA_CH_SR_TPS_INDEX 1
++#define DMA_CH_SR_TPS_WIDTH 1
++#define DMA_CH_TCR_OSP_INDEX 4
++#define DMA_CH_TCR_OSP_WIDTH 1
++#define DMA_CH_TCR_PBL_INDEX 16
++#define DMA_CH_TCR_PBL_WIDTH 6
++#define DMA_CH_TCR_ST_INDEX 0
++#define DMA_CH_TCR_ST_WIDTH 1
++#define DMA_CH_TCR_TSE_INDEX 12
++#define DMA_CH_TCR_TSE_WIDTH 1
++
++/* DMA channel register values */
++#define DMA_OSP_DISABLE 0x00
++#define DMA_OSP_ENABLE 0x01
++#define DMA_PBL_1 1
++#define DMA_PBL_2 2
++#define DMA_PBL_4 4
++#define DMA_PBL_8 8
++#define DMA_PBL_16 16
++#define DMA_PBL_32 32
++#define DMA_PBL_64 64 /* 8 x 8 */
++#define DMA_PBL_128 128 /* 8 x 16 */
++#define DMA_PBL_256 256 /* 8 x 32 */
++#define DMA_PBL_X8_DISABLE 0x00
++#define DMA_PBL_X8_ENABLE 0x01
++
++/* MAC register offsets */
++#define MAC_TCR 0x0000
++#define MAC_RCR 0x0004
++#define MAC_PFR 0x0008
++#define MAC_WTR 0x000c
++#define MAC_HTR0 0x0010
++#define MAC_VLANTR 0x0050
++#define MAC_VLANHTR 0x0058
++#define MAC_VLANIR 0x0060
++#define MAC_IVLANIR 0x0064
++#define MAC_RETMR 0x006c
++#define MAC_Q0TFCR 0x0070
++#define MAC_RFCR 0x0090
++#define MAC_RQC0R 0x00a0
++#define MAC_RQC1R 0x00a4
++#define MAC_RQC2R 0x00a8
++#define MAC_RQC3R 0x00ac
++#define MAC_ISR 0x00b0
++#define MAC_IER 0x00b4
++#define MAC_RTSR 0x00b8
++#define MAC_PMTCSR 0x00c0
++#define MAC_RWKPFR 0x00c4
++#define MAC_LPICSR 0x00d0
++#define MAC_LPITCR 0x00d4
++#define MAC_VR 0x0110
++#define MAC_DR 0x0114
++#define MAC_HWF0R 0x011c
++#define MAC_HWF1R 0x0120
++#define MAC_HWF2R 0x0124
++#define MAC_GPIOCR 0x0278
++#define MAC_GPIOSR 0x027c
++#define MAC_MACA0HR 0x0300
++#define MAC_MACA0LR 0x0304
++#define MAC_MACA1HR 0x0308
++#define MAC_MACA1LR 0x030c
++#define MAC_RSSCR 0x0c80
++#define MAC_RSSAR 0x0c88
++#define MAC_RSSDR 0x0c8c
++#define MAC_TSCR 0x0d00
++#define MAC_SSIR 0x0d04
++#define MAC_STSR 0x0d08
++#define MAC_STNR 0x0d0c
++#define MAC_STSUR 0x0d10
++#define MAC_STNUR 0x0d14
++#define MAC_TSAR 0x0d18
++#define MAC_TSSR 0x0d20
++#define MAC_TXSNR 0x0d30
++#define MAC_TXSSR 0x0d34
++
++#define MAC_QTFCR_INC 4
++#define MAC_MACA_INC 4
++#define MAC_HTR_INC 4
++
++#define MAC_RQC2_INC 4
++#define MAC_RQC2_Q_PER_REG 4
++
++/* MAC register entry bit positions and sizes */
++#define MAC_HWF0R_ADDMACADRSEL_INDEX 18
++#define MAC_HWF0R_ADDMACADRSEL_WIDTH 5
++#define MAC_HWF0R_ARPOFFSEL_INDEX 9
++#define MAC_HWF0R_ARPOFFSEL_WIDTH 1
++#define MAC_HWF0R_EEESEL_INDEX 13
++#define MAC_HWF0R_EEESEL_WIDTH 1
++#define MAC_HWF0R_GMIISEL_INDEX 1
++#define MAC_HWF0R_GMIISEL_WIDTH 1
++#define MAC_HWF0R_MGKSEL_INDEX 7
++#define MAC_HWF0R_MGKSEL_WIDTH 1
++#define MAC_HWF0R_MMCSEL_INDEX 8
++#define MAC_HWF0R_MMCSEL_WIDTH 1
++#define MAC_HWF0R_RWKSEL_INDEX 6
++#define MAC_HWF0R_RWKSEL_WIDTH 1
++#define MAC_HWF0R_RXCOESEL_INDEX 16
++#define MAC_HWF0R_RXCOESEL_WIDTH 1
++#define MAC_HWF0R_SAVLANINS_INDEX 27
++#define MAC_HWF0R_SAVLANINS_WIDTH 1
++#define MAC_HWF0R_SMASEL_INDEX 5
++#define MAC_HWF0R_SMASEL_WIDTH 1
++#define MAC_HWF0R_TSSEL_INDEX 12
++#define MAC_HWF0R_TSSEL_WIDTH 1
++#define MAC_HWF0R_TSSTSSEL_INDEX 25
++#define MAC_HWF0R_TSSTSSEL_WIDTH 2
++#define MAC_HWF0R_TXCOESEL_INDEX 14
++#define MAC_HWF0R_TXCOESEL_WIDTH 1
++#define MAC_HWF0R_VLHASH_INDEX 4
++#define MAC_HWF0R_VLHASH_WIDTH 1
++#define MAC_HWF1R_ADVTHWORD_INDEX 13
++#define MAC_HWF1R_ADVTHWORD_WIDTH 1
++#define MAC_HWF1R_DBGMEMA_INDEX 19
++#define MAC_HWF1R_DBGMEMA_WIDTH 1
++#define MAC_HWF1R_DCBEN_INDEX 16
++#define MAC_HWF1R_DCBEN_WIDTH 1
++#define MAC_HWF1R_HASHTBLSZ_INDEX 24
++#define MAC_HWF1R_HASHTBLSZ_WIDTH 3
++#define MAC_HWF1R_L3L4FNUM_INDEX 27
++#define MAC_HWF1R_L3L4FNUM_WIDTH 4
++#define MAC_HWF1R_NUMTC_INDEX 21
++#define MAC_HWF1R_NUMTC_WIDTH 3
++#define MAC_HWF1R_RSSEN_INDEX 20
++#define MAC_HWF1R_RSSEN_WIDTH 1
++#define MAC_HWF1R_RXFIFOSIZE_INDEX 0
++#define MAC_HWF1R_RXFIFOSIZE_WIDTH 5
++#define MAC_HWF1R_SPHEN_INDEX 17
++#define MAC_HWF1R_SPHEN_WIDTH 1
++#define MAC_HWF1R_TSOEN_INDEX 18
++#define MAC_HWF1R_TSOEN_WIDTH 1
++#define MAC_HWF1R_TXFIFOSIZE_INDEX 6
++#define MAC_HWF1R_TXFIFOSIZE_WIDTH 5
++#define MAC_HWF2R_AUXSNAPNUM_INDEX 28
++#define MAC_HWF2R_AUXSNAPNUM_WIDTH 3
++#define MAC_HWF2R_PPSOUTNUM_INDEX 24
++#define MAC_HWF2R_PPSOUTNUM_WIDTH 3
++#define MAC_HWF2R_RXCHCNT_INDEX 12
++#define MAC_HWF2R_RXCHCNT_WIDTH 4
++#define MAC_HWF2R_RXQCNT_INDEX 0
++#define MAC_HWF2R_RXQCNT_WIDTH 4
++#define MAC_HWF2R_TXCHCNT_INDEX 18
++#define MAC_HWF2R_TXCHCNT_WIDTH 4
++#define MAC_HWF2R_TXQCNT_INDEX 6
++#define MAC_HWF2R_TXQCNT_WIDTH 4
++#define MAC_IER_TSIE_INDEX 12
++#define MAC_IER_TSIE_WIDTH 1
++#define MAC_ISR_MMCRXIS_INDEX 9
++#define MAC_ISR_MMCRXIS_WIDTH 1
++#define MAC_ISR_MMCTXIS_INDEX 10
++#define MAC_ISR_MMCTXIS_WIDTH 1
++#define MAC_ISR_PMTIS_INDEX 4
++#define MAC_ISR_PMTIS_WIDTH 1
++#define MAC_ISR_TSIS_INDEX 12
++#define MAC_ISR_TSIS_WIDTH 1
++#define MAC_MACA1HR_AE_INDEX 31
++#define MAC_MACA1HR_AE_WIDTH 1
++#define MAC_PFR_HMC_INDEX 2
++#define MAC_PFR_HMC_WIDTH 1
++#define MAC_PFR_HPF_INDEX 10
++#define MAC_PFR_HPF_WIDTH 1
++#define MAC_PFR_HUC_INDEX 1
++#define MAC_PFR_HUC_WIDTH 1
++#define MAC_PFR_PM_INDEX 4
++#define MAC_PFR_PM_WIDTH 1
++#define MAC_PFR_PR_INDEX 0
++#define MAC_PFR_PR_WIDTH 1
++#define MAC_PFR_VTFE_INDEX 16
++#define MAC_PFR_VTFE_WIDTH 1
++#define MAC_PMTCSR_MGKPKTEN_INDEX 1
++#define MAC_PMTCSR_MGKPKTEN_WIDTH 1
++#define MAC_PMTCSR_PWRDWN_INDEX 0
++#define MAC_PMTCSR_PWRDWN_WIDTH 1
++#define MAC_PMTCSR_RWKFILTRST_INDEX 31
++#define MAC_PMTCSR_RWKFILTRST_WIDTH 1
++#define MAC_PMTCSR_RWKPKTEN_INDEX 2
++#define MAC_PMTCSR_RWKPKTEN_WIDTH 1
++#define MAC_Q0TFCR_PT_INDEX 16
++#define MAC_Q0TFCR_PT_WIDTH 16
++#define MAC_Q0TFCR_TFE_INDEX 1
++#define MAC_Q0TFCR_TFE_WIDTH 1
++#define MAC_RCR_ACS_INDEX 1
++#define MAC_RCR_ACS_WIDTH 1
++#define MAC_RCR_CST_INDEX 2
++#define MAC_RCR_CST_WIDTH 1
++#define MAC_RCR_DCRCC_INDEX 3
++#define MAC_RCR_DCRCC_WIDTH 1
++#define MAC_RCR_HDSMS_INDEX 12
++#define MAC_RCR_HDSMS_WIDTH 3
++#define MAC_RCR_IPC_INDEX 9
++#define MAC_RCR_IPC_WIDTH 1
++#define MAC_RCR_JE_INDEX 8
++#define MAC_RCR_JE_WIDTH 1
++#define MAC_RCR_LM_INDEX 10
++#define MAC_RCR_LM_WIDTH 1
++#define MAC_RCR_RE_INDEX 0
++#define MAC_RCR_RE_WIDTH 1
++#define MAC_RFCR_PFCE_INDEX 8
++#define MAC_RFCR_PFCE_WIDTH 1
++#define MAC_RFCR_RFE_INDEX 0
++#define MAC_RFCR_RFE_WIDTH 1
++#define MAC_RFCR_UP_INDEX 1
++#define MAC_RFCR_UP_WIDTH 1
++#define MAC_RQC0R_RXQ0EN_INDEX 0
++#define MAC_RQC0R_RXQ0EN_WIDTH 2
++#define MAC_RSSAR_ADDRT_INDEX 2
++#define MAC_RSSAR_ADDRT_WIDTH 1
++#define MAC_RSSAR_CT_INDEX 1
++#define MAC_RSSAR_CT_WIDTH 1
++#define MAC_RSSAR_OB_INDEX 0
++#define MAC_RSSAR_OB_WIDTH 1
++#define MAC_RSSAR_RSSIA_INDEX 8
++#define MAC_RSSAR_RSSIA_WIDTH 8
++#define MAC_RSSCR_IP2TE_INDEX 1
++#define MAC_RSSCR_IP2TE_WIDTH 1
++#define MAC_RSSCR_RSSE_INDEX 0
++#define MAC_RSSCR_RSSE_WIDTH 1
++#define MAC_RSSCR_TCP4TE_INDEX 2
++#define MAC_RSSCR_TCP4TE_WIDTH 1
++#define MAC_RSSCR_UDP4TE_INDEX 3
++#define MAC_RSSCR_UDP4TE_WIDTH 1
++#define MAC_RSSDR_DMCH_INDEX 0
++#define MAC_RSSDR_DMCH_WIDTH 4
++#define MAC_SSIR_SNSINC_INDEX 8
++#define MAC_SSIR_SNSINC_WIDTH 8
++#define MAC_SSIR_SSINC_INDEX 16
++#define MAC_SSIR_SSINC_WIDTH 8
++#define MAC_TCR_SS_INDEX 29
++#define MAC_TCR_SS_WIDTH 2
++#define MAC_TCR_TE_INDEX 0
++#define MAC_TCR_TE_WIDTH 1
++#define MAC_TSCR_AV8021ASMEN_INDEX 28
++#define MAC_TSCR_AV8021ASMEN_WIDTH 1
++#define MAC_TSCR_SNAPTYPSEL_INDEX 16
++#define MAC_TSCR_SNAPTYPSEL_WIDTH 2
++#define MAC_TSCR_TSADDREG_INDEX 5
++#define MAC_TSCR_TSADDREG_WIDTH 1
++#define MAC_TSCR_TSCFUPDT_INDEX 1
++#define MAC_TSCR_TSCFUPDT_WIDTH 1
++#define MAC_TSCR_TSCTRLSSR_INDEX 9
++#define MAC_TSCR_TSCTRLSSR_WIDTH 1
++#define MAC_TSCR_TSENA_INDEX 0
++#define MAC_TSCR_TSENA_WIDTH 1
++#define MAC_TSCR_TSENALL_INDEX 8
++#define MAC_TSCR_TSENALL_WIDTH 1
++#define MAC_TSCR_TSEVNTENA_INDEX 14
++#define MAC_TSCR_TSEVNTENA_WIDTH 1
++#define MAC_TSCR_TSINIT_INDEX 2
++#define MAC_TSCR_TSINIT_WIDTH 1
++#define MAC_TSCR_TSIPENA_INDEX 11
++#define MAC_TSCR_TSIPENA_WIDTH 1
++#define MAC_TSCR_TSIPV4ENA_INDEX 13
++#define MAC_TSCR_TSIPV4ENA_WIDTH 1
++#define MAC_TSCR_TSIPV6ENA_INDEX 12
++#define MAC_TSCR_TSIPV6ENA_WIDTH 1
++#define MAC_TSCR_TSMSTRENA_INDEX 15
++#define MAC_TSCR_TSMSTRENA_WIDTH 1
++#define MAC_TSCR_TSVER2ENA_INDEX 10
++#define MAC_TSCR_TSVER2ENA_WIDTH 1
++#define MAC_TSCR_TXTSSTSM_INDEX 24
++#define MAC_TSCR_TXTSSTSM_WIDTH 1
++#define MAC_TSSR_TXTSC_INDEX 15
++#define MAC_TSSR_TXTSC_WIDTH 1
++#define MAC_TXSNR_TXTSSTSMIS_INDEX 31
++#define MAC_TXSNR_TXTSSTSMIS_WIDTH 1
++#define MAC_VLANHTR_VLHT_INDEX 0
++#define MAC_VLANHTR_VLHT_WIDTH 16
++#define MAC_VLANIR_VLTI_INDEX 20
++#define MAC_VLANIR_VLTI_WIDTH 1
++#define MAC_VLANIR_CSVL_INDEX 19
++#define MAC_VLANIR_CSVL_WIDTH 1
++#define MAC_VLANTR_DOVLTC_INDEX 20
++#define MAC_VLANTR_DOVLTC_WIDTH 1
++#define MAC_VLANTR_ERSVLM_INDEX 19
++#define MAC_VLANTR_ERSVLM_WIDTH 1
++#define MAC_VLANTR_ESVL_INDEX 18
++#define MAC_VLANTR_ESVL_WIDTH 1
++#define MAC_VLANTR_ETV_INDEX 16
++#define MAC_VLANTR_ETV_WIDTH 1
++#define MAC_VLANTR_EVLS_INDEX 21
++#define MAC_VLANTR_EVLS_WIDTH 2
++#define MAC_VLANTR_EVLRXS_INDEX 24
++#define MAC_VLANTR_EVLRXS_WIDTH 1
++#define MAC_VLANTR_VL_INDEX 0
++#define MAC_VLANTR_VL_WIDTH 16
++#define MAC_VLANTR_VTHM_INDEX 25
++#define MAC_VLANTR_VTHM_WIDTH 1
++#define MAC_VLANTR_VTIM_INDEX 17
++#define MAC_VLANTR_VTIM_WIDTH 1
++#define MAC_VR_DEVID_INDEX 8
++#define MAC_VR_DEVID_WIDTH 8
++#define MAC_VR_SNPSVER_INDEX 0
++#define MAC_VR_SNPSVER_WIDTH 8
++#define MAC_VR_USERVER_INDEX 16
++#define MAC_VR_USERVER_WIDTH 8
++
++/* MMC register offsets */
++#define MMC_CR 0x0800
++#define MMC_RISR 0x0804
++#define MMC_TISR 0x0808
++#define MMC_RIER 0x080c
++#define MMC_TIER 0x0810
++#define MMC_TXOCTETCOUNT_GB_LO 0x0814
++#define MMC_TXOCTETCOUNT_GB_HI 0x0818
++#define MMC_TXFRAMECOUNT_GB_LO 0x081c
++#define MMC_TXFRAMECOUNT_GB_HI 0x0820
++#define MMC_TXBROADCASTFRAMES_G_LO 0x0824
++#define MMC_TXBROADCASTFRAMES_G_HI 0x0828
++#define MMC_TXMULTICASTFRAMES_G_LO 0x082c
++#define MMC_TXMULTICASTFRAMES_G_HI 0x0830
++#define MMC_TX64OCTETS_GB_LO 0x0834
++#define MMC_TX64OCTETS_GB_HI 0x0838
++#define MMC_TX65TO127OCTETS_GB_LO 0x083c
++#define MMC_TX65TO127OCTETS_GB_HI 0x0840
++#define MMC_TX128TO255OCTETS_GB_LO 0x0844
++#define MMC_TX128TO255OCTETS_GB_HI 0x0848
++#define MMC_TX256TO511OCTETS_GB_LO 0x084c
++#define MMC_TX256TO511OCTETS_GB_HI 0x0850
++#define MMC_TX512TO1023OCTETS_GB_LO 0x0854
++#define MMC_TX512TO1023OCTETS_GB_HI 0x0858
++#define MMC_TX1024TOMAXOCTETS_GB_LO 0x085c
++#define MMC_TX1024TOMAXOCTETS_GB_HI 0x0860
++#define MMC_TXUNICASTFRAMES_GB_LO 0x0864
++#define MMC_TXUNICASTFRAMES_GB_HI 0x0868
++#define MMC_TXMULTICASTFRAMES_GB_LO 0x086c
++#define MMC_TXMULTICASTFRAMES_GB_HI 0x0870
++#define MMC_TXBROADCASTFRAMES_GB_LO 0x0874
++#define MMC_TXBROADCASTFRAMES_GB_HI 0x0878
++#define MMC_TXUNDERFLOWERROR_LO 0x087c
++#define MMC_TXUNDERFLOWERROR_HI 0x0880
++#define MMC_TXOCTETCOUNT_G_LO 0x0884
++#define MMC_TXOCTETCOUNT_G_HI 0x0888
++#define MMC_TXFRAMECOUNT_G_LO 0x088c
++#define MMC_TXFRAMECOUNT_G_HI 0x0890
++#define MMC_TXPAUSEFRAMES_LO 0x0894
++#define MMC_TXPAUSEFRAMES_HI 0x0898
++#define MMC_TXVLANFRAMES_G_LO 0x089c
++#define MMC_TXVLANFRAMES_G_HI 0x08a0
++#define MMC_RXFRAMECOUNT_GB_LO 0x0900
++#define MMC_RXFRAMECOUNT_GB_HI 0x0904
++#define MMC_RXOCTETCOUNT_GB_LO 0x0908
++#define MMC_RXOCTETCOUNT_GB_HI 0x090c
++#define MMC_RXOCTETCOUNT_G_LO 0x0910
++#define MMC_RXOCTETCOUNT_G_HI 0x0914
++#define MMC_RXBROADCASTFRAMES_G_LO 0x0918
++#define MMC_RXBROADCASTFRAMES_G_HI 0x091c
++#define MMC_RXMULTICASTFRAMES_G_LO 0x0920
++#define MMC_RXMULTICASTFRAMES_G_HI 0x0924
++#define MMC_RXCRCERROR_LO 0x0928
++#define MMC_RXCRCERROR_HI 0x092c
++#define MMC_RXRUNTERROR 0x0930
++#define MMC_RXJABBERERROR 0x0934
++#define MMC_RXUNDERSIZE_G 0x0938
++#define MMC_RXOVERSIZE_G 0x093c
++#define MMC_RX64OCTETS_GB_LO 0x0940
++#define MMC_RX64OCTETS_GB_HI 0x0944
++#define MMC_RX65TO127OCTETS_GB_LO 0x0948
++#define MMC_RX65TO127OCTETS_GB_HI 0x094c
++#define MMC_RX128TO255OCTETS_GB_LO 0x0950
++#define MMC_RX128TO255OCTETS_GB_HI 0x0954
++#define MMC_RX256TO511OCTETS_GB_LO 0x0958
++#define MMC_RX256TO511OCTETS_GB_HI 0x095c
++#define MMC_RX512TO1023OCTETS_GB_LO 0x0960
++#define MMC_RX512TO1023OCTETS_GB_HI 0x0964
++#define MMC_RX1024TOMAXOCTETS_GB_LO 0x0968
++#define MMC_RX1024TOMAXOCTETS_GB_HI 0x096c
++#define MMC_RXUNICASTFRAMES_G_LO 0x0970
++#define MMC_RXUNICASTFRAMES_G_HI 0x0974
++#define MMC_RXLENGTHERROR_LO 0x0978
++#define MMC_RXLENGTHERROR_HI 0x097c
++#define MMC_RXOUTOFRANGETYPE_LO 0x0980
++#define MMC_RXOUTOFRANGETYPE_HI 0x0984
++#define MMC_RXPAUSEFRAMES_LO 0x0988
++#define MMC_RXPAUSEFRAMES_HI 0x098c
++#define MMC_RXFIFOOVERFLOW_LO 0x0990
++#define MMC_RXFIFOOVERFLOW_HI 0x0994
++#define MMC_RXVLANFRAMES_GB_LO 0x0998
++#define MMC_RXVLANFRAMES_GB_HI 0x099c
++#define MMC_RXWATCHDOGERROR 0x09a0
++
++/* MMC register entry bit positions and sizes */
++#define MMC_CR_CR_INDEX 0
++#define MMC_CR_CR_WIDTH 1
++#define MMC_CR_CSR_INDEX 1
++#define MMC_CR_CSR_WIDTH 1
++#define MMC_CR_ROR_INDEX 2
++#define MMC_CR_ROR_WIDTH 1
++#define MMC_CR_MCF_INDEX 3
++#define MMC_CR_MCF_WIDTH 1
++#define MMC_CR_MCT_INDEX 4
++#define MMC_CR_MCT_WIDTH 2
++#define MMC_RIER_ALL_INTERRUPTS_INDEX 0
++#define MMC_RIER_ALL_INTERRUPTS_WIDTH 23
++#define MMC_RISR_RXFRAMECOUNT_GB_INDEX 0
++#define MMC_RISR_RXFRAMECOUNT_GB_WIDTH 1
++#define MMC_RISR_RXOCTETCOUNT_GB_INDEX 1
++#define MMC_RISR_RXOCTETCOUNT_GB_WIDTH 1
++#define MMC_RISR_RXOCTETCOUNT_G_INDEX 2
++#define MMC_RISR_RXOCTETCOUNT_G_WIDTH 1
++#define MMC_RISR_RXBROADCASTFRAMES_G_INDEX 3
++#define MMC_RISR_RXBROADCASTFRAMES_G_WIDTH 1
++#define MMC_RISR_RXMULTICASTFRAMES_G_INDEX 4
++#define MMC_RISR_RXMULTICASTFRAMES_G_WIDTH 1
++#define MMC_RISR_RXCRCERROR_INDEX 5
++#define MMC_RISR_RXCRCERROR_WIDTH 1
++#define MMC_RISR_RXRUNTERROR_INDEX 6
++#define MMC_RISR_RXRUNTERROR_WIDTH 1
++#define MMC_RISR_RXJABBERERROR_INDEX 7
++#define MMC_RISR_RXJABBERERROR_WIDTH 1
++#define MMC_RISR_RXUNDERSIZE_G_INDEX 8
++#define MMC_RISR_RXUNDERSIZE_G_WIDTH 1
++#define MMC_RISR_RXOVERSIZE_G_INDEX 9
++#define MMC_RISR_RXOVERSIZE_G_WIDTH 1
++#define MMC_RISR_RX64OCTETS_GB_INDEX 10
++#define MMC_RISR_RX64OCTETS_GB_WIDTH 1
++#define MMC_RISR_RX65TO127OCTETS_GB_INDEX 11
++#define MMC_RISR_RX65TO127OCTETS_GB_WIDTH 1
++#define MMC_RISR_RX128TO255OCTETS_GB_INDEX 12
++#define MMC_RISR_RX128TO255OCTETS_GB_WIDTH 1
++#define MMC_RISR_RX256TO511OCTETS_GB_INDEX 13
++#define MMC_RISR_RX256TO511OCTETS_GB_WIDTH 1
++#define MMC_RISR_RX512TO1023OCTETS_GB_INDEX 14
++#define MMC_RISR_RX512TO1023OCTETS_GB_WIDTH 1
++#define MMC_RISR_RX1024TOMAXOCTETS_GB_INDEX 15
++#define MMC_RISR_RX1024TOMAXOCTETS_GB_WIDTH 1
++#define MMC_RISR_RXUNICASTFRAMES_G_INDEX 16
++#define MMC_RISR_RXUNICASTFRAMES_G_WIDTH 1
++#define MMC_RISR_RXLENGTHERROR_INDEX 17
++#define MMC_RISR_RXLENGTHERROR_WIDTH 1
++#define MMC_RISR_RXOUTOFRANGETYPE_INDEX 18
++#define MMC_RISR_RXOUTOFRANGETYPE_WIDTH 1
++#define MMC_RISR_RXPAUSEFRAMES_INDEX 19
++#define MMC_RISR_RXPAUSEFRAMES_WIDTH 1
++#define MMC_RISR_RXFIFOOVERFLOW_INDEX 20
++#define MMC_RISR_RXFIFOOVERFLOW_WIDTH 1
++#define MMC_RISR_RXVLANFRAMES_GB_INDEX 21
++#define MMC_RISR_RXVLANFRAMES_GB_WIDTH 1
++#define MMC_RISR_RXWATCHDOGERROR_INDEX 22
++#define MMC_RISR_RXWATCHDOGERROR_WIDTH 1
++#define MMC_TIER_ALL_INTERRUPTS_INDEX 0
++#define MMC_TIER_ALL_INTERRUPTS_WIDTH 18
++#define MMC_TISR_TXOCTETCOUNT_GB_INDEX 0
++#define MMC_TISR_TXOCTETCOUNT_GB_WIDTH 1
++#define MMC_TISR_TXFRAMECOUNT_GB_INDEX 1
++#define MMC_TISR_TXFRAMECOUNT_GB_WIDTH 1
++#define MMC_TISR_TXBROADCASTFRAMES_G_INDEX 2
++#define MMC_TISR_TXBROADCASTFRAMES_G_WIDTH 1
++#define MMC_TISR_TXMULTICASTFRAMES_G_INDEX 3
++#define MMC_TISR_TXMULTICASTFRAMES_G_WIDTH 1
++#define MMC_TISR_TX64OCTETS_GB_INDEX 4
++#define MMC_TISR_TX64OCTETS_GB_WIDTH 1
++#define MMC_TISR_TX65TO127OCTETS_GB_INDEX 5
++#define MMC_TISR_TX65TO127OCTETS_GB_WIDTH 1
++#define MMC_TISR_TX128TO255OCTETS_GB_INDEX 6
++#define MMC_TISR_TX128TO255OCTETS_GB_WIDTH 1
++#define MMC_TISR_TX256TO511OCTETS_GB_INDEX 7
++#define MMC_TISR_TX256TO511OCTETS_GB_WIDTH 1
++#define MMC_TISR_TX512TO1023OCTETS_GB_INDEX 8
++#define MMC_TISR_TX512TO1023OCTETS_GB_WIDTH 1
++#define MMC_TISR_TX1024TOMAXOCTETS_GB_INDEX 9
++#define MMC_TISR_TX1024TOMAXOCTETS_GB_WIDTH 1
++#define MMC_TISR_TXUNICASTFRAMES_GB_INDEX 10
++#define MMC_TISR_TXUNICASTFRAMES_GB_WIDTH 1
++#define MMC_TISR_TXMULTICASTFRAMES_GB_INDEX 11
++#define MMC_TISR_TXMULTICASTFRAMES_GB_WIDTH 1
++#define MMC_TISR_TXBROADCASTFRAMES_GB_INDEX 12
++#define MMC_TISR_TXBROADCASTFRAMES_GB_WIDTH 1
++#define MMC_TISR_TXUNDERFLOWERROR_INDEX 13
++#define MMC_TISR_TXUNDERFLOWERROR_WIDTH 1
++#define MMC_TISR_TXOCTETCOUNT_G_INDEX 14
++#define MMC_TISR_TXOCTETCOUNT_G_WIDTH 1
++#define MMC_TISR_TXFRAMECOUNT_G_INDEX 15
++#define MMC_TISR_TXFRAMECOUNT_G_WIDTH 1
++#define MMC_TISR_TXPAUSEFRAMES_INDEX 16
++#define MMC_TISR_TXPAUSEFRAMES_WIDTH 1
++#define MMC_TISR_TXVLANFRAMES_G_INDEX 17
++#define MMC_TISR_TXVLANFRAMES_G_WIDTH 1
++
++/* MTL register offsets */
++#define MTL_OMR 0x1000
++#define MTL_FDCR 0x1008
++#define MTL_FDSR 0x100c
++#define MTL_FDDR 0x1010
++#define MTL_ISR 0x1020
++#define MTL_RQDCM0R 0x1030
++#define MTL_TCPM0R 0x1040
++#define MTL_TCPM1R 0x1044
++
++#define MTL_RQDCM_INC 4
++#define MTL_RQDCM_Q_PER_REG 4
++#define MTL_TCPM_INC 4
++#define MTL_TCPM_TC_PER_REG 4
++
++/* MTL register entry bit positions and sizes */
++#define MTL_OMR_ETSALG_INDEX 5
++#define MTL_OMR_ETSALG_WIDTH 2
++#define MTL_OMR_RAA_INDEX 2
++#define MTL_OMR_RAA_WIDTH 1
++
++/* MTL queue register offsets
++ * Multiple queues can be active. The first queue has registers
++ * that begin at 0x1100. Each subsequent queue has registers that
++ * are accessed using an offset of 0x80 from the previous queue.
++ */
++#define MTL_Q_BASE 0x1100
++#define MTL_Q_INC 0x80
++
++#define MTL_Q_TQOMR 0x00
++#define MTL_Q_TQUR 0x04
++#define MTL_Q_TQDR 0x08
++#define MTL_Q_RQOMR 0x40
++#define MTL_Q_RQMPOCR 0x44
++#define MTL_Q_RQDR 0x4c
++#define MTL_Q_IER 0x70
++#define MTL_Q_ISR 0x74
++
++/* MTL queue register entry bit positions and sizes */
++#define MTL_Q_RQOMR_EHFC_INDEX 7
++#define MTL_Q_RQOMR_EHFC_WIDTH 1
++#define MTL_Q_RQOMR_RFA_INDEX 8
++#define MTL_Q_RQOMR_RFA_WIDTH 3
++#define MTL_Q_RQOMR_RFD_INDEX 13
++#define MTL_Q_RQOMR_RFD_WIDTH 3
++#define MTL_Q_RQOMR_RQS_INDEX 16
++#define MTL_Q_RQOMR_RQS_WIDTH 9
++#define MTL_Q_RQOMR_RSF_INDEX 5
++#define MTL_Q_RQOMR_RSF_WIDTH 1
++#define MTL_Q_RQOMR_RTC_INDEX 0
++#define MTL_Q_RQOMR_RTC_WIDTH 2
++#define MTL_Q_TQOMR_FTQ_INDEX 0
++#define MTL_Q_TQOMR_FTQ_WIDTH 1
++#define MTL_Q_TQOMR_Q2TCMAP_INDEX 8
++#define MTL_Q_TQOMR_Q2TCMAP_WIDTH 3
++#define MTL_Q_TQOMR_TQS_INDEX 16
++#define MTL_Q_TQOMR_TQS_WIDTH 10
++#define MTL_Q_TQOMR_TSF_INDEX 1
++#define MTL_Q_TQOMR_TSF_WIDTH 1
++#define MTL_Q_TQOMR_TTC_INDEX 4
++#define MTL_Q_TQOMR_TTC_WIDTH 3
++#define MTL_Q_TQOMR_TXQEN_INDEX 2
++#define MTL_Q_TQOMR_TXQEN_WIDTH 2
++
++/* MTL queue register value */
++#define MTL_RSF_DISABLE 0x00
++#define MTL_RSF_ENABLE 0x01
++#define MTL_TSF_DISABLE 0x00
++#define MTL_TSF_ENABLE 0x01
++
++#define MTL_RX_THRESHOLD_64 0x00
++#define MTL_RX_THRESHOLD_96 0x02
++#define MTL_RX_THRESHOLD_128 0x03
++#define MTL_TX_THRESHOLD_32 0x01
++#define MTL_TX_THRESHOLD_64 0x00
++#define MTL_TX_THRESHOLD_96 0x02
++#define MTL_TX_THRESHOLD_128 0x03
++#define MTL_TX_THRESHOLD_192 0x04
++#define MTL_TX_THRESHOLD_256 0x05
++#define MTL_TX_THRESHOLD_384 0x06
++#define MTL_TX_THRESHOLD_512 0x07
++
++#define MTL_ETSALG_WRR 0x00
++#define MTL_ETSALG_WFQ 0x01
++#define MTL_ETSALG_DWRR 0x02
++#define MTL_RAA_SP 0x00
++#define MTL_RAA_WSP 0x01
++
++#define MTL_Q_DISABLED 0x00
++#define MTL_Q_ENABLED 0x02
++
++/* MTL traffic class register offsets
++ * Multiple traffic classes can be active. The first class has registers
++ * that begin at 0x1100. Each subsequent queue has registers that
++ * are accessed using an offset of 0x80 from the previous queue.
++ */
++#define MTL_TC_BASE MTL_Q_BASE
++#define MTL_TC_INC MTL_Q_INC
++
++#define MTL_TC_ETSCR 0x10
++#define MTL_TC_ETSSR 0x14
++#define MTL_TC_QWR 0x18
++
++/* MTL traffic class register entry bit positions and sizes */
++#define MTL_TC_ETSCR_TSA_INDEX 0
++#define MTL_TC_ETSCR_TSA_WIDTH 2
++#define MTL_TC_QWR_QW_INDEX 0
++#define MTL_TC_QWR_QW_WIDTH 21
++
++/* MTL traffic class register value */
++#define MTL_TSA_SP 0x00
++#define MTL_TSA_ETS 0x02
++
++/* PCS MMD select register offset
++ * The MMD select register is used for accessing PCS registers
++ * when the underlying APB3 interface is using indirect addressing.
++ * Indirect addressing requires accessing registers in two phases,
++ * an address phase and a data phase. The address phases requires
++ * writing an address selection value to the MMD select regiesters.
++ */
++#define PCS_MMD_SELECT 0xff
++
++/* Descriptor/Packet entry bit positions and sizes */
++#define RX_PACKET_ERRORS_CRC_INDEX 2
++#define RX_PACKET_ERRORS_CRC_WIDTH 1
++#define RX_PACKET_ERRORS_FRAME_INDEX 3
++#define RX_PACKET_ERRORS_FRAME_WIDTH 1
++#define RX_PACKET_ERRORS_LENGTH_INDEX 0
++#define RX_PACKET_ERRORS_LENGTH_WIDTH 1
++#define RX_PACKET_ERRORS_OVERRUN_INDEX 1
++#define RX_PACKET_ERRORS_OVERRUN_WIDTH 1
++
++#define RX_PACKET_ATTRIBUTES_CSUM_DONE_INDEX 0
++#define RX_PACKET_ATTRIBUTES_CSUM_DONE_WIDTH 1
++#define RX_PACKET_ATTRIBUTES_VLAN_CTAG_INDEX 1
++#define RX_PACKET_ATTRIBUTES_VLAN_CTAG_WIDTH 1
++#define RX_PACKET_ATTRIBUTES_INCOMPLETE_INDEX 2
++#define RX_PACKET_ATTRIBUTES_INCOMPLETE_WIDTH 1
++#define RX_PACKET_ATTRIBUTES_CONTEXT_NEXT_INDEX 3
++#define RX_PACKET_ATTRIBUTES_CONTEXT_NEXT_WIDTH 1
++#define RX_PACKET_ATTRIBUTES_CONTEXT_INDEX 4
++#define RX_PACKET_ATTRIBUTES_CONTEXT_WIDTH 1
++#define RX_PACKET_ATTRIBUTES_RX_TSTAMP_INDEX 5
++#define RX_PACKET_ATTRIBUTES_RX_TSTAMP_WIDTH 1
++#define RX_PACKET_ATTRIBUTES_RSS_HASH_INDEX 6
++#define RX_PACKET_ATTRIBUTES_RSS_HASH_WIDTH 1
++
++#define RX_NORMAL_DESC0_OVT_INDEX 0
++#define RX_NORMAL_DESC0_OVT_WIDTH 16
++#define RX_NORMAL_DESC2_HL_INDEX 0
++#define RX_NORMAL_DESC2_HL_WIDTH 10
++#define RX_NORMAL_DESC3_CDA_INDEX 27
++#define RX_NORMAL_DESC3_CDA_WIDTH 1
++#define RX_NORMAL_DESC3_CTXT_INDEX 30
++#define RX_NORMAL_DESC3_CTXT_WIDTH 1
++#define RX_NORMAL_DESC3_ES_INDEX 15
++#define RX_NORMAL_DESC3_ES_WIDTH 1
++#define RX_NORMAL_DESC3_ETLT_INDEX 16
++#define RX_NORMAL_DESC3_ETLT_WIDTH 4
++#define RX_NORMAL_DESC3_FD_INDEX 29
++#define RX_NORMAL_DESC3_FD_WIDTH 1
++#define RX_NORMAL_DESC3_INTE_INDEX 30
++#define RX_NORMAL_DESC3_INTE_WIDTH 1
++#define RX_NORMAL_DESC3_L34T_INDEX 20
++#define RX_NORMAL_DESC3_L34T_WIDTH 4
++#define RX_NORMAL_DESC3_LD_INDEX 28
++#define RX_NORMAL_DESC3_LD_WIDTH 1
++#define RX_NORMAL_DESC3_OWN_INDEX 31
++#define RX_NORMAL_DESC3_OWN_WIDTH 1
++#define RX_NORMAL_DESC3_PL_INDEX 0
++#define RX_NORMAL_DESC3_PL_WIDTH 14
++#define RX_NORMAL_DESC3_RSV_INDEX 26
++#define RX_NORMAL_DESC3_RSV_WIDTH 1
++
++#define RX_DESC3_L34T_IPV4_TCP 1
++#define RX_DESC3_L34T_IPV4_UDP 2
++#define RX_DESC3_L34T_IPV4_ICMP 3
++#define RX_DESC3_L34T_IPV6_TCP 9
++#define RX_DESC3_L34T_IPV6_UDP 10
++#define RX_DESC3_L34T_IPV6_ICMP 11
++
++#define RX_CONTEXT_DESC3_TSA_INDEX 4
++#define RX_CONTEXT_DESC3_TSA_WIDTH 1
++#define RX_CONTEXT_DESC3_TSD_INDEX 6
++#define RX_CONTEXT_DESC3_TSD_WIDTH 1
++
++#define TX_PACKET_ATTRIBUTES_CSUM_ENABLE_INDEX 0
++#define TX_PACKET_ATTRIBUTES_CSUM_ENABLE_WIDTH 1
++#define TX_PACKET_ATTRIBUTES_TSO_ENABLE_INDEX 1
++#define TX_PACKET_ATTRIBUTES_TSO_ENABLE_WIDTH 1
++#define TX_PACKET_ATTRIBUTES_VLAN_CTAG_INDEX 2
++#define TX_PACKET_ATTRIBUTES_VLAN_CTAG_WIDTH 1
++#define TX_PACKET_ATTRIBUTES_PTP_INDEX 3
++#define TX_PACKET_ATTRIBUTES_PTP_WIDTH 1
++
++#define TX_CONTEXT_DESC2_MSS_INDEX 0
++#define TX_CONTEXT_DESC2_MSS_WIDTH 15
++#define TX_CONTEXT_DESC3_CTXT_INDEX 30
++#define TX_CONTEXT_DESC3_CTXT_WIDTH 1
++#define TX_CONTEXT_DESC3_TCMSSV_INDEX 26
++#define TX_CONTEXT_DESC3_TCMSSV_WIDTH 1
++#define TX_CONTEXT_DESC3_VLTV_INDEX 16
++#define TX_CONTEXT_DESC3_VLTV_WIDTH 1
++#define TX_CONTEXT_DESC3_VT_INDEX 0
++#define TX_CONTEXT_DESC3_VT_WIDTH 16
++
++#define TX_NORMAL_DESC2_HL_B1L_INDEX 0
++#define TX_NORMAL_DESC2_HL_B1L_WIDTH 14
++#define TX_NORMAL_DESC2_IC_INDEX 31
++#define TX_NORMAL_DESC2_IC_WIDTH 1
++#define TX_NORMAL_DESC2_TTSE_INDEX 30
++#define TX_NORMAL_DESC2_TTSE_WIDTH 1
++#define TX_NORMAL_DESC2_VTIR_INDEX 14
++#define TX_NORMAL_DESC2_VTIR_WIDTH 2
++#define TX_NORMAL_DESC3_CIC_INDEX 16
++#define TX_NORMAL_DESC3_CIC_WIDTH 2
++#define TX_NORMAL_DESC3_CPC_INDEX 26
++#define TX_NORMAL_DESC3_CPC_WIDTH 2
++#define TX_NORMAL_DESC3_CTXT_INDEX 30
++#define TX_NORMAL_DESC3_CTXT_WIDTH 1
++#define TX_NORMAL_DESC3_FD_INDEX 29
++#define TX_NORMAL_DESC3_FD_WIDTH 1
++#define TX_NORMAL_DESC3_FL_INDEX 0
++#define TX_NORMAL_DESC3_FL_WIDTH 15
++#define TX_NORMAL_DESC3_LD_INDEX 28
++#define TX_NORMAL_DESC3_LD_WIDTH 1
++#define TX_NORMAL_DESC3_OWN_INDEX 31
++#define TX_NORMAL_DESC3_OWN_WIDTH 1
++#define TX_NORMAL_DESC3_TCPHDRLEN_INDEX 19
++#define TX_NORMAL_DESC3_TCPHDRLEN_WIDTH 4
++#define TX_NORMAL_DESC3_TCPPL_INDEX 0
++#define TX_NORMAL_DESC3_TCPPL_WIDTH 18
++#define TX_NORMAL_DESC3_TSE_INDEX 18
++#define TX_NORMAL_DESC3_TSE_WIDTH 1
++
++#define TX_NORMAL_DESC2_VLAN_INSERT 0x2
++
++/* MDIO undefined or vendor specific registers */
++#ifndef MDIO_AN_COMP_STAT
++#define MDIO_AN_COMP_STAT 0x0030
++#endif
++
++/* Bit setting and getting macros
++ * The get macro will extract the current bit field value from within
++ * the variable
++ *
++ * The set macro will clear the current bit field value within the
++ * variable and then set the bit field of the variable to the
++ * specified value
++ */
++#define GET_BITS(_var, _index, _width) \
++ (((_var) >> (_index)) & ((0x1 << (_width)) - 1))
++
++#define SET_BITS(_var, _index, _width, _val) \
++do { \
++ (_var) &= ~(((0x1 << (_width)) - 1) << (_index)); \
++ (_var) |= (((_val) & ((0x1 << (_width)) - 1)) << (_index)); \
++} while (0)
++
++#define GET_BITS_LE(_var, _index, _width) \
++ ((le32_to_cpu((_var)) >> (_index)) & ((0x1 << (_width)) - 1))
++
++#define SET_BITS_LE(_var, _index, _width, _val) \
++do { \
++ (_var) &= cpu_to_le32(~(((0x1 << (_width)) - 1) << (_index))); \
++ (_var) |= cpu_to_le32((((_val) & \
++ ((0x1 << (_width)) - 1)) << (_index))); \
++} while (0)
++
++/* Bit setting and getting macros based on register fields
++ * The get macro uses the bit field definitions formed using the input
++ * names to extract the current bit field value from within the
++ * variable
++ *
++ * The set macro uses the bit field definitions formed using the input
++ * names to set the bit field of the variable to the specified value
++ */
++#define XGMAC_GET_BITS(_var, _prefix, _field) \
++ GET_BITS((_var), \
++ _prefix##_##_field##_INDEX, \
++ _prefix##_##_field##_WIDTH)
++
++#define XGMAC_SET_BITS(_var, _prefix, _field, _val) \
++ SET_BITS((_var), \
++ _prefix##_##_field##_INDEX, \
++ _prefix##_##_field##_WIDTH, (_val))
++
++#define XGMAC_GET_BITS_LE(_var, _prefix, _field) \
++ GET_BITS_LE((_var), \
++ _prefix##_##_field##_INDEX, \
++ _prefix##_##_field##_WIDTH)
++
++#define XGMAC_SET_BITS_LE(_var, _prefix, _field, _val) \
++ SET_BITS_LE((_var), \
++ _prefix##_##_field##_INDEX, \
++ _prefix##_##_field##_WIDTH, (_val))
++
++/* Macros for reading or writing registers
++ * The ioread macros will get bit fields or full values using the
++ * register definitions formed using the input names
++ *
++ * The iowrite macros will set bit fields or full values using the
++ * register definitions formed using the input names
++ */
++#define XGMAC_IOREAD(_pdata, _reg) \
++ ioread32((_pdata)->xgmac_regs + _reg)
++
++#define XGMAC_IOREAD_BITS(_pdata, _reg, _field) \
++ GET_BITS(XGMAC_IOREAD((_pdata), _reg), \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH)
++
++#define XGMAC_IOWRITE(_pdata, _reg, _val) \
++ iowrite32((_val), (_pdata)->xgmac_regs + _reg)
++
++#define XGMAC_IOWRITE_BITS(_pdata, _reg, _field, _val) \
++do { \
++ u32 reg_val = XGMAC_IOREAD((_pdata), _reg); \
++ SET_BITS(reg_val, \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH, (_val)); \
++ XGMAC_IOWRITE((_pdata), _reg, reg_val); \
++} while (0)
++
++/* Macros for reading or writing MTL queue or traffic class registers
++ * Similar to the standard read and write macros except that the
++ * base register value is calculated by the queue or traffic class number
++ */
++#define XGMAC_MTL_IOREAD(_pdata, _n, _reg) \
++ ioread32((_pdata)->xgmac_regs + \
++ MTL_Q_BASE + ((_n) * MTL_Q_INC) + _reg)
++
++#define XGMAC_MTL_IOREAD_BITS(_pdata, _n, _reg, _field) \
++ GET_BITS(XGMAC_MTL_IOREAD((_pdata), (_n), _reg), \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH)
++
++#define XGMAC_MTL_IOWRITE(_pdata, _n, _reg, _val) \
++ iowrite32((_val), (_pdata)->xgmac_regs + \
++ MTL_Q_BASE + ((_n) * MTL_Q_INC) + _reg)
++
++#define XGMAC_MTL_IOWRITE_BITS(_pdata, _n, _reg, _field, _val) \
++do { \
++ u32 reg_val = XGMAC_MTL_IOREAD((_pdata), (_n), _reg); \
++ SET_BITS(reg_val, \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH, (_val)); \
++ XGMAC_MTL_IOWRITE((_pdata), (_n), _reg, reg_val); \
++} while (0)
++
++/* Macros for reading or writing DMA channel registers
++ * Similar to the standard read and write macros except that the
++ * base register value is obtained from the ring
++ */
++#define XGMAC_DMA_IOREAD(_channel, _reg) \
++ ioread32((_channel)->dma_regs + _reg)
++
++#define XGMAC_DMA_IOREAD_BITS(_channel, _reg, _field) \
++ GET_BITS(XGMAC_DMA_IOREAD((_channel), _reg), \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH)
++
++#define XGMAC_DMA_IOWRITE(_channel, _reg, _val) \
++ iowrite32((_val), (_channel)->dma_regs + _reg)
++
++#define XGMAC_DMA_IOWRITE_BITS(_channel, _reg, _field, _val) \
++do { \
++ u32 reg_val = XGMAC_DMA_IOREAD((_channel), _reg); \
++ SET_BITS(reg_val, \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH, (_val)); \
++ XGMAC_DMA_IOWRITE((_channel), _reg, reg_val); \
++} while (0)
++
++/* Macros for building, reading or writing register values or bits
++ * within the register values of XPCS registers.
++ */
++#define XPCS_IOWRITE(_pdata, _off, _val) \
++ iowrite32(_val, (_pdata)->xpcs_regs + (_off))
++
++#define XPCS_IOREAD(_pdata, _off) \
++ ioread32((_pdata)->xpcs_regs + (_off))
++
++/* Macros for building, reading or writing register values or bits
++ * using MDIO. Different from above because of the use of standardized
++ * Linux include values. No shifting is performed with the bit
++ * operations, everything works on mask values.
++ */
++#define XMDIO_READ(_pdata, _mmd, _reg) \
++ ((_pdata)->hw_if.read_mmd_regs((_pdata), 0, \
++ MII_ADDR_C45 | (_mmd << 16) | ((_reg) & 0xffff)))
++
++#define XMDIO_READ_BITS(_pdata, _mmd, _reg, _mask) \
++ (XMDIO_READ((_pdata), _mmd, _reg) & _mask)
++
++#define XMDIO_WRITE(_pdata, _mmd, _reg, _val) \
++ ((_pdata)->hw_if.write_mmd_regs((_pdata), 0, \
++ MII_ADDR_C45 | (_mmd << 16) | ((_reg) & 0xffff), (_val)))
++
++#define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val) \
++do { \
++ u32 mmd_val = XMDIO_READ((_pdata), _mmd, _reg); \
++ mmd_val &= ~_mask; \
++ mmd_val |= (_val); \
++ XMDIO_WRITE((_pdata), _mmd, _reg, mmd_val); \
++} while (0)
++
++#endif
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c
+new file mode 100644
+index 000000000000..343301cbf7b4
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dcb.c
+@@ -0,0 +1,269 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/netdevice.h>
++#include <net/dcbnl.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static int xgbe_dcb_ieee_getets(struct net_device *netdev,
++ struct ieee_ets *ets)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ /* Set number of supported traffic classes */
++ ets->ets_cap = pdata->hw_feat.tc_cnt;
++
++ if (pdata->ets) {
++ ets->cbs = pdata->ets->cbs;
++ memcpy(ets->tc_tx_bw, pdata->ets->tc_tx_bw,
++ sizeof(ets->tc_tx_bw));
++ memcpy(ets->tc_tsa, pdata->ets->tc_tsa,
++ sizeof(ets->tc_tsa));
++ memcpy(ets->prio_tc, pdata->ets->prio_tc,
++ sizeof(ets->prio_tc));
++ }
++
++ return 0;
++}
++
++static int xgbe_dcb_ieee_setets(struct net_device *netdev,
++ struct ieee_ets *ets)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ unsigned int i, tc_ets, tc_ets_weight;
++
++ tc_ets = 0;
++ tc_ets_weight = 0;
++ for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) {
++ DBGPR(" TC%u: tx_bw=%hhu, rx_bw=%hhu, tsa=%hhu\n", i,
++ ets->tc_tx_bw[i], ets->tc_rx_bw[i], ets->tc_tsa[i]);
++ DBGPR(" PRIO%u: TC=%hhu\n", i, ets->prio_tc[i]);
++
++ if ((ets->tc_tx_bw[i] || ets->tc_tsa[i]) &&
++ (i >= pdata->hw_feat.tc_cnt))
++ return -EINVAL;
++
++ if (ets->prio_tc[i] >= pdata->hw_feat.tc_cnt)
++ return -EINVAL;
++
++ switch (ets->tc_tsa[i]) {
++ case IEEE_8021QAZ_TSA_STRICT:
++ break;
++ case IEEE_8021QAZ_TSA_ETS:
++ tc_ets = 1;
++ tc_ets_weight += ets->tc_tx_bw[i];
++ break;
++
++ default:
++ return -EINVAL;
++ }
++ }
++
++ /* Weights must add up to 100% */
++ if (tc_ets && (tc_ets_weight != 100))
++ return -EINVAL;
++
++ if (!pdata->ets) {
++ pdata->ets = devm_kzalloc(pdata->dev, sizeof(*pdata->ets),
++ GFP_KERNEL);
++ if (!pdata->ets)
++ return -ENOMEM;
++ }
++
++ memcpy(pdata->ets, ets, sizeof(*pdata->ets));
++
++ pdata->hw_if.config_dcb_tc(pdata);
++
++ return 0;
++}
++
++static int xgbe_dcb_ieee_getpfc(struct net_device *netdev,
++ struct ieee_pfc *pfc)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ /* Set number of supported PFC traffic classes */
++ pfc->pfc_cap = pdata->hw_feat.tc_cnt;
++
++ if (pdata->pfc) {
++ pfc->pfc_en = pdata->pfc->pfc_en;
++ pfc->mbc = pdata->pfc->mbc;
++ pfc->delay = pdata->pfc->delay;
++ }
++
++ return 0;
++}
++
++static int xgbe_dcb_ieee_setpfc(struct net_device *netdev,
++ struct ieee_pfc *pfc)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ DBGPR(" cap=%hhu, en=%hhx, mbc=%hhu, delay=%hhu\n",
++ pfc->pfc_cap, pfc->pfc_en, pfc->mbc, pfc->delay);
++
++ if (!pdata->pfc) {
++ pdata->pfc = devm_kzalloc(pdata->dev, sizeof(*pdata->pfc),
++ GFP_KERNEL);
++ if (!pdata->pfc)
++ return -ENOMEM;
++ }
++
++ memcpy(pdata->pfc, pfc, sizeof(*pdata->pfc));
++
++ pdata->hw_if.config_dcb_pfc(pdata);
++
++ return 0;
++}
++
++static u8 xgbe_dcb_getdcbx(struct net_device *netdev)
++{
++ return DCB_CAP_DCBX_HOST | DCB_CAP_DCBX_VER_IEEE;
++}
++
++static u8 xgbe_dcb_setdcbx(struct net_device *netdev, u8 dcbx)
++{
++ u8 support = xgbe_dcb_getdcbx(netdev);
++
++ DBGPR(" DCBX=%#hhx\n", dcbx);
++
++ if (dcbx & ~support)
++ return 1;
++
++ if ((dcbx & support) != support)
++ return 1;
++
++ return 0;
++}
++
++static const struct dcbnl_rtnl_ops xgbe_dcbnl_ops = {
++ /* IEEE 802.1Qaz std */
++ .ieee_getets = xgbe_dcb_ieee_getets,
++ .ieee_setets = xgbe_dcb_ieee_setets,
++ .ieee_getpfc = xgbe_dcb_ieee_getpfc,
++ .ieee_setpfc = xgbe_dcb_ieee_setpfc,
++
++ /* DCBX configuration */
++ .getdcbx = xgbe_dcb_getdcbx,
++ .setdcbx = xgbe_dcb_setdcbx,
++};
++
++const struct dcbnl_rtnl_ops *xgbe_a0_get_dcbnl_ops(void)
++{
++ return &xgbe_dcbnl_ops;
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c
+new file mode 100644
+index 000000000000..ecfa6f91da22
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-debugfs.c
+@@ -0,0 +1,373 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/debugfs.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static ssize_t xgbe_common_read(char __user *buffer, size_t count,
++ loff_t *ppos, unsigned int value)
++{
++ char *buf;
++ ssize_t len;
++
++ if (*ppos != 0)
++ return 0;
++
++ buf = kasprintf(GFP_KERNEL, "0x%08x\n", value);
++ if (!buf)
++ return -ENOMEM;
++
++ if (count < strlen(buf)) {
++ kfree(buf);
++ return -ENOSPC;
++ }
++
++ len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
++ kfree(buf);
++
++ return len;
++}
++
++static ssize_t xgbe_common_write(const char __user *buffer, size_t count,
++ loff_t *ppos, unsigned int *value)
++{
++ char workarea[32];
++ ssize_t len;
++ int ret;
++
++ if (*ppos != 0)
++ return 0;
++
++ if (count >= sizeof(workarea))
++ return -ENOSPC;
++
++ len = simple_write_to_buffer(workarea, sizeof(workarea) - 1, ppos,
++ buffer, count);
++ if (len < 0)
++ return len;
++
++ workarea[len] = '\0';
++ ret = kstrtouint(workarea, 16, value);
++ if (ret)
++ return -EIO;
++
++ return len;
++}
++
++static ssize_t xgmac_reg_addr_read(struct file *filp, char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++
++ return xgbe_common_read(buffer, count, ppos, pdata->debugfs_xgmac_reg);
++}
++
++static ssize_t xgmac_reg_addr_write(struct file *filp,
++ const char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++
++ return xgbe_common_write(buffer, count, ppos,
++ &pdata->debugfs_xgmac_reg);
++}
++
++static ssize_t xgmac_reg_value_read(struct file *filp, char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++ unsigned int value;
++
++ value = XGMAC_IOREAD(pdata, pdata->debugfs_xgmac_reg);
++
++ return xgbe_common_read(buffer, count, ppos, value);
++}
++
++static ssize_t xgmac_reg_value_write(struct file *filp,
++ const char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++ unsigned int value;
++ ssize_t len;
++
++ len = xgbe_common_write(buffer, count, ppos, &value);
++ if (len < 0)
++ return len;
++
++ XGMAC_IOWRITE(pdata, pdata->debugfs_xgmac_reg, value);
++
++ return len;
++}
++
++static const struct file_operations xgmac_reg_addr_fops = {
++ .owner = THIS_MODULE,
++ .open = simple_open,
++ .read = xgmac_reg_addr_read,
++ .write = xgmac_reg_addr_write,
++};
++
++static const struct file_operations xgmac_reg_value_fops = {
++ .owner = THIS_MODULE,
++ .open = simple_open,
++ .read = xgmac_reg_value_read,
++ .write = xgmac_reg_value_write,
++};
++
++static ssize_t xpcs_mmd_read(struct file *filp, char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++
++ return xgbe_common_read(buffer, count, ppos, pdata->debugfs_xpcs_mmd);
++}
++
++static ssize_t xpcs_mmd_write(struct file *filp, const char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++
++ return xgbe_common_write(buffer, count, ppos,
++ &pdata->debugfs_xpcs_mmd);
++}
++
++static ssize_t xpcs_reg_addr_read(struct file *filp, char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++
++ return xgbe_common_read(buffer, count, ppos, pdata->debugfs_xpcs_reg);
++}
++
++static ssize_t xpcs_reg_addr_write(struct file *filp, const char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++
++ return xgbe_common_write(buffer, count, ppos,
++ &pdata->debugfs_xpcs_reg);
++}
++
++static ssize_t xpcs_reg_value_read(struct file *filp, char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++ unsigned int value;
++
++ value = XMDIO_READ(pdata, pdata->debugfs_xpcs_mmd,
++ pdata->debugfs_xpcs_reg);
++
++ return xgbe_common_read(buffer, count, ppos, value);
++}
++
++static ssize_t xpcs_reg_value_write(struct file *filp,
++ const char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct xgbe_prv_data *pdata = filp->private_data;
++ unsigned int value;
++ ssize_t len;
++
++ len = xgbe_common_write(buffer, count, ppos, &value);
++ if (len < 0)
++ return len;
++
++ XMDIO_WRITE(pdata, pdata->debugfs_xpcs_mmd, pdata->debugfs_xpcs_reg,
++ value);
++
++ return len;
++}
++
++static const struct file_operations xpcs_mmd_fops = {
++ .owner = THIS_MODULE,
++ .open = simple_open,
++ .read = xpcs_mmd_read,
++ .write = xpcs_mmd_write,
++};
++
++static const struct file_operations xpcs_reg_addr_fops = {
++ .owner = THIS_MODULE,
++ .open = simple_open,
++ .read = xpcs_reg_addr_read,
++ .write = xpcs_reg_addr_write,
++};
++
++static const struct file_operations xpcs_reg_value_fops = {
++ .owner = THIS_MODULE,
++ .open = simple_open,
++ .read = xpcs_reg_value_read,
++ .write = xpcs_reg_value_write,
++};
++
++void xgbe_a0_debugfs_init(struct xgbe_prv_data *pdata)
++{
++ struct dentry *pfile;
++ char *buf;
++
++ /* Set defaults */
++ pdata->debugfs_xgmac_reg = 0;
++ pdata->debugfs_xpcs_mmd = 1;
++ pdata->debugfs_xpcs_reg = 0;
++
++ buf = kasprintf(GFP_KERNEL, "amd-xgbe-a0-%s", pdata->netdev->name);
++ pdata->xgbe_debugfs = debugfs_create_dir(buf, NULL);
++ if (!pdata->xgbe_debugfs) {
++ netdev_err(pdata->netdev, "debugfs_create_dir failed\n");
++ return;
++ }
++
++ pfile = debugfs_create_file("xgmac_register", 0600,
++ pdata->xgbe_debugfs, pdata,
++ &xgmac_reg_addr_fops);
++ if (!pfile)
++ netdev_err(pdata->netdev, "debugfs_create_file failed\n");
++
++ pfile = debugfs_create_file("xgmac_register_value", 0600,
++ pdata->xgbe_debugfs, pdata,
++ &xgmac_reg_value_fops);
++ if (!pfile)
++ netdev_err(pdata->netdev, "debugfs_create_file failed\n");
++
++ pfile = debugfs_create_file("xpcs_mmd", 0600,
++ pdata->xgbe_debugfs, pdata,
++ &xpcs_mmd_fops);
++ if (!pfile)
++ netdev_err(pdata->netdev, "debugfs_create_file failed\n");
++
++ pfile = debugfs_create_file("xpcs_register", 0600,
++ pdata->xgbe_debugfs, pdata,
++ &xpcs_reg_addr_fops);
++ if (!pfile)
++ netdev_err(pdata->netdev, "debugfs_create_file failed\n");
++
++ pfile = debugfs_create_file("xpcs_register_value", 0600,
++ pdata->xgbe_debugfs, pdata,
++ &xpcs_reg_value_fops);
++ if (!pfile)
++ netdev_err(pdata->netdev, "debugfs_create_file failed\n");
++
++ kfree(buf);
++}
++
++void xgbe_a0_debugfs_exit(struct xgbe_prv_data *pdata)
++{
++ debugfs_remove_recursive(pdata->xgbe_debugfs);
++ pdata->xgbe_debugfs = NULL;
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c
+new file mode 100644
+index 000000000000..5dd57779c82c
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-desc.c
+@@ -0,0 +1,636 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static void xgbe_unmap_rdata(struct xgbe_prv_data *, struct xgbe_ring_data *);
++
++static void xgbe_free_ring(struct xgbe_prv_data *pdata,
++ struct xgbe_ring *ring)
++{
++ struct xgbe_ring_data *rdata;
++ unsigned int i;
++
++ if (!ring)
++ return;
++
++ if (ring->rdata) {
++ for (i = 0; i < ring->rdesc_count; i++) {
++ rdata = XGBE_GET_DESC_DATA(ring, i);
++ xgbe_unmap_rdata(pdata, rdata);
++ }
++
++ kfree(ring->rdata);
++ ring->rdata = NULL;
++ }
++
++ if (ring->rx_hdr_pa.pages) {
++ dma_unmap_page(pdata->dev, ring->rx_hdr_pa.pages_dma,
++ ring->rx_hdr_pa.pages_len, DMA_FROM_DEVICE);
++ put_page(ring->rx_hdr_pa.pages);
++
++ ring->rx_hdr_pa.pages = NULL;
++ ring->rx_hdr_pa.pages_len = 0;
++ ring->rx_hdr_pa.pages_offset = 0;
++ ring->rx_hdr_pa.pages_dma = 0;
++ }
++
++ if (ring->rx_buf_pa.pages) {
++ dma_unmap_page(pdata->dev, ring->rx_buf_pa.pages_dma,
++ ring->rx_buf_pa.pages_len, DMA_FROM_DEVICE);
++ put_page(ring->rx_buf_pa.pages);
++
++ ring->rx_buf_pa.pages = NULL;
++ ring->rx_buf_pa.pages_len = 0;
++ ring->rx_buf_pa.pages_offset = 0;
++ ring->rx_buf_pa.pages_dma = 0;
++ }
++
++ if (ring->rdesc) {
++ dma_free_coherent(pdata->dev,
++ (sizeof(struct xgbe_ring_desc) *
++ ring->rdesc_count),
++ ring->rdesc, ring->rdesc_dma);
++ ring->rdesc = NULL;
++ }
++}
++
++static void xgbe_free_ring_resources(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ DBGPR("-->xgbe_free_ring_resources\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ xgbe_free_ring(pdata, channel->tx_ring);
++ xgbe_free_ring(pdata, channel->rx_ring);
++ }
++
++ DBGPR("<--xgbe_free_ring_resources\n");
++}
++
++static int xgbe_init_ring(struct xgbe_prv_data *pdata,
++ struct xgbe_ring *ring, unsigned int rdesc_count)
++{
++ DBGPR("-->xgbe_init_ring\n");
++
++ if (!ring)
++ return 0;
++
++ /* Descriptors */
++ ring->rdesc_count = rdesc_count;
++ ring->rdesc = dma_alloc_coherent(pdata->dev,
++ (sizeof(struct xgbe_ring_desc) *
++ rdesc_count), &ring->rdesc_dma,
++ GFP_KERNEL);
++ if (!ring->rdesc)
++ return -ENOMEM;
++
++ /* Descriptor information */
++ ring->rdata = kcalloc(rdesc_count, sizeof(struct xgbe_ring_data),
++ GFP_KERNEL);
++ if (!ring->rdata)
++ return -ENOMEM;
++
++ DBGPR(" rdesc=0x%p, rdesc_dma=0x%llx, rdata=0x%p\n",
++ ring->rdesc, ring->rdesc_dma, ring->rdata);
++
++ DBGPR("<--xgbe_init_ring\n");
++
++ return 0;
++}
++
++static int xgbe_alloc_ring_resources(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++ int ret;
++
++ DBGPR("-->xgbe_alloc_ring_resources\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ DBGPR(" %s - tx_ring:\n", channel->name);
++ ret = xgbe_init_ring(pdata, channel->tx_ring,
++ pdata->tx_desc_count);
++ if (ret) {
++ netdev_alert(pdata->netdev,
++ "error initializing Tx ring\n");
++ goto err_ring;
++ }
++
++ DBGPR(" %s - rx_ring:\n", channel->name);
++ ret = xgbe_init_ring(pdata, channel->rx_ring,
++ pdata->rx_desc_count);
++ if (ret) {
++ netdev_alert(pdata->netdev,
++ "error initializing Tx ring\n");
++ goto err_ring;
++ }
++ }
++
++ DBGPR("<--xgbe_alloc_ring_resources\n");
++
++ return 0;
++
++err_ring:
++ xgbe_free_ring_resources(pdata);
++
++ return ret;
++}
++
++static int xgbe_alloc_pages(struct xgbe_prv_data *pdata,
++ struct xgbe_page_alloc *pa, gfp_t gfp, int order)
++{
++ struct page *pages = NULL;
++ dma_addr_t pages_dma;
++ int ret;
++
++ /* Try to obtain pages, decreasing order if necessary */
++ gfp |= __GFP_COLD | __GFP_COMP;
++ while (order >= 0) {
++ pages = alloc_pages(gfp, order);
++ if (pages)
++ break;
++
++ order--;
++ }
++ if (!pages)
++ return -ENOMEM;
++
++ /* Map the pages */
++ pages_dma = dma_map_page(pdata->dev, pages, 0,
++ PAGE_SIZE << order, DMA_FROM_DEVICE);
++ ret = dma_mapping_error(pdata->dev, pages_dma);
++ if (ret) {
++ put_page(pages);
++ return ret;
++ }
++
++ pa->pages = pages;
++ pa->pages_len = PAGE_SIZE << order;
++ pa->pages_offset = 0;
++ pa->pages_dma = pages_dma;
++
++ return 0;
++}
++
++static void xgbe_set_buffer_data(struct xgbe_buffer_data *bd,
++ struct xgbe_page_alloc *pa,
++ unsigned int len)
++{
++ get_page(pa->pages);
++ bd->pa = *pa;
++
++ bd->dma = pa->pages_dma + pa->pages_offset;
++ bd->dma_len = len;
++
++ pa->pages_offset += len;
++ if ((pa->pages_offset + len) > pa->pages_len) {
++ /* This data descriptor is responsible for unmapping page(s) */
++ bd->pa_unmap = *pa;
++
++ /* Get a new allocation next time */
++ pa->pages = NULL;
++ pa->pages_len = 0;
++ pa->pages_offset = 0;
++ pa->pages_dma = 0;
++ }
++}
++
++static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata,
++ struct xgbe_ring *ring,
++ struct xgbe_ring_data *rdata)
++{
++ int order, ret;
++
++ if (!ring->rx_hdr_pa.pages) {
++ ret = xgbe_alloc_pages(pdata, &ring->rx_hdr_pa, GFP_ATOMIC, 0);
++ if (ret)
++ return ret;
++ }
++
++ if (!ring->rx_buf_pa.pages) {
++ order = max_t(int, PAGE_ALLOC_COSTLY_ORDER - 1, 0);
++ ret = xgbe_alloc_pages(pdata, &ring->rx_buf_pa, GFP_ATOMIC,
++ order);
++ if (ret)
++ return ret;
++ }
++
++ /* Set up the header page info */
++ xgbe_set_buffer_data(&rdata->rx.hdr, &ring->rx_hdr_pa,
++ XGBE_SKB_ALLOC_SIZE);
++
++ /* Set up the buffer page info */
++ xgbe_set_buffer_data(&rdata->rx.buf, &ring->rx_buf_pa,
++ pdata->rx_buf_size);
++
++ return 0;
++}
++
++static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_channel *channel;
++ struct xgbe_ring *ring;
++ struct xgbe_ring_data *rdata;
++ struct xgbe_ring_desc *rdesc;
++ dma_addr_t rdesc_dma;
++ unsigned int i, j;
++
++ DBGPR("-->xgbe_wrapper_tx_descriptor_init\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ ring = channel->tx_ring;
++ if (!ring)
++ break;
++
++ rdesc = ring->rdesc;
++ rdesc_dma = ring->rdesc_dma;
++
++ for (j = 0; j < ring->rdesc_count; j++) {
++ rdata = XGBE_GET_DESC_DATA(ring, j);
++
++ rdata->rdesc = rdesc;
++ rdata->rdesc_dma = rdesc_dma;
++
++ rdesc++;
++ rdesc_dma += sizeof(struct xgbe_ring_desc);
++ }
++
++ ring->cur = 0;
++ ring->dirty = 0;
++ memset(&ring->tx, 0, sizeof(ring->tx));
++
++ hw_if->tx_desc_init(channel);
++ }
++
++ DBGPR("<--xgbe_wrapper_tx_descriptor_init\n");
++}
++
++static void xgbe_wrapper_rx_descriptor_init(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_channel *channel;
++ struct xgbe_ring *ring;
++ struct xgbe_ring_desc *rdesc;
++ struct xgbe_ring_data *rdata;
++ dma_addr_t rdesc_dma;
++ unsigned int i, j;
++
++ DBGPR("-->xgbe_wrapper_rx_descriptor_init\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ ring = channel->rx_ring;
++ if (!ring)
++ break;
++
++ rdesc = ring->rdesc;
++ rdesc_dma = ring->rdesc_dma;
++
++ for (j = 0; j < ring->rdesc_count; j++) {
++ rdata = XGBE_GET_DESC_DATA(ring, j);
++
++ rdata->rdesc = rdesc;
++ rdata->rdesc_dma = rdesc_dma;
++
++ if (xgbe_map_rx_buffer(pdata, ring, rdata))
++ break;
++
++ rdesc++;
++ rdesc_dma += sizeof(struct xgbe_ring_desc);
++ }
++
++ ring->cur = 0;
++ ring->dirty = 0;
++
++ hw_if->rx_desc_init(channel);
++ }
++
++ DBGPR("<--xgbe_wrapper_rx_descriptor_init\n");
++}
++
++static void xgbe_unmap_rdata(struct xgbe_prv_data *pdata,
++ struct xgbe_ring_data *rdata)
++{
++ if (rdata->skb_dma) {
++ if (rdata->mapped_as_page) {
++ dma_unmap_page(pdata->dev, rdata->skb_dma,
++ rdata->skb_dma_len, DMA_TO_DEVICE);
++ } else {
++ dma_unmap_single(pdata->dev, rdata->skb_dma,
++ rdata->skb_dma_len, DMA_TO_DEVICE);
++ }
++ rdata->skb_dma = 0;
++ rdata->skb_dma_len = 0;
++ }
++
++ if (rdata->skb) {
++ dev_kfree_skb_any(rdata->skb);
++ rdata->skb = NULL;
++ }
++
++ if (rdata->rx.hdr.pa.pages)
++ put_page(rdata->rx.hdr.pa.pages);
++
++ if (rdata->rx.hdr.pa_unmap.pages) {
++ dma_unmap_page(pdata->dev, rdata->rx.hdr.pa_unmap.pages_dma,
++ rdata->rx.hdr.pa_unmap.pages_len,
++ DMA_FROM_DEVICE);
++ put_page(rdata->rx.hdr.pa_unmap.pages);
++ }
++
++ if (rdata->rx.buf.pa.pages)
++ put_page(rdata->rx.buf.pa.pages);
++
++ if (rdata->rx.buf.pa_unmap.pages) {
++ dma_unmap_page(pdata->dev, rdata->rx.buf.pa_unmap.pages_dma,
++ rdata->rx.buf.pa_unmap.pages_len,
++ DMA_FROM_DEVICE);
++ put_page(rdata->rx.buf.pa_unmap.pages);
++ }
++
++ memset(&rdata->tx, 0, sizeof(rdata->tx));
++ memset(&rdata->rx, 0, sizeof(rdata->rx));
++
++ rdata->mapped_as_page = 0;
++
++ if (rdata->state_saved) {
++ rdata->state_saved = 0;
++ rdata->state.incomplete = 0;
++ rdata->state.context_next = 0;
++ rdata->state.skb = NULL;
++ rdata->state.len = 0;
++ rdata->state.error = 0;
++ }
++}
++
++static int xgbe_map_tx_skb(struct xgbe_channel *channel, struct sk_buff *skb)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_ring *ring = channel->tx_ring;
++ struct xgbe_ring_data *rdata;
++ struct xgbe_packet_data *packet;
++ struct skb_frag_struct *frag;
++ dma_addr_t skb_dma;
++ unsigned int start_index, cur_index;
++ unsigned int offset, tso, vlan, datalen, len;
++ unsigned int i;
++
++ DBGPR("-->xgbe_map_tx_skb: cur = %d\n", ring->cur);
++
++ offset = 0;
++ start_index = ring->cur;
++ cur_index = ring->cur;
++
++ packet = &ring->packet_data;
++ packet->rdesc_count = 0;
++ packet->length = 0;
++
++ tso = XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ TSO_ENABLE);
++ vlan = XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ VLAN_CTAG);
++
++ /* Save space for a context descriptor if needed */
++ if ((tso && (packet->mss != ring->tx.cur_mss)) ||
++ (vlan && (packet->vlan_ctag != ring->tx.cur_vlan_ctag)))
++ cur_index++;
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++
++ if (tso) {
++ DBGPR(" TSO packet\n");
++
++ /* Map the TSO header */
++ skb_dma = dma_map_single(pdata->dev, skb->data,
++ packet->header_len, DMA_TO_DEVICE);
++ if (dma_mapping_error(pdata->dev, skb_dma)) {
++ netdev_alert(pdata->netdev, "dma_map_single failed\n");
++ goto err_out;
++ }
++ rdata->skb_dma = skb_dma;
++ rdata->skb_dma_len = packet->header_len;
++
++ offset = packet->header_len;
++
++ packet->length += packet->header_len;
++
++ cur_index++;
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++ }
++
++ /* Map the (remainder of the) packet */
++ for (datalen = skb_headlen(skb) - offset; datalen; ) {
++ len = min_t(unsigned int, datalen, XGBE_TX_MAX_BUF_SIZE);
++
++ skb_dma = dma_map_single(pdata->dev, skb->data + offset, len,
++ DMA_TO_DEVICE);
++ if (dma_mapping_error(pdata->dev, skb_dma)) {
++ netdev_alert(pdata->netdev, "dma_map_single failed\n");
++ goto err_out;
++ }
++ rdata->skb_dma = skb_dma;
++ rdata->skb_dma_len = len;
++ DBGPR(" skb data: index=%u, dma=0x%llx, len=%u\n",
++ cur_index, skb_dma, len);
++
++ datalen -= len;
++ offset += len;
++
++ packet->length += len;
++
++ cur_index++;
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++ }
++
++ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
++ DBGPR(" mapping frag %u\n", i);
++
++ frag = &skb_shinfo(skb)->frags[i];
++ offset = 0;
++
++ for (datalen = skb_frag_size(frag); datalen; ) {
++ len = min_t(unsigned int, datalen,
++ XGBE_TX_MAX_BUF_SIZE);
++
++ skb_dma = skb_frag_dma_map(pdata->dev, frag, offset,
++ len, DMA_TO_DEVICE);
++ if (dma_mapping_error(pdata->dev, skb_dma)) {
++ netdev_alert(pdata->netdev,
++ "skb_frag_dma_map failed\n");
++ goto err_out;
++ }
++ rdata->skb_dma = skb_dma;
++ rdata->skb_dma_len = len;
++ rdata->mapped_as_page = 1;
++ DBGPR(" skb data: index=%u, dma=0x%llx, len=%u\n",
++ cur_index, skb_dma, len);
++
++ datalen -= len;
++ offset += len;
++
++ packet->length += len;
++
++ cur_index++;
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++ }
++ }
++
++ /* Save the skb address in the last entry. We always have some data
++ * that has been mapped so rdata is always advanced past the last
++ * piece of mapped data - use the entry pointed to by cur_index - 1.
++ */
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index - 1);
++ rdata->skb = skb;
++
++ /* Save the number of descriptor entries used */
++ packet->rdesc_count = cur_index - start_index;
++
++ DBGPR("<--xgbe_map_tx_skb: count=%u\n", packet->rdesc_count);
++
++ return packet->rdesc_count;
++
++err_out:
++ while (start_index < cur_index) {
++ rdata = XGBE_GET_DESC_DATA(ring, start_index++);
++ xgbe_unmap_rdata(pdata, rdata);
++ }
++
++ DBGPR("<--xgbe_map_tx_skb: count=0\n");
++
++ return 0;
++}
++
++void xgbe_a0_init_function_ptrs_desc(struct xgbe_desc_if *desc_if)
++{
++ DBGPR("-->xgbe_a0_init_function_ptrs_desc\n");
++
++ desc_if->alloc_ring_resources = xgbe_alloc_ring_resources;
++ desc_if->free_ring_resources = xgbe_free_ring_resources;
++ desc_if->map_tx_skb = xgbe_map_tx_skb;
++ desc_if->map_rx_buffer = xgbe_map_rx_buffer;
++ desc_if->unmap_rdata = xgbe_unmap_rdata;
++ desc_if->wrapper_tx_desc_init = xgbe_wrapper_tx_descriptor_init;
++ desc_if->wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init;
++
++ DBGPR("<--xgbe_a0_init_function_ptrs_desc\n");
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c
+new file mode 100644
+index 000000000000..2d88739de41c
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-dev.c
+@@ -0,0 +1,2930 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/phy.h>
++#include <linux/mdio.h>
++#include <linux/clk.h>
++#include <linux/bitrev.h>
++#include <linux/crc32.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static unsigned int xgbe_usec_to_riwt(struct xgbe_prv_data *pdata,
++ unsigned int usec)
++{
++ unsigned long rate;
++ unsigned int ret;
++
++ DBGPR("-->xgbe_usec_to_riwt\n");
++
++ rate = pdata->sysclk_rate;
++
++ /*
++ * Convert the input usec value to the watchdog timer value. Each
++ * watchdog timer value is equivalent to 256 clock cycles.
++ * Calculate the required value as:
++ * ( usec * ( system_clock_mhz / 10^6 ) / 256
++ */
++ ret = (usec * (rate / 1000000)) / 256;
++
++ DBGPR("<--xgbe_usec_to_riwt\n");
++
++ return ret;
++}
++
++static unsigned int xgbe_riwt_to_usec(struct xgbe_prv_data *pdata,
++ unsigned int riwt)
++{
++ unsigned long rate;
++ unsigned int ret;
++
++ DBGPR("-->xgbe_riwt_to_usec\n");
++
++ rate = pdata->sysclk_rate;
++
++ /*
++ * Convert the input watchdog timer value to the usec value. Each
++ * watchdog timer value is equivalent to 256 clock cycles.
++ * Calculate the required value as:
++ * ( riwt * 256 ) / ( system_clock_mhz / 10^6 )
++ */
++ ret = (riwt * 256) / (rate / 1000000);
++
++ DBGPR("<--xgbe_riwt_to_usec\n");
++
++ return ret;
++}
++
++static int xgbe_config_pblx8(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++)
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_CR, PBLX8,
++ pdata->pblx8);
++
++ return 0;
++}
++
++static int xgbe_get_tx_pbl_val(struct xgbe_prv_data *pdata)
++{
++ return XGMAC_DMA_IOREAD_BITS(pdata->channel, DMA_CH_TCR, PBL);
++}
++
++static int xgbe_config_tx_pbl_val(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, PBL,
++ pdata->tx_pbl);
++ }
++
++ return 0;
++}
++
++static int xgbe_get_rx_pbl_val(struct xgbe_prv_data *pdata)
++{
++ return XGMAC_DMA_IOREAD_BITS(pdata->channel, DMA_CH_RCR, PBL);
++}
++
++static int xgbe_config_rx_pbl_val(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, PBL,
++ pdata->rx_pbl);
++ }
++
++ return 0;
++}
++
++static int xgbe_config_osp_mode(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, OSP,
++ pdata->tx_osp_mode);
++ }
++
++ return 0;
++}
++
++static int xgbe_config_rsf_mode(struct xgbe_prv_data *pdata, unsigned int val)
++{
++ unsigned int i;
++
++ for (i = 0; i < pdata->rx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RSF, val);
++
++ return 0;
++}
++
++static int xgbe_config_tsf_mode(struct xgbe_prv_data *pdata, unsigned int val)
++{
++ unsigned int i;
++
++ for (i = 0; i < pdata->tx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TSF, val);
++
++ return 0;
++}
++
++static int xgbe_config_rx_threshold(struct xgbe_prv_data *pdata,
++ unsigned int val)
++{
++ unsigned int i;
++
++ for (i = 0; i < pdata->rx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RTC, val);
++
++ return 0;
++}
++
++static int xgbe_config_tx_threshold(struct xgbe_prv_data *pdata,
++ unsigned int val)
++{
++ unsigned int i;
++
++ for (i = 0; i < pdata->tx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TTC, val);
++
++ return 0;
++}
++
++static int xgbe_config_rx_coalesce(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RIWT, RWT,
++ pdata->rx_riwt);
++ }
++
++ return 0;
++}
++
++static int xgbe_config_tx_coalesce(struct xgbe_prv_data *pdata)
++{
++ return 0;
++}
++
++static void xgbe_config_rx_buffer_size(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, RBSZ,
++ pdata->rx_buf_size);
++ }
++}
++
++static void xgbe_config_tso_mode(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, TSE, 1);
++ }
++}
++
++static void xgbe_config_sph_mode(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_CR, SPH, 1);
++ }
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, HDSMS, XGBE_SPH_HDSMS_SIZE);
++}
++
++static int xgbe_write_rss_reg(struct xgbe_prv_data *pdata, unsigned int type,
++ unsigned int index, unsigned int val)
++{
++ unsigned int wait;
++ int ret = 0;
++
++ mutex_lock(&pdata->rss_mutex);
++
++ if (XGMAC_IOREAD_BITS(pdata, MAC_RSSAR, OB)) {
++ ret = -EBUSY;
++ goto unlock;
++ }
++
++ XGMAC_IOWRITE(pdata, MAC_RSSDR, val);
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, RSSIA, index);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, ADDRT, type);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, CT, 0);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RSSAR, OB, 1);
++
++ wait = 1000;
++ while (wait--) {
++ if (!XGMAC_IOREAD_BITS(pdata, MAC_RSSAR, OB))
++ goto unlock;
++
++ usleep_range(1000, 1500);
++ }
++
++ ret = -EBUSY;
++
++unlock:
++ mutex_unlock(&pdata->rss_mutex);
++
++ return ret;
++}
++
++static int xgbe_write_rss_hash_key(struct xgbe_prv_data *pdata)
++{
++ unsigned int key_regs = sizeof(pdata->rss_key) / sizeof(u32);
++ unsigned int *key = (unsigned int *)&pdata->rss_key;
++ int ret;
++
++ while (key_regs--) {
++ ret = xgbe_write_rss_reg(pdata, XGBE_RSS_HASH_KEY_TYPE,
++ key_regs, *key++);
++ if (ret)
++ return ret;
++ }
++
++ return 0;
++}
++
++static int xgbe_write_rss_lookup_table(struct xgbe_prv_data *pdata)
++{
++ unsigned int i;
++ int ret;
++
++ for (i = 0; i < ARRAY_SIZE(pdata->rss_table); i++) {
++ ret = xgbe_write_rss_reg(pdata,
++ XGBE_RSS_LOOKUP_TABLE_TYPE, i,
++ pdata->rss_table[i]);
++ if (ret)
++ return ret;
++ }
++
++ return 0;
++}
++
++static int xgbe_set_rss_hash_key(struct xgbe_prv_data *pdata, const u8 *key)
++{
++ memcpy(pdata->rss_key, key, sizeof(pdata->rss_key));
++
++ return xgbe_write_rss_hash_key(pdata);
++}
++
++static int xgbe_set_rss_lookup_table(struct xgbe_prv_data *pdata,
++ const u32 *table)
++{
++ unsigned int i;
++
++ for (i = 0; i < ARRAY_SIZE(pdata->rss_table); i++)
++ XGMAC_SET_BITS(pdata->rss_table[i], MAC_RSSDR, DMCH, table[i]);
++
++ return xgbe_write_rss_lookup_table(pdata);
++}
++
++static int xgbe_enable_rss(struct xgbe_prv_data *pdata)
++{
++ int ret;
++
++ if (!pdata->hw_feat.rss)
++ return -EOPNOTSUPP;
++
++ /* Program the hash key */
++ ret = xgbe_write_rss_hash_key(pdata);
++ if (ret)
++ return ret;
++
++ /* Program the lookup table */
++ ret = xgbe_write_rss_lookup_table(pdata);
++ if (ret)
++ return ret;
++
++ /* Set the RSS options */
++ XGMAC_IOWRITE(pdata, MAC_RSSCR, pdata->rss_options);
++
++ /* Enable RSS */
++ XGMAC_IOWRITE_BITS(pdata, MAC_RSSCR, RSSE, 1);
++
++ return 0;
++}
++
++static int xgbe_disable_rss(struct xgbe_prv_data *pdata)
++{
++ if (!pdata->hw_feat.rss)
++ return -EOPNOTSUPP;
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_RSSCR, RSSE, 0);
++
++ return 0;
++}
++
++static void xgbe_config_rss(struct xgbe_prv_data *pdata)
++{
++ int ret;
++
++ if (!pdata->hw_feat.rss)
++ return;
++
++ if (pdata->netdev->features & NETIF_F_RXHASH)
++ ret = xgbe_enable_rss(pdata);
++ else
++ ret = xgbe_disable_rss(pdata);
++
++ if (ret)
++ netdev_err(pdata->netdev,
++ "error configuring RSS, RSS disabled\n");
++}
++
++static int xgbe_disable_tx_flow_control(struct xgbe_prv_data *pdata)
++{
++ unsigned int max_q_count, q_count;
++ unsigned int reg, reg_val;
++ unsigned int i;
++
++ /* Clear MTL flow control */
++ for (i = 0; i < pdata->rx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, EHFC, 0);
++
++ /* Clear MAC flow control */
++ max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
++ q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
++ reg = MAC_Q0TFCR;
++ for (i = 0; i < q_count; i++) {
++ reg_val = XGMAC_IOREAD(pdata, reg);
++ XGMAC_SET_BITS(reg_val, MAC_Q0TFCR, TFE, 0);
++ XGMAC_IOWRITE(pdata, reg, reg_val);
++
++ reg += MAC_QTFCR_INC;
++ }
++
++ return 0;
++}
++
++static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata)
++{
++ unsigned int max_q_count, q_count;
++ unsigned int reg, reg_val;
++ unsigned int i;
++
++ /* Set MTL flow control */
++ for (i = 0; i < pdata->rx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, EHFC, 1);
++
++ /* Set MAC flow control */
++ max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
++ q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
++ reg = MAC_Q0TFCR;
++ for (i = 0; i < q_count; i++) {
++ reg_val = XGMAC_IOREAD(pdata, reg);
++
++ /* Enable transmit flow control */
++ XGMAC_SET_BITS(reg_val, MAC_Q0TFCR, TFE, 1);
++ /* Set pause time */
++ XGMAC_SET_BITS(reg_val, MAC_Q0TFCR, PT, 0xffff);
++
++ XGMAC_IOWRITE(pdata, reg, reg_val);
++
++ reg += MAC_QTFCR_INC;
++ }
++
++ return 0;
++}
++
++static int xgbe_disable_rx_flow_control(struct xgbe_prv_data *pdata)
++{
++ XGMAC_IOWRITE_BITS(pdata, MAC_RFCR, RFE, 0);
++
++ return 0;
++}
++
++static int xgbe_enable_rx_flow_control(struct xgbe_prv_data *pdata)
++{
++ XGMAC_IOWRITE_BITS(pdata, MAC_RFCR, RFE, 1);
++
++ return 0;
++}
++
++static int xgbe_config_tx_flow_control(struct xgbe_prv_data *pdata)
++{
++ struct ieee_pfc *pfc = pdata->pfc;
++
++ if (pdata->tx_pause || (pfc && pfc->pfc_en))
++ xgbe_enable_tx_flow_control(pdata);
++ else
++ xgbe_disable_tx_flow_control(pdata);
++
++ return 0;
++}
++
++static int xgbe_config_rx_flow_control(struct xgbe_prv_data *pdata)
++{
++ struct ieee_pfc *pfc = pdata->pfc;
++
++ if (pdata->rx_pause || (pfc && pfc->pfc_en))
++ xgbe_enable_rx_flow_control(pdata);
++ else
++ xgbe_disable_rx_flow_control(pdata);
++
++ return 0;
++}
++
++static void xgbe_config_flow_control(struct xgbe_prv_data *pdata)
++{
++ struct ieee_pfc *pfc = pdata->pfc;
++
++ xgbe_config_tx_flow_control(pdata);
++ xgbe_config_rx_flow_control(pdata);
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_RFCR, PFCE,
++ (pfc && pfc->pfc_en) ? 1 : 0);
++}
++
++static void xgbe_enable_dma_interrupts(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int dma_ch_isr, dma_ch_ier;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ /* Clear all the interrupts which are set */
++ dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR);
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_ch_isr);
++
++ /* Clear all interrupt enable bits */
++ dma_ch_ier = 0;
++
++ /* Enable following interrupts
++ * NIE - Normal Interrupt Summary Enable
++ * AIE - Abnormal Interrupt Summary Enable
++ * FBEE - Fatal Bus Error Enable
++ */
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, NIE, 1);
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, AIE, 1);
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, FBEE, 1);
++
++ if (channel->tx_ring) {
++ /* Enable the following Tx interrupts
++ * TIE - Transmit Interrupt Enable (unless using
++ * per channel interrupts)
++ */
++ if (!pdata->per_channel_irq)
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 1);
++ }
++ if (channel->rx_ring) {
++ /* Enable following Rx interrupts
++ * RBUE - Receive Buffer Unavailable Enable
++ * RIE - Receive Interrupt Enable (unless using
++ * per channel interrupts)
++ */
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RBUE, 1);
++ if (!pdata->per_channel_irq)
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 1);
++ }
++
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, dma_ch_ier);
++ }
++}
++
++static void xgbe_enable_mtl_interrupts(struct xgbe_prv_data *pdata)
++{
++ unsigned int mtl_q_isr;
++ unsigned int q_count, i;
++
++ q_count = max(pdata->hw_feat.tx_q_cnt, pdata->hw_feat.rx_q_cnt);
++ for (i = 0; i < q_count; i++) {
++ /* Clear all the interrupts which are set */
++ mtl_q_isr = XGMAC_MTL_IOREAD(pdata, i, MTL_Q_ISR);
++ XGMAC_MTL_IOWRITE(pdata, i, MTL_Q_ISR, mtl_q_isr);
++
++ /* No MTL interrupts to be enabled */
++ XGMAC_MTL_IOWRITE(pdata, i, MTL_Q_IER, 0);
++ }
++}
++
++static void xgbe_enable_mac_interrupts(struct xgbe_prv_data *pdata)
++{
++ unsigned int mac_ier = 0;
++
++ /* Enable Timestamp interrupt */
++ XGMAC_SET_BITS(mac_ier, MAC_IER, TSIE, 1);
++
++ XGMAC_IOWRITE(pdata, MAC_IER, mac_ier);
++
++ /* Enable all counter interrupts */
++ XGMAC_IOWRITE_BITS(pdata, MMC_RIER, ALL_INTERRUPTS, 0xffffffff);
++ XGMAC_IOWRITE_BITS(pdata, MMC_TIER, ALL_INTERRUPTS, 0xffffffff);
++}
++
++static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata)
++{
++ if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0x3)
++ return 0;
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0x3);
++
++ return 0;
++}
++
++static int xgbe_set_gmii_2500_speed(struct xgbe_prv_data *pdata)
++{
++ if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0x2)
++ return 0;
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0x2);
++
++ return 0;
++}
++
++static int xgbe_set_xgmii_speed(struct xgbe_prv_data *pdata)
++{
++ if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0)
++ return 0;
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0);
++
++ return 0;
++}
++
++static int xgbe_set_promiscuous_mode(struct xgbe_prv_data *pdata,
++ unsigned int enable)
++{
++ unsigned int val = enable ? 1 : 0;
++
++ if (XGMAC_IOREAD_BITS(pdata, MAC_PFR, PR) == val)
++ return 0;
++
++ DBGPR(" %s promiscuous mode\n", enable ? "entering" : "leaving");
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, PR, val);
++
++ return 0;
++}
++
++static int xgbe_set_all_multicast_mode(struct xgbe_prv_data *pdata,
++ unsigned int enable)
++{
++ unsigned int val = enable ? 1 : 0;
++
++ if (XGMAC_IOREAD_BITS(pdata, MAC_PFR, PM) == val)
++ return 0;
++
++ DBGPR(" %s allmulti mode\n", enable ? "entering" : "leaving");
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, PM, val);
++
++ return 0;
++}
++
++static void xgbe_set_mac_reg(struct xgbe_prv_data *pdata,
++ struct netdev_hw_addr *ha, unsigned int *mac_reg)
++{
++ unsigned int mac_addr_hi, mac_addr_lo;
++ u8 *mac_addr;
++
++ mac_addr_lo = 0;
++ mac_addr_hi = 0;
++
++ if (ha) {
++ mac_addr = (u8 *)&mac_addr_lo;
++ mac_addr[0] = ha->addr[0];
++ mac_addr[1] = ha->addr[1];
++ mac_addr[2] = ha->addr[2];
++ mac_addr[3] = ha->addr[3];
++ mac_addr = (u8 *)&mac_addr_hi;
++ mac_addr[0] = ha->addr[4];
++ mac_addr[1] = ha->addr[5];
++
++ DBGPR(" adding mac address %pM at 0x%04x\n", ha->addr,
++ *mac_reg);
++
++ XGMAC_SET_BITS(mac_addr_hi, MAC_MACA1HR, AE, 1);
++ }
++
++ XGMAC_IOWRITE(pdata, *mac_reg, mac_addr_hi);
++ *mac_reg += MAC_MACA_INC;
++ XGMAC_IOWRITE(pdata, *mac_reg, mac_addr_lo);
++ *mac_reg += MAC_MACA_INC;
++}
++
++static void xgbe_set_mac_addn_addrs(struct xgbe_prv_data *pdata)
++{
++ struct net_device *netdev = pdata->netdev;
++ struct netdev_hw_addr *ha;
++ unsigned int mac_reg;
++ unsigned int addn_macs;
++
++ mac_reg = MAC_MACA1HR;
++ addn_macs = pdata->hw_feat.addn_mac;
++
++ if (netdev_uc_count(netdev) > addn_macs) {
++ xgbe_set_promiscuous_mode(pdata, 1);
++ } else {
++ netdev_for_each_uc_addr(ha, netdev) {
++ xgbe_set_mac_reg(pdata, ha, &mac_reg);
++ addn_macs--;
++ }
++
++ if (netdev_mc_count(netdev) > addn_macs) {
++ xgbe_set_all_multicast_mode(pdata, 1);
++ } else {
++ netdev_for_each_mc_addr(ha, netdev) {
++ xgbe_set_mac_reg(pdata, ha, &mac_reg);
++ addn_macs--;
++ }
++ }
++ }
++
++ /* Clear remaining additional MAC address entries */
++ while (addn_macs--)
++ xgbe_set_mac_reg(pdata, NULL, &mac_reg);
++}
++
++static void xgbe_set_mac_hash_table(struct xgbe_prv_data *pdata)
++{
++ struct net_device *netdev = pdata->netdev;
++ struct netdev_hw_addr *ha;
++ unsigned int hash_reg;
++ unsigned int hash_table_shift, hash_table_count;
++ u32 hash_table[XGBE_MAC_HASH_TABLE_SIZE];
++ u32 crc;
++ unsigned int i;
++
++ hash_table_shift = 26 - (pdata->hw_feat.hash_table_size >> 7);
++ hash_table_count = pdata->hw_feat.hash_table_size / 32;
++ memset(hash_table, 0, sizeof(hash_table));
++
++ /* Build the MAC Hash Table register values */
++ netdev_for_each_uc_addr(ha, netdev) {
++ crc = bitrev32(~crc32_le(~0, ha->addr, ETH_ALEN));
++ crc >>= hash_table_shift;
++ hash_table[crc >> 5] |= (1 << (crc & 0x1f));
++ }
++
++ netdev_for_each_mc_addr(ha, netdev) {
++ crc = bitrev32(~crc32_le(~0, ha->addr, ETH_ALEN));
++ crc >>= hash_table_shift;
++ hash_table[crc >> 5] |= (1 << (crc & 0x1f));
++ }
++
++ /* Set the MAC Hash Table registers */
++ hash_reg = MAC_HTR0;
++ for (i = 0; i < hash_table_count; i++) {
++ XGMAC_IOWRITE(pdata, hash_reg, hash_table[i]);
++ hash_reg += MAC_HTR_INC;
++ }
++}
++
++static int xgbe_add_mac_addresses(struct xgbe_prv_data *pdata)
++{
++ if (pdata->hw_feat.hash_table_size)
++ xgbe_set_mac_hash_table(pdata);
++ else
++ xgbe_set_mac_addn_addrs(pdata);
++
++ return 0;
++}
++
++static int xgbe_set_mac_address(struct xgbe_prv_data *pdata, u8 *addr)
++{
++ unsigned int mac_addr_hi, mac_addr_lo;
++
++ mac_addr_hi = (addr[5] << 8) | (addr[4] << 0);
++ mac_addr_lo = (addr[3] << 24) | (addr[2] << 16) |
++ (addr[1] << 8) | (addr[0] << 0);
++
++ XGMAC_IOWRITE(pdata, MAC_MACA0HR, mac_addr_hi);
++ XGMAC_IOWRITE(pdata, MAC_MACA0LR, mac_addr_lo);
++
++ return 0;
++}
++
++static int xgbe_read_mmd_regs(struct xgbe_prv_data *pdata, int prtad,
++ int mmd_reg)
++{
++ unsigned int mmd_address;
++ int mmd_data;
++
++ if (mmd_reg & MII_ADDR_C45)
++ mmd_address = mmd_reg & ~MII_ADDR_C45;
++ else
++ mmd_address = (pdata->mdio_mmd << 16) | (mmd_reg & 0xffff);
++
++ /* The PCS implementation has reversed the devices in
++ * package registers so we need to change 05 to 06 and
++ * 06 to 05 if being read (these registers are readonly
++ * so no need to do this in the write function)
++ */
++ if ((mmd_address & 0xffff) == 0x05)
++ mmd_address = (mmd_address & ~0xffff) | 0x06;
++ else if ((mmd_address & 0xffff) == 0x06)
++ mmd_address = (mmd_address & ~0xffff) | 0x05;
++
++ /* The PCS registers are accessed using mmio. The underlying APB3
++ * management interface uses indirect addressing to access the MMD
++ * register sets. This requires accessing of the PCS register in two
++ * phases, an address phase and a data phase.
++ *
++ * The mmio interface is based on 32-bit offsets and values. All
++ * register offsets must therefore be adjusted by left shifting the
++ * offset 2 bits and reading 32 bits of data.
++ */
++ mutex_lock(&pdata->xpcs_mutex);
++ XPCS_IOWRITE(pdata, PCS_MMD_SELECT << 2, mmd_address >> 8);
++ mmd_data = XPCS_IOREAD(pdata, (mmd_address & 0xff) << 2);
++ mutex_unlock(&pdata->xpcs_mutex);
++
++ return mmd_data;
++}
++
++static void xgbe_write_mmd_regs(struct xgbe_prv_data *pdata, int prtad,
++ int mmd_reg, int mmd_data)
++{
++ unsigned int mmd_address;
++
++ if (mmd_reg & MII_ADDR_C45)
++ mmd_address = mmd_reg & ~MII_ADDR_C45;
++ else
++ mmd_address = (pdata->mdio_mmd << 16) | (mmd_reg & 0xffff);
++
++ /* If the PCS is changing modes, match the MAC speed to it */
++ if (((mmd_address >> 16) == MDIO_MMD_PCS) &&
++ ((mmd_address & 0xffff) == MDIO_CTRL2)) {
++ struct phy_device *phydev = pdata->phydev;
++
++ if (mmd_data & MDIO_PCS_CTRL2_TYPE) {
++ /* KX mode */
++ if (phydev->supported & SUPPORTED_1000baseKX_Full)
++ xgbe_set_gmii_speed(pdata);
++ else
++ xgbe_set_gmii_2500_speed(pdata);
++ } else {
++ /* KR mode */
++ xgbe_set_xgmii_speed(pdata);
++ }
++ }
++
++ /* The PCS registers are accessed using mmio. The underlying APB3
++ * management interface uses indirect addressing to access the MMD
++ * register sets. This requires accessing of the PCS register in two
++ * phases, an address phase and a data phase.
++ *
++ * The mmio interface is based on 32-bit offsets and values. All
++ * register offsets must therefore be adjusted by left shifting the
++ * offset 2 bits and reading 32 bits of data.
++ */
++ mutex_lock(&pdata->xpcs_mutex);
++ XPCS_IOWRITE(pdata, PCS_MMD_SELECT << 2, mmd_address >> 8);
++ XPCS_IOWRITE(pdata, (mmd_address & 0xff) << 2, mmd_data);
++ mutex_unlock(&pdata->xpcs_mutex);
++}
++
++static int xgbe_tx_complete(struct xgbe_ring_desc *rdesc)
++{
++ return !XGMAC_GET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, OWN);
++}
++
++static int xgbe_disable_rx_csum(struct xgbe_prv_data *pdata)
++{
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, IPC, 0);
++
++ return 0;
++}
++
++static int xgbe_enable_rx_csum(struct xgbe_prv_data *pdata)
++{
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, IPC, 1);
++
++ return 0;
++}
++
++static int xgbe_enable_rx_vlan_stripping(struct xgbe_prv_data *pdata)
++{
++ /* Put the VLAN tag in the Rx descriptor */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, EVLRXS, 1);
++
++ /* Don't check the VLAN type */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, DOVLTC, 1);
++
++ /* Check only C-TAG (0x8100) packets */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, ERSVLM, 0);
++
++ /* Don't consider an S-TAG (0x88A8) packet as a VLAN packet */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, ESVL, 0);
++
++ /* Enable VLAN tag stripping */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, EVLS, 0x3);
++
++ return 0;
++}
++
++static int xgbe_disable_rx_vlan_stripping(struct xgbe_prv_data *pdata)
++{
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, EVLS, 0);
++
++ return 0;
++}
++
++static int xgbe_enable_rx_vlan_filtering(struct xgbe_prv_data *pdata)
++{
++ /* Enable VLAN filtering */
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, VTFE, 1);
++
++ /* Enable VLAN Hash Table filtering */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, VTHM, 1);
++
++ /* Disable VLAN tag inverse matching */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, VTIM, 0);
++
++ /* Only filter on the lower 12-bits of the VLAN tag */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, ETV, 1);
++
++ /* In order for the VLAN Hash Table filtering to be effective,
++ * the VLAN tag identifier in the VLAN Tag Register must not
++ * be zero. Set the VLAN tag identifier to "1" to enable the
++ * VLAN Hash Table filtering. This implies that a VLAN tag of
++ * 1 will always pass filtering.
++ */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANTR, VL, 1);
++
++ return 0;
++}
++
++static int xgbe_disable_rx_vlan_filtering(struct xgbe_prv_data *pdata)
++{
++ /* Disable VLAN filtering */
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, VTFE, 0);
++
++ return 0;
++}
++
++#ifndef CRCPOLY_LE
++#define CRCPOLY_LE 0xedb88320
++#endif
++static u32 xgbe_vid_crc32_le(__le16 vid_le)
++{
++ u32 poly = CRCPOLY_LE;
++ u32 crc = ~0;
++ u32 temp = 0;
++ unsigned char *data = (unsigned char *)&vid_le;
++ unsigned char data_byte = 0;
++ int i, bits;
++
++ bits = get_bitmask_order(VLAN_VID_MASK);
++ for (i = 0; i < bits; i++) {
++ if ((i % 8) == 0)
++ data_byte = data[i / 8];
++
++ temp = ((crc & 1) ^ data_byte) & 1;
++ crc >>= 1;
++ data_byte >>= 1;
++
++ if (temp)
++ crc ^= poly;
++ }
++
++ return crc;
++}
++
++static int xgbe_update_vlan_hash_table(struct xgbe_prv_data *pdata)
++{
++ u32 crc;
++ u16 vid;
++ __le16 vid_le;
++ u16 vlan_hash_table = 0;
++
++ /* Generate the VLAN Hash Table value */
++ for_each_set_bit(vid, pdata->active_vlans, VLAN_N_VID) {
++ /* Get the CRC32 value of the VLAN ID */
++ vid_le = cpu_to_le16(vid);
++ crc = bitrev32(~xgbe_vid_crc32_le(vid_le)) >> 28;
++
++ vlan_hash_table |= (1 << crc);
++ }
++
++ /* Set the VLAN Hash Table filtering register */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANHTR, VLHT, vlan_hash_table);
++
++ return 0;
++}
++
++static void xgbe_tx_desc_reset(struct xgbe_ring_data *rdata)
++{
++ struct xgbe_ring_desc *rdesc = rdata->rdesc;
++
++ /* Reset the Tx descriptor
++ * Set buffer 1 (lo) address to zero
++ * Set buffer 1 (hi) address to zero
++ * Reset all other control bits (IC, TTSE, B2L & B1L)
++ * Reset all other control bits (OWN, CTXT, FD, LD, CPC, CIC, etc)
++ */
++ rdesc->desc0 = 0;
++ rdesc->desc1 = 0;
++ rdesc->desc2 = 0;
++ rdesc->desc3 = 0;
++
++ /* Make sure ownership is written to the descriptor */
++ wmb();
++}
++
++static void xgbe_tx_desc_init(struct xgbe_channel *channel)
++{
++ struct xgbe_ring *ring = channel->tx_ring;
++ struct xgbe_ring_data *rdata;
++ int i;
++ int start_index = ring->cur;
++
++ DBGPR("-->tx_desc_init\n");
++
++ /* Initialze all descriptors */
++ for (i = 0; i < ring->rdesc_count; i++) {
++ rdata = XGBE_GET_DESC_DATA(ring, i);
++
++ /* Initialize Tx descriptor */
++ xgbe_tx_desc_reset(rdata);
++ }
++
++ /* Update the total number of Tx descriptors */
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_TDRLR, ring->rdesc_count - 1);
++
++ /* Update the starting address of descriptor ring */
++ rdata = XGBE_GET_DESC_DATA(ring, start_index);
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_TDLR_HI,
++ upper_32_bits(rdata->rdesc_dma));
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_TDLR_LO,
++ lower_32_bits(rdata->rdesc_dma));
++
++ DBGPR("<--tx_desc_init\n");
++}
++
++static void xgbe_rx_desc_reset(struct xgbe_ring_data *rdata)
++{
++ struct xgbe_ring_desc *rdesc = rdata->rdesc;
++
++ /* Reset the Rx descriptor
++ * Set buffer 1 (lo) address to header dma address (lo)
++ * Set buffer 1 (hi) address to header dma address (hi)
++ * Set buffer 2 (lo) address to buffer dma address (lo)
++ * Set buffer 2 (hi) address to buffer dma address (hi) and
++ * set control bits OWN and INTE
++ */
++ rdesc->desc0 = cpu_to_le32(lower_32_bits(rdata->rx.hdr.dma));
++ rdesc->desc1 = cpu_to_le32(upper_32_bits(rdata->rx.hdr.dma));
++ rdesc->desc2 = cpu_to_le32(lower_32_bits(rdata->rx.buf.dma));
++ rdesc->desc3 = cpu_to_le32(upper_32_bits(rdata->rx.buf.dma));
++
++ XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, INTE,
++ rdata->interrupt ? 1 : 0);
++
++ /* Since the Rx DMA engine is likely running, make sure everything
++ * is written to the descriptor(s) before setting the OWN bit
++ * for the descriptor
++ */
++ wmb();
++
++ XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN, 1);
++
++ /* Make sure ownership is written to the descriptor */
++ wmb();
++}
++
++static void xgbe_rx_desc_init(struct xgbe_channel *channel)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_ring *ring = channel->rx_ring;
++ struct xgbe_ring_data *rdata;
++ unsigned int start_index = ring->cur;
++ unsigned int rx_coalesce, rx_frames;
++ unsigned int i;
++
++ DBGPR("-->rx_desc_init\n");
++
++ rx_coalesce = (pdata->rx_riwt || pdata->rx_frames) ? 1 : 0;
++ rx_frames = pdata->rx_frames;
++
++ /* Initialize all descriptors */
++ for (i = 0; i < ring->rdesc_count; i++) {
++ rdata = XGBE_GET_DESC_DATA(ring, i);
++
++ /* Set interrupt on completion bit as appropriate */
++ if (rx_coalesce && (!rx_frames || ((i + 1) % rx_frames)))
++ rdata->interrupt = 0;
++ else
++ rdata->interrupt = 1;
++
++ /* Initialize Rx descriptor */
++ xgbe_rx_desc_reset(rdata);
++ }
++
++ /* Update the total number of Rx descriptors */
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_RDRLR, ring->rdesc_count - 1);
++
++ /* Update the starting address of descriptor ring */
++ rdata = XGBE_GET_DESC_DATA(ring, start_index);
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_RDLR_HI,
++ upper_32_bits(rdata->rdesc_dma));
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_RDLR_LO,
++ lower_32_bits(rdata->rdesc_dma));
++
++ /* Update the Rx Descriptor Tail Pointer */
++ rdata = XGBE_GET_DESC_DATA(ring, start_index + ring->rdesc_count - 1);
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_RDTR_LO,
++ lower_32_bits(rdata->rdesc_dma));
++
++ DBGPR("<--rx_desc_init\n");
++}
++
++static void xgbe_update_tstamp_addend(struct xgbe_prv_data *pdata,
++ unsigned int addend)
++{
++ /* Set the addend register value and tell the device */
++ XGMAC_IOWRITE(pdata, MAC_TSAR, addend);
++ XGMAC_IOWRITE_BITS(pdata, MAC_TSCR, TSADDREG, 1);
++
++ /* Wait for addend update to complete */
++ while (XGMAC_IOREAD_BITS(pdata, MAC_TSCR, TSADDREG))
++ udelay(5);
++}
++
++static void xgbe_set_tstamp_time(struct xgbe_prv_data *pdata, unsigned int sec,
++ unsigned int nsec)
++{
++ /* Set the time values and tell the device */
++ XGMAC_IOWRITE(pdata, MAC_STSUR, sec);
++ XGMAC_IOWRITE(pdata, MAC_STNUR, nsec);
++ XGMAC_IOWRITE_BITS(pdata, MAC_TSCR, TSINIT, 1);
++
++ /* Wait for time update to complete */
++ while (XGMAC_IOREAD_BITS(pdata, MAC_TSCR, TSINIT))
++ udelay(5);
++}
++
++static u64 xgbe_get_tstamp_time(struct xgbe_prv_data *pdata)
++{
++ u64 nsec;
++
++ nsec = XGMAC_IOREAD(pdata, MAC_STSR);
++ nsec *= NSEC_PER_SEC;
++ nsec += XGMAC_IOREAD(pdata, MAC_STNR);
++
++ return nsec;
++}
++
++static u64 xgbe_get_tx_tstamp(struct xgbe_prv_data *pdata)
++{
++ unsigned int tx_snr;
++ u64 nsec;
++
++ tx_snr = XGMAC_IOREAD(pdata, MAC_TXSNR);
++ if (XGMAC_GET_BITS(tx_snr, MAC_TXSNR, TXTSSTSMIS))
++ return 0;
++
++ nsec = XGMAC_IOREAD(pdata, MAC_TXSSR);
++ nsec *= NSEC_PER_SEC;
++ nsec += tx_snr;
++
++ return nsec;
++}
++
++static void xgbe_get_rx_tstamp(struct xgbe_packet_data *packet,
++ struct xgbe_ring_desc *rdesc)
++{
++ u64 nsec;
++
++ if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_CONTEXT_DESC3, TSA) &&
++ !XGMAC_GET_BITS_LE(rdesc->desc3, RX_CONTEXT_DESC3, TSD)) {
++ nsec = le32_to_cpu(rdesc->desc1);
++ nsec <<= 32;
++ nsec |= le32_to_cpu(rdesc->desc0);
++ if (nsec != 0xffffffffffffffffULL) {
++ packet->rx_tstamp = nsec;
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ RX_TSTAMP, 1);
++ }
++ }
++}
++
++static int xgbe_config_tstamp(struct xgbe_prv_data *pdata,
++ unsigned int mac_tscr)
++{
++ /* Set one nano-second accuracy */
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSCTRLSSR, 1);
++
++ /* Set fine timestamp update */
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSCFUPDT, 1);
++
++ /* Overwrite earlier timestamps */
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TXTSSTSM, 1);
++
++ XGMAC_IOWRITE(pdata, MAC_TSCR, mac_tscr);
++
++ /* Exit if timestamping is not enabled */
++ if (!XGMAC_GET_BITS(mac_tscr, MAC_TSCR, TSENA))
++ return 0;
++
++ /* Initialize time registers */
++ XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SSINC, XGBE_TSTAMP_SSINC);
++ XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SNSINC, XGBE_TSTAMP_SNSINC);
++ xgbe_update_tstamp_addend(pdata, pdata->tstamp_addend);
++ xgbe_set_tstamp_time(pdata, 0, 0);
++
++ /* Initialize the timecounter */
++ timecounter_init(&pdata->tstamp_tc, &pdata->tstamp_cc,
++ ktime_to_ns(ktime_get_real()));
++
++ return 0;
++}
++
++static void xgbe_config_dcb_tc(struct xgbe_prv_data *pdata)
++{
++ struct ieee_ets *ets = pdata->ets;
++ unsigned int total_weight, min_weight, weight;
++ unsigned int i;
++
++ if (!ets)
++ return;
++
++ /* Set Tx to deficit weighted round robin scheduling algorithm (when
++ * traffic class is using ETS algorithm)
++ */
++ XGMAC_IOWRITE_BITS(pdata, MTL_OMR, ETSALG, MTL_ETSALG_DWRR);
++
++ /* Set Traffic Class algorithms */
++ total_weight = pdata->netdev->mtu * pdata->hw_feat.tc_cnt;
++ min_weight = total_weight / 100;
++ if (!min_weight)
++ min_weight = 1;
++
++ for (i = 0; i < pdata->hw_feat.tc_cnt; i++) {
++ switch (ets->tc_tsa[i]) {
++ case IEEE_8021QAZ_TSA_STRICT:
++ DBGPR(" TC%u using SP\n", i);
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_ETSCR, TSA,
++ MTL_TSA_SP);
++ break;
++ case IEEE_8021QAZ_TSA_ETS:
++ weight = total_weight * ets->tc_tx_bw[i] / 100;
++ weight = clamp(weight, min_weight, total_weight);
++
++ DBGPR(" TC%u using DWRR (weight %u)\n", i, weight);
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_ETSCR, TSA,
++ MTL_TSA_ETS);
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_QWR, QW,
++ weight);
++ break;
++ }
++ }
++}
++
++static void xgbe_config_dcb_pfc(struct xgbe_prv_data *pdata)
++{
++ struct ieee_pfc *pfc = pdata->pfc;
++ struct ieee_ets *ets = pdata->ets;
++ unsigned int mask, reg, reg_val;
++ unsigned int tc, prio;
++
++ if (!pfc || !ets)
++ return;
++
++ for (tc = 0; tc < pdata->hw_feat.tc_cnt; tc++) {
++ mask = 0;
++ for (prio = 0; prio < IEEE_8021QAZ_MAX_TCS; prio++) {
++ if ((pfc->pfc_en & (1 << prio)) &&
++ (ets->prio_tc[prio] == tc))
++ mask |= (1 << prio);
++ }
++ mask &= 0xff;
++
++ DBGPR(" TC%u PFC mask=%#x\n", tc, mask);
++ reg = MTL_TCPM0R + (MTL_TCPM_INC * (tc / MTL_TCPM_TC_PER_REG));
++ reg_val = XGMAC_IOREAD(pdata, reg);
++
++ reg_val &= ~(0xff << ((tc % MTL_TCPM_TC_PER_REG) << 3));
++ reg_val |= (mask << ((tc % MTL_TCPM_TC_PER_REG) << 3));
++
++ XGMAC_IOWRITE(pdata, reg, reg_val);
++ }
++
++ xgbe_config_flow_control(pdata);
++}
++
++static void xgbe_tx_start_xmit(struct xgbe_channel *channel,
++ struct xgbe_ring *ring)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_ring_data *rdata;
++
++ /* Issue a poll command to Tx DMA by writing address
++ * of next immediate free descriptor */
++ rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_TDTR_LO,
++ lower_32_bits(rdata->rdesc_dma));
++
++ /* Start the Tx coalescing timer */
++ if (pdata->tx_usecs && !channel->tx_timer_active) {
++ channel->tx_timer_active = 1;
++ hrtimer_start(&channel->tx_timer,
++ ktime_set(0, pdata->tx_usecs * NSEC_PER_USEC),
++ HRTIMER_MODE_REL);
++ }
++
++ ring->tx.xmit_more = 0;
++}
++
++static void xgbe_dev_xmit(struct xgbe_channel *channel)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_ring *ring = channel->tx_ring;
++ struct xgbe_ring_data *rdata;
++ struct xgbe_ring_desc *rdesc;
++ struct xgbe_packet_data *packet = &ring->packet_data;
++ unsigned int csum, tso, vlan;
++ unsigned int tso_context, vlan_context;
++ unsigned int tx_set_ic;
++ int start_index = ring->cur;
++ int cur_index = ring->cur;
++ int i;
++
++ DBGPR("-->xgbe_dev_xmit\n");
++
++ csum = XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ CSUM_ENABLE);
++ tso = XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ TSO_ENABLE);
++ vlan = XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ VLAN_CTAG);
++
++ if (tso && (packet->mss != ring->tx.cur_mss))
++ tso_context = 1;
++ else
++ tso_context = 0;
++
++ if (vlan && (packet->vlan_ctag != ring->tx.cur_vlan_ctag))
++ vlan_context = 1;
++ else
++ vlan_context = 0;
++
++ /* Determine if an interrupt should be generated for this Tx:
++ * Interrupt:
++ * - Tx frame count exceeds the frame count setting
++ * - Addition of Tx frame count to the frame count since the
++ * last interrupt was set exceeds the frame count setting
++ * No interrupt:
++ * - No frame count setting specified (ethtool -C ethX tx-frames 0)
++ * - Addition of Tx frame count to the frame count since the
++ * last interrupt was set does not exceed the frame count setting
++ */
++ ring->coalesce_count += packet->tx_packets;
++ if (!pdata->tx_frames)
++ tx_set_ic = 0;
++ else if (packet->tx_packets > pdata->tx_frames)
++ tx_set_ic = 1;
++ else if ((ring->coalesce_count % pdata->tx_frames) <
++ packet->tx_packets)
++ tx_set_ic = 1;
++ else
++ tx_set_ic = 0;
++
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++ rdesc = rdata->rdesc;
++
++ /* Create a context descriptor if this is a TSO packet */
++ if (tso_context || vlan_context) {
++ if (tso_context) {
++ DBGPR(" TSO context descriptor, mss=%u\n",
++ packet->mss);
++
++ /* Set the MSS size */
++ XGMAC_SET_BITS_LE(rdesc->desc2, TX_CONTEXT_DESC2,
++ MSS, packet->mss);
++
++ /* Mark it as a CONTEXT descriptor */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_CONTEXT_DESC3,
++ CTXT, 1);
++
++ /* Indicate this descriptor contains the MSS */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_CONTEXT_DESC3,
++ TCMSSV, 1);
++
++ ring->tx.cur_mss = packet->mss;
++ }
++
++ if (vlan_context) {
++ DBGPR(" VLAN context descriptor, ctag=%u\n",
++ packet->vlan_ctag);
++
++ /* Mark it as a CONTEXT descriptor */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_CONTEXT_DESC3,
++ CTXT, 1);
++
++ /* Set the VLAN tag */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_CONTEXT_DESC3,
++ VT, packet->vlan_ctag);
++
++ /* Indicate this descriptor contains the VLAN tag */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_CONTEXT_DESC3,
++ VLTV, 1);
++
++ ring->tx.cur_vlan_ctag = packet->vlan_ctag;
++ }
++
++ cur_index++;
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++ rdesc = rdata->rdesc;
++ }
++
++ /* Update buffer address (for TSO this is the header) */
++ rdesc->desc0 = cpu_to_le32(lower_32_bits(rdata->skb_dma));
++ rdesc->desc1 = cpu_to_le32(upper_32_bits(rdata->skb_dma));
++
++ /* Update the buffer length */
++ XGMAC_SET_BITS_LE(rdesc->desc2, TX_NORMAL_DESC2, HL_B1L,
++ rdata->skb_dma_len);
++
++ /* VLAN tag insertion check */
++ if (vlan)
++ XGMAC_SET_BITS_LE(rdesc->desc2, TX_NORMAL_DESC2, VTIR,
++ TX_NORMAL_DESC2_VLAN_INSERT);
++
++ /* Timestamp enablement check */
++ if (XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES, PTP))
++ XGMAC_SET_BITS_LE(rdesc->desc2, TX_NORMAL_DESC2, TTSE, 1);
++
++ /* Mark it as First Descriptor */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, FD, 1);
++
++ /* Mark it as a NORMAL descriptor */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, CTXT, 0);
++
++ /* Set OWN bit if not the first descriptor */
++ if (cur_index != start_index)
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, OWN, 1);
++
++ if (tso) {
++ /* Enable TSO */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, TSE, 1);
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, TCPPL,
++ packet->tcp_payload_len);
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, TCPHDRLEN,
++ packet->tcp_header_len / 4);
++ } else {
++ /* Enable CRC and Pad Insertion */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, CPC, 0);
++
++ /* Enable HW CSUM */
++ if (csum)
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3,
++ CIC, 0x3);
++
++ /* Set the total length to be transmitted */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, FL,
++ packet->length);
++ }
++
++ for (i = cur_index - start_index + 1; i < packet->rdesc_count; i++) {
++ cur_index++;
++ rdata = XGBE_GET_DESC_DATA(ring, cur_index);
++ rdesc = rdata->rdesc;
++
++ /* Update buffer address */
++ rdesc->desc0 = cpu_to_le32(lower_32_bits(rdata->skb_dma));
++ rdesc->desc1 = cpu_to_le32(upper_32_bits(rdata->skb_dma));
++
++ /* Update the buffer length */
++ XGMAC_SET_BITS_LE(rdesc->desc2, TX_NORMAL_DESC2, HL_B1L,
++ rdata->skb_dma_len);
++
++ /* Set OWN bit */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, OWN, 1);
++
++ /* Mark it as NORMAL descriptor */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, CTXT, 0);
++
++ /* Enable HW CSUM */
++ if (csum)
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3,
++ CIC, 0x3);
++ }
++
++ /* Set LAST bit for the last descriptor */
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, LD, 1);
++
++ /* Set IC bit based on Tx coalescing settings */
++ if (tx_set_ic)
++ XGMAC_SET_BITS_LE(rdesc->desc2, TX_NORMAL_DESC2, IC, 1);
++
++ /* Save the Tx info to report back during cleanup */
++ rdata->tx.packets = packet->tx_packets;
++ rdata->tx.bytes = packet->tx_bytes;
++
++ /* In case the Tx DMA engine is running, make sure everything
++ * is written to the descriptor(s) before setting the OWN bit
++ * for the first descriptor
++ */
++ wmb();
++
++ /* Set OWN bit for the first descriptor */
++ rdata = XGBE_GET_DESC_DATA(ring, start_index);
++ rdesc = rdata->rdesc;
++ XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, OWN, 1);
++
++#ifdef XGMAC_ENABLE_TX_DESC_DUMP
++ xgbe_a0_dump_tx_desc(ring, start_index, packet->rdesc_count, 1);
++#endif
++
++ /* Make sure ownership is written to the descriptor */
++ wmb();
++
++ ring->cur = cur_index + 1;
++ if (!packet->skb->xmit_more ||
++ netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev,
++ channel->queue_index)))
++ xgbe_tx_start_xmit(channel, ring);
++ else
++ ring->tx.xmit_more = 1;
++
++ DBGPR(" %s: descriptors %u to %u written\n",
++ channel->name, start_index & (ring->rdesc_count - 1),
++ (ring->cur - 1) & (ring->rdesc_count - 1));
++
++ DBGPR("<--xgbe_dev_xmit\n");
++}
++
++static int xgbe_dev_read(struct xgbe_channel *channel)
++{
++ struct xgbe_ring *ring = channel->rx_ring;
++ struct xgbe_ring_data *rdata;
++ struct xgbe_ring_desc *rdesc;
++ struct xgbe_packet_data *packet = &ring->packet_data;
++ struct net_device *netdev = channel->pdata->netdev;
++ unsigned int err, etlt, l34t;
++
++ DBGPR("-->xgbe_dev_read: cur = %d\n", ring->cur);
++
++ rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
++ rdesc = rdata->rdesc;
++
++ /* Check for data availability */
++ if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN))
++ return 1;
++
++ /* Make sure descriptor fields are read after reading the OWN bit */
++ rmb();
++
++#ifdef XGMAC_ENABLE_RX_DESC_DUMP
++ xgbe_a0_dump_rx_desc(ring, rdesc, ring->cur);
++#endif
++
++ if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, CTXT)) {
++ /* Timestamp Context Descriptor */
++ xgbe_get_rx_tstamp(packet, rdesc);
++
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ CONTEXT, 1);
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ CONTEXT_NEXT, 0);
++ return 0;
++ }
++
++ /* Normal Descriptor, be sure Context Descriptor bit is off */
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES, CONTEXT, 0);
++
++ /* Indicate if a Context Descriptor is next */
++ if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, CDA))
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ CONTEXT_NEXT, 1);
++
++ /* Get the header length */
++ if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, FD))
++ rdata->rx.hdr_len = XGMAC_GET_BITS_LE(rdesc->desc2,
++ RX_NORMAL_DESC2, HL);
++
++ /* Get the RSS hash */
++ if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, RSV)) {
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ RSS_HASH, 1);
++
++ packet->rss_hash = le32_to_cpu(rdesc->desc1);
++
++ l34t = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, L34T);
++ switch (l34t) {
++ case RX_DESC3_L34T_IPV4_TCP:
++ case RX_DESC3_L34T_IPV4_UDP:
++ case RX_DESC3_L34T_IPV6_TCP:
++ case RX_DESC3_L34T_IPV6_UDP:
++ packet->rss_hash_type = PKT_HASH_TYPE_L4;
++ break;
++ default:
++ packet->rss_hash_type = PKT_HASH_TYPE_L3;
++ }
++ }
++
++ /* Get the packet length */
++ rdata->rx.len = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, PL);
++
++ if (!XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, LD)) {
++ /* Not all the data has been transferred for this packet */
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ INCOMPLETE, 1);
++ return 0;
++ }
++
++ /* This is the last of the data for this packet */
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ INCOMPLETE, 0);
++
++ /* Set checksum done indicator as appropriate */
++ if (channel->pdata->netdev->features & NETIF_F_RXCSUM)
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ CSUM_DONE, 1);
++
++ /* Check for errors (only valid in last descriptor) */
++ err = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, ES);
++ etlt = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, ETLT);
++ DBGPR(" err=%u, etlt=%#x\n", err, etlt);
++
++ if (!err || !etlt) {
++ /* No error if err is 0 or etlt is 0 */
++ if ((etlt == 0x09) &&
++ (netdev->features & NETIF_F_HW_VLAN_CTAG_RX)) {
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ VLAN_CTAG, 1);
++ packet->vlan_ctag = XGMAC_GET_BITS_LE(rdesc->desc0,
++ RX_NORMAL_DESC0,
++ OVT);
++ DBGPR(" vlan-ctag=0x%04x\n", packet->vlan_ctag);
++ }
++ } else {
++ if ((etlt == 0x05) || (etlt == 0x06))
++ XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
++ CSUM_DONE, 0);
++ else
++ XGMAC_SET_BITS(packet->errors, RX_PACKET_ERRORS,
++ FRAME, 1);
++ }
++
++ DBGPR("<--xgbe_dev_read: %s - descriptor=%u (cur=%d)\n", channel->name,
++ ring->cur & (ring->rdesc_count - 1), ring->cur);
++
++ return 0;
++}
++
++static int xgbe_is_context_desc(struct xgbe_ring_desc *rdesc)
++{
++ /* Rx and Tx share CTXT bit, so check TDES3.CTXT bit */
++ return XGMAC_GET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, CTXT);
++}
++
++static int xgbe_is_last_desc(struct xgbe_ring_desc *rdesc)
++{
++ /* Rx and Tx share LD bit, so check TDES3.LD bit */
++ return XGMAC_GET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, LD);
++}
++
++static int xgbe_enable_int(struct xgbe_channel *channel,
++ enum xgbe_int int_id)
++{
++ unsigned int dma_ch_ier;
++
++ dma_ch_ier = XGMAC_DMA_IOREAD(channel, DMA_CH_IER);
++
++ switch (int_id) {
++ case XGMAC_INT_DMA_CH_SR_TI:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_TPS:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TXSE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_TBU:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TBUE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_RI:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_RBU:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RBUE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_RPS:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RSE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_TI_RI:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 1);
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 1);
++ break;
++ case XGMAC_INT_DMA_CH_SR_FBE:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, FBEE, 1);
++ break;
++ case XGMAC_INT_DMA_ALL:
++ dma_ch_ier |= channel->saved_ier;
++ break;
++ default:
++ return -1;
++ }
++
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, dma_ch_ier);
++
++ return 0;
++}
++
++static int xgbe_disable_int(struct xgbe_channel *channel,
++ enum xgbe_int int_id)
++{
++ unsigned int dma_ch_ier;
++
++ dma_ch_ier = XGMAC_DMA_IOREAD(channel, DMA_CH_IER);
++
++ switch (int_id) {
++ case XGMAC_INT_DMA_CH_SR_TI:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_TPS:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TXSE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_TBU:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TBUE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_RI:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_RBU:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RBUE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_RPS:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RSE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_TI_RI:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, TIE, 0);
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, RIE, 0);
++ break;
++ case XGMAC_INT_DMA_CH_SR_FBE:
++ XGMAC_SET_BITS(dma_ch_ier, DMA_CH_IER, FBEE, 0);
++ break;
++ case XGMAC_INT_DMA_ALL:
++ channel->saved_ier = dma_ch_ier & XGBE_DMA_INTERRUPT_MASK;
++ dma_ch_ier &= ~XGBE_DMA_INTERRUPT_MASK;
++ break;
++ default:
++ return -1;
++ }
++
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_IER, dma_ch_ier);
++
++ return 0;
++}
++
++static int xgbe_exit(struct xgbe_prv_data *pdata)
++{
++ unsigned int count = 2000;
++
++ DBGPR("-->xgbe_exit\n");
++
++ /* Issue a software reset */
++ XGMAC_IOWRITE_BITS(pdata, DMA_MR, SWR, 1);
++ usleep_range(10, 15);
++
++ /* Poll Until Poll Condition */
++ while (count-- && XGMAC_IOREAD_BITS(pdata, DMA_MR, SWR))
++ usleep_range(500, 600);
++
++ if (!count)
++ return -EBUSY;
++
++ DBGPR("<--xgbe_exit\n");
++
++ return 0;
++}
++
++static int xgbe_flush_tx_queues(struct xgbe_prv_data *pdata)
++{
++ unsigned int i, count;
++
++ if (XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER) < 0x21)
++ return 0;
++
++ for (i = 0; i < pdata->tx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1);
++
++ /* Poll Until Poll Condition */
++ for (i = 0; i < pdata->tx_q_count; i++) {
++ count = 2000;
++ while (count-- && XGMAC_MTL_IOREAD_BITS(pdata, i,
++ MTL_Q_TQOMR, FTQ))
++ usleep_range(500, 600);
++
++ if (!count)
++ return -EBUSY;
++ }
++
++ return 0;
++}
++
++static void xgbe_config_dma_bus(struct xgbe_prv_data *pdata)
++{
++ /* Set enhanced addressing mode */
++ XGMAC_IOWRITE_BITS(pdata, DMA_SBMR, EAME, 1);
++
++ /* Set the System Bus mode */
++ XGMAC_IOWRITE_BITS(pdata, DMA_SBMR, UNDEF, 1);
++ XGMAC_IOWRITE_BITS(pdata, DMA_SBMR, BLEN_256, 1);
++}
++
++static void xgbe_config_dma_cache(struct xgbe_prv_data *pdata)
++{
++ unsigned int arcache, awcache;
++
++ arcache = 0;
++ XGMAC_SET_BITS(arcache, DMA_AXIARCR, DRC, pdata->arcache);
++ XGMAC_SET_BITS(arcache, DMA_AXIARCR, DRD, pdata->axdomain);
++ XGMAC_SET_BITS(arcache, DMA_AXIARCR, TEC, pdata->arcache);
++ XGMAC_SET_BITS(arcache, DMA_AXIARCR, TED, pdata->axdomain);
++ XGMAC_SET_BITS(arcache, DMA_AXIARCR, THC, pdata->arcache);
++ XGMAC_SET_BITS(arcache, DMA_AXIARCR, THD, pdata->axdomain);
++ XGMAC_IOWRITE(pdata, DMA_AXIARCR, arcache);
++
++ awcache = 0;
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, DWC, pdata->awcache);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, DWD, pdata->axdomain);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RPC, pdata->awcache);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RPD, pdata->axdomain);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RHC, pdata->awcache);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, RHD, pdata->axdomain);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, TDC, pdata->awcache);
++ XGMAC_SET_BITS(awcache, DMA_AXIAWCR, TDD, pdata->axdomain);
++ XGMAC_IOWRITE(pdata, DMA_AXIAWCR, awcache);
++}
++
++static void xgbe_config_mtl_mode(struct xgbe_prv_data *pdata)
++{
++ unsigned int i;
++
++ /* Set Tx to weighted round robin scheduling algorithm */
++ XGMAC_IOWRITE_BITS(pdata, MTL_OMR, ETSALG, MTL_ETSALG_WRR);
++
++ /* Set Tx traffic classes to use WRR algorithm with equal weights */
++ for (i = 0; i < pdata->hw_feat.tc_cnt; i++) {
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_ETSCR, TSA,
++ MTL_TSA_ETS);
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_TC_QWR, QW, 1);
++ }
++
++ /* Set Rx to strict priority algorithm */
++ XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP);
++}
++
++static unsigned int xgbe_calculate_per_queue_fifo(unsigned int fifo_size,
++ unsigned int queue_count)
++{
++ unsigned int q_fifo_size = 0;
++ enum xgbe_mtl_fifo_size p_fifo = XGMAC_MTL_FIFO_SIZE_256;
++
++ /* Calculate Tx/Rx fifo share per queue */
++ switch (fifo_size) {
++ case 0:
++ q_fifo_size = XGBE_FIFO_SIZE_B(128);
++ break;
++ case 1:
++ q_fifo_size = XGBE_FIFO_SIZE_B(256);
++ break;
++ case 2:
++ q_fifo_size = XGBE_FIFO_SIZE_B(512);
++ break;
++ case 3:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(1);
++ break;
++ case 4:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(2);
++ break;
++ case 5:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(4);
++ break;
++ case 6:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(8);
++ break;
++ case 7:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(16);
++ break;
++ case 8:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(32);
++ break;
++ case 9:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(64);
++ break;
++ case 10:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(128);
++ break;
++ case 11:
++ q_fifo_size = XGBE_FIFO_SIZE_KB(256);
++ break;
++ }
++
++ /* The configured value is not the actual amount of fifo RAM */
++ q_fifo_size = min_t(unsigned int, XGBE_FIFO_MAX, q_fifo_size);
++
++ q_fifo_size = q_fifo_size / queue_count;
++
++ /* Set the queue fifo size programmable value */
++ if (q_fifo_size >= XGBE_FIFO_SIZE_KB(256))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_256K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(128))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_128K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(64))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_64K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(32))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_32K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(16))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_16K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(8))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_8K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(4))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_4K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(2))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_2K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_KB(1))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_1K;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_B(512))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_512;
++ else if (q_fifo_size >= XGBE_FIFO_SIZE_B(256))
++ p_fifo = XGMAC_MTL_FIFO_SIZE_256;
++
++ return p_fifo;
++}
++
++static void xgbe_config_tx_fifo_size(struct xgbe_prv_data *pdata)
++{
++ enum xgbe_mtl_fifo_size fifo_size;
++ unsigned int i;
++
++ fifo_size = xgbe_calculate_per_queue_fifo(pdata->hw_feat.tx_fifo_size,
++ pdata->tx_q_count);
++
++ for (i = 0; i < pdata->tx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TQS, fifo_size);
++
++ netdev_notice(pdata->netdev, "%d Tx queues, %d byte fifo per queue\n",
++ pdata->tx_q_count, ((fifo_size + 1) * 256));
++}
++
++static void xgbe_config_rx_fifo_size(struct xgbe_prv_data *pdata)
++{
++ enum xgbe_mtl_fifo_size fifo_size;
++ unsigned int i;
++
++ fifo_size = xgbe_calculate_per_queue_fifo(pdata->hw_feat.rx_fifo_size,
++ pdata->rx_q_count);
++
++ for (i = 0; i < pdata->rx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RQS, fifo_size);
++
++ netdev_notice(pdata->netdev, "%d Rx queues, %d byte fifo per queue\n",
++ pdata->rx_q_count, ((fifo_size + 1) * 256));
++}
++
++static void xgbe_config_queue_mapping(struct xgbe_prv_data *pdata)
++{
++ unsigned int qptc, qptc_extra, queue;
++ unsigned int prio_queues;
++ unsigned int ppq, ppq_extra, prio;
++ unsigned int mask;
++ unsigned int i, j, reg, reg_val;
++
++ /* Map the MTL Tx Queues to Traffic Classes
++ * Note: Tx Queues >= Traffic Classes
++ */
++ qptc = pdata->tx_q_count / pdata->hw_feat.tc_cnt;
++ qptc_extra = pdata->tx_q_count % pdata->hw_feat.tc_cnt;
++
++ for (i = 0, queue = 0; i < pdata->hw_feat.tc_cnt; i++) {
++ for (j = 0; j < qptc; j++) {
++ DBGPR(" TXq%u mapped to TC%u\n", queue, i);
++ XGMAC_MTL_IOWRITE_BITS(pdata, queue, MTL_Q_TQOMR,
++ Q2TCMAP, i);
++ pdata->q2tc_map[queue++] = i;
++ }
++
++ if (i < qptc_extra) {
++ DBGPR(" TXq%u mapped to TC%u\n", queue, i);
++ XGMAC_MTL_IOWRITE_BITS(pdata, queue, MTL_Q_TQOMR,
++ Q2TCMAP, i);
++ pdata->q2tc_map[queue++] = i;
++ }
++ }
++
++ /* Map the 8 VLAN priority values to available MTL Rx queues */
++ prio_queues = min_t(unsigned int, IEEE_8021QAZ_MAX_TCS,
++ pdata->rx_q_count);
++ ppq = IEEE_8021QAZ_MAX_TCS / prio_queues;
++ ppq_extra = IEEE_8021QAZ_MAX_TCS % prio_queues;
++
++ reg = MAC_RQC2R;
++ reg_val = 0;
++ for (i = 0, prio = 0; i < prio_queues;) {
++ mask = 0;
++ for (j = 0; j < ppq; j++) {
++ DBGPR(" PRIO%u mapped to RXq%u\n", prio, i);
++ mask |= (1 << prio);
++ pdata->prio2q_map[prio++] = i;
++ }
++
++ if (i < ppq_extra) {
++ DBGPR(" PRIO%u mapped to RXq%u\n", prio, i);
++ mask |= (1 << prio);
++ pdata->prio2q_map[prio++] = i;
++ }
++
++ reg_val |= (mask << ((i++ % MAC_RQC2_Q_PER_REG) << 3));
++
++ if ((i % MAC_RQC2_Q_PER_REG) && (i != prio_queues))
++ continue;
++
++ XGMAC_IOWRITE(pdata, reg, reg_val);
++ reg += MAC_RQC2_INC;
++ reg_val = 0;
++ }
++
++ /* Select dynamic mapping of MTL Rx queue to DMA Rx channel */
++ reg = MTL_RQDCM0R;
++ reg_val = 0;
++ for (i = 0; i < pdata->rx_q_count;) {
++ reg_val |= (0x80 << ((i++ % MTL_RQDCM_Q_PER_REG) << 3));
++
++ if ((i % MTL_RQDCM_Q_PER_REG) && (i != pdata->rx_q_count))
++ continue;
++
++ XGMAC_IOWRITE(pdata, reg, reg_val);
++
++ reg += MTL_RQDCM_INC;
++ reg_val = 0;
++ }
++}
++
++static void xgbe_config_flow_control_threshold(struct xgbe_prv_data *pdata)
++{
++ unsigned int i;
++
++ for (i = 0; i < pdata->rx_q_count; i++) {
++ /* Activate flow control when less than 4k left in fifo */
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RFA, 2);
++
++ /* De-activate flow control when more than 6k left in fifo */
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RFD, 4);
++ }
++}
++
++static void xgbe_config_mac_address(struct xgbe_prv_data *pdata)
++{
++ xgbe_set_mac_address(pdata, pdata->netdev->dev_addr);
++
++ /* Filtering is done using perfect filtering and hash filtering */
++ if (pdata->hw_feat.hash_table_size) {
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, HPF, 1);
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, HUC, 1);
++ XGMAC_IOWRITE_BITS(pdata, MAC_PFR, HMC, 1);
++ }
++}
++
++static void xgbe_config_jumbo_enable(struct xgbe_prv_data *pdata)
++{
++ unsigned int val;
++
++ val = (pdata->netdev->mtu > XGMAC_STD_PACKET_MTU) ? 1 : 0;
++
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
++}
++
++static void xgbe_config_mac_speed(struct xgbe_prv_data *pdata)
++{
++ switch (pdata->phy_speed) {
++ case SPEED_10000:
++ xgbe_set_xgmii_speed(pdata);
++ break;
++
++ case SPEED_2500:
++ xgbe_set_gmii_2500_speed(pdata);
++ break;
++
++ case SPEED_1000:
++ xgbe_set_gmii_speed(pdata);
++ break;
++ }
++}
++
++static void xgbe_config_checksum_offload(struct xgbe_prv_data *pdata)
++{
++ if (pdata->netdev->features & NETIF_F_RXCSUM)
++ xgbe_enable_rx_csum(pdata);
++ else
++ xgbe_disable_rx_csum(pdata);
++}
++
++static void xgbe_config_vlan_support(struct xgbe_prv_data *pdata)
++{
++ /* Indicate that VLAN Tx CTAGs come from context descriptors */
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANIR, CSVL, 0);
++ XGMAC_IOWRITE_BITS(pdata, MAC_VLANIR, VLTI, 1);
++
++ /* Set the current VLAN Hash Table register value */
++ xgbe_update_vlan_hash_table(pdata);
++
++ if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_FILTER)
++ xgbe_enable_rx_vlan_filtering(pdata);
++ else
++ xgbe_disable_rx_vlan_filtering(pdata);
++
++ if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
++ xgbe_enable_rx_vlan_stripping(pdata);
++ else
++ xgbe_disable_rx_vlan_stripping(pdata);
++}
++
++static u64 xgbe_mmc_read(struct xgbe_prv_data *pdata, unsigned int reg_lo)
++{
++ bool read_hi;
++ u64 val;
++
++ switch (reg_lo) {
++ /* These registers are always 64 bit */
++ case MMC_TXOCTETCOUNT_GB_LO:
++ case MMC_TXOCTETCOUNT_G_LO:
++ case MMC_RXOCTETCOUNT_GB_LO:
++ case MMC_RXOCTETCOUNT_G_LO:
++ read_hi = true;
++ break;
++
++ default:
++ read_hi = false;
++ };
++
++ val = XGMAC_IOREAD(pdata, reg_lo);
++
++ if (read_hi)
++ val |= ((u64)XGMAC_IOREAD(pdata, reg_lo + 4) << 32);
++
++ return val;
++}
++
++static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_mmc_stats *stats = &pdata->mmc_stats;
++ unsigned int mmc_isr = XGMAC_IOREAD(pdata, MMC_TISR);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_GB))
++ stats->txoctetcount_gb +=
++ xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_GB))
++ stats->txframecount_gb +=
++ xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_G))
++ stats->txbroadcastframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_G))
++ stats->txmulticastframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX64OCTETS_GB))
++ stats->tx64octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX65TO127OCTETS_GB))
++ stats->tx65to127octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX128TO255OCTETS_GB))
++ stats->tx128to255octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX256TO511OCTETS_GB))
++ stats->tx256to511octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX512TO1023OCTETS_GB))
++ stats->tx512to1023octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX1024TOMAXOCTETS_GB))
++ stats->tx1024tomaxoctets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNICASTFRAMES_GB))
++ stats->txunicastframes_gb +=
++ xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_GB))
++ stats->txmulticastframes_gb +=
++ xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_GB))
++ stats->txbroadcastframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNDERFLOWERROR))
++ stats->txunderflowerror +=
++ xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_G))
++ stats->txoctetcount_g +=
++ xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_G))
++ stats->txframecount_g +=
++ xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXPAUSEFRAMES))
++ stats->txpauseframes +=
++ xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXVLANFRAMES_G))
++ stats->txvlanframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO);
++}
++
++static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_mmc_stats *stats = &pdata->mmc_stats;
++ unsigned int mmc_isr = XGMAC_IOREAD(pdata, MMC_RISR);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFRAMECOUNT_GB))
++ stats->rxframecount_gb +=
++ xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_GB))
++ stats->rxoctetcount_gb +=
++ xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_G))
++ stats->rxoctetcount_g +=
++ xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXBROADCASTFRAMES_G))
++ stats->rxbroadcastframes_g +=
++ xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXMULTICASTFRAMES_G))
++ stats->rxmulticastframes_g +=
++ xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXCRCERROR))
++ stats->rxcrcerror +=
++ xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXRUNTERROR))
++ stats->rxrunterror +=
++ xgbe_mmc_read(pdata, MMC_RXRUNTERROR);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXJABBERERROR))
++ stats->rxjabbererror +=
++ xgbe_mmc_read(pdata, MMC_RXJABBERERROR);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNDERSIZE_G))
++ stats->rxundersize_g +=
++ xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOVERSIZE_G))
++ stats->rxoversize_g +=
++ xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX64OCTETS_GB))
++ stats->rx64octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX65TO127OCTETS_GB))
++ stats->rx65to127octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX128TO255OCTETS_GB))
++ stats->rx128to255octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX256TO511OCTETS_GB))
++ stats->rx256to511octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX512TO1023OCTETS_GB))
++ stats->rx512to1023octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX1024TOMAXOCTETS_GB))
++ stats->rx1024tomaxoctets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNICASTFRAMES_G))
++ stats->rxunicastframes_g +=
++ xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXLENGTHERROR))
++ stats->rxlengtherror +=
++ xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOUTOFRANGETYPE))
++ stats->rxoutofrangetype +=
++ xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXPAUSEFRAMES))
++ stats->rxpauseframes +=
++ xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFIFOOVERFLOW))
++ stats->rxfifooverflow +=
++ xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXVLANFRAMES_GB))
++ stats->rxvlanframes_gb +=
++ xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO);
++
++ if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXWATCHDOGERROR))
++ stats->rxwatchdogerror +=
++ xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
++}
++
++static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_mmc_stats *stats = &pdata->mmc_stats;
++
++ /* Freeze counters */
++ XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 1);
++
++ stats->txoctetcount_gb +=
++ xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO);
++
++ stats->txframecount_gb +=
++ xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO);
++
++ stats->txbroadcastframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO);
++
++ stats->txmulticastframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO);
++
++ stats->tx64octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO);
++
++ stats->tx65to127octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO);
++
++ stats->tx128to255octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO);
++
++ stats->tx256to511octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO);
++
++ stats->tx512to1023octets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO);
++
++ stats->tx1024tomaxoctets_gb +=
++ xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO);
++
++ stats->txunicastframes_gb +=
++ xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO);
++
++ stats->txmulticastframes_gb +=
++ xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO);
++
++ stats->txbroadcastframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO);
++
++ stats->txunderflowerror +=
++ xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO);
++
++ stats->txoctetcount_g +=
++ xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO);
++
++ stats->txframecount_g +=
++ xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO);
++
++ stats->txpauseframes +=
++ xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO);
++
++ stats->txvlanframes_g +=
++ xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO);
++
++ stats->rxframecount_gb +=
++ xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO);
++
++ stats->rxoctetcount_gb +=
++ xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO);
++
++ stats->rxoctetcount_g +=
++ xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO);
++
++ stats->rxbroadcastframes_g +=
++ xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO);
++
++ stats->rxmulticastframes_g +=
++ xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO);
++
++ stats->rxcrcerror +=
++ xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO);
++
++ stats->rxrunterror +=
++ xgbe_mmc_read(pdata, MMC_RXRUNTERROR);
++
++ stats->rxjabbererror +=
++ xgbe_mmc_read(pdata, MMC_RXJABBERERROR);
++
++ stats->rxundersize_g +=
++ xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G);
++
++ stats->rxoversize_g +=
++ xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G);
++
++ stats->rx64octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO);
++
++ stats->rx65to127octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO);
++
++ stats->rx128to255octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO);
++
++ stats->rx256to511octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO);
++
++ stats->rx512to1023octets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO);
++
++ stats->rx1024tomaxoctets_gb +=
++ xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO);
++
++ stats->rxunicastframes_g +=
++ xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO);
++
++ stats->rxlengtherror +=
++ xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO);
++
++ stats->rxoutofrangetype +=
++ xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO);
++
++ stats->rxpauseframes +=
++ xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO);
++
++ stats->rxfifooverflow +=
++ xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO);
++
++ stats->rxvlanframes_gb +=
++ xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO);
++
++ stats->rxwatchdogerror +=
++ xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
++
++ /* Un-freeze counters */
++ XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0);
++}
++
++static void xgbe_config_mmc(struct xgbe_prv_data *pdata)
++{
++ /* Set counters to reset on read */
++ XGMAC_IOWRITE_BITS(pdata, MMC_CR, ROR, 1);
++
++ /* Reset the counters */
++ XGMAC_IOWRITE_BITS(pdata, MMC_CR, CR, 1);
++}
++
++static void xgbe_prepare_tx_stop(struct xgbe_prv_data *pdata,
++ struct xgbe_channel *channel)
++{
++ unsigned int tx_dsr, tx_pos, tx_qidx;
++ unsigned int tx_status;
++ unsigned long tx_timeout;
++
++ /* Calculate the status register to read and the position within */
++ if (channel->queue_index < DMA_DSRX_FIRST_QUEUE) {
++ tx_dsr = DMA_DSR0;
++ tx_pos = (channel->queue_index * DMA_DSR_Q_WIDTH) +
++ DMA_DSR0_TPS_START;
++ } else {
++ tx_qidx = channel->queue_index - DMA_DSRX_FIRST_QUEUE;
++
++ tx_dsr = DMA_DSR1 + ((tx_qidx / DMA_DSRX_QPR) * DMA_DSRX_INC);
++ tx_pos = ((tx_qidx % DMA_DSRX_QPR) * DMA_DSR_Q_WIDTH) +
++ DMA_DSRX_TPS_START;
++ }
++
++ /* The Tx engine cannot be stopped if it is actively processing
++ * descriptors. Wait for the Tx engine to enter the stopped or
++ * suspended state. Don't wait forever though...
++ */
++ tx_timeout = jiffies + (XGBE_DMA_STOP_TIMEOUT * HZ);
++ while (time_before(jiffies, tx_timeout)) {
++ tx_status = XGMAC_IOREAD(pdata, tx_dsr);
++ tx_status = GET_BITS(tx_status, tx_pos, DMA_DSR_TPS_WIDTH);
++ if ((tx_status == DMA_TPS_STOPPED) ||
++ (tx_status == DMA_TPS_SUSPENDED))
++ break;
++
++ usleep_range(500, 1000);
++ }
++
++ if (!time_before(jiffies, tx_timeout))
++ netdev_info(pdata->netdev,
++ "timed out waiting for Tx DMA channel %u to stop\n",
++ channel->queue_index);
++}
++
++static void xgbe_enable_tx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Enable each Tx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, ST, 1);
++ }
++
++ /* Enable each Tx queue */
++ for (i = 0; i < pdata->tx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TXQEN,
++ MTL_Q_ENABLED);
++
++ /* Enable MAC Tx */
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 1);
++}
++
++static void xgbe_disable_tx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Prepare for Tx DMA channel stop */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ xgbe_prepare_tx_stop(pdata, channel);
++ }
++
++ /* Disable MAC Tx */
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 0);
++
++ /* Disable each Tx queue */
++ for (i = 0; i < pdata->tx_q_count; i++)
++ XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TXQEN, 0);
++
++ /* Disable each Tx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, ST, 0);
++ }
++}
++
++static void xgbe_enable_rx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int reg_val, i;
++
++ /* Enable each Rx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, SR, 1);
++ }
++
++ /* Enable each Rx queue */
++ reg_val = 0;
++ for (i = 0; i < pdata->rx_q_count; i++)
++ reg_val |= (0x02 << (i << 1));
++ XGMAC_IOWRITE(pdata, MAC_RQC0R, reg_val);
++
++ /* Enable MAC Rx */
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, DCRCC, 1);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, CST, 1);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, ACS, 1);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, RE, 1);
++}
++
++static void xgbe_disable_rx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Disable MAC Rx */
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, DCRCC, 0);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, CST, 0);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, ACS, 0);
++ XGMAC_IOWRITE_BITS(pdata, MAC_RCR, RE, 0);
++
++ /* Disable each Rx queue */
++ XGMAC_IOWRITE(pdata, MAC_RQC0R, 0);
++
++ /* Disable each Rx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, SR, 0);
++ }
++}
++
++static void xgbe_powerup_tx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Enable each Tx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, ST, 1);
++ }
++
++ /* Enable MAC Tx */
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 1);
++}
++
++static void xgbe_powerdown_tx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Prepare for Tx DMA channel stop */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ xgbe_prepare_tx_stop(pdata, channel);
++ }
++
++ /* Disable MAC Tx */
++ XGMAC_IOWRITE_BITS(pdata, MAC_TCR, TE, 0);
++
++ /* Disable each Tx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_TCR, ST, 0);
++ }
++}
++
++static void xgbe_powerup_rx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Enable each Rx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, SR, 1);
++ }
++}
++
++static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ /* Disable each Rx DMA channel */
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->rx_ring)
++ break;
++
++ XGMAC_DMA_IOWRITE_BITS(channel, DMA_CH_RCR, SR, 0);
++ }
++}
++
++static int xgbe_init(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ int ret;
++
++ DBGPR("-->xgbe_init\n");
++
++ /* Flush Tx queues */
++ ret = xgbe_flush_tx_queues(pdata);
++ if (ret)
++ return ret;
++
++ /*
++ * Initialize DMA related features
++ */
++ xgbe_config_dma_bus(pdata);
++ xgbe_config_dma_cache(pdata);
++ xgbe_config_osp_mode(pdata);
++ xgbe_config_pblx8(pdata);
++ xgbe_config_tx_pbl_val(pdata);
++ xgbe_config_rx_pbl_val(pdata);
++ xgbe_config_rx_coalesce(pdata);
++ xgbe_config_tx_coalesce(pdata);
++ xgbe_config_rx_buffer_size(pdata);
++ xgbe_config_tso_mode(pdata);
++ xgbe_config_sph_mode(pdata);
++ xgbe_config_rss(pdata);
++ desc_if->wrapper_tx_desc_init(pdata);
++ desc_if->wrapper_rx_desc_init(pdata);
++ xgbe_enable_dma_interrupts(pdata);
++
++ /*
++ * Initialize MTL related features
++ */
++ xgbe_config_mtl_mode(pdata);
++ xgbe_config_queue_mapping(pdata);
++ xgbe_config_tsf_mode(pdata, pdata->tx_sf_mode);
++ xgbe_config_rsf_mode(pdata, pdata->rx_sf_mode);
++ xgbe_config_tx_threshold(pdata, pdata->tx_threshold);
++ xgbe_config_rx_threshold(pdata, pdata->rx_threshold);
++ xgbe_config_tx_fifo_size(pdata);
++ xgbe_config_rx_fifo_size(pdata);
++ xgbe_config_flow_control_threshold(pdata);
++ /*TODO: Error Packet and undersized good Packet forwarding enable
++ (FEP and FUP)
++ */
++ xgbe_config_dcb_tc(pdata);
++ xgbe_config_dcb_pfc(pdata);
++ xgbe_enable_mtl_interrupts(pdata);
++
++ /*
++ * Initialize MAC related features
++ */
++ xgbe_config_mac_address(pdata);
++ xgbe_config_jumbo_enable(pdata);
++ xgbe_config_flow_control(pdata);
++ xgbe_config_mac_speed(pdata);
++ xgbe_config_checksum_offload(pdata);
++ xgbe_config_vlan_support(pdata);
++ xgbe_config_mmc(pdata);
++ xgbe_enable_mac_interrupts(pdata);
++
++ DBGPR("<--xgbe_init\n");
++
++ return 0;
++}
++
++void xgbe_a0_init_function_ptrs_dev(struct xgbe_hw_if *hw_if)
++{
++ DBGPR("-->xgbe_a0_init_function_ptrs\n");
++
++ hw_if->tx_complete = xgbe_tx_complete;
++
++ hw_if->set_promiscuous_mode = xgbe_set_promiscuous_mode;
++ hw_if->set_all_multicast_mode = xgbe_set_all_multicast_mode;
++ hw_if->add_mac_addresses = xgbe_add_mac_addresses;
++ hw_if->set_mac_address = xgbe_set_mac_address;
++
++ hw_if->enable_rx_csum = xgbe_enable_rx_csum;
++ hw_if->disable_rx_csum = xgbe_disable_rx_csum;
++
++ hw_if->enable_rx_vlan_stripping = xgbe_enable_rx_vlan_stripping;
++ hw_if->disable_rx_vlan_stripping = xgbe_disable_rx_vlan_stripping;
++ hw_if->enable_rx_vlan_filtering = xgbe_enable_rx_vlan_filtering;
++ hw_if->disable_rx_vlan_filtering = xgbe_disable_rx_vlan_filtering;
++ hw_if->update_vlan_hash_table = xgbe_update_vlan_hash_table;
++
++ hw_if->read_mmd_regs = xgbe_read_mmd_regs;
++ hw_if->write_mmd_regs = xgbe_write_mmd_regs;
++
++ hw_if->set_gmii_speed = xgbe_set_gmii_speed;
++ hw_if->set_gmii_2500_speed = xgbe_set_gmii_2500_speed;
++ hw_if->set_xgmii_speed = xgbe_set_xgmii_speed;
++
++ hw_if->enable_tx = xgbe_enable_tx;
++ hw_if->disable_tx = xgbe_disable_tx;
++ hw_if->enable_rx = xgbe_enable_rx;
++ hw_if->disable_rx = xgbe_disable_rx;
++
++ hw_if->powerup_tx = xgbe_powerup_tx;
++ hw_if->powerdown_tx = xgbe_powerdown_tx;
++ hw_if->powerup_rx = xgbe_powerup_rx;
++ hw_if->powerdown_rx = xgbe_powerdown_rx;
++
++ hw_if->dev_xmit = xgbe_dev_xmit;
++ hw_if->dev_read = xgbe_dev_read;
++ hw_if->enable_int = xgbe_enable_int;
++ hw_if->disable_int = xgbe_disable_int;
++ hw_if->init = xgbe_init;
++ hw_if->exit = xgbe_exit;
++
++ /* Descriptor related Sequences have to be initialized here */
++ hw_if->tx_desc_init = xgbe_tx_desc_init;
++ hw_if->rx_desc_init = xgbe_rx_desc_init;
++ hw_if->tx_desc_reset = xgbe_tx_desc_reset;
++ hw_if->rx_desc_reset = xgbe_rx_desc_reset;
++ hw_if->is_last_desc = xgbe_is_last_desc;
++ hw_if->is_context_desc = xgbe_is_context_desc;
++ hw_if->tx_start_xmit = xgbe_tx_start_xmit;
++
++ /* For FLOW ctrl */
++ hw_if->config_tx_flow_control = xgbe_config_tx_flow_control;
++ hw_if->config_rx_flow_control = xgbe_config_rx_flow_control;
++
++ /* For RX coalescing */
++ hw_if->config_rx_coalesce = xgbe_config_rx_coalesce;
++ hw_if->config_tx_coalesce = xgbe_config_tx_coalesce;
++ hw_if->usec_to_riwt = xgbe_usec_to_riwt;
++ hw_if->riwt_to_usec = xgbe_riwt_to_usec;
++
++ /* For RX and TX threshold config */
++ hw_if->config_rx_threshold = xgbe_config_rx_threshold;
++ hw_if->config_tx_threshold = xgbe_config_tx_threshold;
++
++ /* For RX and TX Store and Forward Mode config */
++ hw_if->config_rsf_mode = xgbe_config_rsf_mode;
++ hw_if->config_tsf_mode = xgbe_config_tsf_mode;
++
++ /* For TX DMA Operating on Second Frame config */
++ hw_if->config_osp_mode = xgbe_config_osp_mode;
++
++ /* For RX and TX PBL config */
++ hw_if->config_rx_pbl_val = xgbe_config_rx_pbl_val;
++ hw_if->get_rx_pbl_val = xgbe_get_rx_pbl_val;
++ hw_if->config_tx_pbl_val = xgbe_config_tx_pbl_val;
++ hw_if->get_tx_pbl_val = xgbe_get_tx_pbl_val;
++ hw_if->config_pblx8 = xgbe_config_pblx8;
++
++ /* For MMC statistics support */
++ hw_if->tx_mmc_int = xgbe_tx_mmc_int;
++ hw_if->rx_mmc_int = xgbe_rx_mmc_int;
++ hw_if->read_mmc_stats = xgbe_read_mmc_stats;
++
++ /* For PTP config */
++ hw_if->config_tstamp = xgbe_config_tstamp;
++ hw_if->update_tstamp_addend = xgbe_update_tstamp_addend;
++ hw_if->set_tstamp_time = xgbe_set_tstamp_time;
++ hw_if->get_tstamp_time = xgbe_get_tstamp_time;
++ hw_if->get_tx_tstamp = xgbe_get_tx_tstamp;
++
++ /* For Data Center Bridging config */
++ hw_if->config_dcb_tc = xgbe_config_dcb_tc;
++ hw_if->config_dcb_pfc = xgbe_config_dcb_pfc;
++
++ /* For Receive Side Scaling */
++ hw_if->enable_rss = xgbe_enable_rss;
++ hw_if->disable_rss = xgbe_disable_rss;
++ hw_if->set_rss_hash_key = xgbe_set_rss_hash_key;
++ hw_if->set_rss_lookup_table = xgbe_set_rss_lookup_table;
++
++ DBGPR("<--xgbe_a0_init_function_ptrs\n");
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c
+new file mode 100644
+index 000000000000..ca4af9e508b8
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-drv.c
+@@ -0,0 +1,2218 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/tcp.h>
++#include <linux/if_vlan.h>
++#include <net/busy_poll.h>
++#include <linux/clk.h>
++#include <linux/if_ether.h>
++#include <linux/net_tstamp.h>
++#include <linux/phy.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static int xgbe_one_poll(struct napi_struct *, int);
++static int xgbe_all_poll(struct napi_struct *, int);
++static void xgbe_set_rx_mode(struct net_device *);
++
++static int xgbe_alloc_channels(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel_mem, *channel;
++ struct xgbe_ring *tx_ring, *rx_ring;
++ unsigned int count, i;
++ int ret = -ENOMEM;
++
++ count = max_t(unsigned int, pdata->tx_ring_count, pdata->rx_ring_count);
++
++ channel_mem = kcalloc(count, sizeof(struct xgbe_channel), GFP_KERNEL);
++ if (!channel_mem)
++ goto err_channel;
++
++ tx_ring = kcalloc(pdata->tx_ring_count, sizeof(struct xgbe_ring),
++ GFP_KERNEL);
++ if (!tx_ring)
++ goto err_tx_ring;
++
++ rx_ring = kcalloc(pdata->rx_ring_count, sizeof(struct xgbe_ring),
++ GFP_KERNEL);
++ if (!rx_ring)
++ goto err_rx_ring;
++
++ for (i = 0, channel = channel_mem; i < count; i++, channel++) {
++ snprintf(channel->name, sizeof(channel->name), "channel-%d", i);
++ channel->pdata = pdata;
++ channel->queue_index = i;
++ channel->dma_regs = pdata->xgmac_regs + DMA_CH_BASE +
++ (DMA_CH_INC * i);
++
++ if (pdata->per_channel_irq) {
++ /* Get the DMA interrupt (offset 1) */
++ ret = platform_get_irq(pdata->pdev, i + 1);
++ if (ret < 0) {
++ netdev_err(pdata->netdev,
++ "platform_get_irq %u failed\n",
++ i + 1);
++ goto err_irq;
++ }
++
++ channel->dma_irq = ret;
++ }
++
++ if (i < pdata->tx_ring_count) {
++ spin_lock_init(&tx_ring->lock);
++ channel->tx_ring = tx_ring++;
++ }
++
++ if (i < pdata->rx_ring_count) {
++ spin_lock_init(&rx_ring->lock);
++ channel->rx_ring = rx_ring++;
++ }
++
++ DBGPR(" %s: queue=%u, dma_regs=%p, dma_irq=%d, tx=%p, rx=%p\n",
++ channel->name, channel->queue_index, channel->dma_regs,
++ channel->dma_irq, channel->tx_ring, channel->rx_ring);
++ }
++
++ pdata->channel = channel_mem;
++ pdata->channel_count = count;
++
++ return 0;
++
++err_irq:
++ kfree(rx_ring);
++
++err_rx_ring:
++ kfree(tx_ring);
++
++err_tx_ring:
++ kfree(channel_mem);
++
++err_channel:
++ return ret;
++}
++
++static void xgbe_free_channels(struct xgbe_prv_data *pdata)
++{
++ if (!pdata->channel)
++ return;
++
++ kfree(pdata->channel->rx_ring);
++ kfree(pdata->channel->tx_ring);
++ kfree(pdata->channel);
++
++ pdata->channel = NULL;
++ pdata->channel_count = 0;
++}
++
++static inline unsigned int xgbe_tx_avail_desc(struct xgbe_ring *ring)
++{
++ return (ring->rdesc_count - (ring->cur - ring->dirty));
++}
++
++static inline unsigned int xgbe_rx_dirty_desc(struct xgbe_ring *ring)
++{
++ return (ring->cur - ring->dirty);
++}
++
++static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel,
++ struct xgbe_ring *ring, unsigned int count)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++
++ if (count > xgbe_tx_avail_desc(ring)) {
++ DBGPR(" Tx queue stopped, not enough descriptors available\n");
++ netif_stop_subqueue(pdata->netdev, channel->queue_index);
++ ring->tx.queue_stopped = 1;
++
++ /* If we haven't notified the hardware because of xmit_more
++ * support, tell it now
++ */
++ if (ring->tx.xmit_more)
++ pdata->hw_if.tx_start_xmit(channel, ring);
++
++ return NETDEV_TX_BUSY;
++ }
++
++ return 0;
++}
++
++static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu)
++{
++ unsigned int rx_buf_size;
++
++ if (mtu > XGMAC_JUMBO_PACKET_MTU) {
++ netdev_alert(netdev, "MTU exceeds maximum supported value\n");
++ return -EINVAL;
++ }
++
++ rx_buf_size = mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
++ rx_buf_size = clamp_val(rx_buf_size, XGBE_RX_MIN_BUF_SIZE, PAGE_SIZE);
++
++ rx_buf_size = (rx_buf_size + XGBE_RX_BUF_ALIGN - 1) &
++ ~(XGBE_RX_BUF_ALIGN - 1);
++
++ return rx_buf_size;
++}
++
++static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_channel *channel;
++ enum xgbe_int int_id;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (channel->tx_ring && channel->rx_ring)
++ int_id = XGMAC_INT_DMA_CH_SR_TI_RI;
++ else if (channel->tx_ring)
++ int_id = XGMAC_INT_DMA_CH_SR_TI;
++ else if (channel->rx_ring)
++ int_id = XGMAC_INT_DMA_CH_SR_RI;
++ else
++ continue;
++
++ hw_if->enable_int(channel, int_id);
++ }
++}
++
++static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_channel *channel;
++ enum xgbe_int int_id;
++ unsigned int i;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (channel->tx_ring && channel->rx_ring)
++ int_id = XGMAC_INT_DMA_CH_SR_TI_RI;
++ else if (channel->tx_ring)
++ int_id = XGMAC_INT_DMA_CH_SR_TI;
++ else if (channel->rx_ring)
++ int_id = XGMAC_INT_DMA_CH_SR_RI;
++ else
++ continue;
++
++ hw_if->disable_int(channel, int_id);
++ }
++}
++
++static irqreturn_t xgbe_isr(int irq, void *data)
++{
++ struct xgbe_prv_data *pdata = data;
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_channel *channel;
++ unsigned int dma_isr, dma_ch_isr;
++ unsigned int mac_isr, mac_tssr;
++ unsigned int i;
++
++ /* The DMA interrupt status register also reports MAC and MTL
++ * interrupts. So for polling mode, we just need to check for
++ * this register to be non-zero
++ */
++ dma_isr = XGMAC_IOREAD(pdata, DMA_ISR);
++ if (!dma_isr)
++ goto isr_done;
++
++ DBGPR(" DMA_ISR = %08x\n", dma_isr);
++
++ for (i = 0; i < pdata->channel_count; i++) {
++ if (!(dma_isr & (1 << i)))
++ continue;
++
++ channel = pdata->channel + i;
++
++ dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR);
++ DBGPR(" DMA_CH%u_ISR = %08x\n", i, dma_ch_isr);
++
++ /* The TI or RI interrupt bits may still be set even if using
++ * per channel DMA interrupts. Check to be sure those are not
++ * enabled before using the private data napi structure.
++ */
++ if (!pdata->per_channel_irq &&
++ (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) ||
++ XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI))) {
++ if (napi_schedule_prep(&pdata->napi)) {
++ /* Disable Tx and Rx interrupts */
++ xgbe_disable_rx_tx_ints(pdata);
++
++ /* Turn on polling */
++ __napi_schedule(&pdata->napi);
++ }
++ }
++
++ /* Restart the device on a Fatal Bus Error */
++ if (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, FBE))
++ schedule_work(&pdata->restart_work);
++
++ /* Clear all interrupt signals */
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_ch_isr);
++ }
++
++ if (XGMAC_GET_BITS(dma_isr, DMA_ISR, MACIS)) {
++ mac_isr = XGMAC_IOREAD(pdata, MAC_ISR);
++
++ if (XGMAC_GET_BITS(mac_isr, MAC_ISR, MMCTXIS))
++ hw_if->tx_mmc_int(pdata);
++
++ if (XGMAC_GET_BITS(mac_isr, MAC_ISR, MMCRXIS))
++ hw_if->rx_mmc_int(pdata);
++
++ if (XGMAC_GET_BITS(mac_isr, MAC_ISR, TSIS)) {
++ mac_tssr = XGMAC_IOREAD(pdata, MAC_TSSR);
++
++ if (XGMAC_GET_BITS(mac_tssr, MAC_TSSR, TXTSC)) {
++ /* Read Tx Timestamp to clear interrupt */
++ pdata->tx_tstamp =
++ hw_if->get_tx_tstamp(pdata);
++ schedule_work(&pdata->tx_tstamp_work);
++ }
++ }
++ }
++
++ DBGPR(" DMA_ISR = %08x\n", XGMAC_IOREAD(pdata, DMA_ISR));
++
++isr_done:
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t xgbe_dma_isr(int irq, void *data)
++{
++ struct xgbe_channel *channel = data;
++
++ /* Per channel DMA interrupts are enabled, so we use the per
++ * channel napi structure and not the private data napi structure
++ */
++ if (napi_schedule_prep(&channel->napi)) {
++ /* Disable Tx and Rx interrupts */
++ disable_irq_nosync(channel->dma_irq);
++
++ /* Turn on polling */
++ __napi_schedule(&channel->napi);
++ }
++
++ return IRQ_HANDLED;
++}
++
++static enum hrtimer_restart xgbe_tx_timer(struct hrtimer *timer)
++{
++ struct xgbe_channel *channel = container_of(timer,
++ struct xgbe_channel,
++ tx_timer);
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct napi_struct *napi;
++
++ DBGPR("-->xgbe_tx_timer\n");
++
++ napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
++
++ if (napi_schedule_prep(napi)) {
++ /* Disable Tx and Rx interrupts */
++ if (pdata->per_channel_irq)
++ disable_irq(channel->dma_irq);
++ else
++ xgbe_disable_rx_tx_ints(pdata);
++
++ /* Turn on polling */
++ __napi_schedule(napi);
++ }
++
++ channel->tx_timer_active = 0;
++
++ DBGPR("<--xgbe_tx_timer\n");
++
++ return HRTIMER_NORESTART;
++}
++
++static void xgbe_init_tx_timers(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ DBGPR("-->xgbe_init_tx_timers\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ DBGPR(" %s adding tx timer\n", channel->name);
++ hrtimer_init(&channel->tx_timer, CLOCK_MONOTONIC,
++ HRTIMER_MODE_REL);
++ channel->tx_timer.function = xgbe_tx_timer;
++ }
++
++ DBGPR("<--xgbe_init_tx_timers\n");
++}
++
++static void xgbe_stop_tx_timers(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ DBGPR("-->xgbe_stop_tx_timers\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ break;
++
++ DBGPR(" %s deleting tx timer\n", channel->name);
++ channel->tx_timer_active = 0;
++ hrtimer_cancel(&channel->tx_timer);
++ }
++
++ DBGPR("<--xgbe_stop_tx_timers\n");
++}
++
++void xgbe_a0_get_all_hw_features(struct xgbe_prv_data *pdata)
++{
++ unsigned int mac_hfr0, mac_hfr1, mac_hfr2;
++ struct xgbe_hw_features *hw_feat = &pdata->hw_feat;
++
++ DBGPR("-->xgbe_a0_get_all_hw_features\n");
++
++ mac_hfr0 = XGMAC_IOREAD(pdata, MAC_HWF0R);
++ mac_hfr1 = XGMAC_IOREAD(pdata, MAC_HWF1R);
++ mac_hfr2 = XGMAC_IOREAD(pdata, MAC_HWF2R);
++
++ memset(hw_feat, 0, sizeof(*hw_feat));
++
++ hw_feat->version = XGMAC_IOREAD(pdata, MAC_VR);
++
++ /* Hardware feature register 0 */
++ hw_feat->gmii = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, GMIISEL);
++ hw_feat->vlhash = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, VLHASH);
++ hw_feat->sma = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, SMASEL);
++ hw_feat->rwk = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, RWKSEL);
++ hw_feat->mgk = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, MGKSEL);
++ hw_feat->mmc = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, MMCSEL);
++ hw_feat->aoe = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, ARPOFFSEL);
++ hw_feat->ts = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, TSSEL);
++ hw_feat->eee = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, EEESEL);
++ hw_feat->tx_coe = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, TXCOESEL);
++ hw_feat->rx_coe = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, RXCOESEL);
++ hw_feat->addn_mac = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R,
++ ADDMACADRSEL);
++ hw_feat->ts_src = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, TSSTSSEL);
++ hw_feat->sa_vlan_ins = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, SAVLANINS);
++
++ /* Hardware feature register 1 */
++ hw_feat->rx_fifo_size = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R,
++ RXFIFOSIZE);
++ hw_feat->tx_fifo_size = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R,
++ TXFIFOSIZE);
++ hw_feat->dcb = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, DCBEN);
++ hw_feat->sph = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, SPHEN);
++ hw_feat->tso = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, TSOEN);
++ hw_feat->dma_debug = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, DBGMEMA);
++ hw_feat->rss = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, RSSEN);
++ hw_feat->tc_cnt = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, NUMTC);
++ hw_feat->hash_table_size = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R,
++ HASHTBLSZ);
++ hw_feat->l3l4_filter_num = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R,
++ L3L4FNUM);
++
++ /* Hardware feature register 2 */
++ hw_feat->rx_q_cnt = XGMAC_GET_BITS(mac_hfr2, MAC_HWF2R, RXQCNT);
++ hw_feat->tx_q_cnt = XGMAC_GET_BITS(mac_hfr2, MAC_HWF2R, TXQCNT);
++ hw_feat->rx_ch_cnt = XGMAC_GET_BITS(mac_hfr2, MAC_HWF2R, RXCHCNT);
++ hw_feat->tx_ch_cnt = XGMAC_GET_BITS(mac_hfr2, MAC_HWF2R, TXCHCNT);
++ hw_feat->pps_out_num = XGMAC_GET_BITS(mac_hfr2, MAC_HWF2R, PPSOUTNUM);
++ hw_feat->aux_snap_num = XGMAC_GET_BITS(mac_hfr2, MAC_HWF2R, AUXSNAPNUM);
++
++ /* Translate the Hash Table size into actual number */
++ switch (hw_feat->hash_table_size) {
++ case 0:
++ break;
++ case 1:
++ hw_feat->hash_table_size = 64;
++ break;
++ case 2:
++ hw_feat->hash_table_size = 128;
++ break;
++ case 3:
++ hw_feat->hash_table_size = 256;
++ break;
++ }
++
++ /* The Queue, Channel and TC counts are zero based so increment them
++ * to get the actual number
++ */
++ hw_feat->rx_q_cnt++;
++ hw_feat->tx_q_cnt++;
++ hw_feat->rx_ch_cnt++;
++ hw_feat->tx_ch_cnt++;
++ hw_feat->tc_cnt++;
++
++#define XGBE_TC_CNT 2
++ hw_feat->tc_cnt = XGBE_TC_CNT;
++
++ DBGPR("<--xgbe_a0_get_all_hw_features\n");
++}
++
++static void xgbe_napi_enable(struct xgbe_prv_data *pdata, unsigned int add)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ if (pdata->per_channel_irq) {
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (add)
++ netif_napi_add(pdata->netdev, &channel->napi,
++ xgbe_one_poll, NAPI_POLL_WEIGHT);
++
++ napi_enable(&channel->napi);
++ }
++ } else {
++ if (add)
++ netif_napi_add(pdata->netdev, &pdata->napi,
++ xgbe_all_poll, NAPI_POLL_WEIGHT);
++
++ napi_enable(&pdata->napi);
++ }
++}
++
++static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ if (pdata->per_channel_irq) {
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ napi_disable(&channel->napi);
++
++ if (del)
++ netif_napi_del(&channel->napi);
++ }
++ } else {
++ napi_disable(&pdata->napi);
++
++ if (del)
++ netif_napi_del(&pdata->napi);
++ }
++}
++
++static int xgbe_request_irqs(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ struct net_device *netdev = pdata->netdev;
++ unsigned int i;
++ int ret;
++
++ ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0,
++ netdev->name, pdata);
++ if (ret) {
++ netdev_alert(netdev, "error requesting irq %d\n",
++ pdata->dev_irq);
++ return ret;
++ }
++
++ if (!pdata->per_channel_irq)
++ return 0;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ snprintf(channel->dma_irq_name,
++ sizeof(channel->dma_irq_name) - 1,
++ "%s-TxRx-%u", netdev_name(netdev),
++ channel->queue_index);
++
++ ret = devm_request_irq(pdata->dev, channel->dma_irq,
++ xgbe_dma_isr, 0,
++ channel->dma_irq_name, channel);
++ if (ret) {
++ netdev_alert(netdev, "error requesting irq %d\n",
++ channel->dma_irq);
++ goto err_irq;
++ }
++ }
++
++ return 0;
++
++err_irq:
++ /* Using an unsigned int, 'i' will go to UINT_MAX and exit */
++ for (i--, channel--; i < pdata->channel_count; i--, channel--)
++ devm_free_irq(pdata->dev, channel->dma_irq, channel);
++
++ devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
++
++ return ret;
++}
++
++static void xgbe_free_irqs(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
++
++ if (!pdata->per_channel_irq)
++ return;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++)
++ devm_free_irq(pdata->dev, channel->dma_irq, channel);
++}
++
++void xgbe_a0_init_tx_coalesce(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++
++ DBGPR("-->xgbe_a0_init_tx_coalesce\n");
++
++ pdata->tx_usecs = XGMAC_INIT_DMA_TX_USECS;
++ pdata->tx_frames = XGMAC_INIT_DMA_TX_FRAMES;
++
++ hw_if->config_tx_coalesce(pdata);
++
++ DBGPR("<--xgbe_a0_init_tx_coalesce\n");
++}
++
++void xgbe_a0_init_rx_coalesce(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++
++ DBGPR("-->xgbe_a0_init_rx_coalesce\n");
++
++ pdata->rx_riwt = hw_if->usec_to_riwt(pdata, XGMAC_INIT_DMA_RX_USECS);
++ pdata->rx_frames = XGMAC_INIT_DMA_RX_FRAMES;
++
++ hw_if->config_rx_coalesce(pdata);
++
++ DBGPR("<--xgbe_a0_init_rx_coalesce\n");
++}
++
++static void xgbe_free_tx_data(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ struct xgbe_channel *channel;
++ struct xgbe_ring *ring;
++ struct xgbe_ring_data *rdata;
++ unsigned int i, j;
++
++ DBGPR("-->xgbe_free_tx_data\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ ring = channel->tx_ring;
++ if (!ring)
++ break;
++
++ for (j = 0; j < ring->rdesc_count; j++) {
++ rdata = XGBE_GET_DESC_DATA(ring, j);
++ desc_if->unmap_rdata(pdata, rdata);
++ }
++ }
++
++ DBGPR("<--xgbe_free_tx_data\n");
++}
++
++static void xgbe_free_rx_data(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ struct xgbe_channel *channel;
++ struct xgbe_ring *ring;
++ struct xgbe_ring_data *rdata;
++ unsigned int i, j;
++
++ DBGPR("-->xgbe_free_rx_data\n");
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ ring = channel->rx_ring;
++ if (!ring)
++ break;
++
++ for (j = 0; j < ring->rdesc_count; j++) {
++ rdata = XGBE_GET_DESC_DATA(ring, j);
++ desc_if->unmap_rdata(pdata, rdata);
++ }
++ }
++
++ DBGPR("<--xgbe_free_rx_data\n");
++}
++
++static void xgbe_adjust_link(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct phy_device *phydev = pdata->phydev;
++ int new_state = 0;
++
++ if (!phydev)
++ return;
++
++ if (phydev->link) {
++ /* Flow control support */
++ if (pdata->pause_autoneg) {
++ if (phydev->pause || phydev->asym_pause) {
++ pdata->tx_pause = 1;
++ pdata->rx_pause = 1;
++ } else {
++ pdata->tx_pause = 0;
++ pdata->rx_pause = 0;
++ }
++ }
++
++ if (pdata->tx_pause != pdata->phy_tx_pause) {
++ hw_if->config_tx_flow_control(pdata);
++ pdata->phy_tx_pause = pdata->tx_pause;
++ }
++
++ if (pdata->rx_pause != pdata->phy_rx_pause) {
++ hw_if->config_rx_flow_control(pdata);
++ pdata->phy_rx_pause = pdata->rx_pause;
++ }
++
++ /* Speed support */
++ if (phydev->speed != pdata->phy_speed) {
++ new_state = 1;
++
++ switch (phydev->speed) {
++ case SPEED_10000:
++ hw_if->set_xgmii_speed(pdata);
++ break;
++
++ case SPEED_2500:
++ hw_if->set_gmii_2500_speed(pdata);
++ break;
++
++ case SPEED_1000:
++ hw_if->set_gmii_speed(pdata);
++ break;
++ }
++ pdata->phy_speed = phydev->speed;
++ }
++
++ if (phydev->link != pdata->phy_link) {
++ new_state = 1;
++ pdata->phy_link = 1;
++ }
++ } else if (pdata->phy_link) {
++ new_state = 1;
++ pdata->phy_link = 0;
++ pdata->phy_speed = SPEED_UNKNOWN;
++ }
++
++ if (new_state)
++ phy_print_status(phydev);
++}
++
++static int xgbe_phy_init(struct xgbe_prv_data *pdata)
++{
++ struct net_device *netdev = pdata->netdev;
++ struct phy_device *phydev = pdata->phydev;
++ int ret;
++
++ pdata->phy_link = -1;
++ pdata->phy_speed = SPEED_UNKNOWN;
++ pdata->phy_tx_pause = pdata->tx_pause;
++ pdata->phy_rx_pause = pdata->rx_pause;
++
++ ret = phy_connect_direct(netdev, phydev, &xgbe_adjust_link,
++ pdata->phy_mode);
++ if (ret) {
++ netdev_err(netdev, "phy_connect_direct failed\n");
++ return ret;
++ }
++
++ if (!phydev->drv || (phydev->drv->phy_id == 0)) {
++ netdev_err(netdev, "phy_id not valid\n");
++ ret = -ENODEV;
++ goto err_phy_connect;
++ }
++ DBGPR(" phy_connect_direct succeeded for PHY %s, link=%d\n",
++ dev_name(&phydev->dev), phydev->link);
++
++ return 0;
++
++err_phy_connect:
++ phy_disconnect(phydev);
++
++ return ret;
++}
++
++static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
++{
++ if (!pdata->phydev)
++ return;
++
++ phy_disconnect(pdata->phydev);
++}
++
++int xgbe_a0_powerdown(struct net_device *netdev, unsigned int caller)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ unsigned long flags;
++
++ DBGPR("-->xgbe_a0_powerdown\n");
++
++ if (!netif_running(netdev) ||
++ (caller == XGMAC_IOCTL_CONTEXT && pdata->power_down)) {
++ netdev_alert(netdev, "Device is already powered down\n");
++ DBGPR("<--xgbe_a0_powerdown\n");
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&pdata->lock, flags);
++
++ if (caller == XGMAC_DRIVER_CONTEXT)
++ netif_device_detach(netdev);
++
++ netif_tx_stop_all_queues(netdev);
++
++ hw_if->powerdown_tx(pdata);
++ hw_if->powerdown_rx(pdata);
++
++ xgbe_napi_disable(pdata, 0);
++
++ phy_stop(pdata->phydev);
++
++ pdata->power_down = 1;
++
++ spin_unlock_irqrestore(&pdata->lock, flags);
++
++ DBGPR("<--xgbe_a0_powerdown\n");
++
++ return 0;
++}
++
++int xgbe_a0_powerup(struct net_device *netdev, unsigned int caller)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ unsigned long flags;
++
++ DBGPR("-->xgbe_a0_powerup\n");
++
++ if (!netif_running(netdev) ||
++ (caller == XGMAC_IOCTL_CONTEXT && !pdata->power_down)) {
++ netdev_alert(netdev, "Device is already powered up\n");
++ DBGPR("<--xgbe_a0_powerup\n");
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&pdata->lock, flags);
++
++ pdata->power_down = 0;
++
++ phy_start(pdata->phydev);
++
++ xgbe_napi_enable(pdata, 0);
++
++ hw_if->powerup_tx(pdata);
++ hw_if->powerup_rx(pdata);
++
++ if (caller == XGMAC_DRIVER_CONTEXT)
++ netif_device_attach(netdev);
++
++ netif_tx_start_all_queues(netdev);
++
++ spin_unlock_irqrestore(&pdata->lock, flags);
++
++ DBGPR("<--xgbe_a0_powerup\n");
++
++ return 0;
++}
++
++static int xgbe_start(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct net_device *netdev = pdata->netdev;
++ int ret;
++
++ DBGPR("-->xgbe_start\n");
++
++ xgbe_set_rx_mode(netdev);
++
++ hw_if->init(pdata);
++
++ phy_start(pdata->phydev);
++
++ xgbe_napi_enable(pdata, 1);
++
++ ret = xgbe_request_irqs(pdata);
++ if (ret)
++ goto err_napi;
++
++ hw_if->enable_tx(pdata);
++ hw_if->enable_rx(pdata);
++
++ xgbe_init_tx_timers(pdata);
++
++ netif_tx_start_all_queues(netdev);
++
++ DBGPR("<--xgbe_start\n");
++
++ return 0;
++
++err_napi:
++ xgbe_napi_disable(pdata, 1);
++
++ phy_stop(pdata->phydev);
++
++ hw_if->exit(pdata);
++
++ return ret;
++}
++
++static void xgbe_stop(struct xgbe_prv_data *pdata)
++{
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_channel *channel;
++ struct net_device *netdev = pdata->netdev;
++ struct netdev_queue *txq;
++ unsigned int i;
++
++ DBGPR("-->xgbe_stop\n");
++
++ netif_tx_stop_all_queues(netdev);
++
++ xgbe_stop_tx_timers(pdata);
++
++ hw_if->disable_tx(pdata);
++ hw_if->disable_rx(pdata);
++
++ xgbe_free_irqs(pdata);
++
++ xgbe_napi_disable(pdata, 1);
++
++ phy_stop(pdata->phydev);
++
++ hw_if->exit(pdata);
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ if (!channel->tx_ring)
++ continue;
++
++ txq = netdev_get_tx_queue(netdev, channel->queue_index);
++ netdev_tx_reset_queue(txq);
++ }
++
++ DBGPR("<--xgbe_stop\n");
++}
++
++static void xgbe_restart_dev(struct xgbe_prv_data *pdata)
++{
++ DBGPR("-->xgbe_restart_dev\n");
++
++ /* If not running, "restart" will happen on open */
++ if (!netif_running(pdata->netdev))
++ return;
++
++ xgbe_stop(pdata);
++
++ xgbe_free_tx_data(pdata);
++ xgbe_free_rx_data(pdata);
++
++ xgbe_start(pdata);
++
++ DBGPR("<--xgbe_restart_dev\n");
++}
++
++static void xgbe_restart(struct work_struct *work)
++{
++ struct xgbe_prv_data *pdata = container_of(work,
++ struct xgbe_prv_data,
++ restart_work);
++
++ rtnl_lock();
++
++ xgbe_restart_dev(pdata);
++
++ rtnl_unlock();
++}
++
++static void xgbe_tx_tstamp(struct work_struct *work)
++{
++ struct xgbe_prv_data *pdata = container_of(work,
++ struct xgbe_prv_data,
++ tx_tstamp_work);
++ struct skb_shared_hwtstamps hwtstamps;
++ u64 nsec;
++ unsigned long flags;
++
++ if (pdata->tx_tstamp) {
++ nsec = timecounter_cyc2time(&pdata->tstamp_tc,
++ pdata->tx_tstamp);
++
++ memset(&hwtstamps, 0, sizeof(hwtstamps));
++ hwtstamps.hwtstamp = ns_to_ktime(nsec);
++ skb_tstamp_tx(pdata->tx_tstamp_skb, &hwtstamps);
++ }
++
++ dev_kfree_skb_any(pdata->tx_tstamp_skb);
++
++ spin_lock_irqsave(&pdata->tstamp_lock, flags);
++ pdata->tx_tstamp_skb = NULL;
++ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
++}
++
++static int xgbe_get_hwtstamp_settings(struct xgbe_prv_data *pdata,
++ struct ifreq *ifreq)
++{
++ if (copy_to_user(ifreq->ifr_data, &pdata->tstamp_config,
++ sizeof(pdata->tstamp_config)))
++ return -EFAULT;
++
++ return 0;
++}
++
++static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
++ struct ifreq *ifreq)
++{
++ struct hwtstamp_config config;
++ unsigned int mac_tscr;
++
++ if (copy_from_user(&config, ifreq->ifr_data, sizeof(config)))
++ return -EFAULT;
++
++ if (config.flags)
++ return -EINVAL;
++
++ mac_tscr = 0;
++
++ switch (config.tx_type) {
++ case HWTSTAMP_TX_OFF:
++ break;
++
++ case HWTSTAMP_TX_ON:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ default:
++ return -ERANGE;
++ }
++
++ switch (config.rx_filter) {
++ case HWTSTAMP_FILTER_NONE:
++ break;
++
++ case HWTSTAMP_FILTER_ALL:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENALL, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* PTP v2, UDP, any kind of event packet */
++ case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1);
++ /* PTP v1, UDP, any kind of event packet */
++ case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, SNAPTYPSEL, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* PTP v2, UDP, Sync packet */
++ case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1);
++ /* PTP v1, UDP, Sync packet */
++ case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSEVNTENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* PTP v2, UDP, Delay_req packet */
++ case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1);
++ /* PTP v1, UDP, Delay_req packet */
++ case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSEVNTENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSMSTRENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* 802.AS1, Ethernet, any kind of event packet */
++ case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, AV8021ASMEN, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, SNAPTYPSEL, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* 802.AS1, Ethernet, Sync packet */
++ case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, AV8021ASMEN, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSEVNTENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* 802.AS1, Ethernet, Delay_req packet */
++ case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, AV8021ASMEN, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSMSTRENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSEVNTENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* PTP v2/802.AS1, any layer, any kind of event packet */
++ case HWTSTAMP_FILTER_PTP_V2_EVENT:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, SNAPTYPSEL, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* PTP v2/802.AS1, any layer, Sync packet */
++ case HWTSTAMP_FILTER_PTP_V2_SYNC:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSEVNTENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ /* PTP v2/802.AS1, any layer, Delay_req packet */
++ case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSMSTRENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSEVNTENA, 1);
++ XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 1);
++ break;
++
++ default:
++ return -ERANGE;
++ }
++
++ pdata->hw_if.config_tstamp(pdata, mac_tscr);
++
++ memcpy(&pdata->tstamp_config, &config, sizeof(config));
++
++ return 0;
++}
++
++static void xgbe_prep_tx_tstamp(struct xgbe_prv_data *pdata,
++ struct sk_buff *skb,
++ struct xgbe_packet_data *packet)
++{
++ unsigned long flags;
++
++ if (XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES, PTP)) {
++ spin_lock_irqsave(&pdata->tstamp_lock, flags);
++ if (pdata->tx_tstamp_skb) {
++ /* Another timestamp in progress, ignore this one */
++ XGMAC_SET_BITS(packet->attributes,
++ TX_PACKET_ATTRIBUTES, PTP, 0);
++ } else {
++ pdata->tx_tstamp_skb = skb_get(skb);
++ skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
++ }
++ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
++ }
++
++ if (!XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES, PTP))
++ skb_tx_timestamp(skb);
++}
++
++static void xgbe_prep_vlan(struct sk_buff *skb, struct xgbe_packet_data *packet)
++{
++ if (skb_vlan_tag_present(skb))
++ packet->vlan_ctag = skb_vlan_tag_get(skb);
++}
++
++static int xgbe_prep_tso(struct sk_buff *skb, struct xgbe_packet_data *packet)
++{
++ int ret;
++
++ if (!XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ TSO_ENABLE))
++ return 0;
++
++ ret = skb_cow_head(skb, 0);
++ if (ret)
++ return ret;
++
++ packet->header_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
++ packet->tcp_header_len = tcp_hdrlen(skb);
++ packet->tcp_payload_len = skb->len - packet->header_len;
++ packet->mss = skb_shinfo(skb)->gso_size;
++ DBGPR(" packet->header_len=%u\n", packet->header_len);
++ DBGPR(" packet->tcp_header_len=%u, packet->tcp_payload_len=%u\n",
++ packet->tcp_header_len, packet->tcp_payload_len);
++ DBGPR(" packet->mss=%u\n", packet->mss);
++
++ /* Update the number of packets that will ultimately be transmitted
++ * along with the extra bytes for each extra packet
++ */
++ packet->tx_packets = skb_shinfo(skb)->gso_segs;
++ packet->tx_bytes += (packet->tx_packets - 1) * packet->header_len;
++
++ return 0;
++}
++
++static int xgbe_is_tso(struct sk_buff *skb)
++{
++ if (skb->ip_summed != CHECKSUM_PARTIAL)
++ return 0;
++
++ if (!skb_is_gso(skb))
++ return 0;
++
++ DBGPR(" TSO packet to be processed\n");
++
++ return 1;
++}
++
++static void xgbe_packet_info(struct xgbe_prv_data *pdata,
++ struct xgbe_ring *ring, struct sk_buff *skb,
++ struct xgbe_packet_data *packet)
++{
++ struct skb_frag_struct *frag;
++ unsigned int context_desc;
++ unsigned int len;
++ unsigned int i;
++
++ packet->skb = skb;
++
++ context_desc = 0;
++ packet->rdesc_count = 0;
++
++ packet->tx_packets = 1;
++ packet->tx_bytes = skb->len;
++
++ if (xgbe_is_tso(skb)) {
++ /* TSO requires an extra descriptor if mss is different */
++ if (skb_shinfo(skb)->gso_size != ring->tx.cur_mss) {
++ context_desc = 1;
++ packet->rdesc_count++;
++ }
++
++ /* TSO requires an extra descriptor for TSO header */
++ packet->rdesc_count++;
++
++ XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ TSO_ENABLE, 1);
++ XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ CSUM_ENABLE, 1);
++ } else if (skb->ip_summed == CHECKSUM_PARTIAL)
++ XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ CSUM_ENABLE, 1);
++
++ if (skb_vlan_tag_present(skb)) {
++ /* VLAN requires an extra descriptor if tag is different */
++ if (skb_vlan_tag_get(skb) != ring->tx.cur_vlan_ctag)
++ /* We can share with the TSO context descriptor */
++ if (!context_desc) {
++ context_desc = 1;
++ packet->rdesc_count++;
++ }
++
++ XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ VLAN_CTAG, 1);
++ }
++
++ if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
++ (pdata->tstamp_config.tx_type == HWTSTAMP_TX_ON))
++ XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
++ PTP, 1);
++
++ for (len = skb_headlen(skb); len;) {
++ packet->rdesc_count++;
++ len -= min_t(unsigned int, len, XGBE_TX_MAX_BUF_SIZE);
++ }
++
++ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
++ frag = &skb_shinfo(skb)->frags[i];
++ for (len = skb_frag_size(frag); len; ) {
++ packet->rdesc_count++;
++ len -= min_t(unsigned int, len, XGBE_TX_MAX_BUF_SIZE);
++ }
++ }
++}
++
++static int xgbe_open(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ int ret;
++
++ DBGPR("-->xgbe_open\n");
++
++ /* Initialize the phy */
++ ret = xgbe_phy_init(pdata);
++ if (ret)
++ return ret;
++
++ /* Enable the clocks */
++ ret = clk_prepare_enable(pdata->sysclk);
++ if (ret) {
++ netdev_alert(netdev, "dma clk_prepare_enable failed\n");
++ goto err_phy_init;
++ }
++
++ ret = clk_prepare_enable(pdata->ptpclk);
++ if (ret) {
++ netdev_alert(netdev, "ptp clk_prepare_enable failed\n");
++ goto err_sysclk;
++ }
++
++ /* Calculate the Rx buffer size before allocating rings */
++ ret = xgbe_calc_rx_buf_size(netdev, netdev->mtu);
++ if (ret < 0)
++ goto err_ptpclk;
++ pdata->rx_buf_size = ret;
++
++ /* Allocate the channel and ring structures */
++ ret = xgbe_alloc_channels(pdata);
++ if (ret)
++ goto err_ptpclk;
++
++ /* Allocate the ring descriptors and buffers */
++ ret = desc_if->alloc_ring_resources(pdata);
++ if (ret)
++ goto err_channels;
++
++ /* Initialize the device restart and Tx timestamp work struct */
++ INIT_WORK(&pdata->restart_work, xgbe_restart);
++ INIT_WORK(&pdata->tx_tstamp_work, xgbe_tx_tstamp);
++
++ ret = xgbe_start(pdata);
++ if (ret)
++ goto err_rings;
++
++ DBGPR("<--xgbe_open\n");
++
++ return 0;
++
++err_rings:
++ desc_if->free_ring_resources(pdata);
++
++err_channels:
++ xgbe_free_channels(pdata);
++
++err_ptpclk:
++ clk_disable_unprepare(pdata->ptpclk);
++
++err_sysclk:
++ clk_disable_unprepare(pdata->sysclk);
++
++err_phy_init:
++ xgbe_phy_exit(pdata);
++
++ return ret;
++}
++
++static int xgbe_close(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++
++ DBGPR("-->xgbe_close\n");
++
++ /* Stop the device */
++ xgbe_stop(pdata);
++
++ /* Free the ring descriptors and buffers */
++ desc_if->free_ring_resources(pdata);
++
++ /* Free the channel and ring structures */
++ xgbe_free_channels(pdata);
++
++ /* Disable the clocks */
++ clk_disable_unprepare(pdata->ptpclk);
++ clk_disable_unprepare(pdata->sysclk);
++
++ /* Release the phy */
++ xgbe_phy_exit(pdata);
++
++ DBGPR("<--xgbe_close\n");
++
++ return 0;
++}
++
++static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ struct xgbe_channel *channel;
++ struct xgbe_ring *ring;
++ struct xgbe_packet_data *packet;
++ struct netdev_queue *txq;
++ int ret;
++
++ DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len);
++
++ channel = pdata->channel + skb->queue_mapping;
++ txq = netdev_get_tx_queue(netdev, channel->queue_index);
++ ring = channel->tx_ring;
++ packet = &ring->packet_data;
++
++ ret = NETDEV_TX_OK;
++
++ if (skb->len == 0) {
++ netdev_err(netdev, "empty skb received from stack\n");
++ dev_kfree_skb_any(skb);
++ goto tx_netdev_return;
++ }
++
++ /* Calculate preliminary packet info */
++ memset(packet, 0, sizeof(*packet));
++ xgbe_packet_info(pdata, ring, skb, packet);
++
++ /* Check that there are enough descriptors available */
++ ret = xgbe_maybe_stop_tx_queue(channel, ring, packet->rdesc_count);
++ if (ret)
++ goto tx_netdev_return;
++
++ ret = xgbe_prep_tso(skb, packet);
++ if (ret) {
++ netdev_err(netdev, "error processing TSO packet\n");
++ dev_kfree_skb_any(skb);
++ goto tx_netdev_return;
++ }
++ xgbe_prep_vlan(skb, packet);
++
++ if (!desc_if->map_tx_skb(channel, skb)) {
++ dev_kfree_skb_any(skb);
++ goto tx_netdev_return;
++ }
++
++ xgbe_prep_tx_tstamp(pdata, skb, packet);
++
++ /* Report on the actual number of bytes (to be) sent */
++ netdev_tx_sent_queue(txq, packet->tx_bytes);
++
++ /* Configure required descriptor fields for transmission */
++ hw_if->dev_xmit(channel);
++
++#ifdef XGMAC_ENABLE_TX_PKT_DUMP
++ xgbe_a0_print_pkt(netdev, skb, true);
++#endif
++
++ /* Stop the queue in advance if there may not be enough descriptors */
++ xgbe_maybe_stop_tx_queue(channel, ring, XGBE_TX_MAX_DESCS);
++
++ ret = NETDEV_TX_OK;
++
++tx_netdev_return:
++ return ret;
++}
++
++static void xgbe_set_rx_mode(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ unsigned int pr_mode, am_mode;
++
++ DBGPR("-->xgbe_set_rx_mode\n");
++
++ pr_mode = ((netdev->flags & IFF_PROMISC) != 0);
++ am_mode = ((netdev->flags & IFF_ALLMULTI) != 0);
++
++ hw_if->set_promiscuous_mode(pdata, pr_mode);
++ hw_if->set_all_multicast_mode(pdata, am_mode);
++
++ hw_if->add_mac_addresses(pdata);
++
++ DBGPR("<--xgbe_set_rx_mode\n");
++}
++
++static int xgbe_set_mac_address(struct net_device *netdev, void *addr)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct sockaddr *saddr = addr;
++
++ DBGPR("-->xgbe_set_mac_address\n");
++
++ if (!is_valid_ether_addr(saddr->sa_data))
++ return -EADDRNOTAVAIL;
++
++ memcpy(netdev->dev_addr, saddr->sa_data, netdev->addr_len);
++
++ hw_if->set_mac_address(pdata, netdev->dev_addr);
++
++ DBGPR("<--xgbe_set_mac_address\n");
++
++ return 0;
++}
++
++static int xgbe_ioctl(struct net_device *netdev, struct ifreq *ifreq, int cmd)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ int ret;
++
++ switch (cmd) {
++ case SIOCGHWTSTAMP:
++ ret = xgbe_get_hwtstamp_settings(pdata, ifreq);
++ break;
++
++ case SIOCSHWTSTAMP:
++ ret = xgbe_set_hwtstamp_settings(pdata, ifreq);
++ break;
++
++ default:
++ ret = -EOPNOTSUPP;
++ }
++
++ return ret;
++}
++
++static int xgbe_change_mtu(struct net_device *netdev, int mtu)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ int ret;
++
++ DBGPR("-->xgbe_change_mtu\n");
++
++ ret = xgbe_calc_rx_buf_size(netdev, mtu);
++ if (ret < 0)
++ return ret;
++
++ pdata->rx_buf_size = ret;
++ netdev->mtu = mtu;
++
++ xgbe_restart_dev(pdata);
++
++ DBGPR("<--xgbe_change_mtu\n");
++
++ return 0;
++}
++
++static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev,
++ struct rtnl_link_stats64 *s)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_mmc_stats *pstats = &pdata->mmc_stats;
++
++ DBGPR("-->%s\n", __func__);
++
++ pdata->hw_if.read_mmc_stats(pdata);
++
++ s->rx_packets = pstats->rxframecount_gb;
++ s->rx_bytes = pstats->rxoctetcount_gb;
++ s->rx_errors = pstats->rxframecount_gb -
++ pstats->rxbroadcastframes_g -
++ pstats->rxmulticastframes_g -
++ pstats->rxunicastframes_g;
++ s->multicast = pstats->rxmulticastframes_g;
++ s->rx_length_errors = pstats->rxlengtherror;
++ s->rx_crc_errors = pstats->rxcrcerror;
++ s->rx_fifo_errors = pstats->rxfifooverflow;
++
++ s->tx_packets = pstats->txframecount_gb;
++ s->tx_bytes = pstats->txoctetcount_gb;
++ s->tx_errors = pstats->txframecount_gb - pstats->txframecount_g;
++ s->tx_dropped = netdev->stats.tx_dropped;
++
++ DBGPR("<--%s\n", __func__);
++
++ return s;
++}
++
++static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
++ u16 vid)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++
++ DBGPR("-->%s\n", __func__);
++
++ set_bit(vid, pdata->active_vlans);
++ hw_if->update_vlan_hash_table(pdata);
++
++ DBGPR("<--%s\n", __func__);
++
++ return 0;
++}
++
++static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto,
++ u16 vid)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++
++ DBGPR("-->%s\n", __func__);
++
++ clear_bit(vid, pdata->active_vlans);
++ hw_if->update_vlan_hash_table(pdata);
++
++ DBGPR("<--%s\n", __func__);
++
++ return 0;
++}
++
++#ifdef CONFIG_NET_POLL_CONTROLLER
++static void xgbe_poll_controller(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_channel *channel;
++ unsigned int i;
++
++ DBGPR("-->xgbe_poll_controller\n");
++
++ if (pdata->per_channel_irq) {
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++)
++ xgbe_dma_isr(channel->dma_irq, channel);
++ } else {
++ disable_irq(pdata->dev_irq);
++ xgbe_isr(pdata->dev_irq, pdata);
++ enable_irq(pdata->dev_irq);
++ }
++
++ DBGPR("<--xgbe_poll_controller\n");
++}
++#endif /* End CONFIG_NET_POLL_CONTROLLER */
++
++static int xgbe_setup_tc(struct net_device *netdev, u8 tc)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ unsigned int offset, queue;
++ u8 i;
++
++ if (tc && (tc != pdata->hw_feat.tc_cnt))
++ return -EINVAL;
++
++ if (tc) {
++ netdev_set_num_tc(netdev, tc);
++ for (i = 0, queue = 0, offset = 0; i < tc; i++) {
++ while ((queue < pdata->tx_q_count) &&
++ (pdata->q2tc_map[queue] == i))
++ queue++;
++
++ DBGPR(" TC%u using TXq%u-%u\n", i, offset, queue - 1);
++ netdev_set_tc_queue(netdev, i, queue - offset, offset);
++ offset = queue;
++ }
++ } else {
++ netdev_reset_tc(netdev);
++ }
++
++ return 0;
++}
++
++static int xgbe_set_features(struct net_device *netdev,
++ netdev_features_t features)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ netdev_features_t rxhash, rxcsum, rxvlan, rxvlan_filter;
++ int ret = 0;
++
++ rxhash = pdata->netdev_features & NETIF_F_RXHASH;
++ rxcsum = pdata->netdev_features & NETIF_F_RXCSUM;
++ rxvlan = pdata->netdev_features & NETIF_F_HW_VLAN_CTAG_RX;
++ rxvlan_filter = pdata->netdev_features & NETIF_F_HW_VLAN_CTAG_FILTER;
++
++ if ((features & NETIF_F_RXHASH) && !rxhash)
++ ret = hw_if->enable_rss(pdata);
++ else if (!(features & NETIF_F_RXHASH) && rxhash)
++ ret = hw_if->disable_rss(pdata);
++ if (ret)
++ return ret;
++
++ if ((features & NETIF_F_RXCSUM) && !rxcsum)
++ hw_if->enable_rx_csum(pdata);
++ else if (!(features & NETIF_F_RXCSUM) && rxcsum)
++ hw_if->disable_rx_csum(pdata);
++
++ if ((features & NETIF_F_HW_VLAN_CTAG_RX) && !rxvlan)
++ hw_if->enable_rx_vlan_stripping(pdata);
++ else if (!(features & NETIF_F_HW_VLAN_CTAG_RX) && rxvlan)
++ hw_if->disable_rx_vlan_stripping(pdata);
++
++ if ((features & NETIF_F_HW_VLAN_CTAG_FILTER) && !rxvlan_filter)
++ hw_if->enable_rx_vlan_filtering(pdata);
++ else if (!(features & NETIF_F_HW_VLAN_CTAG_FILTER) && rxvlan_filter)
++ hw_if->disable_rx_vlan_filtering(pdata);
++
++ pdata->netdev_features = features;
++
++ DBGPR("<--xgbe_set_features\n");
++
++ return 0;
++}
++
++static const struct net_device_ops xgbe_netdev_ops = {
++ .ndo_open = xgbe_open,
++ .ndo_stop = xgbe_close,
++ .ndo_start_xmit = xgbe_xmit,
++ .ndo_set_rx_mode = xgbe_set_rx_mode,
++ .ndo_set_mac_address = xgbe_set_mac_address,
++ .ndo_validate_addr = eth_validate_addr,
++ .ndo_do_ioctl = xgbe_ioctl,
++ .ndo_change_mtu = xgbe_change_mtu,
++ .ndo_get_stats64 = xgbe_get_stats64,
++ .ndo_vlan_rx_add_vid = xgbe_vlan_rx_add_vid,
++ .ndo_vlan_rx_kill_vid = xgbe_vlan_rx_kill_vid,
++#ifdef CONFIG_NET_POLL_CONTROLLER
++ .ndo_poll_controller = xgbe_poll_controller,
++#endif
++ .ndo_setup_tc = xgbe_setup_tc,
++ .ndo_set_features = xgbe_set_features,
++};
++
++struct net_device_ops *xgbe_a0_get_netdev_ops(void)
++{
++ return (struct net_device_ops *)&xgbe_netdev_ops;
++}
++
++static void xgbe_rx_refresh(struct xgbe_channel *channel)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ struct xgbe_ring *ring = channel->rx_ring;
++ struct xgbe_ring_data *rdata;
++
++ while (ring->dirty != ring->cur) {
++ rdata = XGBE_GET_DESC_DATA(ring, ring->dirty);
++
++ /* Reset rdata values */
++ desc_if->unmap_rdata(pdata, rdata);
++
++ if (desc_if->map_rx_buffer(pdata, ring, rdata))
++ break;
++
++ hw_if->rx_desc_reset(rdata);
++
++ ring->dirty++;
++ }
++
++ /* Update the Rx Tail Pointer Register with address of
++ * the last cleaned entry */
++ rdata = XGBE_GET_DESC_DATA(ring, ring->dirty - 1);
++ XGMAC_DMA_IOWRITE(channel, DMA_CH_RDTR_LO,
++ lower_32_bits(rdata->rdesc_dma));
++}
++
++static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata,
++ struct xgbe_ring_data *rdata,
++ unsigned int *len)
++{
++ struct net_device *netdev = pdata->netdev;
++ struct sk_buff *skb;
++ u8 *packet;
++ unsigned int copy_len;
++
++ skb = netdev_alloc_skb_ip_align(netdev, rdata->rx.hdr.dma_len);
++ if (!skb)
++ return NULL;
++
++ packet = page_address(rdata->rx.hdr.pa.pages) +
++ rdata->rx.hdr.pa.pages_offset;
++ copy_len = (rdata->rx.hdr_len) ? rdata->rx.hdr_len : *len;
++ copy_len = min(rdata->rx.hdr.dma_len, copy_len);
++ skb_copy_to_linear_data(skb, packet, copy_len);
++ skb_put(skb, copy_len);
++
++ *len -= copy_len;
++
++ return skb;
++}
++
++static int xgbe_tx_poll(struct xgbe_channel *channel)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_desc_if *desc_if = &pdata->desc_if;
++ struct xgbe_ring *ring = channel->tx_ring;
++ struct xgbe_ring_data *rdata;
++ struct xgbe_ring_desc *rdesc;
++ struct net_device *netdev = pdata->netdev;
++ struct netdev_queue *txq;
++ int processed = 0;
++ unsigned int tx_packets = 0, tx_bytes = 0;
++
++ DBGPR("-->xgbe_tx_poll\n");
++
++ /* Nothing to do if there isn't a Tx ring for this channel */
++ if (!ring)
++ return 0;
++
++ txq = netdev_get_tx_queue(netdev, channel->queue_index);
++
++ while ((processed < XGBE_TX_DESC_MAX_PROC) &&
++ (ring->dirty != ring->cur)) {
++ rdata = XGBE_GET_DESC_DATA(ring, ring->dirty);
++ rdesc = rdata->rdesc;
++
++ if (!hw_if->tx_complete(rdesc))
++ break;
++
++ /* Make sure descriptor fields are read after reading the OWN
++ * bit */
++ rmb();
++
++#ifdef XGMAC_ENABLE_TX_DESC_DUMP
++ xgbe_a0_dump_tx_desc(ring, ring->dirty, 1, 0);
++#endif
++
++ if (hw_if->is_last_desc(rdesc)) {
++ tx_packets += rdata->tx.packets;
++ tx_bytes += rdata->tx.bytes;
++ }
++
++ /* Free the SKB and reset the descriptor for re-use */
++ desc_if->unmap_rdata(pdata, rdata);
++ hw_if->tx_desc_reset(rdata);
++
++ processed++;
++ ring->dirty++;
++ }
++
++ if (!processed)
++ return 0;
++
++ netdev_tx_completed_queue(txq, tx_packets, tx_bytes);
++
++ if ((ring->tx.queue_stopped == 1) &&
++ (xgbe_tx_avail_desc(ring) > XGBE_TX_DESC_MIN_FREE)) {
++ ring->tx.queue_stopped = 0;
++ netif_tx_wake_queue(txq);
++ }
++
++ DBGPR("<--xgbe_tx_poll: processed=%d\n", processed);
++
++ return processed;
++}
++
++static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
++{
++ struct xgbe_prv_data *pdata = channel->pdata;
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ struct xgbe_ring *ring = channel->rx_ring;
++ struct xgbe_ring_data *rdata;
++ struct xgbe_packet_data *packet;
++ struct net_device *netdev = pdata->netdev;
++ struct napi_struct *napi;
++ struct sk_buff *skb;
++ struct skb_shared_hwtstamps *hwtstamps;
++ unsigned int incomplete, error, context_next, context;
++ unsigned int len, put_len, max_len;
++ unsigned int received = 0;
++ int packet_count = 0;
++
++ DBGPR("-->xgbe_rx_poll: budget=%d\n", budget);
++
++ /* Nothing to do if there isn't a Rx ring for this channel */
++ if (!ring)
++ return 0;
++
++ napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
++
++ rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
++ packet = &ring->packet_data;
++ while (packet_count < budget) {
++ DBGPR(" cur = %d\n", ring->cur);
++
++ /* First time in loop see if we need to restore state */
++ if (!received && rdata->state_saved) {
++ incomplete = rdata->state.incomplete;
++ context_next = rdata->state.context_next;
++ skb = rdata->state.skb;
++ error = rdata->state.error;
++ len = rdata->state.len;
++ } else {
++ memset(packet, 0, sizeof(*packet));
++ incomplete = 0;
++ context_next = 0;
++ skb = NULL;
++ error = 0;
++ len = 0;
++ }
++
++read_again:
++ rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
++
++ if (xgbe_rx_dirty_desc(ring) > (XGBE_RX_DESC_CNT >> 3))
++ xgbe_rx_refresh(channel);
++
++ if (hw_if->dev_read(channel))
++ break;
++
++ received++;
++ ring->cur++;
++
++ incomplete = XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES,
++ INCOMPLETE);
++ context_next = XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES,
++ CONTEXT_NEXT);
++ context = XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES,
++ CONTEXT);
++
++ /* Earlier error, just drain the remaining data */
++ if ((incomplete || context_next) && error)
++ goto read_again;
++
++ if (error || packet->errors) {
++ if (packet->errors)
++ DBGPR("Error in received packet\n");
++ dev_kfree_skb(skb);
++ goto next_packet;
++ }
++
++ if (!context) {
++ put_len = rdata->rx.len - len;
++ len += put_len;
++
++ if (!skb) {
++ dma_sync_single_for_cpu(pdata->dev,
++ rdata->rx.hdr.dma,
++ rdata->rx.hdr.dma_len,
++ DMA_FROM_DEVICE);
++
++ skb = xgbe_create_skb(pdata, rdata, &put_len);
++ if (!skb) {
++ error = 1;
++ goto skip_data;
++ }
++ }
++
++ if (put_len) {
++ dma_sync_single_for_cpu(pdata->dev,
++ rdata->rx.buf.dma,
++ rdata->rx.buf.dma_len,
++ DMA_FROM_DEVICE);
++
++ skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
++ rdata->rx.buf.pa.pages,
++ rdata->rx.buf.pa.pages_offset,
++ put_len, rdata->rx.buf.dma_len);
++ rdata->rx.buf.pa.pages = NULL;
++ }
++ }
++
++skip_data:
++ if (incomplete || context_next)
++ goto read_again;
++
++ if (!skb)
++ goto next_packet;
++
++ /* Be sure we don't exceed the configured MTU */
++ max_len = netdev->mtu + ETH_HLEN;
++ if (!(netdev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
++ (skb->protocol == htons(ETH_P_8021Q)))
++ max_len += VLAN_HLEN;
++
++ if (skb->len > max_len) {
++ DBGPR("packet length exceeds configured MTU\n");
++ dev_kfree_skb(skb);
++ goto next_packet;
++ }
++
++#ifdef XGMAC_ENABLE_RX_PKT_DUMP
++ xgbe_a0_print_pkt(netdev, skb, false);
++#endif
++
++ skb_checksum_none_assert(skb);
++ if (XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES, CSUM_DONE))
++ skb->ip_summed = CHECKSUM_UNNECESSARY;
++
++ if (XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES, VLAN_CTAG))
++ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
++ packet->vlan_ctag);
++
++ if (XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES, RX_TSTAMP)) {
++ u64 nsec;
++
++ nsec = timecounter_cyc2time(&pdata->tstamp_tc,
++ packet->rx_tstamp);
++ hwtstamps = skb_hwtstamps(skb);
++ hwtstamps->hwtstamp = ns_to_ktime(nsec);
++ }
++
++ if (XGMAC_GET_BITS(packet->attributes,
++ RX_PACKET_ATTRIBUTES, RSS_HASH))
++ skb_set_hash(skb, packet->rss_hash,
++ packet->rss_hash_type);
++
++ skb->dev = netdev;
++ skb->protocol = eth_type_trans(skb, netdev);
++ skb_record_rx_queue(skb, channel->queue_index);
++ skb_mark_napi_id(skb, napi);
++
++ netdev->last_rx = jiffies;
++ napi_gro_receive(napi, skb);
++
++next_packet:
++ packet_count++;
++ }
++
++ /* Check if we need to save state before leaving */
++ if (received && (incomplete || context_next)) {
++ rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
++ rdata->state_saved = 1;
++ rdata->state.incomplete = incomplete;
++ rdata->state.context_next = context_next;
++ rdata->state.skb = skb;
++ rdata->state.len = len;
++ rdata->state.error = error;
++ }
++
++ DBGPR("<--xgbe_rx_poll: packet_count = %d\n", packet_count);
++
++ return packet_count;
++}
++
++static int xgbe_one_poll(struct napi_struct *napi, int budget)
++{
++ struct xgbe_channel *channel = container_of(napi, struct xgbe_channel,
++ napi);
++ int processed = 0;
++
++ DBGPR("-->xgbe_one_poll: budget=%d\n", budget);
++
++ /* Cleanup Tx ring first */
++ xgbe_tx_poll(channel);
++
++ /* Process Rx ring next */
++ processed = xgbe_rx_poll(channel, budget);
++
++ /* If we processed everything, we are done */
++ if (processed < budget) {
++ /* Turn off polling */
++ napi_complete(napi);
++
++ /* Enable Tx and Rx interrupts */
++ enable_irq(channel->dma_irq);
++ }
++
++ DBGPR("<--xgbe_one_poll: received = %d\n", processed);
++
++ return processed;
++}
++
++static int xgbe_all_poll(struct napi_struct *napi, int budget)
++{
++ struct xgbe_prv_data *pdata = container_of(napi, struct xgbe_prv_data,
++ napi);
++ struct xgbe_channel *channel;
++ int ring_budget;
++ int processed, last_processed;
++ unsigned int i;
++
++ DBGPR("-->xgbe_all_poll: budget=%d\n", budget);
++
++ processed = 0;
++ ring_budget = budget / pdata->rx_ring_count;
++ do {
++ last_processed = processed;
++
++ channel = pdata->channel;
++ for (i = 0; i < pdata->channel_count; i++, channel++) {
++ /* Cleanup Tx ring first */
++ xgbe_tx_poll(channel);
++
++ /* Process Rx ring next */
++ if (ring_budget > (budget - processed))
++ ring_budget = budget - processed;
++ processed += xgbe_rx_poll(channel, ring_budget);
++ }
++ } while ((processed < budget) && (processed != last_processed));
++
++ /* If we processed everything, we are done */
++ if (processed < budget) {
++ /* Turn off polling */
++ napi_complete(napi);
++
++ /* Enable Tx and Rx interrupts */
++ xgbe_enable_rx_tx_ints(pdata);
++ }
++
++ DBGPR("<--xgbe_all_poll: received = %d\n", processed);
++
++ return processed;
++}
++
++void xgbe_a0_dump_tx_desc(struct xgbe_ring *ring, unsigned int idx,
++ unsigned int count, unsigned int flag)
++{
++ struct xgbe_ring_data *rdata;
++ struct xgbe_ring_desc *rdesc;
++
++ while (count--) {
++ rdata = XGBE_GET_DESC_DATA(ring, idx);
++ rdesc = rdata->rdesc;
++ pr_alert("TX_NORMAL_DESC[%d %s] = %08x:%08x:%08x:%08x\n", idx,
++ (flag == 1) ? "QUEUED FOR TX" : "TX BY DEVICE",
++ le32_to_cpu(rdesc->desc0), le32_to_cpu(rdesc->desc1),
++ le32_to_cpu(rdesc->desc2), le32_to_cpu(rdesc->desc3));
++ idx++;
++ }
++}
++
++void xgbe_a0_dump_rx_desc(struct xgbe_ring *ring, struct xgbe_ring_desc *desc,
++ unsigned int idx)
++{
++ pr_alert("RX_NORMAL_DESC[%d RX BY DEVICE] = %08x:%08x:%08x:%08x\n", idx,
++ le32_to_cpu(desc->desc0), le32_to_cpu(desc->desc1),
++ le32_to_cpu(desc->desc2), le32_to_cpu(desc->desc3));
++}
++
++void xgbe_a0_print_pkt(struct net_device *netdev, struct sk_buff *skb, bool tx_rx)
++{
++ struct ethhdr *eth = (struct ethhdr *)skb->data;
++ unsigned char *buf = skb->data;
++ unsigned char buffer[128];
++ unsigned int i, j;
++
++ netdev_alert(netdev, "\n************** SKB dump ****************\n");
++
++ netdev_alert(netdev, "%s packet of %d bytes\n",
++ (tx_rx ? "TX" : "RX"), skb->len);
++
++ netdev_alert(netdev, "Dst MAC addr: %pM\n", eth->h_dest);
++ netdev_alert(netdev, "Src MAC addr: %pM\n", eth->h_source);
++ netdev_alert(netdev, "Protocol: 0x%04hx\n", ntohs(eth->h_proto));
++
++ for (i = 0, j = 0; i < skb->len;) {
++ j += snprintf(buffer + j, sizeof(buffer) - j, "%02hhx",
++ buf[i++]);
++
++ if ((i % 32) == 0) {
++ netdev_alert(netdev, " 0x%04x: %s\n", i - 32, buffer);
++ j = 0;
++ } else if ((i % 16) == 0) {
++ buffer[j++] = ' ';
++ buffer[j++] = ' ';
++ } else if ((i % 4) == 0) {
++ buffer[j++] = ' ';
++ }
++ }
++ if (i % 32)
++ netdev_alert(netdev, " 0x%04x: %s\n", i - (i % 32), buffer);
++
++ netdev_alert(netdev, "\n************** SKB dump ****************\n");
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c
+new file mode 100644
+index 000000000000..165ff1ceedcc
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ethtool.c
+@@ -0,0 +1,616 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/spinlock.h>
++#include <linux/phy.h>
++#include <linux/net_tstamp.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++struct xgbe_stats {
++ char stat_string[ETH_GSTRING_LEN];
++ int stat_size;
++ int stat_offset;
++};
++
++#define XGMAC_MMC_STAT(_string, _var) \
++ { _string, \
++ FIELD_SIZEOF(struct xgbe_mmc_stats, _var), \
++ offsetof(struct xgbe_prv_data, mmc_stats._var), \
++ }
++
++static const struct xgbe_stats xgbe_gstring_stats[] = {
++ XGMAC_MMC_STAT("tx_bytes", txoctetcount_gb),
++ XGMAC_MMC_STAT("tx_packets", txframecount_gb),
++ XGMAC_MMC_STAT("tx_unicast_packets", txunicastframes_gb),
++ XGMAC_MMC_STAT("tx_broadcast_packets", txbroadcastframes_gb),
++ XGMAC_MMC_STAT("tx_multicast_packets", txmulticastframes_gb),
++ XGMAC_MMC_STAT("tx_vlan_packets", txvlanframes_g),
++ XGMAC_MMC_STAT("tx_64_byte_packets", tx64octets_gb),
++ XGMAC_MMC_STAT("tx_65_to_127_byte_packets", tx65to127octets_gb),
++ XGMAC_MMC_STAT("tx_128_to_255_byte_packets", tx128to255octets_gb),
++ XGMAC_MMC_STAT("tx_256_to_511_byte_packets", tx256to511octets_gb),
++ XGMAC_MMC_STAT("tx_512_to_1023_byte_packets", tx512to1023octets_gb),
++ XGMAC_MMC_STAT("tx_1024_to_max_byte_packets", tx1024tomaxoctets_gb),
++ XGMAC_MMC_STAT("tx_underflow_errors", txunderflowerror),
++ XGMAC_MMC_STAT("tx_pause_frames", txpauseframes),
++
++ XGMAC_MMC_STAT("rx_bytes", rxoctetcount_gb),
++ XGMAC_MMC_STAT("rx_packets", rxframecount_gb),
++ XGMAC_MMC_STAT("rx_unicast_packets", rxunicastframes_g),
++ XGMAC_MMC_STAT("rx_broadcast_packets", rxbroadcastframes_g),
++ XGMAC_MMC_STAT("rx_multicast_packets", rxmulticastframes_g),
++ XGMAC_MMC_STAT("rx_vlan_packets", rxvlanframes_gb),
++ XGMAC_MMC_STAT("rx_64_byte_packets", rx64octets_gb),
++ XGMAC_MMC_STAT("rx_65_to_127_byte_packets", rx65to127octets_gb),
++ XGMAC_MMC_STAT("rx_128_to_255_byte_packets", rx128to255octets_gb),
++ XGMAC_MMC_STAT("rx_256_to_511_byte_packets", rx256to511octets_gb),
++ XGMAC_MMC_STAT("rx_512_to_1023_byte_packets", rx512to1023octets_gb),
++ XGMAC_MMC_STAT("rx_1024_to_max_byte_packets", rx1024tomaxoctets_gb),
++ XGMAC_MMC_STAT("rx_undersize_packets", rxundersize_g),
++ XGMAC_MMC_STAT("rx_oversize_packets", rxoversize_g),
++ XGMAC_MMC_STAT("rx_crc_errors", rxcrcerror),
++ XGMAC_MMC_STAT("rx_crc_errors_small_packets", rxrunterror),
++ XGMAC_MMC_STAT("rx_crc_errors_giant_packets", rxjabbererror),
++ XGMAC_MMC_STAT("rx_length_errors", rxlengtherror),
++ XGMAC_MMC_STAT("rx_out_of_range_errors", rxoutofrangetype),
++ XGMAC_MMC_STAT("rx_fifo_overflow_errors", rxfifooverflow),
++ XGMAC_MMC_STAT("rx_watchdog_errors", rxwatchdogerror),
++ XGMAC_MMC_STAT("rx_pause_frames", rxpauseframes),
++};
++
++#define XGBE_STATS_COUNT ARRAY_SIZE(xgbe_gstring_stats)
++
++static void xgbe_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
++{
++ int i;
++
++ DBGPR("-->%s\n", __func__);
++
++ switch (stringset) {
++ case ETH_SS_STATS:
++ for (i = 0; i < XGBE_STATS_COUNT; i++) {
++ memcpy(data, xgbe_gstring_stats[i].stat_string,
++ ETH_GSTRING_LEN);
++ data += ETH_GSTRING_LEN;
++ }
++ break;
++ }
++
++ DBGPR("<--%s\n", __func__);
++}
++
++static void xgbe_get_ethtool_stats(struct net_device *netdev,
++ struct ethtool_stats *stats, u64 *data)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ u8 *stat;
++ int i;
++
++ DBGPR("-->%s\n", __func__);
++
++ pdata->hw_if.read_mmc_stats(pdata);
++ for (i = 0; i < XGBE_STATS_COUNT; i++) {
++ stat = (u8 *)pdata + xgbe_gstring_stats[i].stat_offset;
++ *data++ = *(u64 *)stat;
++ }
++
++ DBGPR("<--%s\n", __func__);
++}
++
++static int xgbe_get_sset_count(struct net_device *netdev, int stringset)
++{
++ int ret;
++
++ DBGPR("-->%s\n", __func__);
++
++ switch (stringset) {
++ case ETH_SS_STATS:
++ ret = XGBE_STATS_COUNT;
++ break;
++
++ default:
++ ret = -EOPNOTSUPP;
++ }
++
++ DBGPR("<--%s\n", __func__);
++
++ return ret;
++}
++
++static void xgbe_get_pauseparam(struct net_device *netdev,
++ struct ethtool_pauseparam *pause)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ DBGPR("-->xgbe_get_pauseparam\n");
++
++ pause->autoneg = pdata->pause_autoneg;
++ pause->tx_pause = pdata->tx_pause;
++ pause->rx_pause = pdata->rx_pause;
++
++ DBGPR("<--xgbe_get_pauseparam\n");
++}
++
++static int xgbe_set_pauseparam(struct net_device *netdev,
++ struct ethtool_pauseparam *pause)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct phy_device *phydev = pdata->phydev;
++ int ret = 0;
++
++ DBGPR("-->xgbe_set_pauseparam\n");
++
++ DBGPR(" autoneg = %d, tx_pause = %d, rx_pause = %d\n",
++ pause->autoneg, pause->tx_pause, pause->rx_pause);
++
++ pdata->pause_autoneg = pause->autoneg;
++ if (pause->autoneg) {
++ phydev->advertising |= ADVERTISED_Pause;
++ phydev->advertising |= ADVERTISED_Asym_Pause;
++
++ } else {
++ phydev->advertising &= ~ADVERTISED_Pause;
++ phydev->advertising &= ~ADVERTISED_Asym_Pause;
++
++ pdata->tx_pause = pause->tx_pause;
++ pdata->rx_pause = pause->rx_pause;
++ }
++
++ if (netif_running(netdev))
++ ret = phy_start_aneg(phydev);
++
++ DBGPR("<--xgbe_set_pauseparam\n");
++
++ return ret;
++}
++
++static int xgbe_get_settings(struct net_device *netdev,
++ struct ethtool_cmd *cmd)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ int ret;
++
++ DBGPR("-->xgbe_get_settings\n");
++
++ if (!pdata->phydev)
++ return -ENODEV;
++
++ ret = phy_ethtool_gset(pdata->phydev, cmd);
++ cmd->transceiver = XCVR_EXTERNAL;
++
++ DBGPR("<--xgbe_get_settings\n");
++
++ return ret;
++}
++
++static int xgbe_set_settings(struct net_device *netdev,
++ struct ethtool_cmd *cmd)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct phy_device *phydev = pdata->phydev;
++ u32 speed;
++ int ret;
++
++ DBGPR("-->xgbe_set_settings\n");
++
++ if (!pdata->phydev)
++ return -ENODEV;
++
++ speed = ethtool_cmd_speed(cmd);
++
++ if (cmd->phy_address != phydev->addr)
++ return -EINVAL;
++
++ if ((cmd->autoneg != AUTONEG_ENABLE) &&
++ (cmd->autoneg != AUTONEG_DISABLE))
++ return -EINVAL;
++
++ if (cmd->autoneg == AUTONEG_DISABLE) {
++ switch (speed) {
++ case SPEED_10000:
++ case SPEED_2500:
++ case SPEED_1000:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ if (cmd->duplex != DUPLEX_FULL)
++ return -EINVAL;
++ }
++
++ cmd->advertising &= phydev->supported;
++ if ((cmd->autoneg == AUTONEG_ENABLE) && !cmd->advertising)
++ return -EINVAL;
++
++ ret = 0;
++ phydev->autoneg = cmd->autoneg;
++ phydev->speed = speed;
++ phydev->duplex = cmd->duplex;
++ phydev->advertising = cmd->advertising;
++
++ if (cmd->autoneg == AUTONEG_ENABLE)
++ phydev->advertising |= ADVERTISED_Autoneg;
++ else
++ phydev->advertising &= ~ADVERTISED_Autoneg;
++
++ if (netif_running(netdev))
++ ret = phy_start_aneg(phydev);
++
++ DBGPR("<--xgbe_set_settings\n");
++
++ return ret;
++}
++
++static void xgbe_get_drvinfo(struct net_device *netdev,
++ struct ethtool_drvinfo *drvinfo)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_features *hw_feat = &pdata->hw_feat;
++
++ strlcpy(drvinfo->driver, XGBE_DRV_NAME, sizeof(drvinfo->driver));
++ strlcpy(drvinfo->version, XGBE_DRV_VERSION, sizeof(drvinfo->version));
++ strlcpy(drvinfo->bus_info, dev_name(pdata->dev),
++ sizeof(drvinfo->bus_info));
++ snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "%d.%d.%d",
++ XGMAC_GET_BITS(hw_feat->version, MAC_VR, USERVER),
++ XGMAC_GET_BITS(hw_feat->version, MAC_VR, DEVID),
++ XGMAC_GET_BITS(hw_feat->version, MAC_VR, SNPSVER));
++ drvinfo->n_stats = XGBE_STATS_COUNT;
++}
++
++static int xgbe_get_coalesce(struct net_device *netdev,
++ struct ethtool_coalesce *ec)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ unsigned int riwt;
++
++ DBGPR("-->xgbe_get_coalesce\n");
++
++ memset(ec, 0, sizeof(struct ethtool_coalesce));
++
++ riwt = pdata->rx_riwt;
++ ec->rx_coalesce_usecs = hw_if->riwt_to_usec(pdata, riwt);
++ ec->rx_max_coalesced_frames = pdata->rx_frames;
++
++ ec->tx_coalesce_usecs = pdata->tx_usecs;
++ ec->tx_max_coalesced_frames = pdata->tx_frames;
++
++ DBGPR("<--xgbe_get_coalesce\n");
++
++ return 0;
++}
++
++static int xgbe_set_coalesce(struct net_device *netdev,
++ struct ethtool_coalesce *ec)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ unsigned int rx_frames, rx_riwt, rx_usecs;
++ unsigned int tx_frames, tx_usecs;
++
++ DBGPR("-->xgbe_set_coalesce\n");
++
++ /* Check for not supported parameters */
++ if ((ec->rx_coalesce_usecs_irq) ||
++ (ec->rx_max_coalesced_frames_irq) ||
++ (ec->tx_coalesce_usecs_irq) ||
++ (ec->tx_max_coalesced_frames_irq) ||
++ (ec->stats_block_coalesce_usecs) ||
++ (ec->use_adaptive_rx_coalesce) ||
++ (ec->use_adaptive_tx_coalesce) ||
++ (ec->pkt_rate_low) ||
++ (ec->rx_coalesce_usecs_low) ||
++ (ec->rx_max_coalesced_frames_low) ||
++ (ec->tx_coalesce_usecs_low) ||
++ (ec->tx_max_coalesced_frames_low) ||
++ (ec->pkt_rate_high) ||
++ (ec->rx_coalesce_usecs_high) ||
++ (ec->rx_max_coalesced_frames_high) ||
++ (ec->tx_coalesce_usecs_high) ||
++ (ec->tx_max_coalesced_frames_high) ||
++ (ec->rate_sample_interval))
++ return -EOPNOTSUPP;
++
++ /* Can only change rx-frames when interface is down (see
++ * rx_descriptor_init in xgbe-dev.c)
++ */
++ rx_frames = pdata->rx_frames;
++ if (rx_frames != ec->rx_max_coalesced_frames && netif_running(netdev)) {
++ netdev_alert(netdev,
++ "interface must be down to change rx-frames\n");
++ return -EINVAL;
++ }
++
++ rx_riwt = hw_if->usec_to_riwt(pdata, ec->rx_coalesce_usecs);
++ rx_frames = ec->rx_max_coalesced_frames;
++
++ /* Use smallest possible value if conversion resulted in zero */
++ if (ec->rx_coalesce_usecs && !rx_riwt)
++ rx_riwt = 1;
++
++ /* Check the bounds of values for Rx */
++ if (rx_riwt > XGMAC_MAX_DMA_RIWT) {
++ rx_usecs = hw_if->riwt_to_usec(pdata, XGMAC_MAX_DMA_RIWT);
++ netdev_alert(netdev, "rx-usec is limited to %d usecs\n",
++ rx_usecs);
++ return -EINVAL;
++ }
++ if (rx_frames > pdata->rx_desc_count) {
++ netdev_alert(netdev, "rx-frames is limited to %d frames\n",
++ pdata->rx_desc_count);
++ return -EINVAL;
++ }
++
++ tx_usecs = ec->tx_coalesce_usecs;
++ tx_frames = ec->tx_max_coalesced_frames;
++
++ /* Check the bounds of values for Tx */
++ if (tx_frames > pdata->tx_desc_count) {
++ netdev_alert(netdev, "tx-frames is limited to %d frames\n",
++ pdata->tx_desc_count);
++ return -EINVAL;
++ }
++
++ pdata->rx_riwt = rx_riwt;
++ pdata->rx_frames = rx_frames;
++ hw_if->config_rx_coalesce(pdata);
++
++ pdata->tx_usecs = tx_usecs;
++ pdata->tx_frames = tx_frames;
++ hw_if->config_tx_coalesce(pdata);
++
++ DBGPR("<--xgbe_set_coalesce\n");
++
++ return 0;
++}
++
++static int xgbe_get_rxnfc(struct net_device *netdev,
++ struct ethtool_rxnfc *rxnfc, u32 *rule_locs)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ switch (rxnfc->cmd) {
++ case ETHTOOL_GRXRINGS:
++ rxnfc->data = pdata->rx_ring_count;
++ break;
++ default:
++ return -EOPNOTSUPP;
++ }
++
++ return 0;
++}
++
++static u32 xgbe_get_rxfh_key_size(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ return sizeof(pdata->rss_key);
++}
++
++static u32 xgbe_get_rxfh_indir_size(struct net_device *netdev)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ return ARRAY_SIZE(pdata->rss_table);
++}
++
++static int xgbe_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
++ u8 *hfunc)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ unsigned int i;
++
++ if (indir) {
++ for (i = 0; i < ARRAY_SIZE(pdata->rss_table); i++)
++ indir[i] = XGMAC_GET_BITS(pdata->rss_table[i],
++ MAC_RSSDR, DMCH);
++ }
++
++ if (key)
++ memcpy(key, pdata->rss_key, sizeof(pdata->rss_key));
++
++ if (hfunc)
++ *hfunc = ETH_RSS_HASH_TOP;
++
++ return 0;
++}
++
++static int xgbe_set_rxfh(struct net_device *netdev, const u32 *indir,
++ const u8 *key, const u8 hfunc)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ unsigned int ret;
++
++ if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
++ return -EOPNOTSUPP;
++
++ if (indir) {
++ ret = hw_if->set_rss_lookup_table(pdata, indir);
++ if (ret)
++ return ret;
++ }
++
++ if (key) {
++ ret = hw_if->set_rss_hash_key(pdata, key);
++ if (ret)
++ return ret;
++ }
++
++ return 0;
++}
++
++static int xgbe_get_ts_info(struct net_device *netdev,
++ struct ethtool_ts_info *ts_info)
++{
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ ts_info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
++ SOF_TIMESTAMPING_RX_SOFTWARE |
++ SOF_TIMESTAMPING_SOFTWARE |
++ SOF_TIMESTAMPING_TX_HARDWARE |
++ SOF_TIMESTAMPING_RX_HARDWARE |
++ SOF_TIMESTAMPING_RAW_HARDWARE;
++
++ if (pdata->ptp_clock)
++ ts_info->phc_index = ptp_clock_index(pdata->ptp_clock);
++ else
++ ts_info->phc_index = -1;
++
++ ts_info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
++ ts_info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
++ (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
++ (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
++ (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
++ (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT) |
++ (1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
++ (1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) |
++ (1 << HWTSTAMP_FILTER_PTP_V2_EVENT) |
++ (1 << HWTSTAMP_FILTER_PTP_V2_SYNC) |
++ (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ) |
++ (1 << HWTSTAMP_FILTER_ALL);
++
++ return 0;
++}
++
++static const struct ethtool_ops xgbe_ethtool_ops = {
++ .get_settings = xgbe_get_settings,
++ .set_settings = xgbe_set_settings,
++ .get_drvinfo = xgbe_get_drvinfo,
++ .get_link = ethtool_op_get_link,
++ .get_coalesce = xgbe_get_coalesce,
++ .set_coalesce = xgbe_set_coalesce,
++ .get_pauseparam = xgbe_get_pauseparam,
++ .set_pauseparam = xgbe_set_pauseparam,
++ .get_strings = xgbe_get_strings,
++ .get_ethtool_stats = xgbe_get_ethtool_stats,
++ .get_sset_count = xgbe_get_sset_count,
++ .get_rxnfc = xgbe_get_rxnfc,
++ .get_rxfh_key_size = xgbe_get_rxfh_key_size,
++ .get_rxfh_indir_size = xgbe_get_rxfh_indir_size,
++ .get_rxfh = xgbe_get_rxfh,
++ .set_rxfh = xgbe_set_rxfh,
++ .get_ts_info = xgbe_get_ts_info,
++};
++
++struct ethtool_ops *xgbe_a0_get_ethtool_ops(void)
++{
++ return (struct ethtool_ops *)&xgbe_ethtool_ops;
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c
+new file mode 100644
+index 000000000000..a85fb4965835
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-main.c
+@@ -0,0 +1,643 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/io.h>
++#include <linux/of.h>
++#include <linux/of_net.h>
++#include <linux/of_address.h>
++#include <linux/clk.h>
++#include <linux/property.h>
++#include <linux/acpi.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>");
++MODULE_LICENSE("Dual BSD/GPL");
++MODULE_VERSION(XGBE_DRV_VERSION);
++MODULE_DESCRIPTION(XGBE_DRV_DESC);
++
++unsigned int speed = 0;
++module_param(speed, uint, 0444);
++MODULE_PARM_DESC(speed, " Select operating speed (1=1GbE, 2=2.5GbE, 10=10GbE, any other value implies auto-negotiation");
++
++static void xgbe_default_config(struct xgbe_prv_data *pdata)
++{
++ DBGPR("-->xgbe_default_config\n");
++
++ pdata->pblx8 = DMA_PBL_X8_ENABLE;
++ pdata->tx_sf_mode = MTL_TSF_ENABLE;
++ pdata->tx_threshold = MTL_TX_THRESHOLD_64;
++ pdata->tx_pbl = DMA_PBL_16;
++ pdata->tx_osp_mode = DMA_OSP_ENABLE;
++ pdata->rx_sf_mode = MTL_RSF_DISABLE;
++ pdata->rx_threshold = MTL_RX_THRESHOLD_64;
++ pdata->rx_pbl = DMA_PBL_16;
++ pdata->pause_autoneg = 1;
++ pdata->tx_pause = 1;
++ pdata->rx_pause = 1;
++ pdata->phy_speed = SPEED_UNKNOWN;
++ pdata->power_down = 0;
++
++ if (speed == 10) {
++ pdata->default_autoneg = AUTONEG_DISABLE;
++ pdata->default_speed = SPEED_10000;
++ } else if (speed == 2) {
++ pdata->default_autoneg = AUTONEG_DISABLE;
++ pdata->default_speed = SPEED_2500;
++ } else if (speed == 1) {
++ pdata->default_autoneg = AUTONEG_DISABLE;
++ pdata->default_speed = SPEED_1000;
++ } else {
++ pdata->default_autoneg = AUTONEG_ENABLE;
++ pdata->default_speed = SPEED_10000;
++ }
++
++ DBGPR("<--xgbe_default_config\n");
++}
++
++static void xgbe_init_all_fptrs(struct xgbe_prv_data *pdata)
++{
++ xgbe_a0_init_function_ptrs_dev(&pdata->hw_if);
++ xgbe_a0_init_function_ptrs_desc(&pdata->desc_if);
++}
++
++#ifdef CONFIG_ACPI
++static int xgbe_acpi_support(struct xgbe_prv_data *pdata)
++{
++ struct acpi_device *adev = pdata->adev;
++ struct device *dev = pdata->dev;
++ u32 property;
++ acpi_handle handle;
++ acpi_status status;
++ unsigned long long data;
++ int cca;
++ int ret;
++
++ /* Obtain the system clock setting */
++ ret = device_property_read_u32(dev, XGBE_ACPI_DMA_FREQ, &property);
++ if (ret) {
++ dev_err(dev, "unable to obtain %s property\n",
++ XGBE_ACPI_DMA_FREQ);
++ return ret;
++ }
++ pdata->sysclk_rate = property;
++
++ /* Obtain the PTP clock setting */
++ ret = device_property_read_u32(dev, XGBE_ACPI_PTP_FREQ, &property);
++ if (ret) {
++ dev_err(dev, "unable to obtain %s property\n",
++ XGBE_ACPI_PTP_FREQ);
++ return ret;
++ }
++ pdata->ptpclk_rate = property;
++
++ /* Retrieve the device cache coherency value */
++ handle = adev->handle;
++ do {
++ status = acpi_evaluate_integer(handle, "_CCA", NULL, &data);
++ if (!ACPI_FAILURE(status)) {
++ cca = data;
++ break;
++ }
++
++ status = acpi_get_parent(handle, &handle);
++ } while (!ACPI_FAILURE(status));
++
++ if (ACPI_FAILURE(status)) {
++ dev_err(dev, "error obtaining acpi coherency value\n");
++ return -EINVAL;
++ }
++ pdata->coherent = !!cca;
++
++ return 0;
++}
++#else /* CONFIG_ACPI */
++static int xgbe_acpi_support(struct xgbe_prv_data *pdata)
++{
++ return -EINVAL;
++}
++#endif /* CONFIG_ACPI */
++
++#ifdef CONFIG_OF
++static int xgbe_of_support(struct xgbe_prv_data *pdata)
++{
++ struct device *dev = pdata->dev;
++
++ /* Obtain the system clock setting */
++ pdata->sysclk = devm_clk_get(dev, XGBE_DMA_CLOCK);
++ if (IS_ERR(pdata->sysclk)) {
++ dev_err(dev, "dma devm_clk_get failed\n");
++ return PTR_ERR(pdata->sysclk);
++ }
++ pdata->sysclk_rate = clk_get_rate(pdata->sysclk);
++
++ /* Obtain the PTP clock setting */
++ pdata->ptpclk = devm_clk_get(dev, XGBE_PTP_CLOCK);
++ if (IS_ERR(pdata->ptpclk)) {
++ dev_err(dev, "ptp devm_clk_get failed\n");
++ return PTR_ERR(pdata->ptpclk);
++ }
++ pdata->ptpclk_rate = clk_get_rate(pdata->ptpclk);
++
++ /* Retrieve the device cache coherency value */
++ pdata->coherent = of_dma_is_coherent(dev->of_node);
++
++ return 0;
++}
++#else /* CONFIG_OF */
++static int xgbe_of_support(struct xgbe_prv_data *pdata)
++{
++ return -EINVAL;
++}
++#endif /*CONFIG_OF */
++
++static int xgbe_probe(struct platform_device *pdev)
++{
++ struct xgbe_prv_data *pdata;
++ struct xgbe_hw_if *hw_if;
++ struct xgbe_desc_if *desc_if;
++ struct net_device *netdev;
++ struct device *dev = &pdev->dev;
++ struct resource *res;
++ const char *phy_mode;
++ unsigned int i;
++ int ret;
++
++ DBGPR("--> xgbe_probe\n");
++
++ netdev = alloc_etherdev_mq(sizeof(struct xgbe_prv_data),
++ XGBE_MAX_DMA_CHANNELS);
++ if (!netdev) {
++ dev_err(dev, "alloc_etherdev failed\n");
++ ret = -ENOMEM;
++ goto err_alloc;
++ }
++ SET_NETDEV_DEV(netdev, dev);
++ pdata = netdev_priv(netdev);
++ pdata->netdev = netdev;
++ pdata->pdev = pdev;
++ pdata->adev = ACPI_COMPANION(dev);
++ pdata->dev = dev;
++ platform_set_drvdata(pdev, netdev);
++
++ spin_lock_init(&pdata->lock);
++ mutex_init(&pdata->xpcs_mutex);
++ mutex_init(&pdata->rss_mutex);
++ spin_lock_init(&pdata->tstamp_lock);
++
++ /* Check if we should use ACPI or DT */
++ pdata->use_acpi = (!pdata->adev || acpi_disabled) ? 0 : 1;
++
++ /* Set and validate the number of descriptors for a ring */
++ BUILD_BUG_ON_NOT_POWER_OF_2(XGBE_TX_DESC_CNT);
++ pdata->tx_desc_count = XGBE_TX_DESC_CNT;
++ if (pdata->tx_desc_count & (pdata->tx_desc_count - 1)) {
++ dev_err(dev, "tx descriptor count (%d) is not valid\n",
++ pdata->tx_desc_count);
++ ret = -EINVAL;
++ goto err_io;
++ }
++ BUILD_BUG_ON_NOT_POWER_OF_2(XGBE_RX_DESC_CNT);
++ pdata->rx_desc_count = XGBE_RX_DESC_CNT;
++ if (pdata->rx_desc_count & (pdata->rx_desc_count - 1)) {
++ dev_err(dev, "rx descriptor count (%d) is not valid\n",
++ pdata->rx_desc_count);
++ ret = -EINVAL;
++ goto err_io;
++ }
++
++ /* Obtain the mmio areas for the device */
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ pdata->xgmac_regs = devm_ioremap_resource(dev, res);
++ if (IS_ERR(pdata->xgmac_regs)) {
++ dev_err(dev, "xgmac ioremap failed\n");
++ ret = PTR_ERR(pdata->xgmac_regs);
++ goto err_io;
++ }
++ DBGPR(" xgmac_regs = %p\n", pdata->xgmac_regs);
++
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
++ pdata->xpcs_regs = devm_ioremap_resource(dev, res);
++ if (IS_ERR(pdata->xpcs_regs)) {
++ dev_err(dev, "xpcs ioremap failed\n");
++ ret = PTR_ERR(pdata->xpcs_regs);
++ goto err_io;
++ }
++ DBGPR(" xpcs_regs = %p\n", pdata->xpcs_regs);
++
++ /* Retrieve the MAC address */
++ ret = device_property_read_u8_array(dev, XGBE_MAC_ADDR_PROPERTY,
++ pdata->mac_addr,
++ sizeof(pdata->mac_addr));
++ if (ret || !is_valid_ether_addr(pdata->mac_addr)) {
++ dev_err(dev, "invalid %s property\n", XGBE_MAC_ADDR_PROPERTY);
++ if (!ret)
++ ret = -EINVAL;
++ goto err_io;
++ }
++
++ /* Retrieve the PHY mode - it must be "xgmii" */
++ ret = device_property_read_string(dev, XGBE_PHY_MODE_PROPERTY,
++ &phy_mode);
++ if (ret || strcmp(phy_mode, phy_modes(PHY_INTERFACE_MODE_XGMII))) {
++ dev_err(dev, "invalid %s property\n", XGBE_PHY_MODE_PROPERTY);
++ if (!ret)
++ ret = -EINVAL;
++ goto err_io;
++ }
++ pdata->phy_mode = PHY_INTERFACE_MODE_XGMII;
++
++ /* Check for per channel interrupt support */
++ if (device_property_present(dev, XGBE_DMA_IRQS_PROPERTY))
++ pdata->per_channel_irq = 1;
++
++ /* Obtain device settings unique to ACPI/OF */
++ if (pdata->use_acpi)
++ ret = xgbe_acpi_support(pdata);
++ else
++ ret = xgbe_of_support(pdata);
++ if (ret)
++ goto err_io;
++
++ /* Set the DMA coherency values */
++ if (pdata->coherent) {
++ pdata->axdomain = XGBE_DMA_OS_AXDOMAIN;
++ pdata->arcache = XGBE_DMA_OS_ARCACHE;
++ pdata->awcache = XGBE_DMA_OS_AWCACHE;
++ } else {
++ pdata->axdomain = XGBE_DMA_SYS_AXDOMAIN;
++ pdata->arcache = XGBE_DMA_SYS_ARCACHE;
++ pdata->awcache = XGBE_DMA_SYS_AWCACHE;
++ }
++
++ /* Set the DMA mask */
++ if (!dev->dma_mask)
++ dev->dma_mask = &dev->coherent_dma_mask;
++ ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40));
++ if (ret) {
++ dev_err(dev, "dma_set_mask_and_coherent failed\n");
++ goto err_io;
++ }
++
++ /* Get the device interrupt */
++ ret = platform_get_irq(pdev, 0);
++ if (ret < 0) {
++ dev_err(dev, "platform_get_irq 0 failed\n");
++ goto err_io;
++ }
++ pdata->dev_irq = ret;
++
++ netdev->irq = pdata->dev_irq;
++ netdev->base_addr = (unsigned long)pdata->xgmac_regs;
++ memcpy(netdev->dev_addr, pdata->mac_addr, netdev->addr_len);
++
++ /* Set all the function pointers */
++ xgbe_init_all_fptrs(pdata);
++ hw_if = &pdata->hw_if;
++ desc_if = &pdata->desc_if;
++
++ /* Issue software reset to device */
++ hw_if->exit(pdata);
++
++ /* Populate the hardware features */
++ xgbe_a0_get_all_hw_features(pdata);
++
++ /* Set default configuration data */
++ xgbe_default_config(pdata);
++
++ /* Calculate the number of Tx and Rx rings to be created
++ * -Tx (DMA) Channels map 1-to-1 to Tx Queues so set
++ * the number of Tx queues to the number of Tx channels
++ * enabled
++ * -Rx (DMA) Channels do not map 1-to-1 so use the actual
++ * number of Rx queues
++ */
++ pdata->tx_ring_count = min_t(unsigned int, num_online_cpus(),
++ pdata->hw_feat.tx_ch_cnt);
++ pdata->tx_q_count = pdata->tx_ring_count;
++ ret = netif_set_real_num_tx_queues(netdev, pdata->tx_ring_count);
++ if (ret) {
++ dev_err(dev, "error setting real tx queue count\n");
++ goto err_io;
++ }
++
++ pdata->rx_ring_count = min_t(unsigned int,
++ netif_get_num_default_rss_queues(),
++ pdata->hw_feat.rx_ch_cnt);
++ pdata->rx_q_count = pdata->hw_feat.rx_q_cnt;
++ ret = netif_set_real_num_rx_queues(netdev, pdata->rx_ring_count);
++ if (ret) {
++ dev_err(dev, "error setting real rx queue count\n");
++ goto err_io;
++ }
++
++ /* Initialize RSS hash key and lookup table */
++ netdev_rss_key_fill(pdata->rss_key, sizeof(pdata->rss_key));
++
++ for (i = 0; i < XGBE_RSS_MAX_TABLE_SIZE; i++)
++ XGMAC_SET_BITS(pdata->rss_table[i], MAC_RSSDR, DMCH,
++ i % pdata->rx_ring_count);
++
++ XGMAC_SET_BITS(pdata->rss_options, MAC_RSSCR, IP2TE, 1);
++ XGMAC_SET_BITS(pdata->rss_options, MAC_RSSCR, TCP4TE, 1);
++ XGMAC_SET_BITS(pdata->rss_options, MAC_RSSCR, UDP4TE, 1);
++
++ /* Prepare to regsiter with MDIO */
++ pdata->mii_bus_id = kasprintf(GFP_KERNEL, "%s", pdev->name);
++ if (!pdata->mii_bus_id) {
++ dev_err(dev, "failed to allocate mii bus id\n");
++ ret = -ENOMEM;
++ goto err_io;
++ }
++ ret = xgbe_a0_mdio_register(pdata);
++ if (ret)
++ goto err_bus_id;
++
++ /* Set device operations */
++ netdev->netdev_ops = xgbe_a0_get_netdev_ops();
++ netdev->ethtool_ops = xgbe_a0_get_ethtool_ops();
++#ifdef CONFIG_AMD_XGBE_DCB
++ netdev->dcbnl_ops = xgbe_a0_get_dcbnl_ops();
++#endif
++
++ /* Set device features */
++ netdev->hw_features = NETIF_F_SG |
++ NETIF_F_IP_CSUM |
++ NETIF_F_IPV6_CSUM |
++ NETIF_F_RXCSUM |
++ NETIF_F_TSO |
++ NETIF_F_TSO6 |
++ NETIF_F_GRO |
++ NETIF_F_HW_VLAN_CTAG_RX |
++ NETIF_F_HW_VLAN_CTAG_TX |
++ NETIF_F_HW_VLAN_CTAG_FILTER;
++
++ if (pdata->hw_feat.rss)
++ netdev->hw_features |= NETIF_F_RXHASH;
++
++ netdev->vlan_features |= NETIF_F_SG |
++ NETIF_F_IP_CSUM |
++ NETIF_F_IPV6_CSUM |
++ NETIF_F_TSO |
++ NETIF_F_TSO6;
++
++ netdev->features |= netdev->hw_features;
++ pdata->netdev_features = netdev->features;
++
++ netdev->priv_flags |= IFF_UNICAST_FLT;
++
++ xgbe_a0_init_rx_coalesce(pdata);
++ xgbe_a0_init_tx_coalesce(pdata);
++
++ netif_carrier_off(netdev);
++ ret = register_netdev(netdev);
++ if (ret) {
++ dev_err(dev, "net device registration failed\n");
++ goto err_reg_netdev;
++ }
++
++ xgbe_a0_ptp_register(pdata);
++
++ xgbe_a0_debugfs_init(pdata);
++
++ netdev_notice(netdev, "net device enabled\n");
++
++ DBGPR("<-- xgbe_probe\n");
++
++ return 0;
++
++err_reg_netdev:
++ xgbe_a0_mdio_unregister(pdata);
++
++err_bus_id:
++ kfree(pdata->mii_bus_id);
++
++err_io:
++ free_netdev(netdev);
++
++err_alloc:
++ dev_notice(dev, "net device not enabled\n");
++
++ return ret;
++}
++
++static int xgbe_remove(struct platform_device *pdev)
++{
++ struct net_device *netdev = platform_get_drvdata(pdev);
++ struct xgbe_prv_data *pdata = netdev_priv(netdev);
++
++ DBGPR("-->xgbe_remove\n");
++
++ xgbe_a0_debugfs_exit(pdata);
++
++ xgbe_a0_ptp_unregister(pdata);
++
++ unregister_netdev(netdev);
++
++ xgbe_a0_mdio_unregister(pdata);
++
++ kfree(pdata->mii_bus_id);
++
++ free_netdev(netdev);
++
++ DBGPR("<--xgbe_remove\n");
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int xgbe_suspend(struct device *dev)
++{
++ struct net_device *netdev = dev_get_drvdata(dev);
++ int ret;
++
++ DBGPR("-->xgbe_suspend\n");
++
++ if (!netif_running(netdev)) {
++ DBGPR("<--xgbe_dev_suspend\n");
++ return -EINVAL;
++ }
++
++ ret = xgbe_a0_powerdown(netdev, XGMAC_DRIVER_CONTEXT);
++
++ DBGPR("<--xgbe_suspend\n");
++
++ return ret;
++}
++
++static int xgbe_resume(struct device *dev)
++{
++ struct net_device *netdev = dev_get_drvdata(dev);
++ int ret;
++
++ DBGPR("-->xgbe_resume\n");
++
++ if (!netif_running(netdev)) {
++ DBGPR("<--xgbe_dev_resume\n");
++ return -EINVAL;
++ }
++
++ ret = xgbe_a0_powerup(netdev, XGMAC_DRIVER_CONTEXT);
++
++ DBGPR("<--xgbe_resume\n");
++
++ return ret;
++}
++#endif /* CONFIG_PM */
++
++#ifdef CONFIG_ACPI
++static const struct acpi_device_id xgbe_a0_acpi_match[] = {
++ { "AMDI8000", 0 },
++ {},
++};
++
++MODULE_DEVICE_TABLE(acpi, xgbe_a0_acpi_match);
++#endif
++
++#ifdef CONFIG_OF
++static const struct of_device_id xgbe_a0_of_match[] = {
++ { .compatible = "amd,xgbe-seattle-v0a", },
++ {},
++};
++
++MODULE_DEVICE_TABLE(of, xgbe_a0_of_match);
++#endif
++
++static SIMPLE_DEV_PM_OPS(xgbe_pm_ops, xgbe_suspend, xgbe_resume);
++
++static struct platform_driver xgbe_a0_driver = {
++ .driver = {
++ .name = "amd-xgbe-a0",
++#ifdef CONFIG_ACPI
++ .acpi_match_table = xgbe_a0_acpi_match,
++#endif
++#ifdef CONFIG_OF
++ .of_match_table = xgbe_a0_of_match,
++#endif
++ .pm = &xgbe_pm_ops,
++ },
++ .probe = xgbe_probe,
++ .remove = xgbe_remove,
++};
++
++module_platform_driver(xgbe_a0_driver);
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c
+new file mode 100644
+index 000000000000..b84d0481bed8
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-mdio.c
+@@ -0,0 +1,312 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/module.h>
++#include <linux/kmod.h>
++#include <linux/mdio.h>
++#include <linux/phy.h>
++#include <linux/of.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static int xgbe_mdio_read(struct mii_bus *mii, int prtad, int mmd_reg)
++{
++ struct xgbe_prv_data *pdata = mii->priv;
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ int mmd_data;
++
++ DBGPR_MDIO("-->xgbe_mdio_read: prtad=%#x mmd_reg=%#x\n",
++ prtad, mmd_reg);
++
++ mmd_data = hw_if->read_mmd_regs(pdata, prtad, mmd_reg);
++
++ DBGPR_MDIO("<--xgbe_mdio_read: mmd_data=%#x\n", mmd_data);
++
++ return mmd_data;
++}
++
++static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg,
++ u16 mmd_val)
++{
++ struct xgbe_prv_data *pdata = mii->priv;
++ struct xgbe_hw_if *hw_if = &pdata->hw_if;
++ int mmd_data = mmd_val;
++
++ DBGPR_MDIO("-->xgbe_mdio_write: prtad=%#x mmd_reg=%#x mmd_data=%#x\n",
++ prtad, mmd_reg, mmd_data);
++
++ hw_if->write_mmd_regs(pdata, prtad, mmd_reg, mmd_data);
++
++ DBGPR_MDIO("<--xgbe_mdio_write\n");
++
++ return 0;
++}
++
++void xgbe_a0_dump_phy_registers(struct xgbe_prv_data *pdata)
++{
++ struct device *dev = pdata->dev;
++ struct phy_device *phydev = pdata->mii->phy_map[XGBE_PRTAD];
++ int i;
++
++ dev_alert(dev, "\n************* PHY Reg dump **********************\n");
++
++ dev_alert(dev, "PCS Control Reg (%#04x) = %#04x\n", MDIO_CTRL1,
++ XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_CTRL1));
++ dev_alert(dev, "PCS Status Reg (%#04x) = %#04x\n", MDIO_STAT1,
++ XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1));
++ dev_alert(dev, "Phy Id (PHYS ID 1 %#04x)= %#04x\n", MDIO_DEVID1,
++ XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_DEVID1));
++ dev_alert(dev, "Phy Id (PHYS ID 2 %#04x)= %#04x\n", MDIO_DEVID2,
++ XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_DEVID2));
++ dev_alert(dev, "Devices in Package (%#04x)= %#04x\n", MDIO_DEVS1,
++ XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_DEVS1));
++ dev_alert(dev, "Devices in Package (%#04x)= %#04x\n", MDIO_DEVS2,
++ XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_DEVS2));
++
++ dev_alert(dev, "Auto-Neg Control Reg (%#04x) = %#04x\n", MDIO_CTRL1,
++ XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_CTRL1));
++ dev_alert(dev, "Auto-Neg Status Reg (%#04x) = %#04x\n", MDIO_STAT1,
++ XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_STAT1));
++ dev_alert(dev, "Auto-Neg Ad Reg 1 (%#04x) = %#04x\n",
++ MDIO_AN_ADVERTISE,
++ XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE));
++ dev_alert(dev, "Auto-Neg Ad Reg 2 (%#04x) = %#04x\n",
++ MDIO_AN_ADVERTISE + 1,
++ XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1));
++ dev_alert(dev, "Auto-Neg Ad Reg 3 (%#04x) = %#04x\n",
++ MDIO_AN_ADVERTISE + 2,
++ XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2));
++ dev_alert(dev, "Auto-Neg Completion Reg (%#04x) = %#04x\n",
++ MDIO_AN_COMP_STAT,
++ XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_COMP_STAT));
++
++ dev_alert(dev, "MMD Device Mask = %#x\n",
++ phydev->c45_ids.devices_in_package);
++ for (i = 0; i < ARRAY_SIZE(phydev->c45_ids.device_ids); i++)
++ dev_alert(dev, " MMD %d: ID = %#08x\n", i,
++ phydev->c45_ids.device_ids[i]);
++
++ dev_alert(dev, "\n*************************************************\n");
++}
++
++int xgbe_a0_mdio_register(struct xgbe_prv_data *pdata)
++{
++ struct mii_bus *mii;
++ struct phy_device *phydev;
++ int ret = 0;
++
++ DBGPR("-->xgbe_a0_mdio_register\n");
++
++ mii = mdiobus_alloc();
++ if (!mii) {
++ dev_err(pdata->dev, "mdiobus_alloc failed\n");
++ return -ENOMEM;
++ }
++
++ /* Register on the MDIO bus (don't probe any PHYs) */
++ mii->name = XGBE_PHY_NAME;
++ mii->read = xgbe_mdio_read;
++ mii->write = xgbe_mdio_write;
++ snprintf(mii->id, sizeof(mii->id), "%s", pdata->mii_bus_id);
++ mii->priv = pdata;
++ mii->phy_mask = ~0;
++ mii->parent = pdata->dev;
++ ret = mdiobus_register(mii);
++ if (ret) {
++ dev_err(pdata->dev, "mdiobus_register failed\n");
++ goto err_mdiobus_alloc;
++ }
++ DBGPR(" mdiobus_register succeeded for %s\n", pdata->mii_bus_id);
++
++ /* Probe the PCS using Clause 45 */
++ phydev = get_phy_device(mii, XGBE_PRTAD, true);
++ if (IS_ERR(phydev) || !phydev ||
++ !phydev->c45_ids.device_ids[MDIO_MMD_PCS]) {
++ dev_err(pdata->dev, "get_phy_device failed\n");
++ ret = phydev ? PTR_ERR(phydev) : -ENOLINK;
++ goto err_mdiobus_register;
++ }
++ request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT,
++ MDIO_ID_ARGS(phydev->c45_ids.device_ids[MDIO_MMD_PCS]));
++
++ ret = phy_device_register(phydev);
++ if (ret) {
++ dev_err(pdata->dev, "phy_device_register failed\n");
++ goto err_phy_device;
++ }
++ if (!phydev->dev.driver) {
++ dev_err(pdata->dev, "phy driver probe failed\n");
++ ret = -EIO;
++ goto err_phy_device;
++ }
++
++ /* Add a reference to the PHY driver so it can't be unloaded */
++ pdata->phy_module = phydev->dev.driver->owner;
++ if (!try_module_get(pdata->phy_module)) {
++ dev_err(pdata->dev, "try_module_get failed\n");
++ ret = -EIO;
++ goto err_phy_device;
++ }
++
++ pdata->mii = mii;
++ pdata->mdio_mmd = MDIO_MMD_PCS;
++
++ phydev->autoneg = pdata->default_autoneg;
++ if (phydev->autoneg == AUTONEG_DISABLE) {
++ phydev->speed = pdata->default_speed;
++ phydev->duplex = DUPLEX_FULL;
++
++ phydev->advertising &= ~ADVERTISED_Autoneg;
++ }
++
++ pdata->phydev = phydev;
++
++ DBGPHY_REGS(pdata);
++
++ DBGPR("<--xgbe_a0_mdio_register\n");
++
++ return 0;
++
++err_phy_device:
++ phy_device_free(phydev);
++
++err_mdiobus_register:
++ mdiobus_unregister(mii);
++
++err_mdiobus_alloc:
++ mdiobus_free(mii);
++
++ return ret;
++}
++
++void xgbe_a0_mdio_unregister(struct xgbe_prv_data *pdata)
++{
++ DBGPR("-->xgbe_a0_mdio_unregister\n");
++
++ pdata->phydev = NULL;
++
++ module_put(pdata->phy_module);
++ pdata->phy_module = NULL;
++
++ mdiobus_unregister(pdata->mii);
++ pdata->mii->priv = NULL;
++
++ mdiobus_free(pdata->mii);
++ pdata->mii = NULL;
++
++ DBGPR("<--xgbe_a0_mdio_unregister\n");
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c
+new file mode 100644
+index 000000000000..1016aeb96162
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe-ptp.c
+@@ -0,0 +1,278 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/clk.h>
++#include <linux/clocksource.h>
++#include <linux/ptp_clock_kernel.h>
++#include <linux/net_tstamp.h>
++
++#include "xgbe.h"
++#include "xgbe-common.h"
++
++static cycle_t xgbe_cc_read(const struct cyclecounter *cc)
++{
++ struct xgbe_prv_data *pdata = container_of(cc,
++ struct xgbe_prv_data,
++ tstamp_cc);
++ u64 nsec;
++
++ nsec = pdata->hw_if.get_tstamp_time(pdata);
++
++ return nsec;
++}
++
++static int xgbe_adjfreq(struct ptp_clock_info *info, s32 delta)
++{
++ struct xgbe_prv_data *pdata = container_of(info,
++ struct xgbe_prv_data,
++ ptp_clock_info);
++ unsigned long flags;
++ u64 adjust;
++ u32 addend, diff;
++ unsigned int neg_adjust = 0;
++
++ if (delta < 0) {
++ neg_adjust = 1;
++ delta = -delta;
++ }
++
++ adjust = pdata->tstamp_addend;
++ adjust *= delta;
++ diff = div_u64(adjust, 1000000000UL);
++
++ addend = (neg_adjust) ? pdata->tstamp_addend - diff :
++ pdata->tstamp_addend + diff;
++
++ spin_lock_irqsave(&pdata->tstamp_lock, flags);
++
++ pdata->hw_if.update_tstamp_addend(pdata, addend);
++
++ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
++
++ return 0;
++}
++
++static int xgbe_adjtime(struct ptp_clock_info *info, s64 delta)
++{
++ struct xgbe_prv_data *pdata = container_of(info,
++ struct xgbe_prv_data,
++ ptp_clock_info);
++ unsigned long flags;
++
++ spin_lock_irqsave(&pdata->tstamp_lock, flags);
++ timecounter_adjtime(&pdata->tstamp_tc, delta);
++ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
++
++ return 0;
++}
++
++static int xgbe_gettime(struct ptp_clock_info *info, struct timespec64 *ts)
++{
++ struct xgbe_prv_data *pdata = container_of(info,
++ struct xgbe_prv_data,
++ ptp_clock_info);
++ unsigned long flags;
++ u64 nsec;
++
++ spin_lock_irqsave(&pdata->tstamp_lock, flags);
++
++ nsec = timecounter_read(&pdata->tstamp_tc);
++
++ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
++
++ *ts = ns_to_timespec64(nsec);
++
++ return 0;
++}
++
++static int xgbe_settime(struct ptp_clock_info *info, const struct timespec64 *ts)
++{
++ struct xgbe_prv_data *pdata = container_of(info,
++ struct xgbe_prv_data,
++ ptp_clock_info);
++ unsigned long flags;
++ u64 nsec;
++
++ nsec = timespec64_to_ns(ts);
++
++ spin_lock_irqsave(&pdata->tstamp_lock, flags);
++
++ timecounter_init(&pdata->tstamp_tc, &pdata->tstamp_cc, nsec);
++
++ spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
++
++ return 0;
++}
++
++static int xgbe_enable(struct ptp_clock_info *info,
++ struct ptp_clock_request *request, int on)
++{
++ return -EOPNOTSUPP;
++}
++
++void xgbe_a0_ptp_register(struct xgbe_prv_data *pdata)
++{
++ struct ptp_clock_info *info = &pdata->ptp_clock_info;
++ struct ptp_clock *clock;
++ struct cyclecounter *cc = &pdata->tstamp_cc;
++ u64 dividend;
++
++ snprintf(info->name, sizeof(info->name), "%s",
++ netdev_name(pdata->netdev));
++ info->owner = THIS_MODULE;
++ info->max_adj = pdata->ptpclk_rate;
++ info->adjfreq = xgbe_adjfreq;
++ info->adjtime = xgbe_adjtime;
++ info->gettime64 = xgbe_gettime;
++ info->settime64 = xgbe_settime;
++ info->enable = xgbe_enable;
++
++ clock = ptp_clock_register(info, pdata->dev);
++ if (IS_ERR(clock)) {
++ dev_err(pdata->dev, "ptp_clock_register failed\n");
++ return;
++ }
++
++ pdata->ptp_clock = clock;
++
++ /* Calculate the addend:
++ * addend = 2^32 / (PTP ref clock / 50Mhz)
++ * = (2^32 * 50Mhz) / PTP ref clock
++ */
++ dividend = 50000000;
++ dividend <<= 32;
++ pdata->tstamp_addend = div_u64(dividend, pdata->ptpclk_rate);
++
++ /* Setup the timecounter */
++ cc->read = xgbe_cc_read;
++ cc->mask = CLOCKSOURCE_MASK(64);
++ cc->mult = 1;
++ cc->shift = 0;
++
++ timecounter_init(&pdata->tstamp_tc, &pdata->tstamp_cc,
++ ktime_to_ns(ktime_get_real()));
++
++ /* Disable all timestamping to start */
++ XGMAC_IOWRITE(pdata, MAC_TCR, 0);
++ pdata->tstamp_config.tx_type = HWTSTAMP_TX_OFF;
++ pdata->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
++}
++
++void xgbe_a0_ptp_unregister(struct xgbe_prv_data *pdata)
++{
++ if (pdata->ptp_clock)
++ ptp_clock_unregister(pdata->ptp_clock);
++}
+diff --git a/drivers/net/ethernet/amd/xgbe-a0/xgbe.h b/drivers/net/ethernet/amd/xgbe-a0/xgbe.h
+new file mode 100644
+index 000000000000..04c00d236c49
+--- /dev/null
++++ b/drivers/net/ethernet/amd/xgbe-a0/xgbe.h
+@@ -0,0 +1,868 @@
++/*
++ * AMD 10Gb Ethernet driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * This file incorporates work covered by the following copyright and
++ * permission notice:
++ * The Synopsys DWC ETHER XGMAC Software Driver and documentation
++ * (hereinafter "Software") is an unsupported proprietary work of Synopsys,
++ * Inc. unless otherwise expressly agreed to in writing between Synopsys
++ * and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product
++ * under any End User Software License Agreement or Agreement for Licensed
++ * Product with Synopsys or any supplement thereto. Permission is hereby
++ * granted, free of charge, to any person obtaining a copy of this software
++ * annotated with this license and the Software, to deal in the Software
++ * without restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++ * of the Software, and to permit persons to whom the Software is furnished
++ * to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
++ * BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
++ * THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifndef __XGBE_H__
++#define __XGBE_H__
++
++#include <linux/dma-mapping.h>
++#include <linux/netdevice.h>
++#include <linux/workqueue.h>
++#include <linux/phy.h>
++#include <linux/if_vlan.h>
++#include <linux/bitops.h>
++#include <linux/ptp_clock_kernel.h>
++#include <linux/timecounter.h>
++#include <linux/net_tstamp.h>
++#include <net/dcbnl.h>
++
++#define XGBE_DRV_NAME "amd-xgbe"
++#define XGBE_DRV_VERSION "0.0.0-a"
++#define XGBE_DRV_DESC "AMD 10 Gigabit Ethernet Driver"
++
++/* Descriptor related defines */
++#define XGBE_TX_DESC_CNT 512
++#define XGBE_TX_DESC_MIN_FREE (XGBE_TX_DESC_CNT >> 3)
++#define XGBE_TX_DESC_MAX_PROC (XGBE_TX_DESC_CNT >> 1)
++#define XGBE_RX_DESC_CNT 512
++
++#define XGBE_TX_MAX_BUF_SIZE (0x3fff & ~(64 - 1))
++
++/* Descriptors required for maximum contigous TSO/GSO packet */
++#define XGBE_TX_MAX_SPLIT ((GSO_MAX_SIZE / XGBE_TX_MAX_BUF_SIZE) + 1)
++
++/* Maximum possible descriptors needed for an SKB:
++ * - Maximum number of SKB frags
++ * - Maximum descriptors for contiguous TSO/GSO packet
++ * - Possible context descriptor
++ * - Possible TSO header descriptor
++ */
++#define XGBE_TX_MAX_DESCS (MAX_SKB_FRAGS + XGBE_TX_MAX_SPLIT + 2)
++
++#define XGBE_RX_MIN_BUF_SIZE (ETH_FRAME_LEN + ETH_FCS_LEN + VLAN_HLEN)
++#define XGBE_RX_BUF_ALIGN 64
++#define XGBE_SKB_ALLOC_SIZE 256
++#define XGBE_SPH_HDSMS_SIZE 2 /* Keep in sync with SKB_ALLOC_SIZE */
++
++#define XGBE_MAX_DMA_CHANNELS 16
++#define XGBE_MAX_QUEUES 16
++#define XGBE_DMA_STOP_TIMEOUT 5
++
++/* DMA cache settings - Outer sharable, write-back, write-allocate */
++#define XGBE_DMA_OS_AXDOMAIN 0x2
++#define XGBE_DMA_OS_ARCACHE 0xb
++#define XGBE_DMA_OS_AWCACHE 0xf
++
++/* DMA cache settings - System, no caches used */
++#define XGBE_DMA_SYS_AXDOMAIN 0x3
++#define XGBE_DMA_SYS_ARCACHE 0x0
++#define XGBE_DMA_SYS_AWCACHE 0x0
++
++#define XGBE_DMA_INTERRUPT_MASK 0x31c7
++
++#define XGMAC_MIN_PACKET 60
++#define XGMAC_STD_PACKET_MTU 1500
++#define XGMAC_MAX_STD_PACKET 1518
++#define XGMAC_JUMBO_PACKET_MTU 9000
++#define XGMAC_MAX_JUMBO_PACKET 9018
++
++/* MDIO bus phy name */
++#define XGBE_PHY_NAME "amd_xgbe_phy_a0"
++#define XGBE_PRTAD 0
++
++/* Common property names */
++#define XGBE_MAC_ADDR_PROPERTY "mac-address"
++#define XGBE_PHY_MODE_PROPERTY "phy-mode"
++#define XGBE_DMA_IRQS_PROPERTY "amd,per-channel-interrupt"
++
++/* Device-tree clock names */
++#define XGBE_DMA_CLOCK "dma_clk"
++#define XGBE_PTP_CLOCK "ptp_clk"
++
++/* ACPI property names */
++#define XGBE_ACPI_DMA_FREQ "amd,dma-freq"
++#define XGBE_ACPI_PTP_FREQ "amd,ptp-freq"
++
++/* Timestamp support - values based on 50MHz PTP clock
++ * 50MHz => 20 nsec
++ */
++#define XGBE_TSTAMP_SSINC 20
++#define XGBE_TSTAMP_SNSINC 0
++
++/* Driver PMT macros */
++#define XGMAC_DRIVER_CONTEXT 1
++#define XGMAC_IOCTL_CONTEXT 2
++
++#define XGBE_FIFO_MAX 81920
++#define XGBE_FIFO_SIZE_B(x) (x)
++#define XGBE_FIFO_SIZE_KB(x) (x * 1024)
++
++#define XGBE_TC_MIN_QUANTUM 10
++
++/* Helper macro for descriptor handling
++ * Always use XGBE_GET_DESC_DATA to access the descriptor data
++ * since the index is free-running and needs to be and-ed
++ * with the descriptor count value of the ring to index to
++ * the proper descriptor data.
++ */
++#define XGBE_GET_DESC_DATA(_ring, _idx) \
++ ((_ring)->rdata + \
++ ((_idx) & ((_ring)->rdesc_count - 1)))
++
++/* Default coalescing parameters */
++#define XGMAC_INIT_DMA_TX_USECS 50
++#define XGMAC_INIT_DMA_TX_FRAMES 25
++
++#define XGMAC_MAX_DMA_RIWT 0xff
++#define XGMAC_INIT_DMA_RX_USECS 30
++#define XGMAC_INIT_DMA_RX_FRAMES 25
++
++/* Flow control queue count */
++#define XGMAC_MAX_FLOW_CONTROL_QUEUES 8
++
++/* Maximum MAC address hash table size (256 bits = 8 bytes) */
++#define XGBE_MAC_HASH_TABLE_SIZE 8
++
++/* Receive Side Scaling */
++#define XGBE_RSS_HASH_KEY_SIZE 40
++#define XGBE_RSS_MAX_TABLE_SIZE 256
++#define XGBE_RSS_LOOKUP_TABLE_TYPE 0
++#define XGBE_RSS_HASH_KEY_TYPE 1
++
++struct xgbe_prv_data;
++
++struct xgbe_packet_data {
++ struct sk_buff *skb;
++
++ unsigned int attributes;
++
++ unsigned int errors;
++
++ unsigned int rdesc_count;
++ unsigned int length;
++
++ unsigned int header_len;
++ unsigned int tcp_header_len;
++ unsigned int tcp_payload_len;
++ unsigned short mss;
++
++ unsigned short vlan_ctag;
++
++ u64 rx_tstamp;
++
++ u32 rss_hash;
++ enum pkt_hash_types rss_hash_type;
++
++ unsigned int tx_packets;
++ unsigned int tx_bytes;
++};
++
++/* Common Rx and Tx descriptor mapping */
++struct xgbe_ring_desc {
++ __le32 desc0;
++ __le32 desc1;
++ __le32 desc2;
++ __le32 desc3;
++};
++
++/* Page allocation related values */
++struct xgbe_page_alloc {
++ struct page *pages;
++ unsigned int pages_len;
++ unsigned int pages_offset;
++
++ dma_addr_t pages_dma;
++};
++
++/* Ring entry buffer data */
++struct xgbe_buffer_data {
++ struct xgbe_page_alloc pa;
++ struct xgbe_page_alloc pa_unmap;
++
++ dma_addr_t dma;
++ unsigned int dma_len;
++};
++
++/* Tx-related ring data */
++struct xgbe_tx_ring_data {
++ unsigned int packets; /* BQL packet count */
++ unsigned int bytes; /* BQL byte count */
++};
++
++/* Rx-related ring data */
++struct xgbe_rx_ring_data {
++ struct xgbe_buffer_data hdr; /* Header locations */
++ struct xgbe_buffer_data buf; /* Payload locations */
++
++ unsigned short hdr_len; /* Length of received header */
++ unsigned short len; /* Length of received packet */
++};
++
++/* Structure used to hold information related to the descriptor
++ * and the packet associated with the descriptor (always use
++ * use the XGBE_GET_DESC_DATA macro to access this data from the ring)
++ */
++struct xgbe_ring_data {
++ struct xgbe_ring_desc *rdesc; /* Virtual address of descriptor */
++ dma_addr_t rdesc_dma; /* DMA address of descriptor */
++
++ struct sk_buff *skb; /* Virtual address of SKB */
++ dma_addr_t skb_dma; /* DMA address of SKB data */
++ unsigned int skb_dma_len; /* Length of SKB DMA area */
++
++ struct xgbe_tx_ring_data tx; /* Tx-related data */
++ struct xgbe_rx_ring_data rx; /* Rx-related data */
++
++ unsigned int interrupt; /* Interrupt indicator */
++
++ unsigned int mapped_as_page;
++
++ /* Incomplete receive save location. If the budget is exhausted
++ * or the last descriptor (last normal descriptor or a following
++ * context descriptor) has not been DMA'd yet the current state
++ * of the receive processing needs to be saved.
++ */
++ unsigned int state_saved;
++ struct {
++ unsigned int incomplete;
++ unsigned int context_next;
++ struct sk_buff *skb;
++ unsigned int len;
++ unsigned int error;
++ } state;
++};
++
++struct xgbe_ring {
++ /* Ring lock - used just for TX rings at the moment */
++ spinlock_t lock;
++
++ /* Per packet related information */
++ struct xgbe_packet_data packet_data;
++
++ /* Virtual/DMA addresses and count of allocated descriptor memory */
++ struct xgbe_ring_desc *rdesc;
++ dma_addr_t rdesc_dma;
++ unsigned int rdesc_count;
++
++ /* Array of descriptor data corresponding the descriptor memory
++ * (always use the XGBE_GET_DESC_DATA macro to access this data)
++ */
++ struct xgbe_ring_data *rdata;
++
++ /* Page allocation for RX buffers */
++ struct xgbe_page_alloc rx_hdr_pa;
++ struct xgbe_page_alloc rx_buf_pa;
++
++ /* Ring index values
++ * cur - Tx: index of descriptor to be used for current transfer
++ * Rx: index of descriptor to check for packet availability
++ * dirty - Tx: index of descriptor to check for transfer complete
++ * Rx: index of descriptor to check for buffer reallocation
++ */
++ unsigned int cur;
++ unsigned int dirty;
++
++ /* Coalesce frame count used for interrupt bit setting */
++ unsigned int coalesce_count;
++
++ union {
++ struct {
++ unsigned int queue_stopped;
++ unsigned int xmit_more;
++ unsigned short cur_mss;
++ unsigned short cur_vlan_ctag;
++ } tx;
++ };
++} ____cacheline_aligned;
++
++/* Structure used to describe the descriptor rings associated with
++ * a DMA channel.
++ */
++struct xgbe_channel {
++ char name[16];
++
++ /* Address of private data area for device */
++ struct xgbe_prv_data *pdata;
++
++ /* Queue index and base address of queue's DMA registers */
++ unsigned int queue_index;
++ void __iomem *dma_regs;
++
++ /* Per channel interrupt irq number */
++ int dma_irq;
++ char dma_irq_name[IFNAMSIZ + 32];
++
++ /* Netdev related settings */
++ struct napi_struct napi;
++
++ unsigned int saved_ier;
++
++ unsigned int tx_timer_active;
++ struct hrtimer tx_timer;
++
++ struct xgbe_ring *tx_ring;
++ struct xgbe_ring *rx_ring;
++} ____cacheline_aligned;
++
++enum xgbe_int {
++ XGMAC_INT_DMA_CH_SR_TI,
++ XGMAC_INT_DMA_CH_SR_TPS,
++ XGMAC_INT_DMA_CH_SR_TBU,
++ XGMAC_INT_DMA_CH_SR_RI,
++ XGMAC_INT_DMA_CH_SR_RBU,
++ XGMAC_INT_DMA_CH_SR_RPS,
++ XGMAC_INT_DMA_CH_SR_TI_RI,
++ XGMAC_INT_DMA_CH_SR_FBE,
++ XGMAC_INT_DMA_ALL,
++};
++
++enum xgbe_int_state {
++ XGMAC_INT_STATE_SAVE,
++ XGMAC_INT_STATE_RESTORE,
++};
++
++enum xgbe_mtl_fifo_size {
++ XGMAC_MTL_FIFO_SIZE_256 = 0x00,
++ XGMAC_MTL_FIFO_SIZE_512 = 0x01,
++ XGMAC_MTL_FIFO_SIZE_1K = 0x03,
++ XGMAC_MTL_FIFO_SIZE_2K = 0x07,
++ XGMAC_MTL_FIFO_SIZE_4K = 0x0f,
++ XGMAC_MTL_FIFO_SIZE_8K = 0x1f,
++ XGMAC_MTL_FIFO_SIZE_16K = 0x3f,
++ XGMAC_MTL_FIFO_SIZE_32K = 0x7f,
++ XGMAC_MTL_FIFO_SIZE_64K = 0xff,
++ XGMAC_MTL_FIFO_SIZE_128K = 0x1ff,
++ XGMAC_MTL_FIFO_SIZE_256K = 0x3ff,
++};
++
++struct xgbe_mmc_stats {
++ /* Tx Stats */
++ u64 txoctetcount_gb;
++ u64 txframecount_gb;
++ u64 txbroadcastframes_g;
++ u64 txmulticastframes_g;
++ u64 tx64octets_gb;
++ u64 tx65to127octets_gb;
++ u64 tx128to255octets_gb;
++ u64 tx256to511octets_gb;
++ u64 tx512to1023octets_gb;
++ u64 tx1024tomaxoctets_gb;
++ u64 txunicastframes_gb;
++ u64 txmulticastframes_gb;
++ u64 txbroadcastframes_gb;
++ u64 txunderflowerror;
++ u64 txoctetcount_g;
++ u64 txframecount_g;
++ u64 txpauseframes;
++ u64 txvlanframes_g;
++
++ /* Rx Stats */
++ u64 rxframecount_gb;
++ u64 rxoctetcount_gb;
++ u64 rxoctetcount_g;
++ u64 rxbroadcastframes_g;
++ u64 rxmulticastframes_g;
++ u64 rxcrcerror;
++ u64 rxrunterror;
++ u64 rxjabbererror;
++ u64 rxundersize_g;
++ u64 rxoversize_g;
++ u64 rx64octets_gb;
++ u64 rx65to127octets_gb;
++ u64 rx128to255octets_gb;
++ u64 rx256to511octets_gb;
++ u64 rx512to1023octets_gb;
++ u64 rx1024tomaxoctets_gb;
++ u64 rxunicastframes_g;
++ u64 rxlengtherror;
++ u64 rxoutofrangetype;
++ u64 rxpauseframes;
++ u64 rxfifooverflow;
++ u64 rxvlanframes_gb;
++ u64 rxwatchdogerror;
++};
++
++struct xgbe_hw_if {
++ int (*tx_complete)(struct xgbe_ring_desc *);
++
++ int (*set_promiscuous_mode)(struct xgbe_prv_data *, unsigned int);
++ int (*set_all_multicast_mode)(struct xgbe_prv_data *, unsigned int);
++ int (*add_mac_addresses)(struct xgbe_prv_data *);
++ int (*set_mac_address)(struct xgbe_prv_data *, u8 *addr);
++
++ int (*enable_rx_csum)(struct xgbe_prv_data *);
++ int (*disable_rx_csum)(struct xgbe_prv_data *);
++
++ int (*enable_rx_vlan_stripping)(struct xgbe_prv_data *);
++ int (*disable_rx_vlan_stripping)(struct xgbe_prv_data *);
++ int (*enable_rx_vlan_filtering)(struct xgbe_prv_data *);
++ int (*disable_rx_vlan_filtering)(struct xgbe_prv_data *);
++ int (*update_vlan_hash_table)(struct xgbe_prv_data *);
++
++ int (*read_mmd_regs)(struct xgbe_prv_data *, int, int);
++ void (*write_mmd_regs)(struct xgbe_prv_data *, int, int, int);
++ int (*set_gmii_speed)(struct xgbe_prv_data *);
++ int (*set_gmii_2500_speed)(struct xgbe_prv_data *);
++ int (*set_xgmii_speed)(struct xgbe_prv_data *);
++
++ void (*enable_tx)(struct xgbe_prv_data *);
++ void (*disable_tx)(struct xgbe_prv_data *);
++ void (*enable_rx)(struct xgbe_prv_data *);
++ void (*disable_rx)(struct xgbe_prv_data *);
++
++ void (*powerup_tx)(struct xgbe_prv_data *);
++ void (*powerdown_tx)(struct xgbe_prv_data *);
++ void (*powerup_rx)(struct xgbe_prv_data *);
++ void (*powerdown_rx)(struct xgbe_prv_data *);
++
++ int (*init)(struct xgbe_prv_data *);
++ int (*exit)(struct xgbe_prv_data *);
++
++ int (*enable_int)(struct xgbe_channel *, enum xgbe_int);
++ int (*disable_int)(struct xgbe_channel *, enum xgbe_int);
++ void (*dev_xmit)(struct xgbe_channel *);
++ int (*dev_read)(struct xgbe_channel *);
++ void (*tx_desc_init)(struct xgbe_channel *);
++ void (*rx_desc_init)(struct xgbe_channel *);
++ void (*rx_desc_reset)(struct xgbe_ring_data *);
++ void (*tx_desc_reset)(struct xgbe_ring_data *);
++ int (*is_last_desc)(struct xgbe_ring_desc *);
++ int (*is_context_desc)(struct xgbe_ring_desc *);
++ void (*tx_start_xmit)(struct xgbe_channel *, struct xgbe_ring *);
++
++ /* For FLOW ctrl */
++ int (*config_tx_flow_control)(struct xgbe_prv_data *);
++ int (*config_rx_flow_control)(struct xgbe_prv_data *);
++
++ /* For RX coalescing */
++ int (*config_rx_coalesce)(struct xgbe_prv_data *);
++ int (*config_tx_coalesce)(struct xgbe_prv_data *);
++ unsigned int (*usec_to_riwt)(struct xgbe_prv_data *, unsigned int);
++ unsigned int (*riwt_to_usec)(struct xgbe_prv_data *, unsigned int);
++
++ /* For RX and TX threshold config */
++ int (*config_rx_threshold)(struct xgbe_prv_data *, unsigned int);
++ int (*config_tx_threshold)(struct xgbe_prv_data *, unsigned int);
++
++ /* For RX and TX Store and Forward Mode config */
++ int (*config_rsf_mode)(struct xgbe_prv_data *, unsigned int);
++ int (*config_tsf_mode)(struct xgbe_prv_data *, unsigned int);
++
++ /* For TX DMA Operate on Second Frame config */
++ int (*config_osp_mode)(struct xgbe_prv_data *);
++
++ /* For RX and TX PBL config */
++ int (*config_rx_pbl_val)(struct xgbe_prv_data *);
++ int (*get_rx_pbl_val)(struct xgbe_prv_data *);
++ int (*config_tx_pbl_val)(struct xgbe_prv_data *);
++ int (*get_tx_pbl_val)(struct xgbe_prv_data *);
++ int (*config_pblx8)(struct xgbe_prv_data *);
++
++ /* For MMC statistics */
++ void (*rx_mmc_int)(struct xgbe_prv_data *);
++ void (*tx_mmc_int)(struct xgbe_prv_data *);
++ void (*read_mmc_stats)(struct xgbe_prv_data *);
++
++ /* For Timestamp config */
++ int (*config_tstamp)(struct xgbe_prv_data *, unsigned int);
++ void (*update_tstamp_addend)(struct xgbe_prv_data *, unsigned int);
++ void (*set_tstamp_time)(struct xgbe_prv_data *, unsigned int sec,
++ unsigned int nsec);
++ u64 (*get_tstamp_time)(struct xgbe_prv_data *);
++ u64 (*get_tx_tstamp)(struct xgbe_prv_data *);
++
++ /* For Data Center Bridging config */
++ void (*config_dcb_tc)(struct xgbe_prv_data *);
++ void (*config_dcb_pfc)(struct xgbe_prv_data *);
++
++ /* For Receive Side Scaling */
++ int (*enable_rss)(struct xgbe_prv_data *);
++ int (*disable_rss)(struct xgbe_prv_data *);
++ int (*set_rss_hash_key)(struct xgbe_prv_data *, const u8 *);
++ int (*set_rss_lookup_table)(struct xgbe_prv_data *, const u32 *);
++};
++
++struct xgbe_desc_if {
++ int (*alloc_ring_resources)(struct xgbe_prv_data *);
++ void (*free_ring_resources)(struct xgbe_prv_data *);
++ int (*map_tx_skb)(struct xgbe_channel *, struct sk_buff *);
++ int (*map_rx_buffer)(struct xgbe_prv_data *, struct xgbe_ring *,
++ struct xgbe_ring_data *);
++ void (*unmap_rdata)(struct xgbe_prv_data *, struct xgbe_ring_data *);
++ void (*wrapper_tx_desc_init)(struct xgbe_prv_data *);
++ void (*wrapper_rx_desc_init)(struct xgbe_prv_data *);
++};
++
++/* This structure contains flags that indicate what hardware features
++ * or configurations are present in the device.
++ */
++struct xgbe_hw_features {
++ /* HW Version */
++ unsigned int version;
++
++ /* HW Feature Register0 */
++ unsigned int gmii; /* 1000 Mbps support */
++ unsigned int vlhash; /* VLAN Hash Filter */
++ unsigned int sma; /* SMA(MDIO) Interface */
++ unsigned int rwk; /* PMT remote wake-up packet */
++ unsigned int mgk; /* PMT magic packet */
++ unsigned int mmc; /* RMON module */
++ unsigned int aoe; /* ARP Offload */
++ unsigned int ts; /* IEEE 1588-2008 Adavanced Timestamp */
++ unsigned int eee; /* Energy Efficient Ethernet */
++ unsigned int tx_coe; /* Tx Checksum Offload */
++ unsigned int rx_coe; /* Rx Checksum Offload */
++ unsigned int addn_mac; /* Additional MAC Addresses */
++ unsigned int ts_src; /* Timestamp Source */
++ unsigned int sa_vlan_ins; /* Source Address or VLAN Insertion */
++
++ /* HW Feature Register1 */
++ unsigned int rx_fifo_size; /* MTL Receive FIFO Size */
++ unsigned int tx_fifo_size; /* MTL Transmit FIFO Size */
++ unsigned int adv_ts_hi; /* Advance Timestamping High Word */
++ unsigned int dcb; /* DCB Feature */
++ unsigned int sph; /* Split Header Feature */
++ unsigned int tso; /* TCP Segmentation Offload */
++ unsigned int dma_debug; /* DMA Debug Registers */
++ unsigned int rss; /* Receive Side Scaling */
++ unsigned int tc_cnt; /* Number of Traffic Classes */
++ unsigned int hash_table_size; /* Hash Table Size */
++ unsigned int l3l4_filter_num; /* Number of L3-L4 Filters */
++
++ /* HW Feature Register2 */
++ unsigned int rx_q_cnt; /* Number of MTL Receive Queues */
++ unsigned int tx_q_cnt; /* Number of MTL Transmit Queues */
++ unsigned int rx_ch_cnt; /* Number of DMA Receive Channels */
++ unsigned int tx_ch_cnt; /* Number of DMA Transmit Channels */
++ unsigned int pps_out_num; /* Number of PPS outputs */
++ unsigned int aux_snap_num; /* Number of Aux snapshot inputs */
++};
++
++struct xgbe_prv_data {
++ struct net_device *netdev;
++ struct platform_device *pdev;
++ struct acpi_device *adev;
++ struct device *dev;
++
++ /* ACPI or DT flag */
++ unsigned int use_acpi;
++
++ /* XGMAC/XPCS related mmio registers */
++ void __iomem *xgmac_regs; /* XGMAC CSRs */
++ void __iomem *xpcs_regs; /* XPCS MMD registers */
++
++ /* Overall device lock */
++ spinlock_t lock;
++
++ /* XPCS indirect addressing mutex */
++ struct mutex xpcs_mutex;
++
++ /* RSS addressing mutex */
++ struct mutex rss_mutex;
++
++ int dev_irq;
++ unsigned int per_channel_irq;
++
++ struct xgbe_hw_if hw_if;
++ struct xgbe_desc_if desc_if;
++
++ /* AXI DMA settings */
++ unsigned int coherent;
++ unsigned int axdomain;
++ unsigned int arcache;
++ unsigned int awcache;
++
++ /* Rings for Tx/Rx on a DMA channel */
++ struct xgbe_channel *channel;
++ unsigned int channel_count;
++ unsigned int tx_ring_count;
++ unsigned int tx_desc_count;
++ unsigned int rx_ring_count;
++ unsigned int rx_desc_count;
++
++ unsigned int tx_q_count;
++ unsigned int rx_q_count;
++
++ /* Tx/Rx common settings */
++ unsigned int pblx8;
++
++ /* Tx settings */
++ unsigned int tx_sf_mode;
++ unsigned int tx_threshold;
++ unsigned int tx_pbl;
++ unsigned int tx_osp_mode;
++
++ /* Rx settings */
++ unsigned int rx_sf_mode;
++ unsigned int rx_threshold;
++ unsigned int rx_pbl;
++
++ /* Tx coalescing settings */
++ unsigned int tx_usecs;
++ unsigned int tx_frames;
++
++ /* Rx coalescing settings */
++ unsigned int rx_riwt;
++ unsigned int rx_frames;
++
++ /* Current Rx buffer size */
++ unsigned int rx_buf_size;
++
++ /* Flow control settings */
++ unsigned int pause_autoneg;
++ unsigned int tx_pause;
++ unsigned int rx_pause;
++
++ /* Receive Side Scaling settings */
++ u8 rss_key[XGBE_RSS_HASH_KEY_SIZE];
++ u32 rss_table[XGBE_RSS_MAX_TABLE_SIZE];
++ u32 rss_options;
++
++ /* MDIO settings */
++ struct module *phy_module;
++ char *mii_bus_id;
++ struct mii_bus *mii;
++ int mdio_mmd;
++ struct phy_device *phydev;
++ int default_autoneg;
++ int default_speed;
++
++ /* Current PHY settings */
++ phy_interface_t phy_mode;
++ int phy_link;
++ int phy_speed;
++ unsigned int phy_tx_pause;
++ unsigned int phy_rx_pause;
++
++ /* Netdev related settings */
++ unsigned char mac_addr[ETH_ALEN];
++ netdev_features_t netdev_features;
++ struct napi_struct napi;
++ struct xgbe_mmc_stats mmc_stats;
++
++ /* Filtering support */
++ unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
++
++ /* Device clocks */
++ struct clk *sysclk;
++ unsigned long sysclk_rate;
++ struct clk *ptpclk;
++ unsigned long ptpclk_rate;
++
++ /* Timestamp support */
++ spinlock_t tstamp_lock;
++ struct ptp_clock_info ptp_clock_info;
++ struct ptp_clock *ptp_clock;
++ struct hwtstamp_config tstamp_config;
++ struct cyclecounter tstamp_cc;
++ struct timecounter tstamp_tc;
++ unsigned int tstamp_addend;
++ struct work_struct tx_tstamp_work;
++ struct sk_buff *tx_tstamp_skb;
++ u64 tx_tstamp;
++
++ /* DCB support */
++ struct ieee_ets *ets;
++ struct ieee_pfc *pfc;
++ unsigned int q2tc_map[XGBE_MAX_QUEUES];
++ unsigned int prio2q_map[IEEE_8021QAZ_MAX_TCS];
++
++ /* Hardware features of the device */
++ struct xgbe_hw_features hw_feat;
++
++ /* Device restart work structure */
++ struct work_struct restart_work;
++
++ /* Keeps track of power mode */
++ unsigned int power_down;
++
++#ifdef CONFIG_DEBUG_FS
++ struct dentry *xgbe_debugfs;
++
++ unsigned int debugfs_xgmac_reg;
++
++ unsigned int debugfs_xpcs_mmd;
++ unsigned int debugfs_xpcs_reg;
++#endif
++};
++
++/* Function prototypes*/
++
++void xgbe_a0_init_function_ptrs_dev(struct xgbe_hw_if *);
++void xgbe_a0_init_function_ptrs_desc(struct xgbe_desc_if *);
++struct net_device_ops *xgbe_a0_get_netdev_ops(void);
++struct ethtool_ops *xgbe_a0_get_ethtool_ops(void);
++#ifdef CONFIG_AMD_XGBE_DCB
++const struct dcbnl_rtnl_ops *xgbe_a0_get_dcbnl_ops(void);
++#endif
++
++int xgbe_a0_mdio_register(struct xgbe_prv_data *);
++void xgbe_a0_mdio_unregister(struct xgbe_prv_data *);
++void xgbe_a0_dump_phy_registers(struct xgbe_prv_data *);
++void xgbe_a0_ptp_register(struct xgbe_prv_data *);
++void xgbe_a0_ptp_unregister(struct xgbe_prv_data *);
++void xgbe_a0_dump_tx_desc(struct xgbe_ring *, unsigned int, unsigned int,
++ unsigned int);
++void xgbe_a0_dump_rx_desc(struct xgbe_ring *, struct xgbe_ring_desc *,
++ unsigned int);
++void xgbe_a0_print_pkt(struct net_device *, struct sk_buff *, bool);
++void xgbe_a0_get_all_hw_features(struct xgbe_prv_data *);
++int xgbe_a0_powerup(struct net_device *, unsigned int);
++int xgbe_a0_powerdown(struct net_device *, unsigned int);
++void xgbe_a0_init_rx_coalesce(struct xgbe_prv_data *);
++void xgbe_a0_init_tx_coalesce(struct xgbe_prv_data *);
++
++#ifdef CONFIG_DEBUG_FS
++void xgbe_a0_debugfs_init(struct xgbe_prv_data *);
++void xgbe_a0_debugfs_exit(struct xgbe_prv_data *);
++#else
++static inline void xgbe_a0_debugfs_init(struct xgbe_prv_data *pdata) {}
++static inline void xgbe_a0_debugfs_exit(struct xgbe_prv_data *pdata) {}
++#endif /* CONFIG_DEBUG_FS */
++
++/* NOTE: Uncomment for TX and RX DESCRIPTOR DUMP in KERNEL LOG */
++#if 0
++#define XGMAC_ENABLE_TX_DESC_DUMP
++#define XGMAC_ENABLE_RX_DESC_DUMP
++#endif
++
++/* NOTE: Uncomment for TX and RX PACKET DUMP in KERNEL LOG */
++#if 0
++#define XGMAC_ENABLE_TX_PKT_DUMP
++#define XGMAC_ENABLE_RX_PKT_DUMP
++#endif
++
++/* NOTE: Uncomment for function trace log messages in KERNEL LOG */
++#if 0
++#define YDEBUG
++#define YDEBUG_MDIO
++#endif
++
++/* For debug prints */
++#ifdef YDEBUG
++#define DBGPR(x...) pr_alert(x)
++#define DBGPHY_REGS(x...) xgbe_a0_dump_phy_registers(x)
++#else
++#define DBGPR(x...) do { } while (0)
++#define DBGPHY_REGS(x...) do { } while (0)
++#endif
++
++#ifdef YDEBUG_MDIO
++#define DBGPR_MDIO(x...) pr_alert(x)
++#else
++#define DBGPR_MDIO(x...) do { } while (0)
++#endif
++
++#endif
diff --git a/amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch b/amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
new file mode 100644
index 000000000..c24edad0a
--- /dev/null
+++ b/amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
@@ -0,0 +1,1870 @@
+From a3e660ae9fdeb53000eceeaf393e03cd087e37f7 Mon Sep 17 00:00:00 2001
+From: Tom Lendacky <thomas.lendacky@amd.com>
+Date: Tue, 17 Mar 2015 10:58:38 -0500
+Subject: [PATCH 2/2] amd-xgbe-phy-a0: Add support for XGBE PHY on A0
+
+Add XGBE phy driver support for A0 hardware.
+
+Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
+[Add back AMD_XGBE_PHY removed upstream for B0 driver]
+Signed-off-by: Mark Salter <msalter@redhat.com>
+---
+ drivers/net/phy/Kconfig | 7 +
+ drivers/net/phy/Makefile | 1 +
+ drivers/net/phy/amd-xgbe-phy-a0.c | 1814 +++++++++++++++++++++++++++++++++++++
+ 3 files changed, 1822 insertions(+)
+ create mode 100644 drivers/net/phy/amd-xgbe-phy-a0.c
+
+diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
+index cb86d7a..a3138b1 100644
+--- a/drivers/net/phy/Kconfig
++++ b/drivers/net/phy/Kconfig
+@@ -24,6 +24,13 @@ config AMD_PHY
+ ---help---
+ Currently supports the am79c874
+
++config AMD_XGBE_PHY
++ tristate "Driver for the AMD 10GbE (amd-xgbe) PHYs"
++ depends on (OF || ACPI) && HAS_IOMEM
++ depends on ARM64 || COMPILE_TEST
++ ---help---
++ Currently supports the AMD 10GbE PHY
++
+ config MARVELL_PHY
+ tristate "Drivers for Marvell PHYs"
+ ---help---
+diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
+index fcc25a0..6ebb9ba 100644
+--- a/drivers/net/phy/Makefile
++++ b/drivers/net/phy/Makefile
+@@ -29,6 +29,7 @@ obj-$(CONFIG_MDIO_OCTEON) += mdio-octeon.o
+ obj-$(CONFIG_MICREL_KS8995MA) += spi_ks8995.o
+ obj-$(CONFIG_AT803X_PHY) += at803x.o
+ obj-$(CONFIG_AMD_PHY) += amd.o
++obj-$(CONFIG_AMD_XGBE_PHY) += amd-xgbe-phy-a0.o
+ obj-$(CONFIG_MDIO_BUS_MUX) += mdio-mux.o
+ obj-$(CONFIG_MDIO_BUS_MUX_GPIO) += mdio-mux-gpio.o
+ obj-$(CONFIG_MDIO_BUS_MUX_MMIOREG) += mdio-mux-mmioreg.o
+diff --git a/drivers/net/phy/amd-xgbe-phy-a0.c b/drivers/net/phy/amd-xgbe-phy-a0.c
+new file mode 100644
+index 0000000..c352d5c
+--- /dev/null
++++ b/drivers/net/phy/amd-xgbe-phy-a0.c
+@@ -0,0 +1,1814 @@
++/*
++ * AMD 10Gb Ethernet PHY driver
++ *
++ * This file is available to you under your choice of the following two
++ * licenses:
++ *
++ * License 1: GPLv2
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ *
++ * This file is free software; you may copy, redistribute and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This file is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ *
++ * License 2: Modified BSD
++ *
++ * Copyright (c) 2014 Advanced Micro Devices, Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * * Neither the name of Advanced Micro Devices, Inc. nor the
++ * names of its contributors may be used to endorse or promote products
++ * derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/kernel.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/string.h>
++#include <linux/errno.h>
++#include <linux/unistd.h>
++#include <linux/slab.h>
++#include <linux/interrupt.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/workqueue.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/mii.h>
++#include <linux/ethtool.h>
++#include <linux/phy.h>
++#include <linux/mdio.h>
++#include <linux/io.h>
++#include <linux/of.h>
++#include <linux/of_platform.h>
++#include <linux/of_device.h>
++#include <linux/uaccess.h>
++#include <linux/bitops.h>
++#include <linux/property.h>
++#include <linux/acpi.h>
++#include <linux/irq.h>
++
++MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>");
++MODULE_LICENSE("Dual BSD/GPL");
++MODULE_VERSION("0.0.0-a");
++MODULE_DESCRIPTION("AMD 10GbE (amd-xgbe) PHY driver");
++
++#define XGBE_PHY_ID 0x7996ced0
++#define XGBE_PHY_MASK 0xfffffff0
++
++#define XGBE_PHY_SERDES_RETRY 32
++#define XGBE_PHY_CHANNEL_PROPERTY "amd,serdes-channel"
++#define XGBE_PHY_SPEEDSET_PROPERTY "amd,speed-set"
++#define XGBE_PHY_BLWC_PROPERTY "amd,serdes-blwc"
++#define XGBE_PHY_CDR_RATE_PROPERTY "amd,serdes-cdr-rate"
++#define XGBE_PHY_PQ_SKEW_PROPERTY "amd,serdes-pq-skew"
++#define XGBE_PHY_TX_AMP_PROPERTY "amd,serdes-tx-amp"
++
++#define XGBE_PHY_SPEEDS 3
++#define XGBE_PHY_SPEED_1000 0
++#define XGBE_PHY_SPEED_2500 1
++#define XGBE_PHY_SPEED_10000 2
++
++#define XGBE_AN_INT_CMPLT 0x01
++#define XGBE_AN_INC_LINK 0x02
++#define XGBE_AN_PG_RCV 0x04
++#define XGBE_AN_INT_MASK 0x07
++
++#define XNP_MCF_NULL_MESSAGE 0x001
++#define XNP_ACK_PROCESSED BIT(12)
++#define XNP_MP_FORMATTED BIT(13)
++#define XNP_NP_EXCHANGE BIT(15)
++
++#define XGBE_PHY_RATECHANGE_COUNT 500
++
++#define XGBE_PHY_KR_TRAINING_START 0x01
++#define XGBE_PHY_KR_TRAINING_ENABLE 0x02
++
++#define XGBE_PHY_FEC_ENABLE 0x01
++#define XGBE_PHY_FEC_FORWARD 0x02
++#define XGBE_PHY_FEC_MASK 0x03
++
++#ifndef MDIO_PMA_10GBR_PMD_CTRL
++#define MDIO_PMA_10GBR_PMD_CTRL 0x0096
++#endif
++
++#ifndef MDIO_PMA_10GBR_FEC_ABILITY
++#define MDIO_PMA_10GBR_FEC_ABILITY 0x00aa
++#endif
++
++#ifndef MDIO_PMA_10GBR_FEC_CTRL
++#define MDIO_PMA_10GBR_FEC_CTRL 0x00ab
++#endif
++
++#ifndef MDIO_AN_XNP
++#define MDIO_AN_XNP 0x0016
++#endif
++
++#ifndef MDIO_AN_LPX
++#define MDIO_AN_LPX 0x0019
++#endif
++
++#ifndef MDIO_AN_INTMASK
++#define MDIO_AN_INTMASK 0x8001
++#endif
++
++#ifndef MDIO_AN_INT
++#define MDIO_AN_INT 0x8002
++#endif
++
++#ifndef MDIO_AN_KR_CTRL
++#define MDIO_AN_KR_CTRL 0x8003
++#endif
++
++#ifndef MDIO_CTRL1_SPEED1G
++#define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100)
++#endif
++
++#ifndef MDIO_KR_CTRL_PDETECT
++#define MDIO_KR_CTRL_PDETECT 0x01
++#endif
++
++#define GET_BITS(_var, _index, _width) \
++ (((_var) >> (_index)) & ((0x1 << (_width)) - 1))
++
++#define SET_BITS(_var, _index, _width, _val) \
++do { \
++ (_var) &= ~(((0x1 << (_width)) - 1) << (_index)); \
++ (_var) |= (((_val) & ((0x1 << (_width)) - 1)) << (_index)); \
++} while (0)
++
++#define XCMU_IOREAD(_priv, _reg) \
++ ioread16((_priv)->cmu_regs + _reg)
++
++#define XCMU_IOWRITE(_priv, _reg, _val) \
++ iowrite16((_val), (_priv)->cmu_regs + _reg)
++
++#define XRXTX_IOREAD(_priv, _reg) \
++ ioread16((_priv)->rxtx_regs + _reg)
++
++#define XRXTX_IOREAD_BITS(_priv, _reg, _field) \
++ GET_BITS(XRXTX_IOREAD((_priv), _reg), \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH)
++
++#define XRXTX_IOWRITE(_priv, _reg, _val) \
++ iowrite16((_val), (_priv)->rxtx_regs + _reg)
++
++#define XRXTX_IOWRITE_BITS(_priv, _reg, _field, _val) \
++do { \
++ u16 reg_val = XRXTX_IOREAD((_priv), _reg); \
++ SET_BITS(reg_val, \
++ _reg##_##_field##_INDEX, \
++ _reg##_##_field##_WIDTH, (_val)); \
++ XRXTX_IOWRITE((_priv), _reg, reg_val); \
++} while (0)
++
++/* SerDes CMU register offsets */
++#define CMU_REG15 0x003c
++#define CMU_REG16 0x0040
++
++/* SerDes CMU register entry bit positions and sizes */
++#define CMU_REG16_TX_RATE_CHANGE_BASE 15
++#define CMU_REG16_RX_RATE_CHANGE_BASE 14
++#define CMU_REG16_RATE_CHANGE_DECR 2
++
++/* SerDes RxTx register offsets */
++#define RXTX_REG2 0x0008
++#define RXTX_REG3 0x000c
++#define RXTX_REG5 0x0014
++#define RXTX_REG6 0x0018
++#define RXTX_REG20 0x0050
++#define RXTX_REG53 0x00d4
++#define RXTX_REG114 0x01c8
++#define RXTX_REG115 0x01cc
++#define RXTX_REG142 0x0238
++
++/* SerDes RxTx register entry bit positions and sizes */
++#define RXTX_REG2_RESETB_INDEX 15
++#define RXTX_REG2_RESETB_WIDTH 1
++#define RXTX_REG3_TX_DATA_RATE_INDEX 14
++#define RXTX_REG3_TX_DATA_RATE_WIDTH 2
++#define RXTX_REG3_TX_WORD_MODE_INDEX 11
++#define RXTX_REG3_TX_WORD_MODE_WIDTH 3
++#define RXTX_REG5_TXAMP_CNTL_INDEX 7
++#define RXTX_REG5_TXAMP_CNTL_WIDTH 4
++#define RXTX_REG6_RX_DATA_RATE_INDEX 9
++#define RXTX_REG6_RX_DATA_RATE_WIDTH 2
++#define RXTX_REG6_RX_WORD_MODE_INDEX 11
++#define RXTX_REG6_RX_WORD_MODE_WIDTH 3
++#define RXTX_REG20_BLWC_ENA_INDEX 2
++#define RXTX_REG20_BLWC_ENA_WIDTH 1
++#define RXTX_REG53_RX_PLLSELECT_INDEX 15
++#define RXTX_REG53_RX_PLLSELECT_WIDTH 1
++#define RXTX_REG53_TX_PLLSELECT_INDEX 14
++#define RXTX_REG53_TX_PLLSELECT_WIDTH 1
++#define RXTX_REG53_PI_SPD_SEL_CDR_INDEX 10
++#define RXTX_REG53_PI_SPD_SEL_CDR_WIDTH 4
++#define RXTX_REG114_PQ_REG_INDEX 9
++#define RXTX_REG114_PQ_REG_WIDTH 7
++#define RXTX_REG115_FORCE_LAT_CAL_START_INDEX 2
++#define RXTX_REG115_FORCE_LAT_CAL_START_WIDTH 1
++#define RXTX_REG115_FORCE_SUM_CAL_START_INDEX 1
++#define RXTX_REG115_FORCE_SUM_CAL_START_WIDTH 1
++#define RXTX_REG142_SUM_CALIB_DONE_INDEX 15
++#define RXTX_REG142_SUM_CALIB_DONE_WIDTH 1
++#define RXTX_REG142_SUM_CALIB_ERR_INDEX 14
++#define RXTX_REG142_SUM_CALIB_ERR_WIDTH 1
++#define RXTX_REG142_LAT_CALIB_DONE_INDEX 11
++#define RXTX_REG142_LAT_CALIB_DONE_WIDTH 1
++
++#define RXTX_FULL_RATE 0x0
++#define RXTX_HALF_RATE 0x1
++#define RXTX_FIFTH_RATE 0x3
++#define RXTX_66BIT_WORD 0x7
++#define RXTX_10BIT_WORD 0x1
++#define RXTX_10G_BLWC 0x0
++#define RXTX_1G_BLWC 0x1
++#define RXTX_10G_TX_AMP 0xa
++#define RXTX_1G_TX_AMP 0xf
++#define RXTX_10G_CDR 0x7
++#define RXTX_1G_CDR 0x2
++#define RXTX_10G_PLL 0x1
++#define RXTX_1G_PLL 0x0
++#define RXTX_10G_PQ 0x1e
++#define RXTX_1G_PQ 0xa
++
++DEFINE_SPINLOCK(cmu_lock);
++
++static const u32 amd_xgbe_phy_serdes_blwc[] = {
++ RXTX_1G_BLWC,
++ RXTX_1G_BLWC,
++ RXTX_10G_BLWC,
++};
++
++static const u32 amd_xgbe_phy_serdes_cdr_rate[] = {
++ RXTX_1G_CDR,
++ RXTX_1G_CDR,
++ RXTX_10G_CDR,
++};
++
++static const u32 amd_xgbe_phy_serdes_pq_skew[] = {
++ RXTX_1G_PQ,
++ RXTX_1G_PQ,
++ RXTX_10G_PQ,
++};
++
++static const u32 amd_xgbe_phy_serdes_tx_amp[] = {
++ RXTX_1G_TX_AMP,
++ RXTX_1G_TX_AMP,
++ RXTX_10G_TX_AMP,
++};
++
++enum amd_xgbe_phy_an {
++ AMD_XGBE_AN_READY = 0,
++ AMD_XGBE_AN_PAGE_RECEIVED,
++ AMD_XGBE_AN_INCOMPAT_LINK,
++ AMD_XGBE_AN_COMPLETE,
++ AMD_XGBE_AN_NO_LINK,
++ AMD_XGBE_AN_ERROR,
++};
++
++enum amd_xgbe_phy_rx {
++ AMD_XGBE_RX_BPA = 0,
++ AMD_XGBE_RX_XNP,
++ AMD_XGBE_RX_COMPLETE,
++ AMD_XGBE_RX_ERROR,
++};
++
++enum amd_xgbe_phy_mode {
++ AMD_XGBE_MODE_KR,
++ AMD_XGBE_MODE_KX,
++};
++
++enum amd_xgbe_phy_speedset {
++ AMD_XGBE_PHY_SPEEDSET_1000_10000 = 0,
++ AMD_XGBE_PHY_SPEEDSET_2500_10000,
++};
++
++struct amd_xgbe_phy_priv {
++ struct platform_device *pdev;
++ struct acpi_device *adev;
++ struct device *dev;
++
++ struct phy_device *phydev;
++
++ /* SerDes related mmio resources */
++ struct resource *rxtx_res;
++ struct resource *cmu_res;
++
++ /* SerDes related mmio registers */
++ void __iomem *rxtx_regs; /* SerDes Rx/Tx CSRs */
++ void __iomem *cmu_regs; /* SerDes CMU CSRs */
++
++ int an_irq;
++ char an_irq_name[IFNAMSIZ + 32];
++ struct work_struct an_irq_work;
++ unsigned int an_irq_allocated;
++
++ unsigned int serdes_channel;
++ unsigned int speed_set;
++
++ /* Maintain link status for re-starting auto-negotiation */
++ unsigned int link;
++
++ /* SerDes UEFI configurable settings.
++ * Switching between modes/speeds requires new values for some
++ * SerDes settings. The values can be supplied as device
++ * properties in array format. The first array entry is for
++ * 1GbE, second for 2.5GbE and third for 10GbE
++ */
++ u32 serdes_blwc[XGBE_PHY_SPEEDS];
++ u32 serdes_cdr_rate[XGBE_PHY_SPEEDS];
++ u32 serdes_pq_skew[XGBE_PHY_SPEEDS];
++ u32 serdes_tx_amp[XGBE_PHY_SPEEDS];
++
++ /* Auto-negotiation state machine support */
++ struct mutex an_mutex;
++ enum amd_xgbe_phy_an an_result;
++ enum amd_xgbe_phy_an an_state;
++ enum amd_xgbe_phy_rx kr_state;
++ enum amd_xgbe_phy_rx kx_state;
++ struct work_struct an_work;
++ struct workqueue_struct *an_workqueue;
++ unsigned int an_supported;
++ unsigned int parallel_detect;
++ unsigned int fec_ability;
++
++ unsigned int lpm_ctrl; /* CTRL1 for resume */
++};
++
++static int amd_xgbe_an_disable_kr_training(struct phy_device *phydev)
++{
++ int ret;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~XGBE_PHY_KR_TRAINING_ENABLE;
++ phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, ret);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_pcs_power_cycle(struct phy_device *phydev)
++{
++ int ret;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++
++ ret |= MDIO_CTRL1_LPOWER;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ usleep_range(75, 100);
++
++ ret &= ~MDIO_CTRL1_LPOWER;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ return 0;
++}
++
++static void amd_xgbe_phy_serdes_start_ratechange(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ u16 val, mask;
++
++ /* Assert Rx and Tx ratechange in CMU_reg16 */
++ val = XCMU_IOREAD(priv, CMU_REG16);
++
++ mask = (1 << (CMU_REG16_TX_RATE_CHANGE_BASE -
++ (priv->serdes_channel * CMU_REG16_RATE_CHANGE_DECR))) |
++ (1 << (CMU_REG16_RX_RATE_CHANGE_BASE -
++ (priv->serdes_channel * CMU_REG16_RATE_CHANGE_DECR)));
++ val |= mask;
++
++ XCMU_IOWRITE(priv, CMU_REG16, val);
++}
++
++static void amd_xgbe_phy_serdes_complete_ratechange(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ u16 val, mask;
++ unsigned int wait;
++
++ /* Release Rx and Tx ratechange for proper channel in CMU_reg16 */
++ val = XCMU_IOREAD(priv, CMU_REG16);
++
++ mask = (1 << (CMU_REG16_TX_RATE_CHANGE_BASE -
++ (priv->serdes_channel * CMU_REG16_RATE_CHANGE_DECR))) |
++ (1 << (CMU_REG16_RX_RATE_CHANGE_BASE -
++ (priv->serdes_channel * CMU_REG16_RATE_CHANGE_DECR)));
++ val &= ~mask;
++
++ XCMU_IOWRITE(priv, CMU_REG16, val);
++
++ /* Wait for Rx and Tx ready in CMU_reg15 */
++ mask = (1 << priv->serdes_channel) |
++ (1 << (priv->serdes_channel + 8));
++ wait = XGBE_PHY_RATECHANGE_COUNT;
++ while (wait--) {
++ udelay(50);
++
++ val = XCMU_IOREAD(priv, CMU_REG15);
++ if ((val & mask) == mask)
++ return;
++ }
++
++ netdev_dbg(phydev->attached_dev, "SerDes rx/tx not ready (%#hx)\n",
++ val);
++}
++
++static int amd_xgbe_phy_xgmii_mode(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ /* Disable KR training */
++ ret = amd_xgbe_an_disable_kr_training(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Set PCS to KR/10G speed */
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_PCS_CTRL2_TYPE;
++ ret |= MDIO_PCS_CTRL2_10GBR;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2, ret);
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_CTRL1_SPEEDSEL;
++ ret |= MDIO_CTRL1_SPEED10G;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ ret = amd_xgbe_phy_pcs_power_cycle(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Set SerDes to 10G speed */
++ spin_lock(&cmu_lock);
++
++ amd_xgbe_phy_serdes_start_ratechange(phydev);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG3, TX_DATA_RATE, RXTX_FULL_RATE);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG3, TX_WORD_MODE, RXTX_66BIT_WORD);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG5, TXAMP_CNTL,
++ priv->serdes_tx_amp[XGBE_PHY_SPEED_10000]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RX_DATA_RATE, RXTX_FULL_RATE);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RX_WORD_MODE, RXTX_66BIT_WORD);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA,
++ priv->serdes_blwc[XGBE_PHY_SPEED_10000]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, RX_PLLSELECT, RXTX_10G_PLL);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, TX_PLLSELECT, RXTX_10G_PLL);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, PI_SPD_SEL_CDR,
++ priv->serdes_cdr_rate[XGBE_PHY_SPEED_10000]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG,
++ priv->serdes_pq_skew[XGBE_PHY_SPEED_10000]);
++
++ amd_xgbe_phy_serdes_complete_ratechange(phydev);
++
++ spin_unlock(&cmu_lock);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_gmii_2500_mode(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ /* Disable KR training */
++ ret = amd_xgbe_an_disable_kr_training(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Set PCS to KX/1G speed */
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_PCS_CTRL2_TYPE;
++ ret |= MDIO_PCS_CTRL2_10GBX;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2, ret);
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_CTRL1_SPEEDSEL;
++ ret |= MDIO_CTRL1_SPEED1G;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ ret = amd_xgbe_phy_pcs_power_cycle(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Set SerDes to 2.5G speed */
++ spin_lock(&cmu_lock);
++
++ amd_xgbe_phy_serdes_start_ratechange(phydev);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG3, TX_DATA_RATE, RXTX_HALF_RATE);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG3, TX_WORD_MODE, RXTX_10BIT_WORD);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG5, TXAMP_CNTL,
++ priv->serdes_tx_amp[XGBE_PHY_SPEED_2500]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RX_DATA_RATE, RXTX_HALF_RATE);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RX_WORD_MODE, RXTX_10BIT_WORD);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA,
++ priv->serdes_blwc[XGBE_PHY_SPEED_2500]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, RX_PLLSELECT, RXTX_1G_PLL);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, TX_PLLSELECT, RXTX_1G_PLL);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, PI_SPD_SEL_CDR,
++ priv->serdes_cdr_rate[XGBE_PHY_SPEED_2500]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG,
++ priv->serdes_pq_skew[XGBE_PHY_SPEED_2500]);
++
++ amd_xgbe_phy_serdes_complete_ratechange(phydev);
++
++ spin_unlock(&cmu_lock);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_gmii_mode(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ /* Disable KR training */
++ ret = amd_xgbe_an_disable_kr_training(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Set PCS to KX/1G speed */
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_PCS_CTRL2_TYPE;
++ ret |= MDIO_PCS_CTRL2_10GBX;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2, ret);
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_CTRL1_SPEEDSEL;
++ ret |= MDIO_CTRL1_SPEED1G;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ ret = amd_xgbe_phy_pcs_power_cycle(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Set SerDes to 1G speed */
++ spin_lock(&cmu_lock);
++
++ amd_xgbe_phy_serdes_start_ratechange(phydev);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG3, TX_DATA_RATE, RXTX_FIFTH_RATE);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG3, TX_WORD_MODE, RXTX_10BIT_WORD);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG5, TXAMP_CNTL,
++ priv->serdes_tx_amp[XGBE_PHY_SPEED_1000]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RX_DATA_RATE, RXTX_FIFTH_RATE);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RX_WORD_MODE, RXTX_10BIT_WORD);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA,
++ priv->serdes_blwc[XGBE_PHY_SPEED_1000]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, RX_PLLSELECT, RXTX_1G_PLL);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, TX_PLLSELECT, RXTX_1G_PLL);
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG53, PI_SPD_SEL_CDR,
++ priv->serdes_cdr_rate[XGBE_PHY_SPEED_1000]);
++
++ XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG,
++ priv->serdes_pq_skew[XGBE_PHY_SPEED_1000]);
++
++ amd_xgbe_phy_serdes_complete_ratechange(phydev);
++
++ spin_unlock(&cmu_lock);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_cur_mode(struct phy_device *phydev,
++ enum amd_xgbe_phy_mode *mode)
++{
++ int ret;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL2);
++ if (ret < 0)
++ return ret;
++
++ if ((ret & MDIO_PCS_CTRL2_TYPE) == MDIO_PCS_CTRL2_10GBR)
++ *mode = AMD_XGBE_MODE_KR;
++ else
++ *mode = AMD_XGBE_MODE_KX;
++
++ return 0;
++}
++
++static bool amd_xgbe_phy_in_kr_mode(struct phy_device *phydev)
++{
++ enum amd_xgbe_phy_mode mode;
++
++ if (amd_xgbe_phy_cur_mode(phydev, &mode))
++ return false;
++
++ return (mode == AMD_XGBE_MODE_KR);
++}
++
++static int amd_xgbe_phy_switch_mode(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ /* If we are in KR switch to KX, and vice-versa */
++ if (amd_xgbe_phy_in_kr_mode(phydev)) {
++ if (priv->speed_set == AMD_XGBE_PHY_SPEEDSET_1000_10000)
++ ret = amd_xgbe_phy_gmii_mode(phydev);
++ else
++ ret = amd_xgbe_phy_gmii_2500_mode(phydev);
++ } else {
++ ret = amd_xgbe_phy_xgmii_mode(phydev);
++ }
++
++ return ret;
++}
++
++static int amd_xgbe_phy_set_mode(struct phy_device *phydev,
++ enum amd_xgbe_phy_mode mode)
++{
++ enum amd_xgbe_phy_mode cur_mode;
++ int ret;
++
++ ret = amd_xgbe_phy_cur_mode(phydev, &cur_mode);
++ if (ret)
++ return ret;
++
++ if (mode != cur_mode)
++ ret = amd_xgbe_phy_switch_mode(phydev);
++
++ return ret;
++}
++
++static int amd_xgbe_phy_set_an(struct phy_device *phydev, bool enable,
++ bool restart)
++{
++ int ret;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++
++ ret &= ~MDIO_AN_CTRL1_ENABLE;
++
++ if (enable)
++ ret |= MDIO_AN_CTRL1_ENABLE;
++
++ if (restart)
++ ret |= MDIO_AN_CTRL1_RESTART;
++
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, ret);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_restart_an(struct phy_device *phydev)
++{
++ return amd_xgbe_phy_set_an(phydev, true, true);
++}
++
++static int amd_xgbe_phy_disable_an(struct phy_device *phydev)
++{
++ return amd_xgbe_phy_set_an(phydev, false, false);
++}
++
++static enum amd_xgbe_phy_an amd_xgbe_an_tx_training(struct phy_device *phydev,
++ enum amd_xgbe_phy_rx *state)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ad_reg, lp_reg, ret;
++
++ *state = AMD_XGBE_RX_COMPLETE;
++
++ /* If we're not in KR mode then we're done */
++ if (!amd_xgbe_phy_in_kr_mode(phydev))
++ return AMD_XGBE_AN_PAGE_RECEIVED;
++
++ /* Enable/Disable FEC */
++ ad_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2);
++ if (ad_reg < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ lp_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA + 2);
++ if (lp_reg < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FEC_CTRL);
++ if (ret < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ ret &= ~XGBE_PHY_FEC_MASK;
++ if ((ad_reg & 0xc000) && (lp_reg & 0xc000))
++ ret |= priv->fec_ability;
++
++ phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FEC_CTRL, ret);
++
++ /* Start KR training */
++ ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
++ if (ret < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ if (ret & XGBE_PHY_KR_TRAINING_ENABLE) {
++ ret |= XGBE_PHY_KR_TRAINING_START;
++ phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL,
++ ret);
++ }
++
++ return AMD_XGBE_AN_PAGE_RECEIVED;
++}
++
++static enum amd_xgbe_phy_an amd_xgbe_an_tx_xnp(struct phy_device *phydev,
++ enum amd_xgbe_phy_rx *state)
++{
++ u16 msg;
++
++ *state = AMD_XGBE_RX_XNP;
++
++ msg = XNP_MCF_NULL_MESSAGE;
++ msg |= XNP_MP_FORMATTED;
++
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP + 2, 0);
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP + 1, 0);
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP, msg);
++
++ return AMD_XGBE_AN_PAGE_RECEIVED;
++}
++
++static enum amd_xgbe_phy_an amd_xgbe_an_rx_bpa(struct phy_device *phydev,
++ enum amd_xgbe_phy_rx *state)
++{
++ unsigned int link_support;
++ int ret, ad_reg, lp_reg;
++
++ /* Read Base Ability register 2 first */
++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA + 1);
++ if (ret < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ /* Check for a supported mode, otherwise restart in a different one */
++ link_support = amd_xgbe_phy_in_kr_mode(phydev) ? 0x80 : 0x20;
++ if (!(ret & link_support))
++ return AMD_XGBE_AN_INCOMPAT_LINK;
++
++ /* Check Extended Next Page support */
++ ad_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE);
++ if (ad_reg < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ lp_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA);
++ if (lp_reg < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ return ((ad_reg & XNP_NP_EXCHANGE) || (lp_reg & XNP_NP_EXCHANGE)) ?
++ amd_xgbe_an_tx_xnp(phydev, state) :
++ amd_xgbe_an_tx_training(phydev, state);
++}
++
++static enum amd_xgbe_phy_an amd_xgbe_an_rx_xnp(struct phy_device *phydev,
++ enum amd_xgbe_phy_rx *state)
++{
++ int ad_reg, lp_reg;
++
++ /* Check Extended Next Page support */
++ ad_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP);
++ if (ad_reg < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ lp_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPX);
++ if (lp_reg < 0)
++ return AMD_XGBE_AN_ERROR;
++
++ return ((ad_reg & XNP_NP_EXCHANGE) || (lp_reg & XNP_NP_EXCHANGE)) ?
++ amd_xgbe_an_tx_xnp(phydev, state) :
++ amd_xgbe_an_tx_training(phydev, state);
++}
++
++static enum amd_xgbe_phy_an amd_xgbe_an_page_received(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ enum amd_xgbe_phy_rx *state;
++ int ret;
++
++ state = amd_xgbe_phy_in_kr_mode(phydev) ? &priv->kr_state
++ : &priv->kx_state;
++
++ switch (*state) {
++ case AMD_XGBE_RX_BPA:
++ ret = amd_xgbe_an_rx_bpa(phydev, state);
++ break;
++
++ case AMD_XGBE_RX_XNP:
++ ret = amd_xgbe_an_rx_xnp(phydev, state);
++ break;
++
++ default:
++ ret = AMD_XGBE_AN_ERROR;
++ }
++
++ return ret;
++}
++
++static enum amd_xgbe_phy_an amd_xgbe_an_incompat_link(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ /* Be sure we aren't looping trying to negotiate */
++ if (amd_xgbe_phy_in_kr_mode(phydev)) {
++ priv->kr_state = AMD_XGBE_RX_ERROR;
++
++ if (!(phydev->supported & SUPPORTED_1000baseKX_Full) &&
++ !(phydev->supported & SUPPORTED_2500baseX_Full))
++ return AMD_XGBE_AN_NO_LINK;
++
++ if (priv->kx_state != AMD_XGBE_RX_BPA)
++ return AMD_XGBE_AN_NO_LINK;
++ } else {
++ priv->kx_state = AMD_XGBE_RX_ERROR;
++
++ if (!(phydev->supported & SUPPORTED_10000baseKR_Full))
++ return AMD_XGBE_AN_NO_LINK;
++
++ if (priv->kr_state != AMD_XGBE_RX_BPA)
++ return AMD_XGBE_AN_NO_LINK;
++ }
++
++ ret = amd_xgbe_phy_disable_an(phydev);
++ if (ret)
++ return AMD_XGBE_AN_ERROR;
++
++ ret = amd_xgbe_phy_switch_mode(phydev);
++ if (ret)
++ return AMD_XGBE_AN_ERROR;
++
++ ret = amd_xgbe_phy_restart_an(phydev);
++ if (ret)
++ return AMD_XGBE_AN_ERROR;
++
++ return AMD_XGBE_AN_INCOMPAT_LINK;
++}
++
++static irqreturn_t amd_xgbe_an_isr(int irq, void *data)
++{
++ struct amd_xgbe_phy_priv *priv = (struct amd_xgbe_phy_priv *)data;
++
++ /* Interrupt reason must be read and cleared outside of IRQ context */
++ disable_irq_nosync(priv->an_irq);
++
++ queue_work(priv->an_workqueue, &priv->an_irq_work);
++
++ return IRQ_HANDLED;
++}
++
++static void amd_xgbe_an_irq_work(struct work_struct *work)
++{
++ struct amd_xgbe_phy_priv *priv = container_of(work,
++ struct amd_xgbe_phy_priv,
++ an_irq_work);
++
++ /* Avoid a race between enabling the IRQ and exiting the work by
++ * waiting for the work to finish and then queueing it
++ */
++ flush_work(&priv->an_work);
++ queue_work(priv->an_workqueue, &priv->an_work);
++}
++
++static void amd_xgbe_an_state_machine(struct work_struct *work)
++{
++ struct amd_xgbe_phy_priv *priv = container_of(work,
++ struct amd_xgbe_phy_priv,
++ an_work);
++ struct phy_device *phydev = priv->phydev;
++ enum amd_xgbe_phy_an cur_state = priv->an_state;
++ int int_reg, int_mask;
++
++ mutex_lock(&priv->an_mutex);
++
++ /* Read the interrupt */
++ int_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT);
++ if (!int_reg)
++ goto out;
++
++next_int:
++ if (int_reg < 0) {
++ priv->an_state = AMD_XGBE_AN_ERROR;
++ int_mask = XGBE_AN_INT_MASK;
++ } else if (int_reg & XGBE_AN_PG_RCV) {
++ priv->an_state = AMD_XGBE_AN_PAGE_RECEIVED;
++ int_mask = XGBE_AN_PG_RCV;
++ } else if (int_reg & XGBE_AN_INC_LINK) {
++ priv->an_state = AMD_XGBE_AN_INCOMPAT_LINK;
++ int_mask = XGBE_AN_INC_LINK;
++ } else if (int_reg & XGBE_AN_INT_CMPLT) {
++ priv->an_state = AMD_XGBE_AN_COMPLETE;
++ int_mask = XGBE_AN_INT_CMPLT;
++ } else {
++ priv->an_state = AMD_XGBE_AN_ERROR;
++ int_mask = 0;
++ }
++
++ /* Clear the interrupt to be processed */
++ int_reg &= ~int_mask;
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, int_reg);
++
++ priv->an_result = priv->an_state;
++
++again:
++ cur_state = priv->an_state;
++
++ switch (priv->an_state) {
++ case AMD_XGBE_AN_READY:
++ priv->an_supported = 0;
++ break;
++
++ case AMD_XGBE_AN_PAGE_RECEIVED:
++ priv->an_state = amd_xgbe_an_page_received(phydev);
++ priv->an_supported++;
++ break;
++
++ case AMD_XGBE_AN_INCOMPAT_LINK:
++ priv->an_supported = 0;
++ priv->parallel_detect = 0;
++ priv->an_state = amd_xgbe_an_incompat_link(phydev);
++ break;
++
++ case AMD_XGBE_AN_COMPLETE:
++ priv->parallel_detect = priv->an_supported ? 0 : 1;
++ netdev_dbg(phydev->attached_dev, "%s successful\n",
++ priv->an_supported ? "Auto negotiation"
++ : "Parallel detection");
++ break;
++
++ case AMD_XGBE_AN_NO_LINK:
++ break;
++
++ default:
++ priv->an_state = AMD_XGBE_AN_ERROR;
++ }
++
++ if (priv->an_state == AMD_XGBE_AN_NO_LINK) {
++ /* Disable auto-negotiation for now - it will be
++ * re-enabled once a link is established
++ */
++ amd_xgbe_phy_disable_an(phydev);
++
++ int_reg = 0;
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0);
++ } else if (priv->an_state == AMD_XGBE_AN_ERROR) {
++ netdev_err(phydev->attached_dev,
++ "error during auto-negotiation, state=%u\n",
++ cur_state);
++
++ int_reg = 0;
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0);
++ }
++
++ if (priv->an_state >= AMD_XGBE_AN_COMPLETE) {
++ priv->an_result = priv->an_state;
++ priv->an_state = AMD_XGBE_AN_READY;
++ priv->kr_state = AMD_XGBE_RX_BPA;
++ priv->kx_state = AMD_XGBE_RX_BPA;
++ }
++
++ if (cur_state != priv->an_state)
++ goto again;
++
++ if (int_reg)
++ goto next_int;
++
++out:
++ enable_irq(priv->an_irq);
++
++ mutex_unlock(&priv->an_mutex);
++}
++
++static int amd_xgbe_an_init(struct phy_device *phydev)
++{
++ int ret;
++
++ /* Set up Advertisement register 3 first */
++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2);
++ if (ret < 0)
++ return ret;
++
++ if (phydev->supported & SUPPORTED_10000baseR_FEC)
++ ret |= 0xc000;
++ else
++ ret &= ~0xc000;
++
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2, ret);
++
++ /* Set up Advertisement register 2 next */
++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1);
++ if (ret < 0)
++ return ret;
++
++ if (phydev->supported & SUPPORTED_10000baseKR_Full)
++ ret |= 0x80;
++ else
++ ret &= ~0x80;
++
++ if ((phydev->supported & SUPPORTED_1000baseKX_Full) ||
++ (phydev->supported & SUPPORTED_2500baseX_Full))
++ ret |= 0x20;
++ else
++ ret &= ~0x20;
++
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1, ret);
++
++ /* Set up Advertisement register 1 last */
++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE);
++ if (ret < 0)
++ return ret;
++
++ if (phydev->supported & SUPPORTED_Pause)
++ ret |= 0x400;
++ else
++ ret &= ~0x400;
++
++ if (phydev->supported & SUPPORTED_Asym_Pause)
++ ret |= 0x800;
++ else
++ ret &= ~0x800;
++
++ /* We don't intend to perform XNP */
++ ret &= ~XNP_NP_EXCHANGE;
++
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE, ret);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_soft_reset(struct phy_device *phydev)
++{
++ int count, ret;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++
++ ret |= MDIO_CTRL1_RESET;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ count = 50;
++ do {
++ msleep(20);
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ return ret;
++ } while ((ret & MDIO_CTRL1_RESET) && --count);
++
++ if (ret & MDIO_CTRL1_RESET)
++ return -ETIMEDOUT;
++
++ /* Disable auto-negotiation for now */
++ ret = amd_xgbe_phy_disable_an(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Clear auto-negotiation interrupts */
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_config_init(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ struct net_device *netdev = phydev->attached_dev;
++ int ret;
++
++ if (!priv->an_irq_allocated) {
++ /* Allocate the auto-negotiation workqueue and interrupt */
++ snprintf(priv->an_irq_name, sizeof(priv->an_irq_name) - 1,
++ "%s-pcs", netdev_name(netdev));
++
++ priv->an_workqueue =
++ create_singlethread_workqueue(priv->an_irq_name);
++ if (!priv->an_workqueue) {
++ netdev_err(netdev, "phy workqueue creation failed\n");
++ return -ENOMEM;
++ }
++
++ ret = devm_request_irq(priv->dev, priv->an_irq,
++ amd_xgbe_an_isr, 0, priv->an_irq_name,
++ priv);
++ if (ret) {
++ netdev_err(netdev, "phy irq request failed\n");
++ destroy_workqueue(priv->an_workqueue);
++ return ret;
++ }
++
++ priv->an_irq_allocated = 1;
++ }
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FEC_ABILITY);
++ if (ret < 0)
++ return ret;
++ priv->fec_ability = ret & XGBE_PHY_FEC_MASK;
++
++ /* Initialize supported features */
++ phydev->supported = SUPPORTED_Autoneg;
++ phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
++ phydev->supported |= SUPPORTED_Backplane;
++ phydev->supported |= SUPPORTED_10000baseKR_Full;
++ switch (priv->speed_set) {
++ case AMD_XGBE_PHY_SPEEDSET_1000_10000:
++ phydev->supported |= SUPPORTED_1000baseKX_Full;
++ break;
++ case AMD_XGBE_PHY_SPEEDSET_2500_10000:
++ phydev->supported |= SUPPORTED_2500baseX_Full;
++ break;
++ }
++
++ if (priv->fec_ability & XGBE_PHY_FEC_ENABLE)
++ phydev->supported |= SUPPORTED_10000baseR_FEC;
++
++ phydev->advertising = phydev->supported;
++
++ /* Set initial mode - call the mode setting routines
++ * directly to insure we are properly configured
++ */
++ if (phydev->supported & SUPPORTED_10000baseKR_Full)
++ ret = amd_xgbe_phy_xgmii_mode(phydev);
++ else if (phydev->supported & SUPPORTED_1000baseKX_Full)
++ ret = amd_xgbe_phy_gmii_mode(phydev);
++ else if (phydev->supported & SUPPORTED_2500baseX_Full)
++ ret = amd_xgbe_phy_gmii_2500_mode(phydev);
++ else
++ ret = -EINVAL;
++ if (ret < 0)
++ return ret;
++
++ /* Set up advertisement registers based on current settings */
++ ret = amd_xgbe_an_init(phydev);
++ if (ret)
++ return ret;
++
++ /* Enable auto-negotiation interrupts */
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INTMASK, 0x07);
++
++ return 0;
++}
++
++static int amd_xgbe_phy_setup_forced(struct phy_device *phydev)
++{
++ int ret;
++
++ /* Disable auto-negotiation */
++ ret = amd_xgbe_phy_disable_an(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Validate/Set specified speed */
++ switch (phydev->speed) {
++ case SPEED_10000:
++ ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KR);
++ break;
++
++ case SPEED_2500:
++ case SPEED_1000:
++ ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KX);
++ break;
++
++ default:
++ ret = -EINVAL;
++ }
++
++ if (ret < 0)
++ return ret;
++
++ /* Validate duplex mode */
++ if (phydev->duplex != DUPLEX_FULL)
++ return -EINVAL;
++
++ phydev->pause = 0;
++ phydev->asym_pause = 0;
++
++ return 0;
++}
++
++static int __amd_xgbe_phy_config_aneg(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ u32 mmd_mask = phydev->c45_ids.devices_in_package;
++ int ret;
++
++ if (phydev->autoneg != AUTONEG_ENABLE)
++ return amd_xgbe_phy_setup_forced(phydev);
++
++ /* Make sure we have the AN MMD present */
++ if (!(mmd_mask & MDIO_DEVS_AN))
++ return -EINVAL;
++
++ /* Disable auto-negotiation interrupt */
++ disable_irq(priv->an_irq);
++
++ /* Start auto-negotiation in a supported mode */
++ if (phydev->supported & SUPPORTED_10000baseKR_Full)
++ ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KR);
++ else if ((phydev->supported & SUPPORTED_1000baseKX_Full) ||
++ (phydev->supported & SUPPORTED_2500baseX_Full))
++ ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KX);
++ else
++ ret = -EINVAL;
++ if (ret < 0) {
++ enable_irq(priv->an_irq);
++ return ret;
++ }
++
++ /* Disable and stop any in progress auto-negotiation */
++ ret = amd_xgbe_phy_disable_an(phydev);
++ if (ret < 0)
++ return ret;
++
++ /* Clear any auto-negotitation interrupts */
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0);
++
++ priv->an_result = AMD_XGBE_AN_READY;
++ priv->an_state = AMD_XGBE_AN_READY;
++ priv->kr_state = AMD_XGBE_RX_BPA;
++ priv->kx_state = AMD_XGBE_RX_BPA;
++
++ /* Re-enable auto-negotiation interrupt */
++ enable_irq(priv->an_irq);
++
++ /* Set up advertisement registers based on current settings */
++ ret = amd_xgbe_an_init(phydev);
++ if (ret)
++ return ret;
++
++ /* Enable and start auto-negotiation */
++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_KR_CTRL);
++ if (ret < 0)
++ return ret;
++
++ ret |= MDIO_KR_CTRL_PDETECT;
++ phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_KR_CTRL, ret);
++
++ return amd_xgbe_phy_restart_an(phydev);
++}
++
++static int amd_xgbe_phy_config_aneg(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ mutex_lock(&priv->an_mutex);
++
++ ret = __amd_xgbe_phy_config_aneg(phydev);
++
++ mutex_unlock(&priv->an_mutex);
++
++ return ret;
++}
++
++static int amd_xgbe_phy_aneg_done(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++
++ return (priv->an_result == AMD_XGBE_AN_COMPLETE);
++}
++
++static int amd_xgbe_phy_update_link(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ unsigned int check_again, autoneg;
++ int ret;
++
++ /* If we're doing auto-negotiation don't report link down */
++ if (priv->an_state != AMD_XGBE_AN_READY) {
++ phydev->link = 1;
++ return 0;
++ }
++
++ /* Since the device can be in the wrong mode when a link is
++ * (re-)established (cable connected after the interface is
++ * up, etc.), the link status may report no link. If there
++ * is no link, try switching modes and checking the status
++ * again if auto negotiation is enabled.
++ */
++ check_again = (phydev->autoneg == AUTONEG_ENABLE) ? 1 : 0;
++again:
++ /* Link status is latched low, so read once to clear
++ * and then read again to get current state
++ */
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_STAT1);
++ if (ret < 0)
++ return ret;
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_STAT1);
++ if (ret < 0)
++ return ret;
++
++ phydev->link = (ret & MDIO_STAT1_LSTATUS) ? 1 : 0;
++
++ if (!phydev->link) {
++ if (check_again) {
++ ret = amd_xgbe_phy_switch_mode(phydev);
++ if (ret < 0)
++ return ret;
++ check_again = 0;
++ goto again;
++ }
++ }
++
++ autoneg = (phydev->link && !priv->link) ? 1 : 0;
++ priv->link = phydev->link;
++ if (autoneg) {
++ /* Link is (back) up, re-start auto-negotiation */
++ ret = amd_xgbe_phy_config_aneg(phydev);
++ if (ret < 0)
++ return ret;
++ }
++
++ return 0;
++}
++
++static int amd_xgbe_phy_read_status(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ u32 mmd_mask = phydev->c45_ids.devices_in_package;
++ int ret, ad_ret, lp_ret;
++
++ ret = amd_xgbe_phy_update_link(phydev);
++ if (ret)
++ return ret;
++
++ if ((phydev->autoneg == AUTONEG_ENABLE) &&
++ !priv->parallel_detect) {
++ if (!(mmd_mask & MDIO_DEVS_AN))
++ return -EINVAL;
++
++ if (!amd_xgbe_phy_aneg_done(phydev))
++ return 0;
++
++ /* Compare Advertisement and Link Partner register 1 */
++ ad_ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE);
++ if (ad_ret < 0)
++ return ad_ret;
++ lp_ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA);
++ if (lp_ret < 0)
++ return lp_ret;
++
++ ad_ret &= lp_ret;
++ phydev->pause = (ad_ret & 0x400) ? 1 : 0;
++ phydev->asym_pause = (ad_ret & 0x800) ? 1 : 0;
++
++ /* Compare Advertisement and Link Partner register 2 */
++ ad_ret = phy_read_mmd(phydev, MDIO_MMD_AN,
++ MDIO_AN_ADVERTISE + 1);
++ if (ad_ret < 0)
++ return ad_ret;
++ lp_ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA + 1);
++ if (lp_ret < 0)
++ return lp_ret;
++
++ ad_ret &= lp_ret;
++ if (ad_ret & 0x80) {
++ phydev->speed = SPEED_10000;
++ ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KR);
++ if (ret)
++ return ret;
++ } else {
++ switch (priv->speed_set) {
++ case AMD_XGBE_PHY_SPEEDSET_1000_10000:
++ phydev->speed = SPEED_1000;
++ break;
++
++ case AMD_XGBE_PHY_SPEEDSET_2500_10000:
++ phydev->speed = SPEED_2500;
++ break;
++ }
++
++ ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KX);
++ if (ret)
++ return ret;
++ }
++
++ phydev->duplex = DUPLEX_FULL;
++ } else {
++ if (amd_xgbe_phy_in_kr_mode(phydev)) {
++ phydev->speed = SPEED_10000;
++ } else {
++ switch (priv->speed_set) {
++ case AMD_XGBE_PHY_SPEEDSET_1000_10000:
++ phydev->speed = SPEED_1000;
++ break;
++
++ case AMD_XGBE_PHY_SPEEDSET_2500_10000:
++ phydev->speed = SPEED_2500;
++ break;
++ }
++ }
++ phydev->duplex = DUPLEX_FULL;
++ phydev->pause = 0;
++ phydev->asym_pause = 0;
++ }
++
++ return 0;
++}
++
++static int amd_xgbe_phy_suspend(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ int ret;
++
++ mutex_lock(&phydev->lock);
++
++ ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1);
++ if (ret < 0)
++ goto unlock;
++
++ priv->lpm_ctrl = ret;
++
++ ret |= MDIO_CTRL1_LPOWER;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret);
++
++ ret = 0;
++
++unlock:
++ mutex_unlock(&phydev->lock);
++
++ return ret;
++}
++
++static int amd_xgbe_phy_resume(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++
++ mutex_lock(&phydev->lock);
++
++ priv->lpm_ctrl &= ~MDIO_CTRL1_LPOWER;
++ phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, priv->lpm_ctrl);
++
++ mutex_unlock(&phydev->lock);
++
++ return 0;
++}
++
++static unsigned int amd_xgbe_phy_resource_count(struct platform_device *pdev,
++ unsigned int type)
++{
++ unsigned int count;
++ int i;
++
++ for (i = 0, count = 0; i < pdev->num_resources; i++) {
++ struct resource *r = &pdev->resource[i];
++
++ if (type == resource_type(r))
++ count++;
++ }
++
++ return count;
++}
++
++static int amd_xgbe_phy_probe(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv;
++ struct platform_device *phy_pdev;
++ struct device *dev, *phy_dev;
++ unsigned int phy_resnum, phy_irqnum;
++ int ret;
++
++ if (!phydev->bus || !phydev->bus->parent)
++ return -EINVAL;
++
++ dev = phydev->bus->parent;
++
++ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
++ if (!priv)
++ return -ENOMEM;
++
++ priv->pdev = to_platform_device(dev);
++ priv->adev = ACPI_COMPANION(dev);
++ priv->dev = dev;
++ priv->phydev = phydev;
++ mutex_init(&priv->an_mutex);
++ INIT_WORK(&priv->an_irq_work, amd_xgbe_an_irq_work);
++ INIT_WORK(&priv->an_work, amd_xgbe_an_state_machine);
++
++ if (!priv->adev || acpi_disabled) {
++ struct device_node *bus_node;
++ struct device_node *phy_node;
++
++ bus_node = priv->dev->of_node;
++ phy_node = of_parse_phandle(bus_node, "phy-handle", 0);
++ if (!phy_node) {
++ dev_err(dev, "unable to parse phy-handle\n");
++ ret = -EINVAL;
++ goto err_priv;
++ }
++
++ phy_pdev = of_find_device_by_node(phy_node);
++ of_node_put(phy_node);
++
++ if (!phy_pdev) {
++ dev_err(dev, "unable to obtain phy device\n");
++ ret = -EINVAL;
++ goto err_priv;
++ }
++
++ phy_resnum = 0;
++ phy_irqnum = 0;
++ } else {
++ /* In ACPI, the XGBE and PHY resources are the grouped
++ * together with the PHY resources at the end
++ */
++ phy_pdev = priv->pdev;
++ phy_resnum = amd_xgbe_phy_resource_count(phy_pdev,
++ IORESOURCE_MEM) - 2;
++ phy_irqnum = amd_xgbe_phy_resource_count(phy_pdev,
++ IORESOURCE_IRQ) - 1;
++ }
++ phy_dev = &phy_pdev->dev;
++
++ /* Get the device mmio areas */
++ priv->rxtx_res = platform_get_resource(phy_pdev, IORESOURCE_MEM,
++ phy_resnum++);
++ priv->rxtx_regs = devm_ioremap_resource(dev, priv->rxtx_res);
++ if (IS_ERR(priv->rxtx_regs)) {
++ dev_err(dev, "rxtx ioremap failed\n");
++ ret = PTR_ERR(priv->rxtx_regs);
++ goto err_put;
++ }
++
++ /* All xgbe phy devices share the CMU registers so retrieve
++ * the resource and do the ioremap directly rather than
++ * the devm_ioremap_resource call
++ */
++ priv->cmu_res = platform_get_resource(phy_pdev, IORESOURCE_MEM,
++ phy_resnum++);
++ if (!priv->cmu_res) {
++ dev_err(dev, "cmu invalid resource\n");
++ ret = -EINVAL;
++ goto err_rxtx;
++ }
++ priv->cmu_regs = devm_ioremap_nocache(dev, priv->cmu_res->start,
++ resource_size(priv->cmu_res));
++ if (!priv->cmu_regs) {
++ dev_err(dev, "cmu ioremap failed\n");
++ ret = -ENOMEM;
++ goto err_rxtx;
++ }
++
++ /* Get the auto-negotiation interrupt */
++ ret = platform_get_irq(phy_pdev, phy_irqnum);
++ if (ret < 0) {
++ dev_err(dev, "platform_get_irq failed\n");
++ goto err_cmu;
++ }
++ if (priv->adev && !acpi_disabled && !phy_irqnum) {
++ struct irq_data *d = irq_get_irq_data(ret);
++ if (!d) {
++ dev_err(dev, "unable to set AN interrupt\n");
++ ret = -EINVAL;
++ goto err_cmu;
++ }
++
++#ifdef CONFIG_ACPI
++ ret = acpi_register_gsi(dev, d->hwirq - 2,
++ ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_HIGH);
++#else
++ ret = -EINVAL;
++#endif
++ if (ret < 0) {
++ dev_err(dev, "unable to set AN interrupt\n");
++ goto err_cmu;
++ }
++ }
++ priv->an_irq = ret;
++
++ /* Get the device serdes channel property */
++ ret = device_property_read_u32(phy_dev, XGBE_PHY_CHANNEL_PROPERTY,
++ &priv->serdes_channel);
++ if (ret) {
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_CHANNEL_PROPERTY);
++ goto err_cmu;
++ }
++
++ /* Get the device speed set property */
++ ret = device_property_read_u32(phy_dev, XGBE_PHY_SPEEDSET_PROPERTY,
++ &priv->speed_set);
++ if (ret) {
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_SPEEDSET_PROPERTY);
++ goto err_cmu;
++ }
++
++ switch (priv->speed_set) {
++ case AMD_XGBE_PHY_SPEEDSET_1000_10000:
++ case AMD_XGBE_PHY_SPEEDSET_2500_10000:
++ break;
++ default:
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_SPEEDSET_PROPERTY);
++ ret = -EINVAL;
++ goto err_cmu;
++ }
++
++ if (device_property_present(phy_dev, XGBE_PHY_BLWC_PROPERTY)) {
++ ret = device_property_read_u32_array(phy_dev,
++ XGBE_PHY_BLWC_PROPERTY,
++ priv->serdes_blwc,
++ XGBE_PHY_SPEEDS);
++ if (ret) {
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_BLWC_PROPERTY);
++ goto err_cmu;
++ }
++ } else {
++ memcpy(priv->serdes_blwc, amd_xgbe_phy_serdes_blwc,
++ sizeof(priv->serdes_blwc));
++ }
++
++ if (device_property_present(phy_dev, XGBE_PHY_CDR_RATE_PROPERTY)) {
++ ret = device_property_read_u32_array(phy_dev,
++ XGBE_PHY_CDR_RATE_PROPERTY,
++ priv->serdes_cdr_rate,
++ XGBE_PHY_SPEEDS);
++ if (ret) {
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_CDR_RATE_PROPERTY);
++ goto err_cmu;
++ }
++ } else {
++ memcpy(priv->serdes_cdr_rate, amd_xgbe_phy_serdes_cdr_rate,
++ sizeof(priv->serdes_cdr_rate));
++ }
++
++ if (device_property_present(phy_dev, XGBE_PHY_PQ_SKEW_PROPERTY)) {
++ ret = device_property_read_u32_array(phy_dev,
++ XGBE_PHY_PQ_SKEW_PROPERTY,
++ priv->serdes_pq_skew,
++ XGBE_PHY_SPEEDS);
++ if (ret) {
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_PQ_SKEW_PROPERTY);
++ goto err_cmu;
++ }
++ } else {
++ memcpy(priv->serdes_pq_skew, amd_xgbe_phy_serdes_pq_skew,
++ sizeof(priv->serdes_pq_skew));
++ }
++
++ if (device_property_present(phy_dev, XGBE_PHY_TX_AMP_PROPERTY)) {
++ ret = device_property_read_u32_array(phy_dev,
++ XGBE_PHY_TX_AMP_PROPERTY,
++ priv->serdes_tx_amp,
++ XGBE_PHY_SPEEDS);
++ if (ret) {
++ dev_err(dev, "invalid %s property\n",
++ XGBE_PHY_TX_AMP_PROPERTY);
++ goto err_cmu;
++ }
++ } else {
++ memcpy(priv->serdes_tx_amp, amd_xgbe_phy_serdes_tx_amp,
++ sizeof(priv->serdes_tx_amp));
++ }
++
++ priv->link = 1;
++
++ phydev->priv = priv;
++
++ if (!priv->adev || acpi_disabled)
++ platform_device_put(phy_pdev);
++
++ return 0;
++
++err_cmu:
++ devm_iounmap(dev, priv->cmu_regs);
++
++err_rxtx:
++ devm_iounmap(dev, priv->rxtx_regs);
++ devm_release_mem_region(dev, priv->rxtx_res->start,
++ resource_size(priv->rxtx_res));
++
++err_put:
++ if (!priv->adev || acpi_disabled)
++ platform_device_put(phy_pdev);
++
++err_priv:
++ devm_kfree(dev, priv);
++
++ return ret;
++}
++
++static void amd_xgbe_phy_remove(struct phy_device *phydev)
++{
++ struct amd_xgbe_phy_priv *priv = phydev->priv;
++ struct device *dev = priv->dev;
++
++ if (priv->an_irq_allocated) {
++ devm_free_irq(dev, priv->an_irq, priv);
++
++ flush_workqueue(priv->an_workqueue);
++ destroy_workqueue(priv->an_workqueue);
++ }
++
++ devm_iounmap(dev, priv->cmu_regs);
++
++ devm_iounmap(dev, priv->rxtx_regs);
++ devm_release_mem_region(dev, priv->rxtx_res->start,
++ resource_size(priv->rxtx_res));
++
++ devm_kfree(dev, priv);
++}
++
++static int amd_xgbe_match_phy_device(struct phy_device *phydev)
++{
++ return phydev->c45_ids.device_ids[MDIO_MMD_PCS] == XGBE_PHY_ID;
++}
++
++static struct phy_driver amd_xgbe_phy_a0_driver[] = {
++ {
++ .phy_id = XGBE_PHY_ID,
++ .phy_id_mask = XGBE_PHY_MASK,
++ .name = "AMD XGBE PHY A0",
++ .features = 0,
++ .probe = amd_xgbe_phy_probe,
++ .remove = amd_xgbe_phy_remove,
++ .soft_reset = amd_xgbe_phy_soft_reset,
++ .config_init = amd_xgbe_phy_config_init,
++ .suspend = amd_xgbe_phy_suspend,
++ .resume = amd_xgbe_phy_resume,
++ .config_aneg = amd_xgbe_phy_config_aneg,
++ .aneg_done = amd_xgbe_phy_aneg_done,
++ .read_status = amd_xgbe_phy_read_status,
++ .match_phy_device = amd_xgbe_match_phy_device,
++ .driver = {
++ .owner = THIS_MODULE,
++ },
++ },
++};
++
++module_phy_driver(amd_xgbe_phy_a0_driver);
++
++static struct mdio_device_id __maybe_unused amd_xgbe_phy_a0_ids[] = {
++ { XGBE_PHY_ID, XGBE_PHY_MASK },
++ { }
++};
++MODULE_DEVICE_TABLE(mdio, amd_xgbe_phy_a0_ids);
+--
+2.4.5
+
diff --git a/arm-beagle.patch b/arm-beagle.patch
deleted file mode 100644
index 5e2d8abdc..000000000
--- a/arm-beagle.patch
+++ /dev/null
@@ -1,460 +0,0 @@
-Bugzilla: 1012025
-Upstream-status: In beagle github repository https://github.com/beagleboard/kernel
-
-From b5a2528c89fc8049b2a6a750634c14983e33d00f Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Fri, 27 Dec 2013 13:05:09 -0600
-Subject: [PATCH] arm: dts: am335x-boneblack: lcdc add panel-info
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/boot/dts/am335x-boneblack.dts | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
-index 6b71ad9..09ffbd8 100644
---- a/arch/arm/boot/dts/am335x-boneblack.dts
-+++ b/arch/arm/boot/dts/am335x-boneblack.dts
-@@ -74,5 +74,18 @@
- pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
- pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
- status = "okay";
-+
-+ panel-info {
-+ bpp = <16>;
-+ ac-bias = <255>;
-+ ac-bias-intrpt = <0>;
-+ dma-burst-sz = <16>;
-+ fdd = <16>;
-+ sync-edge = <1>;
-+ sync-ctrl = <1>;
-+ raster-order = <0>;
-+ fifo-th = <0>;
-+ invert-pxl-clk;
-+ };
- };
- };
---
-1.8.5.1
-
-From 1da083a002581520dd358b8b8e097078000d12b9 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Fri, 27 Dec 2013 13:14:19 -0600
-Subject: [PATCH 2/2] arm: dts: am335x-boneblack: add cpu0 opp points
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/boot/dts/am335x-boneblack.dts | 18 ++++++++++++++++++
- 1 file changed, 18 insertions(+)
-
-diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
-index 09ffbd8..f213ccd 100644
---- a/arch/arm/boot/dts/am335x-boneblack.dts
-+++ b/arch/arm/boot/dts/am335x-boneblack.dts
-@@ -67,6 +67,24 @@
- };
-
- / {
-+ cpus {
-+ cpu@0 {
-+ cpu0-supply = <&dcdc2_reg>;
-+ /*
-+ * To consider voltage drop between PMIC and SoC,
-+ * tolerance value is reduced to 2% from 4% and
-+ * voltage value is increased as a precaution.
-+ */
-+ operating-points = <
-+ /* kHz uV */
-+ 1000000 1325000
-+ 800000 1300000
-+ 600000 1112000
-+ 300000 969000
-+ >;
-+ };
-+ };
-+
- hdmi {
- compatible = "ti,tilcdc,slave";
- i2c = <&i2c0>;
---
-1.8.5.1
-
-From 8551d8aa7d3e002da2097e7e902fb96fceb8694e Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 31 Dec 2013 11:17:45 -0600
-Subject: [PATCH 3/3] arm: dts: am335x-bone-common: enable and use i2c2
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/boot/dts/am335x-bone-common.dtsi | 39 +++++++++++++++++++++++++++++++
- 1 file changed, 39 insertions(+)
-
-diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
-index e3f27ec..54366b6 100644
---- a/arch/arm/boot/dts/am335x-bone-common.dtsi
-+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
-@@ -84,6 +84,13 @@
- >;
- };
-
-+ i2c2_pins: pinmux_i2c2_pins {
-+ pinctrl-single,pins = <
-+ 0x178 0x73 /* (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3) uart1_ctsn.i2c2_sda */
-+ 0x17c 0x73 /* (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3) uart1_rtsn.i2c2_scl */
-+ >;
-+ };
-+
- uart0_pins: pinmux_uart0_pins {
- pinctrl-single,pins = <
- 0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
-@@ -220,6 +227,38 @@
- reg = <0x24>;
- };
-
-+ baseboard_eeprom: baseboard_eeprom@50 {
-+ compatible = "at,24c256";
-+ reg = <0x50>;
-+ };
-+};
-+
-+&i2c2 {
-+ status = "okay";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&i2c2_pins>;
-+
-+ clock-frequency = <100000>;
-+
-+ cape_eeprom0: cape_eeprom0@54 {
-+ compatible = "at,24c256";
-+ reg = <0x54>;
-+ };
-+
-+ cape_eeprom1: cape_eeprom1@55 {
-+ compatible = "at,24c256";
-+ reg = <0x55>;
-+ };
-+
-+ cape_eeprom2: cape_eeprom2@56 {
-+ compatible = "at,24c256";
-+ reg = <0x56>;
-+ };
-+
-+ cape_eeprom3: cape_eeprom3@57 {
-+ compatible = "at,24c256";
-+ reg = <0x57>;
-+ };
- };
-
- /include/ "tps65217.dtsi"
---
-1.8.5.2
-
-From a3099dc53a47d1694a5b575580ec3406dc429bf8 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 31 Dec 2013 14:18:00 -0600
-Subject: [PATCH 4/4] arm: dts: am335x-bone-common: setup default pinmux
- http://elinux.org/Basic_Proto_Cape
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/boot/dts/am335x-bone-common.dtsi | 130 ++++++++++++++++++++++++++++++
- 1 file changed, 130 insertions(+)
-
-diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
-index e4571af..f85cabc 100644
---- a/arch/arm/boot/dts/am335x-bone-common.dtsi
-+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
-@@ -98,6 +98,13 @@
- >;
- };
-
-+ uart1_pins: pinmux_uart1_pins {
-+ pinctrl-single,pins = <
-+ 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */
-+ 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */
-+ >;
-+ };
-+
- clkout2_pin: pinmux_clkout2_pin {
- pinctrl-single,pins = <
- 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
-@@ -178,6 +185,33 @@
- 0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
- >;
- };
-+
-+ spi0_pins: pinmux_spi0_pins {
-+ pinctrl-single,pins = <
-+ 0x150 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */
-+ 0x154 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */
-+ 0x158 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */
-+ 0x15c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */
-+ >;
-+ };
-+
-+ ehrpwm1_pin_p9_14: pinmux_ehrpwm1_pin_p9_14 {
-+ pinctrl-single,pins = <
-+ 0x048 0x6 /* P9_14 (ZCZ ball U14) | MODE 6 */
-+ >;
-+ };
-+
-+ ehrpwm1_pin_p9_16: pinmux_ehrpwm1_pin_p9_16 {
-+ pinctrl-single,pins = <
-+ 0x04c 0x6 /* P9_16 (ZCZ ball T14) | MODE 6 */
-+ >;
-+ };
-+
-+ ecap0_pin_p9_42: pinmux_ecap0_pin_p9_42 {
-+ pinctrl-single,pins = <
-+ 0x164 0x0 /* P9_42 (ZCZ ball C18) | MODE 0 */
-+ >;
-+ };
- };
-
- &uart0 {
-@@ -187,6 +221,13 @@
- status = "okay";
- };
-
-+&uart1 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart1_pins>;
-+
-+ status = "okay";
-+};
-+
- &usb {
- status = "okay";
-
-@@ -261,6 +302,56 @@
- };
- };
-
-+&epwmss0 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&ecap0_pin_p9_42>;
-+ status = "okay";
-+
-+ ecap@48300100 {
-+ status = "okay";
-+ };
-+};
-+
-+&epwmss1 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <
-+ &ehrpwm1_pin_p9_14
-+ &ehrpwm1_pin_p9_16
-+ >;
-+
-+ status = "okay";
-+
-+ ehrpwm@48302200 {
-+ status = "okay";
-+ };
-+};
-+
-+&spi0 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&spi0_pins>;
-+ status = "okay";
-+
-+ spidev0: spi@0 {
-+ compatible = "spidev";
-+ reg = <0>;
-+ spi-max-frequency = <16000000>;
-+ spi-cpha;
-+ };
-+
-+ spidev1: spi@1 {
-+ compatible = "spidev";
-+ reg = <1>;
-+ spi-max-frequency = <16000000>;
-+ };
-+};
-+
-+&tscadc {
-+ status = "okay";
-+ adc {
-+ ti,adc-channels = <4 5 6>;
-+ };
-+};
-+
- /include/ "tps65217.dtsi"
-
- &tps {
-@@ -336,3 +427,42 @@
- cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
- cd-inverted;
- };
-+
-+/ {
-+ ocp {
-+ //FIXME: these pwm's still need work, this guild isn't working..
-+ //http://elinux.org/EBC_Exercise_13_Pulse_Width_Modulation
-+ pwm_test_P9_14@0 {
-+ compatible = "pwm_test";
-+ pwms = <&ehrpwm1 0 500000 1>;
-+ pwm-names = "PWM_P9_14";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&ehrpwm1_pin_p9_14>;
-+ enabled = <1>;
-+ duty = <0>;
-+ status = "okay";
-+ };
-+
-+ pwm_test_P9_16@0 {
-+ compatible = "pwm_test";
-+ pwms = <&ehrpwm1 0 500000 1>;
-+ pwm-names = "PWM_P9_16";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&ehrpwm1_pin_p9_16>;
-+ enabled = <1>;
-+ duty = <0>;
-+ status = "okay";
-+ };
-+
-+ pwm_test_P9_42 {
-+ compatible = "pwm_test";
-+ pwms = <&ecap0 0 500000 1>;
-+ pwm-names = "PWM_P9_42";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&ecap0_pin_p9_42>;
-+ enabled = <1>;
-+ duty = <0>;
-+ status = "okay";
-+ };
-+ };
-+};
---
-1.8.5.2
-
-From b6e2c817edfc6d73874cf833daffe1be6c7ed8bb Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Thu, 13 Mar 2014 14:18:52 -0500
-Subject: [PATCH] arm: dts: am335x-bone-common: add
- uart2_pins/uart4_pins/uart5_pins
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/boot/dts/am335x-bone-common.dtsi | 21 +++++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
-index f85cabc..5270d18 100644
---- a/arch/arm/boot/dts/am335x-bone-common.dtsi
-+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
-@@ -105,6 +105,27 @@
- >;
- };
-
-+ uart2_pins: pinmux_uart2_pins {
-+ pinctrl-single,pins = <
-+ 0x150 0x21 /* spi0_sclk.uart2_rxd | MODE1 */
-+ 0x154 0x01 /* spi0_d0.uart2_txd | MODE1 */
-+ >;
-+ };
-+
-+ uart4_pins: pinmux_uart4_pins {
-+ pinctrl-single,pins = <
-+ 0x070 0x26 /* gpmc_wait0.uart4_rxd | MODE6 */
-+ 0x074 0x06 /* gpmc_wpn.uart4_txd | MODE6 */
-+ >;
-+ };
-+
-+ uart5_pins: pinmux_uart5_pins {
-+ pinctrl-single,pins = <
-+ 0x0C4 0x24 /* lcd_data9.uart5_rxd | MODE4 */
-+ 0x0C0 0x04 /* lcd_data8.uart5_txd | MODE4 */
-+ >;
-+ };
-+
- clkout2_pin: pinmux_clkout2_pin {
- pinctrl-single,pins = <
- 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
---
-1.9.0
-
-From 72567452d5d6007010597158f6afd00e2bf07579 Mon Sep 17 00:00:00 2001
-From: Pantelis Antoniou <panto@antoniou-consulting.com>
-Date: Sat, 15 Sep 2012 12:00:41 +0300
-Subject: [PATCH] pinctrl: pinctrl-single must be initialized early.
-
-When using pinctrl-single to handle i2c initialization, it has
-to be done early. Whether this is the best way to do so, is an
-exercise left to the reader.
----
- drivers/pinctrl/pinctrl-single.c | 12 +++++++++++-
- 1 file changed, 11 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
-index 829b98c..5107dcf 100644
---- a/drivers/pinctrl/pinctrl-single.c
-+++ b/drivers/pinctrl/pinctrl-single.c
-@@ -2039,7 +2039,17 @@ static struct platform_driver pcs_driver = {
- #endif
- };
-
--module_platform_driver(pcs_driver);
-+static int __init pcs_init(void)
-+{
-+ return platform_driver_register(&pcs_driver);
-+}
-+postcore_initcall(pcs_init);
-+
-+static void __exit pcs_exit(void)
-+{
-+ platform_driver_unregister(&pcs_driver);
-+}
-+module_exit(pcs_exit);
-
- MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
- MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
---
-1.8.5.2
-
-From b6e2c817edfc6d73874cf833daffe1be6c7ed8bb Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Thu, 13 Mar 2014 14:18:52 -0500
-Subject: [PATCH] arm: dts: am335x-bone-common: add
- uart2_pins/uart4_pins/uart5_pins
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/boot/dts/am335x-bone-common.dtsi | 21 +++++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
-index f85cabc..5270d18 100644
---- a/arch/arm/boot/dts/am335x-bone-common.dtsi
-+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
-@@ -105,6 +105,27 @@
- >;
- };
-
-+ uart2_pins: pinmux_uart2_pins {
-+ pinctrl-single,pins = <
-+ 0x150 0x21 /* spi0_sclk.uart2_rxd | MODE1 */
-+ 0x154 0x01 /* spi0_d0.uart2_txd | MODE1 */
-+ >;
-+ };
-+
-+ uart4_pins: pinmux_uart4_pins {
-+ pinctrl-single,pins = <
-+ 0x070 0x26 /* gpmc_wait0.uart4_rxd | MODE6 */
-+ 0x074 0x06 /* gpmc_wpn.uart4_txd | MODE6 */
-+ >;
-+ };
-+
-+ uart5_pins: pinmux_uart5_pins {
-+ pinctrl-single,pins = <
-+ 0x0C4 0x24 /* lcd_data9.uart5_rxd | MODE4 */
-+ 0x0C0 0x04 /* lcd_data8.uart5_txd | MODE4 */
-+ >;
-+ };
-+
- clkout2_pin: pinmux_clkout2_pin {
- pinctrl-single,pins = <
- 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
---
-1.9.0
diff --git a/arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch b/arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
new file mode 100644
index 000000000..2a161bb77
--- /dev/null
+++ b/arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
@@ -0,0 +1,42 @@
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Thu, 13 Mar 2014 14:18:52 -0500
+Subject: [PATCH] arm: dts: am335x-bone-common: add
+ uart2_pins/uart4_pins/uart5_pins
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/boot/dts/am335x-bone-common.dtsi | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
+index 853079eb0080..645302a6ada4 100644
+--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
++++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
+@@ -109,6 +109,27 @@
+ >;
+ };
+
++ uart2_pins: pinmux_uart2_pins {
++ pinctrl-single,pins = <
++ 0x150 0x21 /* spi0_sclk.uart2_rxd | MODE1 */
++ 0x154 0x01 /* spi0_d0.uart2_txd | MODE1 */
++ >;
++ };
++
++ uart4_pins: pinmux_uart4_pins {
++ pinctrl-single,pins = <
++ 0x070 0x26 /* gpmc_wait0.uart4_rxd | MODE6 */
++ 0x074 0x06 /* gpmc_wpn.uart4_txd | MODE6 */
++ >;
++ };
++
++ uart5_pins: pinmux_uart5_pins {
++ pinctrl-single,pins = <
++ 0x0C4 0x24 /* lcd_data9.uart5_rxd | MODE4 */
++ 0x0C0 0x04 /* lcd_data8.uart5_txd | MODE4 */
++ >;
++ };
++
+ clkout2_pin: pinmux_clkout2_pin {
+ pinctrl-single,pins = <
+ 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
diff --git a/arm-dts-am335x-bone-common-setup-default-pinmux-http.patch b/arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
new file mode 100644
index 000000000..b79a9648f
--- /dev/null
+++ b/arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
@@ -0,0 +1,268 @@
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Tue, 31 Dec 2013 14:18:00 -0600
+Subject: [PATCH] arm: dts: am335x-bone-common: setup default pinmux
+ http://elinux.org/Basic_Proto_Cape
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/boot/dts/am335x-bone-common.dtsi | 221 ++++++++++++++++++++++++++++++
+ 1 file changed, 221 insertions(+)
+
+diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
+index fec7834..b8e9bef 100644
+--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
++++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
+@@ -95,6 +95,20 @@
+ >;
+ };
+
++ uart1_pins: pinmux_uart1_pins {
++ pinctrl-single,pins = <
++ 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */
++ 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */
++ >;
++ };
++
++ uart1_pins: pinmux_uart1_pins {
++ pinctrl-single,pins = <
++ 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */
++ 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */
++ >;
++ };
++
+ clkout2_pin: pinmux_clkout2_pin {
+ pinctrl-single,pins = <
+ 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
+@@ -175,6 +189,60 @@
+ 0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
+ >;
+ };
++
++ spi0_pins: pinmux_spi0_pins {
++ pinctrl-single,pins = <
++ 0x150 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */
++ 0x154 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */
++ 0x158 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */
++ 0x15c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */
++ >;
++ };
++
++ ehrpwm1_pin_p9_14: pinmux_ehrpwm1_pin_p9_14 {
++ pinctrl-single,pins = <
++ 0x048 0x6 /* P9_14 (ZCZ ball U14) | MODE 6 */
++ >;
++ };
++
++ ehrpwm1_pin_p9_16: pinmux_ehrpwm1_pin_p9_16 {
++ pinctrl-single,pins = <
++ 0x04c 0x6 /* P9_16 (ZCZ ball T14) | MODE 6 */
++ >;
++ };
++
++ ecap0_pin_p9_42: pinmux_ecap0_pin_p9_42 {
++ pinctrl-single,pins = <
++ 0x164 0x0 /* P9_42 (ZCZ ball C18) | MODE 0 */
++ >;
++ };
++
++ spi0_pins: pinmux_spi0_pins {
++ pinctrl-single,pins = <
++ 0x150 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */
++ 0x154 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */
++ 0x158 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */
++ 0x15c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */
++ >;
++ };
++
++ ehrpwm1_pin_p9_14: pinmux_ehrpwm1_pin_p9_14 {
++ pinctrl-single,pins = <
++ 0x048 0x6 /* P9_14 (ZCZ ball U14) | MODE 6 */
++ >;
++ };
++
++ ehrpwm1_pin_p9_16: pinmux_ehrpwm1_pin_p9_16 {
++ pinctrl-single,pins = <
++ 0x04c 0x6 /* P9_16 (ZCZ ball T14) | MODE 6 */
++ >;
++ };
++
++ ecap0_pin_p9_42: pinmux_ecap0_pin_p9_42 {
++ pinctrl-single,pins = <
++ 0x164 0x0 /* P9_42 (ZCZ ball C18) | MODE 0 */
++ >;
++ };
+ };
+
+ &uart0 {
+@@ -184,6 +252,20 @@
+ status = "okay";
+ };
+
++&uart1 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&uart1_pins>;
++
++ status = "okay";
++};
++
++&uart1 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&uart1_pins>;
++
++ status = "okay";
++};
++
+ &usb {
+ status = "okay";
+ };
+@@ -285,6 +367,105 @@
+ };
+ };
+
++&epwmss0 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&ecap0_pin_p9_42>;
++ status = "okay";
++
++ ecap@48300100 {
++ status = "okay";
++ };
++};
++
++&epwmss1 {
++ pinctrl-names = "default";
++ pinctrl-0 = <
++ &ehrpwm1_pin_p9_14
++ &ehrpwm1_pin_p9_16
++ >;
++
++ status = "okay";
++
++ ehrpwm@48302200 {
++ status = "okay";
++ };
++};
++
++&spi0 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&spi0_pins>;
++ status = "okay";
++
++ spidev0: spi@0 {
++ compatible = "spidev";
++ reg = <0>;
++ spi-max-frequency = <16000000>;
++ spi-cpha;
++ };
++
++ spidev1: spi@1 {
++ compatible = "spidev";
++ reg = <1>;
++ spi-max-frequency = <16000000>;
++ };
++};
++
++&tscadc {
++ status = "okay";
++ adc {
++ ti,adc-channels = <4 5 6>;
++ };
++};
++
++&epwmss0 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&ecap0_pin_p9_42>;
++ status = "okay";
++
++ ecap@48300100 {
++ status = "okay";
++ };
++};
++
++&epwmss1 {
++ pinctrl-names = "default";
++ pinctrl-0 = <
++ &ehrpwm1_pin_p9_14
++ &ehrpwm1_pin_p9_16
++ >;
++
++ status = "okay";
++
++ ehrpwm@48302200 {
++ status = "okay";
++ };
++};
++
++&spi0 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&spi0_pins>;
++ status = "okay";
++
++ spidev0: spi@0 {
++ compatible = "spidev";
++ reg = <0>;
++ spi-max-frequency = <16000000>;
++ spi-cpha;
++ };
++
++ spidev1: spi@1 {
++ compatible = "spidev";
++ reg = <1>;
++ spi-max-frequency = <16000000>;
++ };
++};
++
++&tscadc {
++ status = "okay";
++ adc {
++ ti,adc-channels = <4 5 6>;
++ };
++};
+
+ /include/ "tps65217.dtsi"
+
+@@ -393,4 +574,44 @@
+
+ &sham {
+ status = "okay";
++
++};
++
++/ {
++ ocp {
++ //FIXME: these pwm's still need work, this guild isn't working..
++ //http://elinux.org/EBC_Exercise_13_Pulse_Width_Modulation
++ pwm_test_P9_14@0 {
++ compatible = "pwm_test";
++ pwms = <&ehrpwm1 0 500000 1>;
++ pwm-names = "PWM_P9_14";
++ pinctrl-names = "default";
++ pinctrl-0 = <&ehrpwm1_pin_p9_14>;
++ enabled = <1>;
++ duty = <0>;
++ status = "okay";
++ };
++
++ pwm_test_P9_16@0 {
++ compatible = "pwm_test";
++ pwms = <&ehrpwm1 0 500000 1>;
++ pwm-names = "PWM_P9_16";
++ pinctrl-names = "default";
++ pinctrl-0 = <&ehrpwm1_pin_p9_16>;
++ enabled = <1>;
++ duty = <0>;
++ status = "okay";
++ };
++
++ pwm_test_P9_42 {
++ compatible = "pwm_test";
++ pwms = <&ecap0 0 500000 1>;
++ pwm-names = "PWM_P9_42";
++ pinctrl-names = "default";
++ pinctrl-0 = <&ecap0_pin_p9_42>;
++ enabled = <1>;
++ duty = <0>;
++ status = "okay";
++ };
++ };
+ };
diff --git a/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch b/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
new file mode 100644
index 000000000..edd9a3c9b
--- /dev/null
+++ b/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
@@ -0,0 +1,38 @@
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Fri, 27 Dec 2013 13:14:19 -0600
+Subject: [PATCH] arm: dts: am335x-boneblack: add cpu0 opp points
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/boot/dts/am335x-boneblack.dts | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
+index 0fd89c38cf02..20660917a06f 100644
+--- a/arch/arm/boot/dts/am335x-boneblack.dts
++++ b/arch/arm/boot/dts/am335x-boneblack.dts
+@@ -71,6 +71,24 @@
+ };
+
+ / {
++ cpus {
++ cpu@0 {
++ cpu0-supply = <&dcdc2_reg>;
++ /*
++ * To consider voltage drop between PMIC and SoC,
++ * tolerance value is reduced to 2% from 4% and
++ * voltage value is increased as a precaution.
++ */
++ operating-points = <
++ /* kHz uV */
++ 1000000 1325000
++ 800000 1300000
++ 600000 1112000
++ 300000 969000
++ >;
++ };
++ };
++
+ hdmi {
+ compatible = "ti,tilcdc,slave";
+ i2c = <&i2c0>;
diff --git a/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch b/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
new file mode 100644
index 000000000..97f31f604
--- /dev/null
+++ b/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
@@ -0,0 +1,36 @@
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Fri, 27 Dec 2013 13:05:09 -0600
+Subject: [PATCH] arm: dts: am335x-boneblack: lcdc add panel-info
+
+Bugzilla: 1012025
+Upstream-status: In beagle github repository https://github.com/beagleboard/kernel
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/boot/dts/am335x-boneblack.dts | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
+index 5c42d259fa68..0fd89c38cf02 100644
+--- a/arch/arm/boot/dts/am335x-boneblack.dts
++++ b/arch/arm/boot/dts/am335x-boneblack.dts
+@@ -78,6 +78,19 @@
+ pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
+ pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
+ status = "okay";
++
++ panel-info {
++ bpp = <16>;
++ ac-bias = <255>;
++ ac-bias-intrpt = <0>;
++ dma-burst-sz = <16>;
++ fdd = <16>;
++ sync-edge = <1>;
++ sync-ctrl = <1>;
++ raster-order = <0>;
++ fifo-th = <0>;
++ invert-pxl-clk;
++ };
+ };
+ };
+
diff --git a/arm-imx6-utilite.patch b/arm-i.MX6-Utilite-device-dtb.patch
index bb0747202..86f9e763d 100644
--- a/arm-imx6-utilite.patch
+++ b/arm-i.MX6-Utilite-device-dtb.patch
@@ -1,5 +1,13 @@
+From: Peter Robinson <pbrobinson@gmail.com>
+Date: Fri, 11 Jul 2014 00:10:56 +0100
+Subject: [PATCH] arm: i.MX6 Utilite device dtb
+
+---
+ arch/arm/boot/dts/imx6q-cm-fx6.dts | 38 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
+
diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
-index 99b46f8..8b6ddd1 100644
+index 99b46f8030ad..8b6ddd16dcc5 100644
--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
+++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
@@ -97,11 +97,49 @@
diff --git a/arm-tegra-usb-no-reset-linux33.patch b/arm-tegra-usb-no-reset-linux33.patch
deleted file mode 100644
index 342e80f5a..000000000
--- a/arm-tegra-usb-no-reset-linux33.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- linux-3.3.4-3.fc17.x86_64_orig/drivers/usb/core/hub.c 2012-05-02 20:08:18.421685932 -0400
-+++ linux-3.3.4-3.fc17.x86_64/drivers/usb/core/hub.c 2012-05-02 20:30:36.565865425 -0400
-@@ -3484,6 +3484,13 @@ static void hub_events(void)
- (u16) hub->change_bits[0],
- (u16) hub->event_bits[0]);
-
-+ /* Don't disconnect USB-SATA on TrimSlice */
-+ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) {
-+ if ((hdev->state == 7) && (hub->change_bits[0] == 0) &&
-+ (hub->event_bits[0] == 0x2))
-+ hub->event_bits[0] = 0;
-+ }
-+
- /* Lock the device, then check to see if we were
- * disconnected while waiting for the lock to succeed. */
- usb_lock_device(hdev);
diff --git a/arm64-avoid-needing-console-to-enable-serial-console.patch b/arm64-avoid-needing-console-to-enable-serial-console.patch
new file mode 100644
index 000000000..13f5cb6e1
--- /dev/null
+++ b/arm64-avoid-needing-console-to-enable-serial-console.patch
@@ -0,0 +1,42 @@
+From: Mark Salter <msalter@redhat.com>
+Date: Wed, 25 Mar 2015 14:17:50 -0400
+Subject: [PATCH] arm64: avoid needing console= to enable serial console
+
+Tell kernel to prefer one of the serial ports for console on
+platforms currently supported (pl011 or 8250). console= on
+command line will override these assumed preferences. This is
+just a hack to get the behavior we want from DT provided by
+firmware.
+
+Signed-off-by: Mark Salter <msalter@redhat.com>
+---
+ arch/arm64/kernel/setup.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
+index 781f4697dc26..164d618d988c 100644
+--- a/arch/arm64/kernel/setup.c
++++ b/arch/arm64/kernel/setup.c
+@@ -559,3 +559,22 @@ const struct seq_operations cpuinfo_op = {
+ .stop = c_stop,
+ .show = c_show
+ };
++
++/*
++ * Temporary hack to avoid need for console= on command line
++ */
++static int __init arm64_console_setup(void)
++{
++ /* Allow cmdline to override our assumed preferences */
++ if (console_set_on_cmdline)
++ return 0;
++
++ if (IS_ENABLED(CONFIG_SERIAL_AMBA_PL011))
++ add_preferred_console("ttyAMA", 0, "115200");
++
++ if (IS_ENABLED(CONFIG_SERIAL_8250))
++ add_preferred_console("ttyS", 0, "115200");
++
++ return 0;
++}
++early_initcall(arm64_console_setup);
diff --git a/asus-wmi-Add-a-no-backlight-quirk.patch b/asus-wmi-Add-a-no-backlight-quirk.patch
deleted file mode 100644
index 3a99afef9..000000000
--- a/asus-wmi-Add-a-no-backlight-quirk.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-Bugzilla: 1097436
-Upstream-status: Sent upstream for 3.16
-
-From f6fad201a0e4584e9826a2deb8ebbfccdb8cb13b Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:01 +0200
-Subject: [PATCH 04/14] asus-wmi: Add a no backlight quirk
-
-Some Asus motherboards for desktop PC-s export an acpi-video and
-an asus-wmi interface advertising backlight support. Add a quirk to allow
-to blacklist these so that desktop environments such as gnome don't start
-showing nonsense brightness controls.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1097436
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/asus-wmi.c | 8 ++++++--
- drivers/platform/x86/asus-wmi.h | 1 +
- 2 files changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index c5e082fb82fa..6f73dc5125ca 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1272,6 +1272,9 @@ static int asus_wmi_backlight_init(struct asus_wmi *asus)
- int max;
- int power;
-
-+ if (asus->driver->quirks->no_backlight)
-+ return -ENODEV;
-+
- max = read_brightness_max(asus);
-
- if (max == -ENODEV)
-@@ -1370,7 +1373,7 @@ static void asus_wmi_notify(u32 value, void *context)
- code = ASUS_WMI_BRN_DOWN;
-
- if (code == ASUS_WMI_BRN_DOWN || code == ASUS_WMI_BRN_UP) {
-- if (!acpi_video_backlight_support()) {
-+ if (asus->backlight_device) {
- asus_wmi_backlight_notify(asus, orig_code);
- goto exit;
- }
-@@ -1773,7 +1776,8 @@ static int asus_wmi_add(struct platform_device *pdev)
- if (err)
- goto fail_rfkill;
-
-- if (asus->driver->quirks->wmi_backlight_power)
-+ if (asus->driver->quirks->wmi_backlight_power ||
-+ asus->driver->quirks->no_backlight)
- acpi_video_dmi_promote_vendor();
- if (!acpi_video_backlight_support()) {
- pr_info("Disabling ACPI video driver\n");
-diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h
-index 4da4c8bafe70..cc47efe14974 100644
---- a/drivers/platform/x86/asus-wmi.h
-+++ b/drivers/platform/x86/asus-wmi.h
-@@ -42,6 +42,7 @@ struct quirk_entry {
- bool scalar_panel_brightness;
- bool store_backlight_power;
- bool wmi_backlight_power;
-+ bool no_backlight;
- int wapf;
- /*
- * For machines with AMD graphic chips, it will send out WMI event
---
-1.9.0
-
diff --git a/asus-wmi-Restrict-debugfs-interface-when-module-load.patch b/asus-wmi-Restrict-debugfs-interface-when-module-load.patch
new file mode 100644
index 000000000..929853201
--- /dev/null
+++ b/asus-wmi-Restrict-debugfs-interface-when-module-load.patch
@@ -0,0 +1,50 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 9 Mar 2012 08:46:50 -0500
+Subject: [PATCH] asus-wmi: Restrict debugfs interface when module loading is
+ restricted
+
+We have no way of validating what all of the Asus WMI methods do on a
+given machine, and there's a risk that some will allow hardware state to
+be manipulated in such a way that arbitrary code can be executed in the
+kernel, circumventing module loading restrictions. Prevent that if any of
+these features are enabled.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ drivers/platform/x86/asus-wmi.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index 7543a56e0f45..93b5a6998371 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -1589,6 +1589,9 @@ static int show_dsts(struct seq_file *m, void *data)
+ int err;
+ u32 retval = -1;
+
++ if (secure_modules())
++ return -EPERM;
++
+ err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
+
+ if (err < 0)
+@@ -1605,6 +1608,9 @@ static int show_devs(struct seq_file *m, void *data)
+ int err;
+ u32 retval = -1;
+
++ if (secure_modules())
++ return -EPERM;
++
+ err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
+ &retval);
+
+@@ -1629,6 +1635,9 @@ static int show_call(struct seq_file *m, void *data)
+ union acpi_object *obj;
+ acpi_status status;
+
++ if (secure_modules())
++ return -EPERM;
++
+ status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID,
+ 1, asus->debug.method_id,
+ &input, &output);
diff --git a/ath9k_rx_dma_stop_check.patch b/ath9k-rx-dma-stop-check.patch
index 606eb1c63..40cbafc7b 100644
--- a/ath9k_rx_dma_stop_check.patch
+++ b/ath9k-rx-dma-stop-check.patch
@@ -1,6 +1,16 @@
+From: "kernel-team@fedoraproject.org" <kernel-team@fedoraproject.org>
+Date: Wed, 6 Feb 2013 09:57:47 -0500
+Subject: [PATCH] ath9k: rx dma stop check
+
+---
+ drivers/net/wireless/ath/ath9k/mac.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
+index bba85d1a6cd1..ebbee8f17130 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -689,7 +689,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw
+@@ -693,7 +693,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
{
#define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */
struct ath_common *common = ath9k_hw_common(ah);
@@ -9,7 +19,7 @@
int i;
/* Enable access to the DMA observation bus */
-@@ -719,6 +719,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw
+@@ -723,6 +723,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
}
if (i == 0) {
diff --git a/backlight-Add-backlight-device-un-registration-notif.patch b/backlight-Add-backlight-device-un-registration-notif.patch
deleted file mode 100644
index a411bb9cb..000000000
--- a/backlight-Add-backlight-device-un-registration-notif.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Bugzilla: 1093171
-Upstream-status: Queued for 3.16
-
-From ee515e61a002b4d571407173ac8bbadadc114cf0 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:08 +0200
-Subject: [PATCH 11/14] backlight: Add backlight device (un)registration
- notification
-
-Some firmware drivers, ie acpi-video want to get themselves out of the
-way (in some cases) when their also is a raw backlight device available.
-
-Due to module loading ordering being unknown, acpi-video cannot be certain
-that the backlight_device_registered(BACKLIGHT_RAW) it does for this is
-the final verdict wrt there being a BACKLIGHT_RAW device.
-
-By adding notification acpi-video can listen for backlight devices showing
-up after it has loaded, and unregister its backlight device if desired.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/video/backlight/backlight.c | 40 +++++++++++++++++++++++++++++++++++++
- include/linux/backlight.h | 7 +++++++
- 2 files changed, 47 insertions(+)
-
-diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
-index bd2172c2d650..428089009cd5 100644
---- a/drivers/video/backlight/backlight.c
-+++ b/drivers/video/backlight/backlight.c
-@@ -23,6 +23,7 @@
-
- static struct list_head backlight_dev_list;
- static struct mutex backlight_dev_list_mutex;
-+static struct blocking_notifier_head backlight_notifier;
-
- static const char *const backlight_types[] = {
- [BACKLIGHT_RAW] = "raw",
-@@ -370,6 +371,9 @@ struct backlight_device *backlight_device_register(const char *name,
- list_add(&new_bd->entry, &backlight_dev_list);
- mutex_unlock(&backlight_dev_list_mutex);
-
-+ blocking_notifier_call_chain(&backlight_notifier,
-+ BACKLIGHT_REGISTERED, new_bd);
-+
- return new_bd;
- }
- EXPORT_SYMBOL(backlight_device_register);
-@@ -413,6 +417,10 @@ void backlight_device_unregister(struct backlight_device *bd)
- pmac_backlight = NULL;
- mutex_unlock(&pmac_backlight_mutex);
- #endif
-+
-+ blocking_notifier_call_chain(&backlight_notifier,
-+ BACKLIGHT_UNREGISTERED, bd);
-+
- mutex_lock(&bd->ops_lock);
- bd->ops = NULL;
- mutex_unlock(&bd->ops_lock);
-@@ -438,6 +446,36 @@ static int devm_backlight_device_match(struct device *dev, void *res,
- }
-
- /**
-+ * backlight_register_notifier - get notified of backlight (un)registration
-+ * @nb: notifier block with the notifier to call on backlight (un)registration
-+ *
-+ * @return 0 on success, otherwise a negative error code
-+ *
-+ * Register a notifier to get notified when backlight devices get registered
-+ * or unregistered.
-+ */
-+int backlight_register_notifier(struct notifier_block *nb)
-+{
-+ return blocking_notifier_chain_register(&backlight_notifier, nb);
-+}
-+EXPORT_SYMBOL(backlight_register_notifier);
-+
-+/**
-+ * backlight_unregister_notifier - unregister a backlight notifier
-+ * @nb: notifier block to unregister
-+ *
-+ * @return 0 on success, otherwise a negative error code
-+ *
-+ * Register a notifier to get notified when backlight devices get registered
-+ * or unregistered.
-+ */
-+int backlight_unregister_notifier(struct notifier_block *nb)
-+{
-+ return blocking_notifier_chain_unregister(&backlight_notifier, nb);
-+}
-+EXPORT_SYMBOL(backlight_unregister_notifier);
-+
-+/**
- * devm_backlight_device_register - resource managed backlight_device_register()
- * @dev: the device to register
- * @name: the name of the device
-@@ -544,6 +582,8 @@ static int __init backlight_class_init(void)
- backlight_class->pm = &backlight_class_dev_pm_ops;
- INIT_LIST_HEAD(&backlight_dev_list);
- mutex_init(&backlight_dev_list_mutex);
-+ BLOCKING_INIT_NOTIFIER_HEAD(&backlight_notifier);
-+
- return 0;
- }
-
-diff --git a/include/linux/backlight.h b/include/linux/backlight.h
-index 72647429adf6..adb14a8616df 100644
---- a/include/linux/backlight.h
-+++ b/include/linux/backlight.h
-@@ -40,6 +40,11 @@ enum backlight_type {
- BACKLIGHT_TYPE_MAX,
- };
-
-+enum backlight_notification {
-+ BACKLIGHT_REGISTERED,
-+ BACKLIGHT_UNREGISTERED,
-+};
-+
- struct backlight_device;
- struct fb_info;
-
-@@ -133,6 +138,8 @@ extern void devm_backlight_device_unregister(struct device *dev,
- extern void backlight_force_update(struct backlight_device *bd,
- enum backlight_update_reason reason);
- extern bool backlight_device_registered(enum backlight_type type);
-+extern int backlight_register_notifier(struct notifier_block *nb);
-+extern int backlight_unregister_notifier(struct notifier_block *nb);
-
- #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev)
-
---
-1.9.0
-
diff --git a/compile-fixes.patch b/compile-fixes.patch
deleted file mode 100644
index 34c08ce47..000000000
--- a/compile-fixes.patch
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Small compile fixes (For more involved fixes, please use a separate patch).
-#
-# Please add the errors from gcc before the diffs to save others having
-# to do a compile to figure out what your diff is fixing. Thanks.
-#
diff --git a/config-arm-generic b/config-arm-generic
index c1bc6534b..824602485 100644
--- a/config-arm-generic
+++ b/config-arm-generic
@@ -1,12 +1,15 @@
CONFIG_KUSER_HELPERS=y
+# CONFIG_VDSO is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
CONFIG_COMMON_CLK=y
CONFIG_EARLY_PRINTK=y
+CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
CONFIG_FB_SSD1307=m
CONFIG_HW_PERF_EVENTS=y
CONFIG_NFS_FS=y
CONFIG_CRASH=m
+CONFIG_CC_STACKPROTECTOR=y
# CONFIG_PID_IN_CONTEXTIDR is not set
@@ -22,14 +25,12 @@ CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
CONFIG_RCU_FANOUT_LEAF=16
-# CONFIG_RTC_DRV_SNVS is not set
-# CONFIG_RTC_DRV_HYM8563 is not set
CONFIG_BACKLIGHT_PWM=m
+CONFIG_BACKLIGHT_GENERIC=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_ARM_SP805_WATCHDOG=m
CONFIG_ARM_ARCH_TIMER=y
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
-# CONFIG_ARM_DT_BL_CPUFREQ is not set
CONFIG_NR_CPUS=8
CONFIG_SWIOTLB=y
@@ -41,62 +42,140 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
# ARM AMBA generic HW
CONFIG_ARM_AMBA=y
+CONFIG_KERNEL_MODE_NEON=y
CONFIG_ARM_CCI=y
+CONFIG_ARM_CCN=y
+CONFIG_ARM_CCI400_PMU=y
+CONFIG_ARM_CCI500_PMU=y
CONFIG_ARM_DMA_USE_IOMMU=y
+CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
CONFIG_ARM_GIC=y
+CONFIG_ARM_GIC_V2M=y
+CONFIG_ARM_GIC_V3=y
+CONFIG_ARM_GIC_V3_ITS=y
CONFIG_ARM_GLOBAL_TIMER=y
CONFIG_ARM_SMMU=y
CONFIG_MMC_ARMMMCI=y
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_SERIO_AMBAKMI=y
-CONFIG_OC_ETM=y
CONFIG_FB_ARMCLCD=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_PL330_DMA=m
+CONFIG_GPIO_PL061=y
+CONFIG_USB_ISP1760=m
# ARM VExpress
CONFIG_ARCH_VEXPRESS=y
-CONFIG_VEXPRESS_CONFIG=y
+CONFIG_MFD_VEXPRESS_SYSREG=y
+CONFIG_VEXPRESS_SYSCFG=y
CONFIG_COMMON_CLK_VERSATILE=y
+CONFIG_ARM_TIMER_SP804=y
+CONFIG_CLK_SP810=y
+CONFIG_CLK_VEXPRESS_OSC=y
CONFIG_I2C_VERSATILE=m
CONFIG_POWER_RESET_VEXPRESS=y
CONFIG_REGULATOR_VEXPRESS=m
CONFIG_SENSORS_VEXPRESS=m
+CONFIG_CLKSRC_VERSATILE=y
+CONFIG_POWER_RESET_VERSATILE=y
+# CONFIG_ARM_CHARLCD is not set
+
+# Tegra
+# CONFIG_TEGRA_AHB is not set
+
+# Power management / thermal / cpu scaling
+# CONFIG_ARM_CPUIDLE is not set
+# CONFIG_ARM_DT_BL_CPUFREQ is not set
+# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
# Device tree
CONFIG_DTC=y
CONFIG_DMA_OF=y
-CONFIG_PROC_DEVICETREE=y
CONFIG_OF=y
+# CONFIG_OF_UNITTEST is not set
CONFIG_OF_ADDRESS=y
-CONFIG_OF_DEVICE=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_GPIO=y
-CONFIG_OF_I2C=m
CONFIG_OF_IOMMU=y
CONFIG_OF_IRQ=y
-CONFIG_OF_MDIO=m
CONFIG_OF_MTD=y
CONFIG_OF_NET=y
+CONFIG_OF_OVERLAY=y
CONFIG_OF_PCI_IRQ=m
CONFIG_OF_PCI=m
CONFIG_OF_RESERVED_MEM=y
+CONFIG_OF_RESOLVE=y
+CONFIG_PM_GENERIC_DOMAINS_OF=y
CONFIG_PATA_OF_PLATFORM=m
-# CONFIG_OF_SELFTEST is not set
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_THERMAL_OF=y
+# CONFIG_OF_MDIO is not set
+# CONFIG_MDIO_BUS_MUX_GPIO is not set
+# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+
+# Mailbox
+CONFIG_MAILBOX=y
+CONFIG_ARM_MHU=m
+# CONFIG_PL320_MBOX is not set
+
+# HW crypto and rng
+CONFIG_ARM_CRYPTO=y
+CONFIG_CRYPTO_AES_ARM=m
+# CONFIG_CRYPTO_AES_ARM_BS is not set
+CONFIG_CRYPTO_SHA1_ARM=m
+CONFIG_CRYPTO_SHA256_ARM=m
+CONFIG_CRYPTO_SHA1_ARM_NEON=m
+CONFIG_CRYPTO_SHA512_ARM_NEON=m
+CONFIG_CRYPTO_SHA512_ARM=m
+# USB
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+CONFIG_USB_EHCI_HCD_PLATFORM=m
+CONFIG_USB_XHCI_PLATFORM=m
+
+# MMC/SD
+CONFIG_MMC_SPI=m
+
+# Designware (used by numerous devices)
+CONFIG_MMC_DW=m
+CONFIG_MMC_DW_PLTFM=m
+CONFIG_MMC_DW_IDMAC=y
+CONFIG_MMC_DW_K3=m
+CONFIG_MMC_DW_PCI=m
+CONFIG_SPI_DW_MMIO=m
+CONFIG_SPI_DW_PCI=m
+# CONFIG_SPI_DW_MID_DMA is not set
+# CONFIG_MMC_DW_IDMAC is not set
+# CONFIG_MMC_QCOM_DML is not set
+CONFIG_USB_DWC2=m
+CONFIG_USB_DWC2_DUAL_ROLE=y
+CONFIG_USB_DWC2_PLATFORM=m
+CONFIG_USB_DWC2_PCI=m
+# CONFIG_USB_DWC2_DEBUG is not set
+# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
+CONFIG_USB_DWC3=m
+CONFIG_USB_DWC3_DUAL_ROLE=y
+CONFIG_USB_DWC3_PCI=m
+# CONFIG_USB_DWC3_DEBUG is not set
+CONFIG_USB_DWC3_ULPI=y
+CONFIG_DW_WATCHDOG=m
+CONFIG_PCIE_DW=y
+# CONFIG_MMC_DW_EXYNOS is not set
+
# External Connectors
CONFIG_EXTCON=m
-CONFIG_OF_EXTCON=m
CONFIG_EXTCON_GPIO=m
CONFIG_EXTCON_ADC_JACK=m
+CONFIG_EXTCON_USB_GPIO=m
+# CONFIG_EXTCON_SM5502 is not set
+# CONFIG_EXTCON_RT8973A is not set
# MTD
CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
-CONFIG_MTD_CHAR=m
CONFIG_MTD_CFI=m
CONFIG_MTD_CFI_INTELEXT=m
CONFIG_MTD_CFI_AMDSTD=m
@@ -106,6 +185,7 @@ CONFIG_MTD_OF_PARTS=m
CONFIG_MTD_PHYSMAP=m
CONFIG_MTD_PHYSMAP_OF=m
# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_LPDDR2_NVM is not set
# GPIO
CONFIG_GPIO_DEVRES=y
@@ -115,10 +195,14 @@ CONFIG_GPIO_WATCHDOG=m
CONFIG_GPIOLIB=y
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_MDIO_GPIO=m
CONFIG_BACKLIGHT_GPIO=m
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_GPIO_POLLED=m
+CONFIG_INPUT_SOC_BUTTON_ARRAY=m
CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_RESTART=y
+# CONFIG_GPIO_74XX_MMIO is not set
#i2c
CONFIG_I2C_ARB_GPIO_CHALLENGE=m
@@ -130,6 +214,9 @@ CONFIG_I2C_MUX_PINCTRL=m
CONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=m
+# spi
+CONFIG_SPI_PL022=m
+
# Sensors
CONFIG_SENSORS_IIO_HWMON=m
CONFIG_IIO_SYSFS_TRIGGER=m
@@ -137,9 +224,6 @@ CONFIG_IIO_SYSFS_TRIGGER=m
# PHY framework
CONFIG_GENERIC_PHY=y
-# MFD
-CONFIG_MFD_CORE=m
-
CONFIG_SMC91X=m
CONFIG_SMC911X=m
@@ -150,6 +234,7 @@ CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CMA=y
CONFIG_DMA_CMA=y
# CONFIG_CMA_DEBUG is not set
+CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_SIZE_MBYTES=16
CONFIG_CMA_SIZE_SEL_MBYTES=y
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
@@ -158,6 +243,16 @@ CONFIG_CMA_SIZE_SEL_MBYTES=y
CONFIG_CMA_ALIGNMENT=8
CONFIG_CMA_AREAS=7
+# EDAC
+CONFIG_EDAC=y
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_LEGACY_SYSFS=y
+
+# VFIO
+CONFIG_VFIO_PLATFORM=m
+CONFIG_VFIO_AMBA=m
+# CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET is not set
+
# CONFIG_CRYPTO_TEST is not set
# CONFIG_TRANSPARENT_HUGEPAGE is not set
# CONFIG_XEN is not set
@@ -165,12 +260,12 @@ CONFIG_CMA_AREAS=7
# CONFIG_I2C_RCAR is not set
# CONFIG_DRM_SHMOBILE is not set
# CONFIG_I2C_SH_MOBILE is not set
-# CONFIG_MMC_DW_SOCFPGA is not set
# CONFIG_I2C_NOMADIK is not set
# CONFIG_IRQ_DOMAIN_DEBUG is not set
-# CONFIG_LEDS_RENESAS_TPU is not set
# CONFIG_LOCK_STAT is not set
+# CONFIG_CADENCE_WATCHDOG is not set
+
# CONFIG_DRM_ARMADA is not set
# CONFIG_DRM_TEGRA is not set
# CONFIG_SHMOBILE_IOMMU is not set
@@ -181,6 +276,10 @@ CONFIG_CMA_AREAS=7
# CONFIG_ARM_PTDUMP is not set
# CONFIG_PATA_PLATFORM is not set
+# CONFIG_USB_ULPI is not set
+# CONFIG_KEYBOARD_OMAP4 is not set
+# CONFIG_KEYBOARD_BCM is not set
+# CONFIG_PHY_SAMSUNG_USB2 is not set
### turn off things which make no sense on embedded SoC
@@ -212,7 +311,6 @@ CONFIG_CMA_AREAS=7
# CONFIG_NET_VENDOR_SUN is not set
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_NET_VENDOR_XIRCOM is not set
-# CONFIG_NET_PCMCIA is not set
# scsi
@@ -233,9 +331,19 @@ CONFIG_CMA_AREAS=7
# CONFIG_SCSI_MPT3SAS is not set
# serial
-# CONFIG_SERIAL_SH_SCI is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX310X is not set
+# CONFIG_SERIAL_IFX6X60 is not set
# drm
# CONFIG_DRM_VMWGFX is not set
+# CONFIG_DRM_MSM_DSI is not set
+# CONFIG_IMX_IPUV3_CORE is not set
# CONFIG_DEBUG_SET_MODULE_RONX is not set
+# CONFIG_CORESIGHT is not set
+
+# CONFIG_LATTICE_ECP3_CONFIG is not set
+# CONFIG_BMP085_SPI is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_SPI_ROCKCHIP is not set
diff --git a/config-arm64 b/config-arm64
index ddd5bc4b9..929fc25ce 100644
--- a/config-arm64
+++ b/config-arm64
@@ -7,18 +7,38 @@ CONFIG_SCHED_SMT=y
# CONFIG_CPU_BIG_ENDIAN is not set
# arm64 only SoCs
+CONFIG_ARCH_HISI=y
+CONFIG_ARCH_SEATTLE=y
CONFIG_ARCH_XGENE=y
+# CONFIG_ARCH_THUNDER is not set
+# CONFIG_ARCH_EXYNOS7 is not set
+# CONFIG_ARCH_FSL_LS2085A is not set
+# CONFIG_ARCH_MEDIATEK is not set
+# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_QCOM is not set
+# CONFIG_ARCH_SPRD is not set
+# CONFIG_ARCH_ZYNQMP is not set
-# CONFIG_ALWAYS_USE_PERSISTENT_CLOCK is not set
+# Erratum
+CONFIG_ARM64_ERRATUM_826319=y
+CONFIG_ARM64_ERRATUM_827319=y
+CONFIG_ARM64_ERRATUM_824069=y
+CONFIG_ARM64_ERRATUM_819472=y
+CONFIG_ARM64_ERRATUM_832075=y
+
+# AMBA / VExpress
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_SERIAL_AMBA_PL010 is not set
# CONFIG_AMBA_PL08X is not set
+CONFIG_ARM_SMMU_V3=y
+
CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARM64_64K_PAGES is not set
-CONFIG_COMPAT=y
+CONFIG_ARM64_64K_PAGES=y
+# CONFIG_COMPAT is not set
CONFIG_BCMA_POSSIBLE=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
-CONFIG_BQL=y
CONFIG_BRCMUTIL=m
CONFIG_BUG=y
CONFIG_CLKDEV_LOOKUP=y
@@ -26,53 +46,67 @@ CONFIG_CMDLINE="console=ttyAMA0"
# CONFIG_CMDLINE_FORCE is not set
CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_GENERIC_ACL=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CSUM=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_IO=y
-CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y
-CONFIG_HAVE_ARCH_PFN_VALID=y
-CONFIG_HAVE_ARCH_TRACEHOOK=y
-CONFIG_HAVE_MEMORY_PRESENT=y
-CONFIG_HAVE_NET_DSA=y
-# CONFIG_HUGETLB_PAGE is not set
CONFIG_HVC_DRIVER=y
CONFIG_HZ=100
CONFIG_KVM=y
CONFIG_KVM_ARM_MAX_VCPUS=8
-CONFIG_LOG_BUF_SHIFT=14
-
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_NFS_DEBUG=y
-# CONFIG_NFSD_FAULT_INJECTION is not set
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFS_USE_KERNEL_DNS=y
-# CONFIG_PL330_DMA is not set
+
CONFIG_RCU_FANOUT=64
-# CONFIG_RTC_DRV_PL030 is not set
-# CONFIG_RTC_DRV_PL031 is not set
-CONFIG_SERIAL_8250_DMA=y
-# CONFIG_SERIAL_AMBA_PL010 is not set
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_THERMAL is not set
-CONFIG_VIRTUALIZATION=y
-CONFIG_VM_EVENT_COUNTERS=y
-# not arm64
-# CONFIG_GPIO_ADNP is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_MDIO_BUS_MUX_GPIO is not set
-# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+CONFIG_EFI=y
+CONFIG_EFI_VARS=y
+CONFIG_EFIVAR_FS=y
+CONFIG_EFI_VARS_PSTORE=y
+CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
+CONFIG_RTC_DRV_EFI=y
+CONFIG_ACPI=y
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_EC_DEBUGFS=y
+CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_FAN=m
+CONFIG_ACPI_DOCK=y
+CONFIG_ACPI_IPMI=y
+CONFIG_ACPI_CONTAINER=y
+CONFIG_ACPI_HED=m
+CONFIG_ACPI_CUSTOM_METHOD=m
+CONFIG_ACPI_NFIT=m
+# CONFIG_ACPI_NFIT_DEBUG is not set
+CONFIG_PCC=y
+
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=m
+CONFIG_CRYPTO_SHA2_ARM64_CE=m
+CONFIG_CRYPTO_GHASH_ARM64_CE=m
+CONFIG_CRYPTO_AES_ARM64_CE=m
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=m
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=m
+CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m
+CONFIG_CRYPTO_CRC32_ARM64=m
+CONFIG_CRYPTO_DEV_CCP=y
+CONFIG_CRYPTO_DEV_CCP_DD=m
+CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+
+# APM Xgene
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_COMMON_CLK_XGENE=y
+
+CONFIG_AHCI_XGENE=y
+CONFIG_PHY_XGENE=y
+CONFIG_NET_XGENE=y
+CONFIG_RTC_DRV_XGENE=m
+CONFIG_HW_RANDOM_XGENE=m
+CONFIG_GPIO_XGENE=y
+CONFIG_GPIO_XGENE_SB=m
+CONFIG_XGENE_DMA=m
+CONFIG_EDAC_XGENE=m
# busted build for various reasons
# uses pci_* for some reason to allocate DMA buffers
@@ -82,8 +116,51 @@ CONFIG_VM_EVENT_COUNTERS=y
# dma issues in headers
# CONFIG_PARPORT_PC is not set
# CONFIG_VGA_CONSOLE is not set
-CONFIG_POWER_RESET_XGENE=y
-CONFIG_COMMON_CLK_XGENE=y
-CONFIG_AHCI_XGENE=m
-CONFIG_PHY_XGENE=m
+CONFIG_PCI_XGENE=y
+CONFIG_PCI_XGENE_MSI=y
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
+
+# CONFIG_PNP_DEBUG_MESSAGES is not set
+CONFIG_I2C_SCMI=m
+CONFIG_I2C_XGENE_SLIMPRO=m
+CONFIG_SENSORS_ACPI_POWER=m
+
+# AMD Seattle
+CONFIG_NET_SB1000=y
+CONFIG_AMD_XGBE=m
+CONFIG_AMD_XGBE_PHY=m
+# CONFIG_AMD_XGBE_DCB is not set
+
+# HiSilicon
+CONFIG_POWER_RESET_HISI=y
+CONFIG_HISI_THERMAL=m
+
+CONFIG_NET_VENDOR_MELLANOX=y
+CONFIG_MLX4_EN=m
+CONFIG_MLX4_EN_DCB=y
+CONFIG_MLX4_EN_VXLAN=y
+
+# CONFIG_IMX_THERMAL is not set
+
+CONFIG_DMI=y
+CONFIG_DMIID=y
+CONFIG_DMI_SYSFS=y
+
+CONFIG_SATA_AHCI_PLATFORM=y
+
+CONFIG_LIBNVDIMM=m
+CONFIG_BTT=y
+CONFIG_ND_BTT=m
+CONFIG_ND_BLK=m
+
+# CONFIG_SND_SOC is not set
+
+# CONFIG_PMIC_OPREGION is not set
+# CONFIG_DEBUG_RODATA is not set
+
+CONFIG_DEBUG_SECTION_MISMATCH=y
+
+# CONFIG_FSL_MC_BUS is not set
diff --git a/config-armv7 b/config-armv7
index 4aaa913a6..b3a496c46 100644
--- a/config-armv7
+++ b/config-armv7
@@ -2,17 +2,13 @@
# CONFIG_ARCH_BERLIN is not set
# CONFIG_ARCH_KEYSTONE is not set
-CONFIG_ARCH_MVEBU=y
CONFIG_ARCH_MXC=y
-# CONFIG_ARCH_OMAP2 is not set
CONFIG_ARCH_OMAP3=y
CONFIG_ARCH_OMAP4=y
CONFIG_ARCH_PICOXCELL=y
-CONFIG_ARCH_ROCKCHIP=y
-# CONFIG_ARCH_SOCFPGA is not set
+CONFIG_ARCH_QCOM=y
CONFIG_ARCH_TEGRA=y
CONFIG_ARCH_U8500=y
-# CONFIG_ARCH_VIRT is not set
CONFIG_ARCH_ZYNQ=y
# These are supported in the LPAE kernel
@@ -21,106 +17,48 @@ CONFIG_ARCH_ZYNQ=y
# CONFIG_ARM_VIRT_EXT is not set
# CONFIG_VIRTUALIZATION is not set
-# mvebu
-CONFIG_MACH_ARMADA_370_XP=y
-CONFIG_MACH_ARMADA_370=y
-CONFIG_MACH_ARMADA_XP=y
-# CONFIG_MACH_ARMADA_375 is not set
-# CONFIG_MACH_ARMADA_38X is not set
-CONFIG_MACH_DOVE=y
-
-CONFIG_MVEBU_DEVBUS=y
-CONFIG_PCI_MVEBU=y
-CONFIG_CACHE_TAUROS2=y
-CONFIG_MV_XOR=y
-CONFIG_CRYPTO_DEV_MV_CESA=m
-CONFIG_MV643XX_ETH=m
-CONFIG_PINCTRL_MVEBU=y
-CONFIG_PINCTRL_ARMADA_370=y
-CONFIG_PINCTRL_ARMADA_XP=y
-CONFIG_PINCTRL_DOVE=y
-CONFIG_EDAC_MV64X60=m
-CONFIG_RTC_DRV_S35390A=m
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_MV=m
-CONFIG_MVNETA=m
-CONFIG_GPIO_MVEBU=y
-CONFIG_MVEBU_CLK_CORE=y
-CONFIG_MVEBU_CLK_COREDIV=y
-CONFIG_MVEBU_CLK_GATING=y
-CONFIG_MMC_MVSDIO=m
-CONFIG_MMC_SDHCI_DOVE=m
-CONFIG_SPI_ORION=m
-CONFIG_USB_MV_UDC=m
-CONFIG_MVEBU_MBUS=y
-CONFIG_PHY_MVEBU_SATA=y
-CONFIG_ARMADA_THERMAL=m
-CONFIG_DOVE_THERMAL=m
-CONFIG_DRM_ARMADA=m
-CONFIG_ORION_WATCHDOG=m
-CONFIG_SND_KIRKWOOD_SOC=m
-CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m
-CONFIG_USB_EHCI_HCD_ORION=m
-# CONFIG_CACHE_FEROCEON_L2 is not set
-# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
-
# omap
CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
CONFIG_SOC_OMAP5=y
# CONFIG_SOC_DRA7XX is not set
CONFIG_SOC_OMAP3430=y
CONFIG_SOC_TI81XX=y
-# CONFIG_MACH_CM_T35 is not set
-# CONFIG_MACH_CM_T3517 is not set
-# CONFIG_MACH_CRANEBOARD is not set
-# CONFIG_MACH_DEVKIT8000 is not set
-# CONFIG_MACH_IGEP0030 is not set
# CONFIG_MACH_NOKIA_RX51 is not set
-# CONFIG_MACH_OMAP_3430SDP is not set
-# CONFIG_MACH_OMAP_3630SDP is not set
# CONFIG_MACH_OMAP_LDP is not set
-# CONFIG_MACH_OMAP3_BEAGLE is not set
-# CONFIG_MACH_OMAP3517EVM is not set
# CONFIG_MACH_OMAP3530_LV_SOM is not set
-# CONFIG_MACH_OMAP3EVM is not set
-# CONFIG_MACH_OMAP3_PANDORA is not set
# CONFIG_MACH_OMAP3_TORPEDO is not set
-# CONFIG_MACH_OVERO is not set
-# CONFIG_MACH_SBC3530 is not set
-# CONFIG_MACH_TI8168EVM is not set
-# CONFIG_MACH_TI8148EVM is not set
-# CONFIG_MACH_TOUCHBOOK is not set
+# CONFIG_MACH_OMAP3517EVM is not set
+# CONFIG_MACH_OMAP3_PANDORA is not set
CONFIG_SOC_HAS_REALTIME_COUNTER=y
CONFIG_OMAP_RESET_CLOCKS=y
CONFIG_OMAP_MUX=y
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_32K_TIMER=y
-CONFIG_OMAP_32K_TIMER_HZ=128
CONFIG_OMAP_PACKAGE_CBB=y
CONFIG_OMAP_PACKAGE_CUS=y
# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
-CONFIG_OMAP_MCBSP=y
CONFIG_OMAP2PLUS_MBOX=m
-CONFIG_OMAP_MBOX_FWK=m
CONFIG_OMAP_MBOX_KFIFO_SIZE=256
-CONFIG_OMAP_DM_TIMER=y
-CONFIG_OMAP_PM_NOOP=y
-CONFIG_DMA_OMAP=y
+CONFIG_DMA_OMAP=m
CONFIG_OMAP_IOMMU=y
-CONFIG_OMAP_IOVMM=m
CONFIG_HWSPINLOCK_OMAP=m
-CONFIG_OMAP3_EMU=y
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
+# CONFIG_PHY_DM816X_USB is not set
CONFIG_SERIAL_OMAP=y
CONFIG_SERIAL_OMAP_CONSOLE=y
+CONFIG_SERIAL_8250_OMAP=m
+# Needed by omap_hsmmc for card detect on at least the am33xx (BBone) platforms (changed in 4.2)
+CONFIG_GPIO_OMAP=y
CONFIG_GPIO_TWL4030=m
CONFIG_GPIO_TWL6040=m
CONFIG_I2C_OMAP=m
CONFIG_CHARGER_TWL4030=m
+CONFIG_CHARGER_ISP1704=m
+CONFIG_CHARGER_BQ2415X=m
CONFIG_OMAP_WATCHDOG=m
CONFIG_TWL4030_CORE=y
CONFIG_TWL4030_MADC=m
@@ -130,9 +68,9 @@ CONFIG_BATTERY_TWL4030_MADC=m
CONFIG_OMAP_USB2=m
CONFIG_OMAP_CONTROL_PHY=m
CONFIG_TI_PIPE3=m
+CONFIG_PCI_DRA7XX=y
CONFIG_TWL4030_USB=m
CONFIG_TWL6030_USB=m
-CONFIG_TWL6030_PWM=m
CONFIG_TWL6040_CORE=y
CONFIG_CLK_TWL6040=m
CONFIG_OMAP_INTERCONNECT=m
@@ -145,9 +83,9 @@ CONFIG_USB_EHCI_HCD_OMAP=m
CONFIG_USB_OHCI_HCD_OMAP3=m
CONFIG_USB_MUSB_AM35X=m
CONFIG_USB_MUSB_OMAP2PLUS=m
-CONFIG_OMAP_CONTROL_USB=m
+CONFIG_USB_DWC3_OMAP=m
CONFIG_MMC_OMAP=m
-CONFIG_MMC_OMAP_HS=y
+CONFIG_MMC_OMAP_HS=m
CONFIG_RTC_DRV_MAX8907=m
# CONFIG_RTC_DRV_TWL92330 is not set
CONFIG_RTC_DRV_TWL4030=y
@@ -165,6 +103,9 @@ CONFIG_PINCTRL_PALMAS=y
CONFIG_REGULATOR_PALMAS=y
CONFIG_REGULATOR_PBIAS=m
CONFIG_RTC_DRV_PALMAS=m
+CONFIG_OMAP5_DSS_HDMI=y
+CONFIG_COMMON_CLK_PALMAS=m
+CONFIG_INPUT_PALMAS_PWRBUTTON=m
CONFIG_WL_TI=y
CONFIG_WLCORE_SDIO=m
@@ -178,8 +119,6 @@ CONFIG_MTD_ONENAND_OMAP2=m
CONFIG_MTD_NAND_OMAP2=m
CONFIG_MTD_NAND_OMAP_BCH=y
CONFIG_SPI_OMAP24XX=m
-CONFIG_MFD_TI_SSP=m
-CONFIG_SPI_TI_SSP=m
CONFIG_SPI_TI_QSPI=m
CONFIG_INPUT_TWL4030_PWRBUTTON=m
@@ -187,12 +126,9 @@ CONFIG_INPUT_TWL4030_VIBRA=m
CONFIG_INPUT_TWL6040_VIBRA=m
CONFIG_KEYBOARD_OMAP4=m
CONFIG_KEYBOARD_TWL4030=m
-CONFIG_TOUCHSCREEN_TI_TSCADC=m
+CONFIG_LEDS_TCA6507=m
-# OMAP thermal temp. Can likely be built as module but doesn't autoload so build in to ensure performance on PandaES
-CONFIG_OMAP_BANDGAP=y
-CONFIG_TI_SOC_THERMAL=y
-CONFIG_TI_THERMAL=y
+# OMAP thermal temp.
CONFIG_OMAP4_THERMAL=y
CONFIG_OMAP5_THERMAL=y
@@ -217,13 +153,10 @@ CONFIG_HW_RANDOM_OMAP3_ROM=m
CONFIG_DRM_OMAP=m
CONFIG_DRM_OMAP_NUM_CRTCS=2
CONFIG_OMAP2_VRFB=y
-# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
-# CONFIG_FB_OMAP_LCD_VGA is not set
# CONFIG_FB_OMAP2 is not set
# CONFIG_FB_DA8XX is not set
CONFIG_OMAP2_DSS=m
-# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set
CONFIG_OMAP2_DSS_DPI=y
CONFIG_OMAP2_DSS_RFBI=y
@@ -231,11 +164,10 @@ CONFIG_OMAP2_DSS_VENC=y
CONFIG_OMAP4_DSS_HDMI=y
CONFIG_OMAP2_DSS_SDI=y
CONFIG_OMAP2_DSS_DSI=y
-# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
-CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET=y
CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
+CONFIG_DISPLAY_ENCODER_OPA362=m
CONFIG_DISPLAY_ENCODER_TFP410=m
CONFIG_DISPLAY_ENCODER_TPD12S015=m
CONFIG_DISPLAY_CONNECTOR_DVI=m
@@ -251,42 +183,32 @@ CONFIG_DISPLAY_PANEL_NEC_NL8048HL11=m
CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m
# Enable V4L2 drivers for OMAP2+
-CONFIG_MEDIA_CONTROLLER=y
CONFIG_V4L_PLATFORM_DRIVERS=y
# CONFIG_VIDEO_OMAP2_VOUT is not set
CONFIG_VIDEO_OMAP3=m
+CONFIG_VIDEO_ADP1653=m
# CONFIG_VIDEO_OMAP4 is not set
-# CONFIG_VIDEO_OMAP4_DEBUG is not set
# The ones below are for TI Davinci
-# CONFIG_VIDEO_VPFE_CAPTURE is not set
-# CONFIG_VIDEO_VPSS_SYSTEM is not set
# CONFIG_VIDEO_DM6446_CCDC is not set
-# CONFIG_VIDEO_DM644X_VPBE is not set
# CONFIG_VIDEO_DM355_CCDC is not set
-# CONFIG_VIDEO_ISIF is not set
-# Also enable vivi driver - useful for testing a full kernelspace V4L2 driver
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIVI=m
CONFIG_SND_OMAP_SOC=m
CONFIG_SND_SOC_I2C_AND_SPI=m
CONFIG_SND_OMAP_SOC_AM3517EVM=m
CONFIG_SND_OMAP_SOC_DMIC=m
-CONFIG_SND_OMAP_SOC_HDMI=m
-CONFIG_SND_OMAP_SOC_IGEP0020=m
+CONFIG_SND_OMAP_SOC_HDMI_AUDIO=m
CONFIG_SND_OMAP_SOC_MCBSP=m
CONFIG_SND_OMAP_SOC_MCPDM=m
-CONFIG_SND_OMAP_SOC_OMAP_HDMI=m
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
-CONFIG_SND_OMAP_SOC_OMAP3EVM=m
-CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE=m
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
-CONFIG_SND_OMAP_SOC_OVERO=m
CONFIG_SND_OMAP_SOC_RX51=m
-CONFIG_SND_OMAP_SOC_SDP4430=m
CONFIG_SND_SOC_TLV320AIC23=m
+CONFIG_SND_SOC_TLV320AIC23_I2C=m
+CONFIG_SND_SOC_TLV320AIC23_SPI=m
CONFIG_SND_SOC_TLV320AIC3X=m
+CONFIG_SND_SOC_TLV320AIC31XX=m
+CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SOC_TWL4030=m
CONFIG_SND_SOC_TWL6040=m
CONFIG_SND_SOC_PCM1792A=m
@@ -294,22 +216,12 @@ CONFIG_RADIO_WL128X=m
CONFIG_OMAP_REMOTEPROC=m
-# CONFIG_TIDSPBRIDGE is not set
-# CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE=0x600000
-# CONFIG_TIDSPBRIDGE_DEBUG is not set
-# CONFIG_TIDSPBRIDGE_RECOVERY=y
-# CONFIG_TIDSPBRIDGE_CACHE_LINE_CHECK is not set
-# CONFIG_TIDSPBRIDGE_WDT3=y
-# CONFIG_TIDSPBRIDGE_WDT_TIMEOUT=5
-# CONFIG_TIDSPBRIDGE_NTFY_PWRERR is not set
-# CONFIG_TIDSPBRIDGE_BACKTRACE is not set
-
# CONFIG_OMAP2_DSS_DEBUGFS is not set
# CONFIG_OMAP_IOMMU_DEBUG is not set
# CONFIG_OMAP_MUX_DEBUG is not set
# CONFIG_VIDEO_OMAP3_DEBUG is not set
-# AM33xx
+# AM33xx/43xx
CONFIG_SOC_AM33XX=y
CONFIG_SOC_AM43XX=y
CONFIG_AM335X_CONTROL_USB=m
@@ -325,40 +237,123 @@ CONFIG_TI_DAVINCI_EMAC=m
CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_CPSW=m
CONFIG_TI_CPSW_PHY_SEL=y
+CONFIG_TI_CPSW_ALE=m
CONFIG_TI_CPTS=y
# Builtin needed for BBone White
CONFIG_REGULATOR_TPS65217=y
CONFIG_TI_EMIF=m
CONFIG_DRM_TILCDC=m
+# We only need this until the BBB dts is actually updated
+CONFIG_DRM_TILCDC_SLAVE_COMPAT=y
CONFIG_SPI_DAVINCI=m
CONFIG_SND_DAVINCI_SOC=m
CONFIG_SND_DAVINCI_SOC_I2S=m
CONFIG_SND_DAVINCI_SOC_MCASP=m
CONFIG_SND_DAVINCI_SOC_VCIF=m
CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m
+CONFIG_SND_EDMA_SOC=m
CONFIG_SND_AM33XX_SOC_EVM=m
CONFIG_REGULATOR_TI_ABB=m
CONFIG_TI_ADC081C=m
CONFIG_TI_AM335X_ADC=m
CONFIG_PWM_TIPWMSS=y
-# CONFIG_GPIO_DAVINCI is not set
-# CONFIG_DAVINCI_WATCHDOG is not set
+CONFIG_MFD_TPS65218=m
+CONFIG_REGULATOR_TPS65218=m
+CONFIG_INPUT_TPS65218_PWRBUTTON=m
+CONFIG_VIDEO_AM437X_VPFE=m
+CONFIG_UIO_PRUSS=m
+CONFIG_WKUP_M3_RPROC=m
+
+# QCom
+CONFIG_ARCH_MSM8X60=y
+CONFIG_ARCH_MSM8960=y
+CONFIG_ARCH_MSM8974=y
+CONFIG_SERIAL_MSM=y
+CONFIG_SERIAL_MSM_CONSOLE=y
+CONFIG_PINCTRL_APQ8064=m
+CONFIG_PINCTRL_APQ8084=m
+CONFIG_PINCTRL_IPQ8064=m
+CONFIG_PINCTRL_MSM8660=m
+CONFIG_PINCTRL_MSM8960=m
+CONFIG_PINCTRL_MSM8X74=m
+CONFIG_PINCTRL_MSM8916=m
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
+CONFIG_COMMON_CLK_QCOM=m
+# CONFIG_MSM_GCC_8916 is not set
+# CONFIG_IPQ_LCC_806X is not set
+# CONFIG_MSM_LCC_8960 is not set
+CONFIG_MFD_QCOM_RPM=m
+CONFIG_MFD_PM8921_CORE=m
+CONFIG_REGULATOR_QCOM_RPM=m
+CONFIG_REGULATOR_QCOM_SPMI=m
+CONFIG_APQ_GCC_8084=m
+CONFIG_APQ_MMCC_8084=m
+CONFIG_IPQ_GCC_806X=m
+CONFIG_MSM_GCC_8660=m
+CONFIG_MSM_GCC_8960=m
+CONFIG_MSM_MMCC_8960=m
+CONFIG_MSM_GCC_8974=m
+CONFIG_MSM_MMCC_8974=m
+CONFIG_HW_RANDOM_MSM=m
+CONFIG_I2C_QUP=m
+CONFIG_SPI_QUP=m
+CONFIG_GPIO_MSM_V2=m
+CONFIG_POWER_RESET_MSM=y
+CONFIG_USB_MSM_OTG=m
+CONFIG_MMC_SDHCI_MSM=m
+CONFIG_MMC_QCOM_DML=m
+CONFIG_QCOM_BAM_DMA=m
+CONFIG_QCOM_GSBI=m
+CONFIG_QCOM_PM=y
+CONFIG_PHY_QCOM_APQ8064_SATA=m
+CONFIG_PHY_QCOM_IPQ806X_SATA=m
+CONFIG_USB_DWC3_QCOM=m
+CONFIG_DWMAC_IPQ806X=m
+CONFIG_CRYPTO_DEV_QCE=m
+CONFIG_DRM_MSM=m
+CONFIG_DRM_MSM_FBDEV=y
+CONFIG_USB_EHCI_MSM=m
+CONFIG_MFD_PM8XXX=m
+CONFIG_KEYBOARD_PMIC8XXX=m
+CONFIG_INPUT_PM8XXX_VIBRATOR=m
+CONFIG_INPUT_PMIC8XXX_PWRKEY=m
+CONFIG_INPUT_PM8941_PWRKEY=m
+CONFIG_RTC_DRV_PM8XXX=m
+# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
+CONFIG_QCOM_WDT=m
+CONFIG_MFD_SPMI_PMIC=m
+CONFIG_SPMI=m
+CONFIG_SPMI_MSM_PMIC_ARB=m
+CONFIG_QCOM_SPMI_IADC=m
+CONFIG_QCOM_SPMI_VADC=m
+CONFIG_LEDS_PM8941_WLED=m
+CONFIG_SND_SOC_QCOM=m
+CONFIG_SND_SOC_LPASS_CPU=m
+CONFIG_SND_SOC_LPASS_PLATFORM=m
+CONFIG_SND_SOC_STORM=m
+CONFIG_PHY_QCOM_UFS=m
+CONFIG_HWSPINLOCK_QCOM=m
# i.MX
-CONFIG_MXC_IRQ_PRIOR=y
# CONFIG_MXC_DEBUG_BOARD is not set
CONFIG_SOC_IMX50=y
+CONFIG_SOC_IMX51=y
CONFIG_SOC_IMX53=y
CONFIG_SOC_IMX6Q=y
CONFIG_SOC_IMX6SL=y
+CONFIG_SOC_IMX6SX=y
+CONFIG_SOC_IMX7D=y
+# CONFIG_SOC_LS1021A is not set
# CONFIG_SOC_VF610 is not set
-CONFIG_MACH_IMX51_DT=y
-# CONFIG_MACH_MX51_BABBAGE is not set
-# CONFIG_MACH_EUKREA_CPUIMX51SD is not set
CONFIG_ARM_IMX6Q_CPUFREQ=m
+CONFIG_POWER_RESET_IMX=y
+CONFIG_PCI_IMX6=y
CONFIG_IMX_THERMAL=m
+CONFIG_IMX_SDMA=m
+CONFIG_IMX_DMA=m
+CONFIG_MXS_DMA=y
+CONFIG_AHCI_IMX=m
CONFIG_PATA_IMX=m
-CONFIG_PCI_IMX6=y
CONFIG_USB_EHCI_MXC=m
CONFIG_USB_CHIPIDEA=m
CONFIG_USB_CHIPIDEA_UDC=y
@@ -366,7 +361,10 @@ CONFIG_USB_CHIPIDEA_HOST=y
# CONFIG_USB_CHIPIDEA_DEBUG is not set
CONFIG_USB_FSL_USB2=m
CONFIG_NET_VENDOR_FREESCALE=y
+# CONFIG_GIANFAR is not set
CONFIG_FEC=m
+# CONFIG_FSL_PQ_MDIO is not set
+# CONFIG_FSL_XGMAC_MDIO is not set
CONFIG_KEYBOARD_IMX=m
CONFIG_KEYBOARD_STMPE=m
CONFIG_TOUCHSCREEN_STMPE=m
@@ -376,32 +374,46 @@ CONFIG_PINCTRL_IMX6SL=y
CONFIG_I2C_IMX=m
CONFIG_STMPE_I2C=y
CONFIG_SPI_IMX=m
+CONFIG_SPI_FSL_QUADSPI=m
CONFIG_STMPE_SPI=y
-CONFIG_MFD_MC13783=m
CONFIG_MFD_MC13XXX_SPI=m
CONFIG_MFD_STMPE=y
+CONFIG_MTD_NAND_GPMI_NAND=m
CONFIG_W1_MASTER_MXC=m
CONFIG_IMX_WEIM=y
CONFIG_IMX2_WDT=m
CONFIG_HW_RANDOM_MXC_RNGA=m
CONFIG_CRYPTO_DEV_SAHARA=m
CONFIG_RTC_DRV_SNVS=m
+CONFIG_FB_MXS=m
# CONFIG_FB_MX3 is not set
# CONFIG_FB_IMX is not set
CONFIG_SND_IMX_SOC=m
+CONFIG_SND_SOC_FSL_ASOC_CARD=m
+CONFIG_SND_SOC_FSL_ASRC=m
+CONFIG_SND_SOC_FSL_ESAI=m
+CONFIG_SND_SOC_FSL_SAI=m
CONFIG_SND_SOC_FSL_SPDIF=m
CONFIG_SND_SOC_FSL_SSI=m
CONFIG_SND_SOC_FSL_UTILS=m
CONFIG_SND_SOC_IMX_SSI=m
CONFIG_SND_SOC_IMX_AUDMUX=m
+CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_PCM_FIQ=m
CONFIG_SND_SOC_IMX_PCM_DMA=m
CONFIG_SND_SOC_IMX_SGTL5000=m
CONFIG_SND_SOC_IMX_WM8962=m
CONFIG_SND_SOC_IMX_MC13783=m
CONFIG_SND_SOC_IMX_SPDIF=m
+CONFIG_SND_SOC_CS42XX8_I2C=m
+CONFIG_SND_SOC_ES8328=m
+CONFIG_SND_SOC_ES8328_I2C=m
+CONFIG_SND_SOC_ES8328_SPI=m
CONFIG_SND_SOC_EUKREA_TLV320=m
+CONFIG_SND_SOC_SGTL5000=m
+CONFIG_SND_SOC_WM8731=m
+CONFIG_SND_SOC_WM8962=m
CONFIG_USB_IMX21_HCD=m
CONFIG_USB_MXS_PHY=m
@@ -412,24 +424,18 @@ CONFIG_RTC_DRV_IMXDI=m
CONFIG_RTC_DRV_MXC=m
# CONFIG_MX3_IPU is not set
# CONFIG_MX3_IPU_IRQS is not set
-CONFIG_IMX_SDMA=m
-CONFIG_IMX_DMA=m
-CONFIG_AHCI_IMX=m
-# CONFIG_MXS_DMA is not set
CONFIG_PWM_IMX=m
CONFIG_DRM_IMX=m
CONFIG_DRM_IMX_FB_HELPER=m
CONFIG_DRM_IMX_HDMI=m
-CONFIG_DRM_IMX_IPUV3_CORE=m
+CONFIG_IMX_IPUV3_CORE=m
CONFIG_DRM_IMX_IPUV3=m
CONFIG_DRM_IMX_LDB=m
CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
CONFIG_DRM_IMX_TVE=m
CONFIG_VIDEO_CODA=m
-CONFIG_MFD_SYSCON=y
-CONFIG_GPIO_SYSCON=m
CONFIG_SENSORS_MC13783_ADC=m
CONFIG_REGULATOR_ANATOP=m
CONFIG_REGULATOR_MC13783=m
@@ -464,15 +470,25 @@ CONFIG_REGULATOR_DA9052=m
CONFIG_REGULATOR_DA9055=m
# picoxcell
-CONFIG_CRYPTO_DEV_PICOXCELL=m
-CONFIG_HW_RANDOM_PICOXCELL=m
+# CONFIG_CRYPTO_DEV_PICOXCELL is not set
+
+# Exynos 4
+CONFIG_ARCH_EXYNOS4=y
+CONFIG_SOC_EXYNOS4212=y
+CONFIG_SOC_EXYNOS4412=y
+CONFIG_SOC_EXYNOS4415=y
+CONFIG_ARM_EXYNOS4210_CPUFREQ=y
+CONFIG_ARM_EXYNOS4X12_CPUFREQ=y
+CONFIG_AK8975=m
+CONFIG_CM36651=m
+CONFIG_KEYBOARD_SAMSUNG=m
# ST Ericsson
CONFIG_MACH_HREFV60=y
CONFIG_MACH_SNOWBALL=y
CONFIG_ABX500_CORE=y
-CONFIG_ARM_U8500_CPUIDLE=y
+# CONFIG_ARM_U8500_CPUIDLE is not set
CONFIG_UX500_DEBUG_UART=2
CONFIG_AB8500_CORE=y
CONFIG_STE_DMA40=y
@@ -488,6 +504,8 @@ CONFIG_AHCI_ST=m
CONFIG_INPUT_AB8500_PONKEY=m
CONFIG_REGULATOR_AB8500=y
CONFIG_AB8500_USB=m
+CONFIG_USB_MUSB_UX500=m
+# CONFIG_USB_UX500_DMA is not set
CONFIG_RTC_DRV_AB8500=m
CONFIG_PWM_AB8500=m
CONFIG_SND_SOC_UX500=m
@@ -516,45 +534,19 @@ CONFIG_IIO_ST_SENSORS_I2C=m
CONFIG_IIO_ST_SENSORS_SPI=m
CONFIG_IIO_ST_SENSORS_CORE=m
-# tegra
+# Allwinner
+CONFIG_MACH_SUN4I=y
+CONFIG_MACH_SUN5I=y
+
+# Tegra (non A15)
CONFIG_ARCH_TEGRA_2x_SOC=y
CONFIG_ARCH_TEGRA_3x_SOC=y
-CONFIG_ARCH_TEGRA_114_SOC=y
-CONFIG_ARCH_TEGRA_124_SOC=y
-CONFIG_ARM_TEGRA_CPUFREQ=y
CONFIG_TEGRA20_MC=y
-CONFIG_TEGRA30_MC=y
-CONFIG_TRUSTED_FOUNDATIONS=y
-
-CONFIG_SERIAL_TEGRA=y
-
-CONFIG_PCI_TEGRA=y
CONFIG_TEGRA_IOMMU_GART=y
-CONFIG_TEGRA_IOMMU_SMMU=y
-CONFIG_MMC_SDHCI_TEGRA=m
-CONFIG_TEGRA_WATCHDOG=m
-CONFIG_I2C_TEGRA=m
-
-CONFIG_TEGRA_SYSTEM_DMA=y
-CONFIG_TEGRA_EMC_SCALING_ENABLE=y
-CONFIG_TEGRA_AHB=y
-CONFIG_TEGRA20_APB_DMA=y
-CONFIG_SPI_TEGRA114=m
CONFIG_SPI_TEGRA20_SFLASH=m
CONFIG_SPI_TEGRA20_SLINK=m
-
CONFIG_MFD_MAX8907=m
-CONFIG_KEYBOARD_TEGRA=m
-CONFIG_PINCTRL_TEGRA=y
-CONFIG_PINCTRL_TEGRA20=y
-CONFIG_PINCTRL_TEGRA30=y
-CONFIG_USB_EHCI_TEGRA=m
-CONFIG_RTC_DRV_TEGRA=m
-
-CONFIG_SND_SOC_TEGRA=m
CONFIG_SND_SOC_TEGRA_ALC5632=m
-CONFIG_SND_SOC_TEGRA_MAX98090=m
-CONFIG_SND_SOC_TEGRA_RT5640=m
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
CONFIG_SND_SOC_TEGRA_WM8753=m
CONFIG_SND_SOC_TEGRA_WM8903=m
@@ -562,8 +554,6 @@ CONFIG_SND_SOC_TEGRA_WM9712=m
CONFIG_SND_SOC_TEGRA20_AC97=m
CONFIG_SND_SOC_TEGRA20_DAS=m
CONFIG_SND_SOC_TEGRA20_SPDIF=m
-CONFIG_SND_SOC_TEGRA30_AHUB=m
-CONFIG_SND_SOC_TEGRA30_I2S=m
# AC100 (PAZ00)
CONFIG_MFD_NVEC=y
@@ -571,52 +561,49 @@ CONFIG_MFD_TPS80031=y
CONFIG_KEYBOARD_NVEC=y
CONFIG_SERIO_NVEC_PS2=y
CONFIG_NVEC_POWER=y
-CONFIG_POWER_SUPPLY=y
-CONFIG_NVEC_LEDS=y
CONFIG_NVEC_PAZ00=y
CONFIG_MFD_TPS6586X=y
CONFIG_GPIO_TPS6586X=y
CONFIG_RTC_DRV_TPS6586X=m
-CONFIG_PWM_TEGRA=m
-
-CONFIG_TEGRA_HOST1X=m
-CONFIG_TEGRA_HOST1X_FIREWALL=y
-CONFIG_DRM_TEGRA=m
-CONFIG_DRM_TEGRA_FBDEV=y
-# CONFIG_DRM_TEGRA_DEBUG is not set
-CONFIG_DRM_TEGRA_STAGING=y
-CONFIG_DRM_PANEL=y
-CONFIG_DRM_PANEL_SIMPLE=m
-CONFIG_DRM_PANEL_LD9040=m
-CONFIG_DRM_PANEL_S6E8AA0=m
-
-CONFIG_CRYPTO_DEV_TEGRA_AES=m
-
# OLPC XO
CONFIG_SERIO_OLPC_APSP=m
# Zynq-7xxx
-# likely needs usb still
CONFIG_SERIAL_UARTLITE=y
CONFIG_SERIAL_UARTLITE_CONSOLE=y
CONFIG_SERIAL_XILINX_PS_UART=y
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
CONFIG_COMMON_CLK_AXI_CLKGEN=m
-CONFIG_ARM_ZYNQ_CPUIDLE=y
+CONFIG_COMMON_CLK_SI570=m
+CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
+# CONFIG_ARM_ZYNQ_CPUIDLE is not set
CONFIG_LATTICE_ECP3_CONFIG=m
CONFIG_NET_VENDOR_XILINX=y
CONFIG_XILINX_EMACLITE=m
CONFIG_GPIO_XILINX=y
+CONFIG_GPIO_ZYNQ=m
CONFIG_I2C_XILINX=m
CONFIG_SPI_XILINX=m
+CONFIG_SPI_CADENCE=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
CONFIG_I2C_CADENCE=m
CONFIG_XILINX_WATCHDOG=m
CONFIG_XILINX_XADC=m
+CONFIG_XILINX_VDMA=m
CONFIG_SND_SOC_ADI=m
CONFIG_SND_SOC_ADI_AXI_I2S=m
CONFIG_SND_SOC_ADI_AXI_SPDIF=m
+CONFIG_XILLYBUS=m
+CONFIG_XILLYBUS_PCIE=m
+CONFIG_XILLYBUS_OF=m
+CONFIG_GS_FPGABOOT=m
+CONFIG_USB_GADGET_XILINX=m
+CONFIG_PCIE_XILINX=y
+CONFIG_CADENCE_WATCHDOG=m
+CONFIG_REGULATOR_ISL9305=m
+CONFIG_EDAC_SYNOPSYS=m
+CONFIG_PINCTRL_ZYNQ=y
# Multi function devices
CONFIG_MFD_88PM800=m
@@ -641,43 +628,3 @@ CONFIG_REGULATOR_MAX8649=m
CONFIG_REGULATOR_MAX8660=m
CONFIG_REGULATOR_MAX8907=m
CONFIG_REGULATOR_MAX8952=m
-CONFIG_REGULATOR_MAX8973=m
-
-# Needs work/investigation
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_PID_IN_CONTEXTIDR is not set
-# CONFIG_DEPRECATED_PARAM_STRUCT is not set
-
-# CONFIG_ARM_KPROBES_TEST is not set
-
-# Defined config options we don't use yet
-# CONFIG_PINCTRL_IMX35 is not set
-
-# CONFIG_MFD_SMSC is not set
-# CONFIG_MFD_SEC_CORE is not set
-# CONFIG_MFD_LP8788 is not set
-# CONFIG_MFD_MAX77686 is not set
-# CONFIG_MFD_MAX77693 is not set
-# CONFIG_MFD_MAX8997 is not set
-# CONFIG_MFD_MAX14577 is not set
-# CONFIG_MFD_AAT2870_CORE is not set
-# CONFIG_MFD_RC5T583 is not set
-# CONFIG_MFD_SMSC is not set
-# CONFIG_MFD_AS3711 is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PMIC_ADP5520 is not set
-
-# CONFIG_DVB_USB_PCTV452E is not set
-# We need to fix these as they should be either generic includes or kconfig fixes
-# drivers/input/touchscreen/eeti_ts.c:65:2: error: implicit declaration of function 'irq_to_gpio' [-Werror=implicit-function-declaration]
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_EGALAX is not set
-# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
-
-# CONFIG_POWER_RESET_QNAP is not set
-# CONFIG_OMAP2_DSS_DEBUG is not set
-# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set
-# CONFIG_AB8500_DEBUG is not set
-
-# CONFIG_MMC_TMIO is not set
diff --git a/config-armv7-generic b/config-armv7-generic
index 1b6bea7ad..63efd958e 100644
--- a/config-armv7-generic
+++ b/config-armv7-generic
@@ -2,8 +2,6 @@
# Generic ARM config options
CONFIG_ARM=y
-# CONFIG_ARCH_MULTI_V4 is not set
-# CONFIG_ARCH_MULTI_V4T is not set
# CONFIG_ARCH_MULTI_V6 is not set
CONFIG_ARCH_MULTI_V7=y
@@ -16,7 +14,6 @@ CONFIG_VFP=y
CONFIG_VFPv3=y
CONFIG_NEON=y
CONFIG_IWMMXT=y
-CONFIG_KERNEL_MODE_NEON=y
CONFIG_ARM_UNWIND=y
CONFIG_ARM_THUMB=y
@@ -26,7 +23,6 @@ CONFIG_ARM_CPU_TOPOLOGY=y
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
CONFIG_SWP_EMULATE=y
CONFIG_CACHE_L2X0=y
-CONFIG_CACHE_PL310=y
CONFIG_HIGHPTE=y
CONFIG_AUTO_ZRELADDR=y
CONFIG_ATAGS=y
@@ -35,8 +31,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_ARCH_HAS_TICK_BROADCAST=y
-CONFIG_ALWAYS_USE_PERSISTENT_CLOCK=y
CONFIG_IRQ_CROSSBAR=y
+CONFIG_IOMMU_IO_PGTABLE_LPAE=y
# CONFIG_MCPM is not set
# CONFIG_OABI_COMPAT is not set
@@ -51,22 +47,34 @@ CONFIG_IRQ_CROSSBAR=y
# CONFIG_ARM_VIRT_EXT is not set
# Platforms enabled/disabled globally on ARMv7
+CONFIG_ARCH_EXYNOS=y
CONFIG_ARCH_HIGHBANK=y
+CONFIG_ARCH_ROCKCHIP=y
CONFIG_ARCH_SUNXI=y
-CONFIG_ARCH_VEXPRESS_CA9X4=y
+CONFIG_ARCH_TEGRA=y
CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
-# CONFIG_ARCH_VEXPRESS_SPC is not set
+CONFIG_ARCH_VIRT=y
# CONFIG_ARCH_BCM is not set
+# CONFIG_ARCH_BERLIN is not set
+# CONFIG_ARCH_HI3xxx is not set
+# CONFIG_ARCH_HISI is not set
+# CONFIG_ARCH_MEDIATEK is not set
+# CONFIG_ARCH_MESON is not set
+# CONFIG_ARCH_QCOM is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_SHMOBILE_MULTI is not set
+# CONFIG_ARCH_SIRF is not set
+# CONFIG_ARCH_SOCFPGA is not set
# CONFIG_PLAT_SPEAR is not set
# CONFIG_ARCH_STI is not set
-# CONFIG_ARCH_SIRF is not set
# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_VEXPRESS_SPC is not set
# CONFIG_ARCH_WM8850 is not set
-# CONFIG_ARCH_SHMOBILE_MULTI is not set
-# CONFIG_ARCH_BERLIN is not set
-# CONFIG_ARCH_HI3xxx is not set
-# CONFIG_ARCH_MSM_DT is not set
-# CONFIG_ARCH_QCOM is not set
+# CONFIG_ARCH_DIGICOLOR is not set
+# CONFIG_ARCH_ALPINE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_UNIPHIER is not set
+# CONFIG_ARCH_ZX is not set
# errata
# v5/v6
@@ -102,57 +110,61 @@ CONFIG_PJ4B_ERRATA_4742=y
CONFIG_SMP_ON_UP=y
CONFIG_HIGHMEM=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ARM_MODULE_PLTS is not set
CONFIG_SCHED_MC=y
CONFIG_SCHED_SMT=y
CONFIG_RCU_FANOUT=32
-CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_GOV_LADDER is not set
-CONFIG_CPU_IDLE_GOV_MENU=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
+CONFIG_CHECKPOINT_RESTORE=y
+# Power management / thermal / cpu scaling
+CONFIG_PM_OPP=y
+CONFIG_ARM_CPU_SUSPEND=y
+CONFIG_ARM_PSCI=y
+CONFIG_THERMAL=y
+CONFIG_CLOCK_THERMAL=y
+CONFIG_CPUFREQ_DT=m
# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
+CONFIG_PM_DEVFREQ=y
+CONFIG_PM_DEVFREQ_EVENT=y
+CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
CONFIG_LSM_MMAP_MIN_ADDR=32768
CONFIG_XZ_DEC_ARM=y
-CONFIG_UACCESS_WITH_MEMCPY=y
-CONFIG_CC_STACKPROTECTOR=y
-
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-
-# Root as NFS, different from mainline
-CONFIG_ROOT_NFS=y
+CONFIG_PCI_HOST_GENERIC=y
+# CONFIG_PCI_LAYERSCAPE is not set
+# CONFIG_PCIE_IPROC is not set
+# Do NOT enable this, it breaks stuff and makes things go slow
+# CONFIG_UACCESS_WITH_MEMCPY is not set
CONFIG_LBDAF=y
+# GRR, needed for MFD_AS3722
+CONFIG_I2C=y
+
# Device tree
CONFIG_USE_OF=y
CONFIG_ARM_ATAG_DTB_COMPAT=y
CONFIG_ARM_APPENDED_DTB=y
# General vexpress ARM drivers
-CONFIG_ARM_TIMER_SP804=y
-
CONFIG_SERIO_AMBAKMI=m
CONFIG_SERIAL_AMBA_PL010=y
CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
-CONFIG_SERIAL_8250_DW=y
-CONFIG_SERIAL_MRST_MAX3110=m
CONFIG_RTC_DRV_PL030=y
-CONFIG_RTC_DRV_PL031=y
-
-CONFIG_PL330_DMA=m
CONFIG_AMBA_PL08X=y
-CONFIG_GPIO_PL061=y
-CONFIG_PL320_MBOX=y
+CONFIG_SND_ARMAACI=m
+
+CONFIG_EDAC=y
# highbank
CONFIG_EDAC_HIGHBANK_MC=m
@@ -160,70 +172,321 @@ CONFIG_EDAC_HIGHBANK_L2=m
CONFIG_SATA_HIGHBANK=m
CONFIG_ARM_HIGHBANK_CPUFREQ=m
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
-
-# Allwinner
-CONFIG_PINCTRL_SUNXI=y
+CONFIG_PL320_MBOX=y
+CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=m
+
+# AllWinner
+# CONFIG_MACH_SUN4I is not set
+# CONFIG_MACH_SUN5I is not set
+CONFIG_MACH_SUN6I=y
+CONFIG_MACH_SUN7I=y
+CONFIG_MACH_SUN8I=y
+# CONFIG_MACH_SUN9I is not set
+CONFIG_SUNXI_SRAM=y
+CONFIG_DMA_SUN6I=m
CONFIG_SUNXI_WATCHDOG=m
-CONFIG_MDIO_SUN4I=m
CONFIG_NET_VENDOR_ALLWINNER=y
-CONFIG_SUN4I_EMAC=m
-CONFIG_STMMAC_PLATFORM=y
-CONFIG_DWMAC_SOCFPGA=y
-CONFIG_DWMAC_SUNXI=y
CONFIG_EEPROM_SUNXI_SID=m
CONFIG_RTC_DRV_SUNXI=m
CONFIG_PHY_SUN4I_USB=m
+# CONFIG_PHY_SUN9I_USB is not set
CONFIG_AHCI_SUNXI=m
CONFIG_SPI_SUN4I=m
CONFIG_SPI_SUN6I=m
CONFIG_MMC_SUNXI=m
+CONFIG_I2C_SUN6I_P2WI=m
CONFIG_GPIO_PCA953X=m
-
-CONFIG_REGMAP=y
-CONFIG_REGMAP_I2C=m
+CONFIG_GPIO_PCF857X=m
+CONFIG_TOUCHSCREEN_SUN4I=m
+CONFIG_MFD_AXP20X=y
+CONFIG_REGULATOR_AXP20X=m
+CONFIG_AXP288_FUEL_GAUGE=m
+CONFIG_IR_SUNXI=m
+CONFIG_MDIO_SUN4I=m
+CONFIG_DWMAC_SUNXI=m
+CONFIG_SUN4I_EMAC=m
+CONFIG_RTC_DRV_SUN6I=m
+CONFIG_AXP288_ADC=m
+CONFIG_MTD_NAND_SUNXI=m
+CONFIG_SERIO_SUN4I_PS2=m
+CONFIG_KEYBOARD_SUN4I_LRADC=m
+CONFIG_PWM_SUN4I=m
+
+# Exynos
+CONFIG_ARCH_EXYNOS3=y
+# CONFIG_ARCH_EXYNOS4 is not set
+CONFIG_ARCH_EXYNOS5=y
+CONFIG_SOC_EXYNOS3250=y
+CONFIG_SOC_EXYNOS5250=y
+CONFIG_SOC_EXYNOS5420=y
+CONFIG_SOC_EXYNOS5440=y
+CONFIG_SOC_EXYNOS5260=y
+CONFIG_SOC_EXYNOS5410=y
+CONFIG_SOC_EXYNOS5800=y
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+CONFIG_ARM_EXYNOS_CPUFREQ=m
+CONFIG_ARM_EXYNOS5250_CPUFREQ=y
+CONFIG_ARM_EXYNOS5440_CPUFREQ=m
+CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW=y
+# CONFIG_ARM_EXYNOS_CPUIDLE is not set
+CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m
+# CONFIG_EXYNOS5420_MCPM not set
+CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y
+
+CONFIG_I2C_EXYNOS5=m
+CONFIG_I2C_S3C2410=m
+CONFIG_SPI_S3C64XX=m
+CONFIG_EXYNOS_THERMAL=m
+CONFIG_EXYNOS_ADC=m
+CONFIG_MMC_SDHCI_S3C=m
+CONFIG_MMC_SDHCI_S3C_DMA=y
+CONFIG_MMC_DW_EXYNOS=m
+CONFIG_EXYNOS_IOMMU=y
+CONFIG_PCI_EXYNOS=y
+CONFIG_PHY_EXYNOS5_USBDRD=m
+CONFIG_PHY_SAMSUNG_USB2=m
+CONFIG_USB_EHCI_EXYNOS=m
+CONFIG_USB_OHCI_EXYNOS=m
+CONFIG_USB_DWC3_EXYNOS=m
+CONFIG_PHY_EXYNOS5250_SATA=m
+CONFIG_HW_RANDOM_EXYNOS=m
+CONFIG_CRYPTO_DEV_S5P=m
+CONFIG_PWM_SAMSUNG=m
+CONFIG_S3C2410_WATCHDOG=m
+CONFIG_MFD_SEC_CORE=y
+CONFIG_REGULATOR_S2MPS11=m
+CONFIG_REGULATOR_S5M8767=m
+CONFIG_TCG_TIS_I2C_INFINEON=m
+CONFIG_RTC_DRV_S5M=m
+CONFIG_RTC_DRV_S3C=m
+CONFIG_MFD_WM8994=m
+CONFIG_GPIO_WM8994=m
+CONFIG_REGULATOR_WM8994=m
+
+CONFIG_EXYNOS_VIDEO=y
+CONFIG_EXYNOS_MIPI_DSI=y
+CONFIG_DRM_EXYNOS=m
+CONFIG_DRM_EXYNOS_DP=y
+CONFIG_DRM_EXYNOS_DPI=y
+CONFIG_DRM_EXYNOS_DSI=y
+CONFIG_DRM_EXYNOS_FIMC=y
+CONFIG_DRM_EXYNOS_FIMD=y
+CONFIG_DRM_EXYNOS5433_DECON=y
+CONFIG_DRM_EXYNOS_MIC=y
+CONFIG_DRM_EXYNOS7_DECON=y
+CONFIG_DRM_EXYNOS_G2D=y
+CONFIG_DRM_EXYNOS_GSC=y
+CONFIG_DRM_EXYNOS_HDMI=y
+CONFIG_DRM_EXYNOS_IOMMU=y
+CONFIG_DRM_EXYNOS_IPP=y
+CONFIG_DRM_EXYNOS_ROTATOR=y
+CONFIG_DRM_EXYNOS_VIDI=y
+CONFIG_PHY_EXYNOS_DP_VIDEO=m
+# CONFIG_FB_S3C is not set
+CONFIG_PHY_EXYNOS_MIPI_VIDEO=m
+CONFIG_PHY_EXYNOS_DP_VIDEO=m
+CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=y
+CONFIG_VIDEO_EXYNOS_FIMC_LITE=m
+CONFIG_VIDEO_EXYNOS4_FIMC_IS=m
+CONFIG_VIDEO_EXYNOS4_ISP_DMA_CAPTURE=y
+CONFIG_VIDEO_S5P_FIMC=m
+CONFIG_VIDEO_S5P_MIPI_CSIS=m
+CONFIG_VIDEO_SAMSUNG_S5P_G2D=m
+CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
+CONFIG_VIDEO_SAMSUNG_S5P_MFC=m
+# CONFIG_VIDEO_SAMSUNG_S5P_TV is not set
+CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
+
+CONFIG_SND_SOC_SAMSUNG=m
+CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=m
+CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=m
+CONFIG_SND_SOC_SMDK_WM8994_PCM=m
+CONFIG_SND_SOC_SNOW=m
+CONFIG_SND_SOC_ODROIDX2=m
+# CONFIG_EXYNOS_IOMMU_DEBUG is not set
+# CONFIG_SAMSUNG_PM_DEBUG is not set
+# CONFIG_SAMSUNG_PM_CHECK is not set
+
+# Arndale/Origen
+CONFIG_MFD_MAX8997=y
+CONFIG_MFD_MAX77686=y
+CONFIG_REGULATOR_MAX8997=m
+CONFIG_REGULATOR_MAX77686=m
+CONFIG_REGULATOR_S2MPA01=m
+CONFIG_REGULATOR_S5M8767=m
+CONFIG_COMMON_CLK_MAX77686=m
+CONFIG_COMMON_CLK_MAX77802=m
+CONFIG_COMMON_CLK_S2MPS11=m
+CONFIG_INPUT_MAX8997_HAPTIC=m
+CONFIG_CHARGER_MAX8997=m
+CONFIG_LEDS_MAX8997=m
+CONFIG_RTC_DRV_MAX8997=m
+CONFIG_RTC_DRV_MAX77686=m
+CONFIG_RTC_DRV_MAX77802=m
+CONFIG_RTC_DRV_RK808=m
+CONFIG_EXTCON_MAX8997=m
+
+# Rockchips
+CONFIG_I2C_RK3X=m
+CONFIG_SPI_ROCKCHIP=m
+CONFIG_PWM_ROCKCHIP=m
+CONFIG_ROCKCHIP_SARADC=m
+CONFIG_ROCKCHIP_IODOMAIN=m
+CONFIG_MMC_DW_ROCKCHIP=m
+CONFIG_EMAC_ROCKCHIP=m
+CONFIG_MFD_RK808=m
+CONFIG_COMMON_CLK_RK808=m
+CONFIG_REGULATOR_RK808=m
+CONFIG_RTC_DRV_HYM8563=m
+CONFIG_ROCKCHIP_SARADC=m
+CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_SND_SOC_ROCKCHIP=m
+CONFIG_SND_SOC_ROCKCHIP_I2S=m
+CONFIG_ROCKCHIP_THERMAL=m
+CONFIG_DRM_ROCKCHIP=m
+CONFIG_ROCKCHIP_DW_HDMI=m
+CONFIG_PHY_ROCKCHIP_USB=m
+CONFIG_DWMAC_ROCKCHIP=m
+
+# Tegra
+CONFIG_ARCH_TEGRA_114_SOC=y
+CONFIG_ARCH_TEGRA_124_SOC=y
+CONFIG_ARM_TEGRA_CPUFREQ=y
+CONFIG_TRUSTED_FOUNDATIONS=y
+CONFIG_SERIAL_TEGRA=y
+CONFIG_PCI_TEGRA=y
+CONFIG_AHCI_TEGRA=m
+CONFIG_TEGRA_IOMMU_SMMU=y
+CONFIG_MMC_SDHCI_TEGRA=m
+CONFIG_TEGRA_WATCHDOG=m
+CONFIG_I2C_TEGRA=m
+CONFIG_TEGRA_AHB=y
+CONFIG_TEGRA20_APB_DMA=y
+CONFIG_SPI_TEGRA114=m
+CONFIG_PWM_TEGRA=m
+CONFIG_KEYBOARD_TEGRA=m
+CONFIG_USB_EHCI_TEGRA=m
+CONFIG_RTC_DRV_TEGRA=m
+CONFIG_SND_SOC_TEGRA=m
+CONFIG_SND_SOC_TEGRA_MAX98090=m
+CONFIG_SND_SOC_TEGRA_RT5640=m
+CONFIG_SND_SOC_TEGRA30_AHUB=m
+CONFIG_SND_SOC_TEGRA30_I2S=m
+CONFIG_SND_SOC_TEGRA_RT5677=m
+CONFIG_SND_HDA_TEGRA=m
+CONFIG_TEGRA_HOST1X=m
+CONFIG_TEGRA_HOST1X_FIREWALL=y
+CONFIG_DRM_TEGRA=m
+CONFIG_DRM_TEGRA_FBDEV=y
+# CONFIG_DRM_TEGRA_DEBUG is not set
+CONFIG_DRM_TEGRA_STAGING=y
+CONFIG_NOUVEAU_PLATFORM_DRIVER=y
+CONFIG_AD525X_DPOT=m
+CONFIG_AD525X_DPOT_I2C=m
+CONFIG_AD525X_DPOT_SPI=m
+CONFIG_TEGRA_SOCTHERM=m
+CONFIG_TEGRA_MC=y
+CONFIG_TEGRA124_EMC=y
+CONFIG_ARM_TEGRA_DEVFREQ=m
+
+# Jetson TK1
+CONFIG_PINCTRL_AS3722=y
+CONFIG_POWER_RESET_AS3722=y
+CONFIG_MFD_AS3722=y
+CONFIG_REGULATOR_AS3722=m
+CONFIG_RTC_DRV_AS3722=y
+
+# TI Generic
+CONFIG_TI_SOC_THERMAL=m
+CONFIG_TI_THERMAL=y
+
+# mvebu
+CONFIG_ARCH_MVEBU=y
+CONFIG_MACH_ARMADA_370=y
+CONFIG_MACH_ARMADA_375=y
+CONFIG_MACH_ARMADA_38X=y
+CONFIG_MACH_ARMADA_39X=y
+CONFIG_MACH_ARMADA_XP=y
+CONFIG_MACH_DOVE=y
+
+CONFIG_MVEBU_DEVBUS=y
+CONFIG_PCI_MVEBU=y
+CONFIG_CACHE_TAUROS2=y
+CONFIG_MV_XOR=y
+CONFIG_CRYPTO_DEV_MV_CESA=m
+CONFIG_CRYPTO_DEV_MARVELL_CESA=m
+CONFIG_MV643XX_ETH=m
+CONFIG_PINCTRL_MVEBU=y
+CONFIG_PINCTRL_ARMADA_370=y
+CONFIG_PINCTRL_ARMADA_XP=y
+# CONFIG_ARM_MVEBU_V7_CPUIDLE is not set
+CONFIG_PINCTRL_DOVE=y
+CONFIG_EDAC_MV64X60=m
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_88PM80X=m
+CONFIG_RTC_DRV_ISL12057=m
+CONFIG_RTC_DRV_MV=m
+CONFIG_RTC_DRV_ARMADA38X=m
+CONFIG_MVNETA=m
+CONFIG_GPIO_MVEBU=y
+CONFIG_MVEBU_CLK_CORE=y
+CONFIG_MVEBU_CLK_COREDIV=y
+CONFIG_MMC_MVSDIO=m
+CONFIG_MMC_SDHCI_DOVE=m
+CONFIG_SPI_ORION=m
+CONFIG_USB_MV_UDC=m
+CONFIG_MVEBU_MBUS=y
+CONFIG_USB_XHCI_MVEBU=m
+CONFIG_PHY_MVEBU_SATA=y
+CONFIG_AHCI_MVEBU=m
+CONFIG_ARMADA_THERMAL=m
+CONFIG_DOVE_THERMAL=m
+CONFIG_DRM_ARMADA=m
+CONFIG_ORION_WATCHDOG=m
+CONFIG_SND_KIRKWOOD_SOC=m
+CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m
+CONFIG_USB_EHCI_HCD_ORION=m
+CONFIG_MMC_SDHCI_PXAV3=m
+CONFIG_MVPP2=m
+CONFIG_COMMON_CLK_SI5351=m
+CONFIG_RTC_DRV_ARMADA38X=m
+# CONFIG_CACHE_FEROCEON_L2 is not set
+# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
+
+# DRM panels
+CONFIG_DRM_PANEL=y
+CONFIG_DRM_PANEL_SIMPLE=m
+CONFIG_DRM_PANEL_LD9040=m
+CONFIG_DRM_PANEL_S6E8AA0=m
+CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
+CONFIG_DRM_DW_HDMI=m
+
+# regmap
CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_SPMI=m
CONFIG_REGMAP_MMIO=m
CONFIG_REGMAP_IRQ=y
-# Power management
-CONFIG_PM_OPP=y
-CONFIG_ARM_CPU_SUSPEND=y
-CONFIG_GENERIC_CPUFREQ_CPU0=m
-
# usb
-CONFIG_USB_OHCI_HCD_PLATFORM=m
-CONFIG_USB_EHCI_HCD_PLATFORM=m
-CONFIG_USB_OTG=y
-# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
CONFIG_USB_ULPI=y
CONFIG_AX88796=m
CONFIG_AX88796_93CX6=y
-CONFIG_USB_ISP1760_HCD=m
# usb gadget
+CONFIG_USB_OTG=y
CONFIG_USB_GADGET=m
-CONFIG_USB_GADGET_MUSB_HDRC=m
CONFIG_USB_GADGET_VBUS_DRAW=100
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_MUSB_HDRC=m
CONFIG_USB_MUSB_DUAL_ROLE=y
CONFIG_USB_MUSB_DSPS=m
+# Use PIO on musb as upstream doesn't support multiple DMA engines yet :-/
+CONFIG_MUSB_PIO_ONLY=y
+# CONFIG_USB_MUSB_TUSB6010 is not set
+# CONFIG_USB_MUSB_UX500 is not set
CONFIG_USB_GPIO_VBUS=m
-CONFIG_USB_G_ACM_MS=m
-CONFIG_USB_G_DBGP=m
-CONFIG_USB_G_DBGP_SERIAL=y
-CONFIG_USB_G_MULTI=m
-CONFIG_USB_G_MULTI_CDC=y
-# CONFIG_USB_G_MULTI_RNDIS is not set
-CONFIG_USB_G_NCM=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_USB_ETH_EEM=y
-# CONFIG_USB_ETH_RNDIS is not set
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_USB_GADGET_TARGET=m
-CONFIG_USB_MASS_STORAGE=m
CONFIG_USB_CONFIGFS=m
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_ECM=y
@@ -234,22 +497,25 @@ CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_OBEX=y
# CONFIG_USB_CONFIGFS_RNDIS is not set
CONFIG_USB_CONFIGFS_SERIAL=y
-CONFIG_USB_CONFIGFS_STORAGE=y
# CONFIG_USB_CONFIGFS_F_LB_SS is not set
# CONFIG_USB_CONFIGFS_F_FS is not set
+# CONFIG_USB_CONFIGFS_F_UAC1 is not set
+# CONFIG_USB_CONFIGFS_F_UAC2 is not set
+# CONFIG_USB_CONFIGFS_F_MIDI is not set
+# CONFIG_USB_CONFIGFS_F_HID is not set
+# CONFIG_USB_CONFIGFS_F_UVC is not set
+# CONFIG_USB_CONFIGFS_F_PRINTER is not set
-# CONFIG_MUSB_PIO_ONLY is not set
-# CONFIG_USB_MUSB_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_FUSB300 is not set
-# CONFIG_USB_RENESAS_USBHS is not set
# CONFIG_USB_FOTG210_UDC is not set
# CONFIG_USB_R8A66597 is not set
# CONFIG_USB_PXA27X is not set
# CONFIG_USB_MV_UDC is not set
# CONFIG_USB_MV_U3D is not set
+# CONFIG_USB_BDC_UDC is not set
# CONFIG_USB_M66592 is not set
# CONFIG_USB_AMD5536UDC is not set
# CONFIG_USB_NET2272 is not set
@@ -271,6 +537,15 @@ CONFIG_MFD_TPS65912_SPI=y
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_MC13XXX_SPI is not set
# CONFIG_MFD_PM8921_CORE is not set
+# CONFIG_MFD_DA9052_I2C is not set
+# CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_88PM800 is not set
+# CONFIG_MFD_88PM805 is not set
+# CONFIG_MFD_PALMAS is not set
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_TWL6040_CORE is not set
+#
# Pin stuff
CONFIG_PINMUX=y
@@ -278,23 +553,26 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_SINGLE=y
CONFIG_GENERIC_PINCONF=y
+# CONFIG_PINCTRL_AMD is not set
# CONFIG_PINCTRL_SAMSUNG is not set
-# CONFIG_PINCTRL_EXYNOS4 is not set
-# CONFIG_PINCTRL_CAPRI is not set
# CONFIG_PINCTRL_MSM8X74 is not set
# CONFIG_PINCTRL_BCM281XX is not set
+# CONFIG_PINCTRL_APQ8064 is not set
+# CONFIG_PINCTRL_APQ8084 is not set
+# CONFIG_PINCTRL_IPQ8064 is not set
+# CONFIG_PINCTRL_MSM8960 is not set
+# CONFIG_PINCTRL_MSM8660 is not set
# GPIO
# CONFIG_GPIO_EM is not set
CONFIG_GPIO_74X164=m
-CONFIG_GPIO_ADNP=m
-CONFIG_GPIO_MCP23S08=m
CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_MC33880=m
CONFIG_GPIO_TPS65910=y
CONFIG_GPIO_TPS65912=m
# CONFIG_GPIO_ZEVIO is not set
CONFIG_LEDS_GPIO=m
+CONFIG_LEDS_GPIO_REGISTER=y
CONFIG_MDIO_BUS_MUX=m
CONFIG_MDIO_BUS_MUX_GPIO=m
CONFIG_MDIO_BUS_MUX_MMIOREG=m
@@ -302,7 +580,6 @@ CONFIG_INPUT_GPIO=m
CONFIG_INPUT_GPIO_BEEPER=m
CONFIG_INPUT_GPIO_TILT_POLLED=m
CONFIG_INPUT_MATRIXKMAP=m
-CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_MATRIX=m
# CONFIG_GPIO_RCAR is not set
CONFIG_W1_MASTER_GPIO=m
@@ -318,13 +595,12 @@ CONFIG_SPI_BUTTERFLY=m
CONFIG_SPI_DESIGNWARE=m
CONFIG_SPI_LM70_LLP=m
CONFIG_SPI_OC_TINY=m
-CONFIG_SPI_PL022=m
-CONFIG_SPI_S3C64XX=m
CONFIG_SPI_SC18IS602=m
CONFIG_SPI_TLE62X0=m
CONFIG_SPI_XCOMM=m
-CONFIG_SPI_XILINX=m
# CONFIG_SPI_FSL_SPI is not set
+# CONFIG_SPI_CADENCE is not set
+# CONFIG_SPI_ZYNQMP_GQSPI is not set
CONFIG_NFC_NCI_SPI=y
@@ -334,29 +610,15 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_I2C_MV64XXX=m
# HW crypto and rng
-CONFIG_CRYPTO_SHA1_ARM=m
-CONFIG_CRYPTO_AES_ARM=m
-# CONFIG_CRYPTO_AES_ARM_BS is not set
+# CONFIG_CRYPTO_SHA1_ARM_CE is not set
+# CONFIG_CRYPTO_SHA2_ARM_CE is not set
+# CONFIG_CRYPTO_AES_ARM_CE is not set
+# CONFIG_CRYPTO_GHASH_ARM_CE is not set
# DMA
CONFIG_TI_PRIV_EDMA=y
CONFIG_TI_EDMA=y
-# EDAC
-CONFIG_EDAC=y
-CONFIG_EDAC_MM_EDAC=m
-CONFIG_EDAC_LEGACY_SYSFS=y
-
-# Watchdog
-CONFIG_MPCORE_WATCHDOG=m
-
-# Thermal / powersaving
-CONFIG_THERMAL=y
-CONFIG_ARM_PSCI=y
-
-# Mailbox
-CONFIG_MAILBOX=y
-
# MTD
# CONFIG_MG_DISK is not set
CONFIG_MTD_DATAFLASH=m
@@ -377,6 +639,9 @@ CONFIG_MTD_NAND_PLATFORM=m
CONFIG_MTD_NAND_PXA3xx=m
CONFIG_MTD_NAND_RICOH=m
CONFIG_MTD_NAND_TMIO=m
+# CONFIG_MTD_NAND_BRCMNAND is not set
+CONFIG_MTD_SPI_NOR=m
+# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set
CONFIG_MTD_SPINAND_MT29F=m
CONFIG_MTD_SPINAND_ONDIEECC=y
CONFIG_MTD_SST25L=m
@@ -384,83 +649,10 @@ CONFIG_MTD_ST_SPI_FSM=m
CONFIG_EEPROM_AT25=m
CONFIG_EEPROM_93XX46=m
-# MMC/SD
-CONFIG_MMC_SPI=m
-
-# Designware (used by numerous devices)
-CONFIG_MMC_DW=m
-CONFIG_MMC_DW_PLTFM=m
-CONFIG_MMC_DW_PCI=m
-CONFIG_SPI_DW_MMIO=m
-CONFIG_SPI_DW_PCI=m
-# CONFIG_MMC_DW_SOCFPGA is not set
-# CONFIG_MMC_DW_EXYNOS is not set
-# CONFIG_MMC_DW_IDMAC is not set
-# CONFIG_MMC_DW_K3 is not set
-CONFIG_USB_DWC2=m
-# CONFIG_USB_DWC2_DEBUG is not set
-# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
-CONFIG_USB_DWC3=m
-CONFIG_USB_DWC3_OMAP=m
-CONFIG_USB_DWC3_EXYNOS=m
-CONFIG_USB_DWC3_PCI=m
-# CONFIG_USB_DWC3_DEBUG is not set
-# CONFIG_USB_DWC3_KEYSTONE is not set
-CONFIG_DW_WATCHDOG=m
-CONFIG_PCIE_DW=y
-CONFIG_PCI_EXYNOS=y
-
# Sound
-CONFIG_SND_SOC=m
-CONFIG_SND_SPI=y
CONFIG_SND_ARM=y
-CONFIG_SND_ARMAACI=m
-CONFIG_SND_COMPRESS_OFFLOAD=m
-CONFIG_SND_DESIGNWARE_I2S=m
-CONFIG_SND_DMAENGINE_PCM=m
-CONFIG_SND_JACK=y
-CONFIG_SND_SIMPLE_CARD=m
-CONFIG_SND_SOC_ALL_CODECS=m
-CONFIG_SND_SOC_CACHE_LZO=y
-CONFIG_SND_SOC_DMIC=m
-CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
-# CONFIG_SND_SOC_ADAU1701 is not set
-# CONFIG_SND_SOC_AK4104 is not set
-# CONFIG_SND_SOC_AK4554 is not set
-# CONFIG_SND_SOC_AK4642 is not set
-# CONFIG_SND_SOC_AK5386 is not set
-# CONFIG_SND_SOC_CS42L52 is not set
-# CONFIG_SND_SOC_CS42L73 is not set
-# CONFIG_SND_SOC_CS4270 is not set
-# CONFIG_SND_SOC_CS4271 is not set
-# CONFIG_SND_SOC_CS42XX8_I2C is not set
-# CONFIG_SND_SOC_HDMI_CODEC is not set
-# CONFIG_SND_SOC_PCM1681 is not set
-# CONFIG_SND_SOC_PCM1792A is not set
-# CONFIG_SND_SOC_PCM512x_I2C is not set
-# CONFIG_SND_SOC_PCM512x_SPI is not set
-# CONFIG_SND_SOC_SGTL5000 is not set
-# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
-# CONFIG_SND_SOC_SPDIF is not set
-# CONFIG_SND_SOC_TAS5086 is not set
-# CONFIG_SND_SOC_TLV320AIC3X is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8523 is not set
-# CONFIG_SND_SOC_WM8580 is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8728 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8737 is not set
-# CONFIG_SND_SOC_WM8741 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8770 is not set
-# CONFIG_SND_SOC_WM8776 is not set
-# CONFIG_SND_SOC_WM8804 is not set
-# CONFIG_SND_SOC_WM8903 is not set
-# CONFIG_SND_SOC_WM8962 is not set
-# CONFIG_SND_SOC_TPA6130A2 is not set
-# CONFIG_SND_ATMEL_SOC is not set
+CONFIG_SND_SOC_AC97_BUS=y
+CONFIG_SND_SOC_AC97_CODEC=y
# Displays
CONFIG_BACKLIGHT_TPS65217=m
@@ -479,11 +671,13 @@ CONFIG_RTC_DRV_RX4581=m
CONFIG_RTC_DRV_TPS65910=m
CONFIG_RTC_DRV_TPS80031=m
# CONFIG_RTC_DRV_DS1347 is not set
+# CONFIG_RTC_DRV_DS1343 is not set
+# CONFIG_RTC_DRV_MCP795 is not set
+# CONFIG_RTC_DRV_XGENE is not set
# Regulators
CONFIG_REGULATOR=y
CONFIG_RFKILL_REGULATOR=m
-CONFIG_REGULATOR_DUMMY=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
@@ -514,7 +708,15 @@ CONFIG_REGULATOR_TPS6586X=m
CONFIG_REGULATOR_TPS65910=m
CONFIG_REGULATOR_TPS65912=m
CONFIG_REGULATOR_TPS80031=m
-
+CONFIG_REGULATOR_LTC3589=m
+CONFIG_REGULATOR_ANATOP=m
+CONFIG_REGULATOR_DA9211=m
+CONFIG_REGULATOR_ISL9305=m
+CONFIG_REGULATOR_MAX77802=m
+CONFIG_REGULATOR_PWM=m
+CONFIG_SENSORS_LTC2978_REGULATOR=y
+
+CONFIG_POWER_AVS=y
CONFIG_CHARGER_MANAGER=y
CONFIG_CHARGER_BQ2415X=m
CONFIG_CHARGER_BQ24190=m
@@ -523,6 +725,7 @@ CONFIG_CHARGER_GPIO=m
CONFIG_CHARGER_TPS65090=m
CONFIG_PDA_POWER=m
CONFIG_GENERIC_ADC_BATTERY=m
+CONFIG_BATTERY_SBS=m
# Sensors
CONFIG_TMP006=m
@@ -534,6 +737,8 @@ CONFIG_SENSORS_ADCXX=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_SENSORS_HTU21=m
+CONFIG_SENSORS_ISL29018=m
+CONFIG_SENSORS_ISL29028=m
CONFIG_SENSORS_LIS3_SPI=m
CONFIG_SENSORS_LM70=m
CONFIG_SENSORS_MAX1111=m
@@ -555,17 +760,22 @@ CONFIG_LCD_HX8357=m
CONFIG_INPUT_GP2A=m
CONFIG_INPUT_ARIZONA_HAPTICS=m
CONFIG_INPUT_MC13783_PWRBUTTON=m
-# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set
CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_MC13783=m
CONFIG_TOUCHSCREEN_TSC2005=m
+CONFIG_LEDS_TRIGGER_CPU=y
CONFIG_LEDS_DAC124S085=m
CONFIG_LEDS_PWM=m
+CONFIG_LEDS_SYSCON=y
CONFIG_BMP085_SPI=m
+CONFIG_MFD_SYSCON=y
+CONFIG_GPIO_SYSCON=m
+CONFIG_POWER_RESET_SYSCON=y
+
CONFIG_SRAM=y
# Ethernet
@@ -600,7 +810,6 @@ CONFIG_UBIFS_FS=m
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
-# CONFIG_UBIFS_FS_DEBUG is not set
# Sensors
CONFIG_SENSORS_HTU21=m
@@ -610,59 +819,95 @@ CONFIG_MFD_CROS_EC=m
CONFIG_MFD_CROS_EC_I2C=m
CONFIG_MFD_CROS_EC_SPI=m
CONFIG_KEYBOARD_CROS_EC=m
+CONFIG_I2C_CROS_EC_TUNNEL=m
+CONFIG_SND_SOC_TS3A227E=m
+CONFIG_CROS_EC_CHARDEV=m
+CONFIG_CROS_EC_PROTO=y
+
+# This newly introduced mess needs to be fixed upstream :-(
+CONFIG_STMMAC_PLATFORM=m
+CONFIG_DWMAC_GENERIC=m
+# CONFIG_DWMAC_IPQ806X is not set
+# CONFIG_DWMAC_LPC18XX is not set
+# CONFIG_DWMAC_MESON is not set
+# CONFIG_DWMAC_SOCFPGA is not set
+# CONFIG_DWMAC_STI is not set
+
+CONFIG_R8188EU=m
+
+# CONFIG_88EU_AP_MODE is not set
+
+# CAN drivers
+# CONFIG_CAN_TI_HECC is not set
+# CONFIG_CAN_FLEXCAN is not set
+# CONFIG_CAN_RCAR is not set
+# CONFIG_CAN_MCP251X is not set
-# Should be in generic
-CONFIG_BPF_JIT=y
+# Needs work/investigation
+# CONFIG_ARM_KPROBES_TEST is not set
-# CONFIG_NET_VENDOR_CIRRUS is not set
-# CONFIG_NET_VENDOR_MICROCHIP is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_DRM_EXYNOS is not set
+# HW Enabled in armv7 not lpae
# CONFIG_DRM_TILCDC is not set
# CONFIG_DRM_IMX is not set
+# CONFIG_DRM_STI is not set
# CONFIG_AHCI_IMX is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DM9000 is not set
-# CONFIG_HW_RANDOM_ATMEL is not set
-# CONFIG_HW_RANDOM_EXYNOS is not set
+# CONFIG_IMX_THERMAL is not set
+# CONFIG_TI_DAC7512 is not set
+
+# Not needed on ARMv7
+# CONFIG_PATA_PLATFORM is not set
+# CONFIG_NET_VENDOR_CIRRUS is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_MFD_T7L66XB is not set
# CONFIG_MFD_TC6387XB is not set
-# CONFIG_TI_DAC7512 is not set
# CONFIG_EZX_PCAP is not set
-
-# Needs work/investigation
-# CONFIG_ARM_CHARLCD is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_DM9000 is not set
# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_IP_PNP_RARP is not set
+# CONFIG_SPI_PXA2XX is not set
# CONFIG_DEPRECATED_PARAM_STRUCT is not set
# CONFIG_LATTICE_ECP3_CONFIG is not set
-# CONFIG_M25PXX_USE_FAST_READ is not set
# CONFIG_SERIAL_8250_EM is not set
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX310X is not set
# CONFIG_SERIAL_IFX6X60 is not set
-# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
-# CONFIG_SPI_TOPCLIFF_PCH is not set
-# CONFIG_SPI_PXA2XX is not set
-# CONFIG_SPI_FSL_DSPI is not set
+# CONFIG_SERIAL_BCM63XX is not set
+# CONFIG_SERIAL_STM32 is not set
# CONFIG_FB_XILINX is not set
-# CONFIG_USB_S3C_HSOTG is not set
-
-# these modules all fail with missing __bad_udelay
-# http://www.spinics.net/lists/arm/msg15615.html provides some background
+# CONFIG_USB_GADGET_XILINX is not set
+# CONFIG_BRCMSTB_GISB_ARB is not set
# CONFIG_SUNGEM is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_RADEON is not set
-# CONFIG_DRM_RADEON is not set
# CONFIG_ATM_HE is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SFC is not set
-
-# these all currently fail due to missing symbols __bad_udelay or
-# error: implicit declaration of function ‘iowrite32be’
# CONFIG_SND_ALI5451 is not set
-# CONFIG_DRM_NOUVEAU is not set
# CONFIG_MLX4_EN is not set
+# CONFIG_POWER_RESET_QNAP is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_PINCTRL_IMX35 is not set
+# CONFIG_DVB_USB_PCTV452E is not set
+
+# CONFIG_MFD_LP8788 is not set
+# CONFIG_MFD_MAX77693 is not set
+# CONFIG_MFD_MAX14577 is not set
+# CONFIG_MFD_AAT2870_CORE is not set
+# CONFIG_MFD_RC5T583 is not set
+# CONFIG_MFD_SMSC is not set
+# CONFIG_MFD_AS3711 is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_INPUT_REGULATOR_HAPTIC is not set
+# CONFIG_INPUT_AXP20X_PEK is not set
+# CONFIG_POWER_RESET_BRCMSTB is not set
+# CONFIG_INPUT_TPS65218_PWRBUTTON is not set
+# CONFIG_CLK_QORIQ is not set
+# CONFIG_QORIQ_CPUFREQ is not set
+# CONFIG_QCOM_SPMI_TEMP_ALARM is not set
+# CONFIG_SND_SOC_APQ8016_SBC is not set
+# CONFIG_SND_SOC_TAS571X is not set
+# CONFIG_EXTCON_AXP288 is not set
# Debug options. We need to deal with them at some point like x86
# CONFIG_DEBUG_USER is not set
@@ -670,3 +915,7 @@ CONFIG_BPF_JIT=y
# CONFIG_DEBUG_PINCTRL is not set
# CONFIG_DMADEVICES_VDEBUG is not set
# CONFIG_DMADEVICES_DEBUG is not set
+# CONFIG_OMAP2_DSS_DEBUG is not set
+# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set
+# CONFIG_AB8500_DEBUG is not set
+# CONFIG_ARM_KERNMEM_PERMS is not set
diff --git a/config-armv7-lpae b/config-armv7-lpae
index bc9324fde..5166b6cd4 100644
--- a/config-armv7-lpae
+++ b/config-armv7-lpae
@@ -1,28 +1,25 @@
# ARM A15 lpae unified arch kernel
CONFIG_ARCH_KEYSTONE=y
-CONFIG_ARCH_VIRT=y
-# CONFIG_ARCH_MVEBU is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_ARCH_OMAP3 is not set
# CONFIG_ARCH_OMAP4 is not set
# CONFIG_SOC_OMAP5 is not set
# CONFIG_SOC_AM33XX is not set
-# CONFIG_SND_AM33XX_SOC_EVM is not set
# CONFIG_SOC_AM43XX is not set
# CONFIG_SOC_DRA7XX is not set
-# CONFIG_ARCH_ROCKCHIP is not set
-# CONFIG_ARCH_SOCFPGA is not set
-# CONFIG_ARCH_TEGRA is not set
# CONFIG_ARCH_ZYNQ is not set
+# CONFIG_ARCH_AXXIA is not set
CONFIG_ARM_LPAE=y
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_ARM_VIRT_EXT=y
-CONFIG_VIRTUALIZATION=y
CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
+CONFIG_CMA_SIZE_SEL_MBYTES=y
+CONFIG_CMA_SIZE_MBYTES=64
+
# Cortex-A15
CONFIG_ARM_ERRATA_798181=y
CONFIG_ARM_ERRATA_773022=y
@@ -30,8 +27,6 @@ CONFIG_ARM_ERRATA_773022=y
CONFIG_KVM=y
CONFIG_KVM_ARM_HOST=y
CONFIG_KVM_ARM_MAX_VCPUS=8
-CONFIG_KVM_ARM_VGIC=y
-CONFIG_KVM_ARM_TIMER=y
# CONFIG_XEN is not set
CONFIG_XEN_FBDEV_FRONTEND=y
@@ -52,90 +47,36 @@ CONFIG_XEN_GRANT_DEV_ALLOC=m
CONFIG_XEN_WDT=m
# CONFIG_XEN_BALLOON is not set
-CONFIG_SERIAL_SAMSUNG=y
-CONFIG_SERIAL_SAMSUNG_CONSOLE=y
-# CONFIG_SAMSUNG_PM_DEBUG is not set
-# CONFIG_SAMSUNG_PM_CHECK is not set
-CONFIG_SOC_EXYNOS5250=y
-CONFIG_SOC_EXYNOS5420=y
-CONFIG_SOC_EXYNOS5440=y
-# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS_CPUFREQ is not set
-CONFIG_EXYNOS_THERMAL=m
-CONFIG_PCI_EXYNOS=y
-
-CONFIG_TCG_TIS_I2C_INFINEON=m
-
-# CONFIG_EXYNOS_ATAGS is not set
-CONFIG_PINCTRL_EXYNOS=y
-CONFIG_PINCTRL_EXYNOS5440=y
-CONFIG_EXYNOS_IOMMU=y
-CONFIG_VIDEO_SAMSUNG_S5P_G2D=m
-CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
-CONFIG_VIDEO_SAMSUNG_S5P_MFC=m
-CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
-CONFIG_EXYNOS_VIDEO=y
-CONFIG_EXYNOS_MIPI_DSI=y
-CONFIG_EXYNOS_DP=y
-# CONFIG_EXYNOS_LCD_S6E8AX0 is not set
-CONFIG_DRM_EXYNOS=m
-CONFIG_DRM_EXYNOS_IOMMU=y
-CONFIG_DRM_EXYNOS_DMABUF=y
-CONFIG_DRM_EXYNOS_FIMD=y
-CONFIG_DRM_EXYNOS_HDMI=y
-CONFIG_DRM_EXYNOS_VIDI=y
-CONFIG_DRM_EXYNOS_G2D=y
-CONFIG_DRM_EXYNOS_IPP=y
-CONFIG_DRM_EXYNOS_FIMC=y
-CONFIG_DRM_EXYNOS_ROTATOR=y
-CONFIG_DRM_EXYNOS_GSC=y
-CONFIG_DRM_EXYNOS_DPI=y
-CONFIG_DRM_EXYNOS_DSI=y
-# CONFIG_FB_S3C is not set
-CONFIG_SND_SOC_SAMSUNG=m
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_S5P=m
-CONFIG_USB_OHCI_EXYNOS=y
-CONFIG_PWM_SAMSUNG=m
-CONFIG_SAMSUNG_GPIO_EXTRA=8
-CONFIG_SERIAL_SAMSUNG_CONSOLE=y
-CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=m
-CONFIG_USB_EHCI_S5P=y
-CONFIG_SAMSUNG_USBPHY=m
-CONFIG_SAMSUNG_USB2PHY=m
-CONFIG_SAMSUNG_USB3PHY=m
-CONFIG_MMC_DW_EXYNOS=m
-CONFIG_RTC_DRV_S3C=m
-
# TI Keystone
CONFIG_KEYSTONE_USB_PHY=m
CONFIG_USB_DWC3_KEYSTONE=m
CONFIG_GPIO_DAVINCI=y
-CONFIG_I2C_DAVINCI=m
+# CONFIG_I2C_DAVINCI is not set
CONFIG_TI_AEMIF=m
-# CONFIG_DAVINCI_WATCHDOG is not set
-# CONFIG_SPI_DAVINCI is not set
-# CONFIG_SND_DAVINCI_SOC is not set
-# CONFIG_TI_SOC_THERMAL is not set
-
-# Arndale/Origen
-CONFIG_MFD_MAX8997=y
-CONFIG_MFD_SEC_CORE=y
-CONFIG_REGULATOR_MAX8997=m
-CONFIG_REGULATOR_S5M8767=m
-CONFIG_COMMON_CLK_MAX77686=m
-
-CONFIG_S3C_LOWLEVEL_UART_PORT=1
-# CONFIG_EXYNOS4_SDHCI_CH0_8BIT is not set
-# CONFIG_EXYNOS4_SDHCI_CH2_8BIT is not set
+CONFIG_POWER_RESET_KEYSTONE=y
+CONFIG_DAVINCI_WATCHDOG=m
+CONFIG_SPI_DAVINCI=m
+CONFIG_TI_DAVINCI_MDIO=m
+CONFIG_KEYSTONE_IRQ=m
+CONFIG_PCI_KEYSTONE=y
+CONFIG_MTD_NAND_DAVINCI=m
+CONFIG_GPIO_SYSCON=m
-# CONFIG_S3C_BOOT_ERROR_RESET is not set
-# CONFIG_S3C_BOOT_UART_FORCE_FIFO is not set
-# CONFIG_I2C_S3C2410 is not set
-# CONFIG_S3C2410_WATCHDOG is not set
-# CONFIG_MMC_SDHCI_S3C is not set
-# CONFIG_TEGRA_HOST1X is not set
-# CONFIG_DRM_PANEL_SIMPLE is not set
-# CONFIG_DRM_PANEL_LD9040 is not set
-# CONFIG_DRM_PANEL_S6E8AA0 is not set
+# Tegra (non A15 device options)
+# CONFIG_ARCH_TEGRA_2x_SOC is not set
+# CONFIG_ARCH_TEGRA_3x_SOC is not set
+# CONFIG_TEGRA20_MC is not set
+# CONFIG_TEGRA_IOMMU_GART is not set
+# CONFIG_SPI_TEGRA20_SFLASH is not set
+# CONFIG_SPI_TEGRA20_SLINK is not set
+# CONFIG_MFD_MAX8907 is not set
+# CONFIG_MFD_NVEC is not set
+# CONFIG_SND_SOC_TEGRA_ALC5632 is not set
+# CONFIG_SND_SOC_TEGRA_TRIMSLICE is not set
+# CONFIG_SND_SOC_TEGRA_WM8753 is not set
+# CONFIG_SND_SOC_TEGRA_WM8903 is not set
+# CONFIG_SND_SOC_TEGRA_WM9712 is not set
+# CONFIG_SND_SOC_TEGRA20_AC97 is not set
+# CONFIG_SND_SOC_TEGRA20_DAS is not set
+# CONFIG_SND_SOC_TEGRA20_SPDIF is not set
+# CONFIG_SND_SOC_TEGRA_RT5677 is not set
diff --git a/config-debug b/config-debug
index 6ad71f3f5..cfb1d380b 100644
--- a/config-debug
+++ b/config-debug
@@ -5,7 +5,6 @@ CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
CONFIG_DEBUG_MUTEXES=y
-CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_LOCK_TORTURE_TEST=m
@@ -32,13 +31,14 @@ CONFIG_LOCK_STAT=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_ACPI_DEBUG=y
-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
CONFIG_DEBUG_SG=y
+CONFIG_DEBUG_PI_LIST=y
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_PAGE_OWNER is not set
# CONFIG_DEBUG_PAGEALLOC is not set
-CONFIG_DEBUG_WRITECOUNT=y
CONFIG_DEBUG_OBJECTS=y
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
CONFIG_DEBUG_OBJECTS_FREE=y
@@ -47,13 +47,13 @@ CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_X86_PTDUMP=y
+CONFIG_ARM64_PTDUMP=y
CONFIG_EFI_PGT_DUMP=y
CONFIG_CAN_DEBUG_DEVICES=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_DEBUG_NOTIFIERS=y
@@ -97,10 +97,10 @@ CONFIG_PM_ADVANCED_DEBUG=y
CONFIG_CEPH_LIB_PRETTYDEBUG=y
CONFIG_QUOTA_DEBUG=y
-CONFIG_PCI_DEFAULT_USE_CRS=y
CONFIG_KGDB_KDB=y
CONFIG_KDB_KEYBOARD=y
+CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
@@ -123,6 +123,6 @@ CONFIG_MAC80211_MESSAGE_TRACING=y
CONFIG_EDAC_DEBUG=y
+CONFIG_SPI_DEBUG=y
+
CONFIG_X86_DEBUG_STATIC_CPU_HAS=y
-CONFIG_LATENCYTOP=y
-CONFIG_SCHEDSTATS=y
diff --git a/config-generic b/config-generic
index b7ece128a..bcee79c0c 100644
--- a/config-generic
+++ b/config-generic
@@ -15,7 +15,7 @@ CONFIG_DEFAULT_HOSTNAME="(none)"
#
CONFIG_EXPERIMENTAL=y
CONFIG_HOTPLUG=y
-CONFIG_UEVENT_HELPER_PATH=""
+# CONFIG_UEVENT_HELPER is not set
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
@@ -44,6 +44,7 @@ CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=18
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
# CONFIG_IKCONFIG is not set
# CONFIG_EMBEDDED is not set
# CONFIG_EXPERT is not set
@@ -51,6 +52,7 @@ CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
+CONFIG_BPF_SYSCALL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
@@ -63,9 +65,9 @@ CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_NET_NS=y
CONFIG_USER_NS=y
-# CONFIG_UIDGID_STRICT_TYPE_CHECKS is not set
CONFIG_POSIX_MQUEUE=y
+CONFIG_KDBUS=m
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
@@ -74,10 +76,9 @@ CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_KASAN is not set
# CONFIG_AD525X_DPOT is not set
-# CONFIG_ATMEL_PWM is not set
-# CONFIG_IWMC3200TOP is not set
#
# Loadable module support
@@ -104,8 +105,9 @@ CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not set
CONFIG_PCIE_ECRC=y
CONFIG_PCIEAER_INJECT=m
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_CPCI is not set
CONFIG_HOTPLUG_PCI_PCIE=y
-CONFIG_HOTPLUG_PCI_FAKE=m
# CONFIG_SGI_IOC4 is not set
@@ -130,7 +132,6 @@ CONFIG_SDIO_UART=m
# CONFIG_MMC_TEST is not set
# CONFIG_MMC_DEBUG is not set
# https://lists.fedoraproject.org/pipermail/kernel/2014-February/004889.html
-CONFIG_MMC_UNSAFE_RESUME=y
# CONFIG_MMC_CLKGATE is not set
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
@@ -147,10 +148,14 @@ CONFIG_MMC_CB710=m
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_USHC=m
CONFIG_MMC_REALTEK_PCI=m
+CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_VUB300=m
-# CONFIG_MMC_SDHCI_PXAV2 is not set
-# CONFIG_MMC_SDHCI_PXAV3 is not set
+CONFIG_MMC_TOSHIBA_PCI=m
+CONFIG_MMC_MTK=m
+# CONFIG_MMC_SPI is not set
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
+# CONFIG_MMC_SDHCI_F_SDH30 is not set
+# CONFIG_MMC_USDHI6ROL0 is not set
CONFIG_CB710_CORE=m
@@ -167,7 +172,7 @@ CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USER_ACCESS=m
-# CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING is not set #staging
+CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_IPATH=m
CONFIG_INFINIBAND_ISER=m
CONFIG_INFINIBAND_ISERT=m
@@ -201,21 +206,47 @@ CONFIG_BINFMT_MISC=m
#
# CONFIG_COMMON_CLK_SI5351 is not set
+# CONFIG_COMMON_CLK_CDCE706 is not set
+# CONFIG_COMMON_CLK_PWM is not set
+# CONFIG_COMMON_CLK_CDCE925 is not set
+# CONFIG_COMMON_CLK_HI6220 is not set
+#
#
# Generic Driver Options
#
CONFIG_FW_LOADER=y
+# CONFIG_TEST_FIRMWARE is not set
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
# Give this a try in rawhide for now
# CONFIG_FW_LOADER_USER_HELPER is not set
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
+
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=m
# CONFIG_CMA is not set
# CONFIG_DMA_CMA is not set
+# CONFIG_FENCE_TRACE is not set
# CONFIG_SPI is not set
+# CONFIG_SPI_ALTERA is not set
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_BUTTERFLY is not set
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_LM70_LLP is not set
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PXA2XX is not set
+# CONFIG_SPI_SC18IS602 is not set
+# CONFIG_SPI_TOPCLIFF_PCH is not set
+# CONFIG_SPI_XCOMM is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_SPI_FSL_SPI is not set
# CONFIG_SPMI is not set
@@ -231,7 +262,6 @@ CONFIG_MTD=m
#
# User Modules And Translation Layers
#
-# CONFIG_MTD_CHAR is not set
# CONFIG_MTD_BLKDEVS is not set
# CONFIG_MTD_BLOCK is not set
# CONFIG_MTD_BLOCK_RO is not set
@@ -243,6 +273,7 @@ CONFIG_MTD=m
# CONFIG_SM_FTL is not set
# CONFIG_MTD_OOPS is not set
# CONFIG_MTD_SWAP is not set
+# CONFIG_MTD_PARTITIONED_MASTER is not set
#
# RAM/ROM/Flash chip drivers
@@ -270,6 +301,8 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_TS5500 is not set
# CONFIG_MTD_INTEL_VR_NOR is not set
# CONFIG_MTD_PLATRAM is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_DATAFLASH is not set
# Self-contained MTD device drivers
# CONFIG_MTD_PMC551 is not set
@@ -277,6 +310,7 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set
+# CONFIG_MTD_SPI_NOR is not set
#
# Disk-On-Chip Device Drivers
@@ -284,10 +318,9 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_DOCG3 is not set
# CONFIG_MTD_NAND is not set
# CONFIG_MTD_ONENAND is not set
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
# CONFIG_MTD_NAND_ECC_BCH is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_HISI504 is not set
# CONFIG_MTD_LPDDR is not set
CONFIG_MTD_UBI=m
CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -312,6 +345,12 @@ CONFIG_ACPI_PCI_SLOT=y
CONFIG_HOTPLUG_PCI_ACPI=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+# CONFIG_ACPI_NFIT is not set
+# CONFIG_LIBNVDIMM is not set
+# CONFIG_ND_BLK is not set
+# CONFIG_BTT is not set
+
+
#
# Block devices
#
@@ -341,6 +380,7 @@ CONFIG_BLK_DEV_OSD=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=16384
+CONFIG_BLK_DEV_PMEM=m
CONFIG_BLK_DEV_INITRD=y
CONFIG_BLK_DEV_IO_TRACE=y
@@ -359,30 +399,33 @@ CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_DEV_HD is not set
# CONFIG_BLK_DEV_RSXX is not set
+CONFIG_VIRTUALIZATION=y
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_PCI=m
+CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=m
+CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=m
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
CONFIG_VIRTIO_NET=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_VHOST_NET=m
-CONFIG_TCM_VHOST=m
CONFIG_VHOST_SCSI=m
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
#
# SCSI device support
#
CONFIG_SCSI=y
+# CONFIG_SCSI_MQ_DEFAULT is not set
CONFIG_SCSI_ENCLOSURE=m
CONFIG_SCSI_PROC_FS=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_SCSI_SRP=m
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_ISCI=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -406,15 +449,12 @@ CONFIG_CHR_DEV_SCH=m
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
-CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-CONFIG_SCSI_FC_TGT_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
@@ -433,7 +473,6 @@ CONFIG_SCSI_ACARD=m
CONFIG_SCSI_AACRAID=m
CONFIG_SCSI_AIC7XXX=m
# http://lists.fedoraproject.org/pipermail/kernel/2013-February/004102.html
-# CONFIG_SCSI_AIC7XXX_OLD is not set
CONFIG_AIC7XXX_CMDS_PER_DEVICE=4
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
@@ -493,6 +532,7 @@ CONFIG_SCSI_BUSLOGIC=m
CONFIG_SCSI_INITIO=m
CONFIG_SCSI_FLASHPOINT=y
CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_AM53C974=m
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -513,8 +553,8 @@ CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_QLOGIC_1280=m
CONFIG_SCSI_DC395x=m
# CONFIG_SCSI_NSP32 is not set
+CONFIG_SCSI_WD719X=m
CONFIG_SCSI_DEBUG=m
-CONFIG_SCSI_DC390T=m
CONFIG_SCSI_QLA_FC=m
CONFIG_TCM_QLA2XXX=m
CONFIG_SCSI_QLA_ISCSI=m
@@ -532,6 +572,8 @@ CONFIG_LIBFC=m
CONFIG_LIBFCOE=m
CONFIG_FCOE=m
CONFIG_FCOE_FNIC=m
+CONFIG_SCSI_SNIC=m
+# CONFIG_SCSI_SNIC_DEBUG_FS is not set
CONFIG_ATA=y
CONFIG_ATA_BMDMA=y
@@ -544,13 +586,13 @@ CONFIG_BLK_DEV_SX8=m
CONFIG_PDC_ADMA=m
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=m
+# CONFIG_AHCI_CEVA is not set
CONFIG_SATA_INIC162X=m
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
CONFIG_SATA_PROMISE=m
CONFIG_SATA_QSTOR=m
-# CONFIG_SATA_RCAR is not set
CONFIG_SATA_SIL=m
CONFIG_SATA_SIL24=m
CONFIG_SATA_SIS=m
@@ -623,6 +665,7 @@ CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_FAULTY=m
+# CONFIG_MD_CLUSTER is not set
CONFIG_MD_LINEAR=m
CONFIG_MD_MULTIPATH=m
CONFIG_MD_RAID0=m
@@ -632,12 +675,11 @@ CONFIG_MD_RAID456=m
CONFIG_BCACHE=m
# CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_EDEBUG is not set
# CONFIG_BCACHE_CLOSURES_DEBUG is not set
-# CONFIG_MULTICORE_RAID456 is not set
CONFIG_ASYNC_RAID6_TEST=m
CONFIG_BLK_DEV_DM=y
+# CONFIG_DM_MQ_DEFAULT is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_DEBUG=y
CONFIG_DM_DELAY=m
@@ -647,10 +689,10 @@ CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=m
CONFIG_DM_CACHE=m
CONFIG_DM_CACHE_MQ=m
+CONFIG_DM_CACHE_SMQ=m
CONFIG_DM_CACHE_CLEANER=m
# CONFIG_DM_ERA is not set
# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
-# CONFIG_DM_DEBUG_SPACE_MAPS is not set
CONFIG_DM_UEVENT=y
CONFIG_DM_ZERO=y
CONFIG_DM_LOG_USERSPACE=m
@@ -660,6 +702,7 @@ CONFIG_DM_RAID=m
CONFIG_DM_FLAKEY=m
CONFIG_DM_VERITY=m
CONFIG_DM_SWITCH=m
+CONFIG_DM_LOG_WRITES=m
#
# Fusion MPT device support
@@ -680,10 +723,8 @@ CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_OHCI=m
CONFIG_FIREWIRE_SBP2=m
CONFIG_FIREWIRE_NET=m
-CONFIG_FIREWIRE_OHCI_DEBUG=y
CONFIG_FIREWIRE_NOSY=m
# CONFIG_FIREWIRE_SERIAL is not set
-# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
#
# I2O device support
@@ -700,11 +741,11 @@ CONFIG_FIREWIRE_NOSY=m
#
CONFIG_NET=y
-CONFIG_NET_DMA=y
-
CONFIG_NETLINK_MMAP=y
CONFIG_NETLINK_DIAG=m
+CONFIG_BPF_JIT=y
+
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
@@ -712,6 +753,8 @@ CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_ILLINOIS=m
+CONFIG_TCP_CONG_DCTCP=m
+CONFIG_TCP_CONG_CDG=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_VEGAS=m
@@ -751,15 +794,17 @@ CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
-CONFIG_ARPD=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_FOU=m
+CONFIG_NET_FOU_IP_TUNNELS=y
+CONFIG_GENEVE_CORE=m
+CONFIG_GENEVE=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
-CONFIG_NETPOLL_TRAP=y
CONFIG_NET_POLL_CONTROLLER=y
#
@@ -773,6 +818,7 @@ CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
+CONFIG_IP_VS_FO=m
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
@@ -794,7 +840,6 @@ CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_PE_SIP=m
CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -834,12 +879,12 @@ CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_NF_CONNTRACK=m
+CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_QUEUE_CT=y
CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_TPROXY=m
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_SET=m
CONFIG_NETFILTER_XT_MARK=m
@@ -857,10 +902,13 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_NAT=m
+CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
@@ -951,6 +999,11 @@ CONFIG_NF_CT_NETLINK=m
CONFIG_NF_CT_NETLINK_HELPER=m
CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_LOG_ARP=m
+CONFIG_NF_LOG_IPV4=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_LOG_BRIDGE=m
+
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_RPFILTER=m
@@ -959,18 +1012,15 @@ CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
-CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_IPTABLES=y
@@ -991,20 +1041,19 @@ CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RPFILTER=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_QUEUE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
-CONFIG_IP6_NF_TARGET_LOG=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_NF_NAT_IPV6=m
+CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
# CONFIG_IP6_NF_TARGET_NPT is not set
# nf_tables support
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=m
+CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_EXTHDR=m
CONFIG_NFT_META=m
CONFIG_NFT_CT=m
@@ -1013,12 +1062,19 @@ CONFIG_NFT_HASH=m
CONFIG_NFT_COUNTER=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
+CONFIG_NFT_MASQ=m
+CONFIG_NFT_MASQ_IPV4=m
+CONFIG_NFT_MASQ_IPV6=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REDIR=m
+CONFIG_NFT_REDIR_IPV4=m
+CONFIG_NFT_REDIR_IPV6=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NF_TABLES_IPV4=m
+CONFIG_NF_REJECT_IPV6=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
@@ -1052,8 +1108,9 @@ CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_ULOG=m
CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_NFT_BRIDGE_META=m
+CONFIG_NFT_BRIDGE_REJECT=m
CONFIG_XFRM=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_SUB_POLICY=y
@@ -1077,6 +1134,7 @@ CONFIG_IP_SET_HASH_IPMARK=m
CONFIG_IP_SET_HASH_IPPORT=m
CONFIG_IP_SET_HASH_IPPORTIP=m
CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_MAC=m
CONFIG_IP_SET_HASH_NETPORTNET=m
CONFIG_IP_SET_HASH_NET=m
CONFIG_IP_SET_HASH_NETNET=m
@@ -1089,7 +1147,6 @@ CONFIG_IP_SET_LIST_SET=m
#
CONFIG_IP_SCTP=m
CONFIG_NET_SCTPPROBE=m
-# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
@@ -1108,11 +1165,8 @@ CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-CONFIG_WAN_ROUTER=m
CONFIG_IP_DCCP=m
CONFIG_IP_DCCP_CCID2=m
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
@@ -1125,10 +1179,8 @@ CONFIG_IP_DCCP_CCID3=y
# TIPC Configuration (EXPERIMENTAL)
#
CONFIG_TIPC=m
-CONFIG_TIPC_PORTS=8192
# CONFIG_TIPC_MEDIA_IB is not set
-# CONFIG_TIPC_ADVANCED is not set
-# CONFIG_TIPC_DEBUG is not set
+CONFIG_TIPC_MEDIA_UDP=y
CONFIG_NETLABEL=y
@@ -1155,7 +1207,7 @@ CONFIG_NET_SCH_MULTIQ=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_QFQ=m
CONFIG_NET_SCH_CODEL=m
-CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_NET_SCH_FQ=m
CONFIG_NET_SCH_HHF=m
CONFIG_NET_SCH_PIE=m
@@ -1165,6 +1217,7 @@ CONFIG_NET_CLS_ACT=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_CLS_BPF=m
+CONFIG_NET_CLS_FLOWER=m
CONFIG_NET_CLS_FLOW=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_IND=y
@@ -1183,6 +1236,7 @@ CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_TEXT=m
CONFIG_NET_EMATCH_IPSET=m
+CONFIG_NET_EMATCH_CANID=m
CONFIG_NET_EMATCH_U32=m
CONFIG_NET_ACT_CSUM=m
@@ -1195,6 +1249,9 @@ CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
+CONFIG_NET_ACT_VLAN=m
+CONFIG_NET_ACT_BPF=m
+CONFIG_NET_ACT_CONNMARK=m
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
@@ -1208,6 +1265,7 @@ CONFIG_BATMAN_ADV_MCAST=y
CONFIG_OPENVSWITCH=m
CONFIG_OPENVSWITCH_GRE=y
CONFIG_OPENVSWITCH_VXLAN=y
+CONFIG_OPENVSWITCH_GENEVE=y
CONFIG_VSOCKETS=m
@@ -1236,9 +1294,11 @@ CONFIG_DUMMY=m
CONFIG_BONDING=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
+CONFIG_IPVLAN=m
CONFIG_VXLAN=m
CONFIG_EQUALIZER=m
CONFIG_TUN=m
+# CONFIG_TUN_VNET_CROSS_LE is not set
CONFIG_VETH=m
CONFIG_NLMON=m
@@ -1307,6 +1367,9 @@ CONFIG_ETHERNET=y
CONFIG_NET_VENDOR_ADAPTEC=y
CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_NET_VENDOR_AGERE=y
+CONFIG_ET131X=m
+
CONFIG_NET_VENDOR_ALTEON=y
CONFIG_ACENIC=m
# CONFIG_ACENIC_OMIT_TIGON_I is not set
@@ -1317,9 +1380,12 @@ CONFIG_NET_VENDOR_AMD=y
CONFIG_PCNET32=m
CONFIG_AMD8111_ETH=m
CONFIG_PCMCIA_NMCLAN=m
+# CONFIG_AMD_XGBE is not set
+# CONFIG_AMD_XGBE_PHY is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_ARC_EMAC=m
+# CONFIG_EMAC_ROCKCHIP is not set
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ALX=m
@@ -1328,19 +1394,21 @@ CONFIG_ATL1=m
CONFIG_ATL1C=m
CONFIG_ATL1E=m
CONFIG_NET_CADENCE=y
-CONFIG_ARM_AT91_ETHER=m
CONFIG_MACB=m
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
CONFIG_NET_CALXEDA_XGMAC=m
+# CONFIG_NET_VENDOR_CAVIUM is not set
+
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T3=m
CONFIG_CHELSIO_T4=m
CONFIG_CHELSIO_T4VF=m
+# CONFIG_CHELSIO_T4_DCB is not set
CONFIG_NET_VENDOR_CISCO=y
CONFIG_ENIC=m
@@ -1358,7 +1426,6 @@ CONFIG_TULIP=m
# CONFIG_TULIP_NAPI is not set
# CONFIG_TULIP_MWI is not set
CONFIG_TULIP_MMIO=y
-# CONFIG_NI5010 is not set
CONFIG_DE4X5=m
CONFIG_WINBOND_840=m
CONFIG_DM9102=m
@@ -1366,8 +1433,6 @@ CONFIG_PCMCIA_XIRCOM=m
CONFIG_ULI526X=m
CONFIG_NET_VENDOR_DLINK=y
-CONFIG_DE600=m
-CONFIG_DE620=m
CONFIG_DL2K=m
CONFIG_SUNDANCE=m
# CONFIG_SUNDANCE_MMIO is not set
@@ -1375,14 +1440,17 @@ CONFIG_SUNDANCE=m
CONFIG_NET_VENDOR_EMULEX=y
CONFIG_BE2NET=m
CONFIG_BE2NET_VXLAN=y
+# CONFIG_BE2NET_HWMON is not set
CONFIG_NET_VENDOR_EXAR=y
CONFIG_S2IO=m
CONFIG_VXGE=m
# CONFIG_VXGE_DEBUG_TRACE_ALL is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
# CONFIG_NET_VENDOR_FARADAY is not set
# CONFIG_NET_VENDOR_FUJITSU is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
# CONFIG_NET_VENDOR_HP is not set
CONFIG_NET_VENDOR_INTEL=y
CONFIG_E100=m
@@ -1391,20 +1459,21 @@ CONFIG_E1000E=m
CONFIG_IGB=m
CONFIG_IGB_HWMON=y
CONFIG_IGB_DCA=y
-CONFIG_IGB_PTP=y
CONFIG_IGBVF=m
CONFIG_IXGB=m
CONFIG_IXGBEVF=m
CONFIG_IXGBE=m
CONFIG_IXGBE_DCA=y
CONFIG_IXGBE_DCB=y
+CONFIG_IXGBE_VXLAN=y
CONFIG_IXGBE_HWMON=y
-CONFIG_IXGBE_PTP=y
CONFIG_I40E=m
-# CONFIG_I40E_VXLAN is not set
+CONFIG_I40E_VXLAN=y
# CONFIG_I40E_DCB is not set
-# CONFIG_I40EVF is not set
-
+# CONFIG_I40E_FCOE is not set
+CONFIG_I40EVF=m
+CONFIG_FM10K=m
+# CONFIG_FM10K_VXLAN is not set
# CONFIG_NET_VENDOR_I825XX is not set
CONFIG_NET_VENDOR_MARVELL=y
@@ -1418,8 +1487,11 @@ CONFIG_SKY2=m
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KSZ884X_PCI=m
# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_ENC28J60 is not set
CONFIG_NET_VENDOR_MYRI=y
CONFIG_MYRI10GE=m
CONFIG_MYRI10GE_DCA=y
@@ -1431,7 +1503,6 @@ CONFIG_NS83820=m
CONFIG_NET_VENDOR_8390=y
CONFIG_PCMCIA_AXNET=m
CONFIG_NE2K_PCI=m
-CONFIG_NE3210=m
CONFIG_PCMCIA_PCNET=m
CONFIG_NET_VENDOR_NVIDIA=y
@@ -1439,7 +1510,6 @@ CONFIG_FORCEDETH=m
CONFIG_NET_VENDOR_OKI=y
# CONFIG_PCH_GBE is not set
-# CONFIG_PCH_PTP is not set
CONFIG_NET_PACKET_ENGINE=y
CONFIG_HAMACHI=m
@@ -1451,9 +1521,12 @@ CONFIG_QLCNIC=m
CONFIG_QLCNIC_SRIOV=y
CONFIG_QLCNIC_DCB=y
CONFIG_QLCNIC_VXLAN=y
+CONFIG_QLCNIC_HWMON=y
CONFIG_QLGE=m
CONFIG_NETXEN_NIC=m
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+
CONFIG_NET_VENDOR_REALTEK=y
CONFIG_ATP=m
CONFIG_8139CP=m
@@ -1466,9 +1539,14 @@ CONFIG_R8169=m
CONFIG_SH_ETH=m
+# CONFIG_NET_VENDOR_RENESAS is not set
+
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
+CONFIG_NET_VENDOR_ROCKER=y
+CONFIG_ROCKER=m
+
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SAMSUNG is not set
@@ -1479,7 +1557,6 @@ CONFIG_NET_VENDOR_SIS=y
CONFIG_SIS900=m
CONFIG_SIS190=m
-CONFIG_NET_VENDOR_SMC=y
CONFIG_NET_VENDOR_SMSC=y
CONFIG_PCMCIA_SMC91C92=m
@@ -1491,10 +1568,6 @@ CONFIG_NET_VENDOR_STMICRO=y
CONFIG_STMMAC_ETH=m
# CONFIG_STMMAC_PLATFORM is not set
# CONFIG_STMMAC_PCI is not set
-# CONFIG_STMMAC_DA is not set
-# CONFIG_STMMAC_DUAL_MAC is not set
-# CONFIG_STMMAC_TIMER is not set
-# CONFIG_STMMAC_DEBUG_FS is not set
CONFIG_NET_VENDOR_SUN=y
CONFIG_HAPPYMEAL=m
@@ -1507,6 +1580,7 @@ CONFIG_TEHUTI=m
CONFIG_NET_VENDOR_TI=y
CONFIG_TLAN=m
+# CONFIG_TI_CPSW_ALE is not set
CONFIG_NET_VENDOR_VIA=y
CONFIG_VIA_RHINE=m
@@ -1529,6 +1603,7 @@ CONFIG_DAVICOM_PHY=m
CONFIG_DP83640_PHY=m
CONFIG_FIXED_PHY=y
CONFIG_MDIO_BITBANG=m
+CONFIG_MDIO_BCM_UNIMAC=m
CONFIG_NATIONAL_PHY=m
CONFIG_ICPLUS_PHY=m
CONFIG_BCM63XX_PHY=m
@@ -1542,8 +1617,8 @@ CONFIG_SMSC_PHY=m
CONFIG_STE10XP=m
CONFIG_VITESSE_PHY=m
CONFIG_MICREL_PHY=m
-# CONFIG_OMAP_CONTROL_PHY is not set
-# CONFIG_PHY_SAMSUNG_USB2 is not set
+CONFIG_DP83867_PHY=m
+# CONFIG_MICREL_KS8995MA is not set
CONFIG_MII=m
CONFIG_NET_CORE=y
@@ -1552,10 +1627,6 @@ CONFIG_VORTEX=m
CONFIG_TYPHOON=m
CONFIG_DNET=m
-
-CONFIG_LNE390=m
-CONFIG_ES3210=m
-CONFIG_NET_PCI=y
CONFIG_B44=m
CONFIG_B44_PCI=y
CONFIG_BCMGENET=m
@@ -1564,7 +1635,6 @@ CONFIG_BNX2X=m
CONFIG_BNX2X_SRIOV=y
CONFIG_CNIC=m
CONFIG_FEALNX=m
-CONFIG_NET_POCKET=y
CONFIG_ETHOC=m
#
@@ -1579,6 +1649,7 @@ CONFIG_JME=m
# CONFIG_IP1000 is not set
# CONFIG_MLX4_EN is not set
# CONFIG_MLX4_EN_VXLAN is not set
+# CONFIG_MLX5_CORE is not set
# CONFIG_SFC is not set
# CONFIG_FDDI is not set
@@ -1619,7 +1690,6 @@ CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_NL80211=y
# CONFIG_NL80211_TESTMODE is not set
CONFIG_WIRELESS_EXT=y
-# CONFIG_WIRELESS_EXT_SYSFS is not set
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
@@ -1628,7 +1698,6 @@ CONFIG_LIB80211_CRYPT_TKIP=m
CONFIG_MAC80211=m
CONFIG_MAC80211_RC_MINSTREL=y
-# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel"
CONFIG_MAC80211_MESH=y
@@ -1654,19 +1723,20 @@ CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
# CONFIG_ATH9K_DEBUG is not set
-# CONFIG_ATH9K_MAC_DEBUG is not set
CONFIG_ATH9K_DEBUGFS=y
CONFIG_ATH9K_HTC=m
CONFIG_ATH9K_BTCOEX_SUPPORT=y
# CONFIG_ATH9K_HTC_DEBUGFS is not set
-# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
# CONFIG_ATH9K_STATION_STATISTICS is not set
# CONFIG_ATH9K_WOW is not set
+# CONFIG_ATH9K_DYNACK is not set
+# CONFIG_ATH9K_CHANNEL_CONTEXT is not set
#
CONFIG_ATH10K=m
CONFIG_ATH10K_PCI=m
# CONFIG_ATH10K_DEBUG is not set
# CONFIG_ATH10K_TRACING is not set
+# CONFIG_ATH_TRACEPOINTS is not set
CONFIG_ATH10K_DEBUGFS=y
CONFIG_WCN36XX=m
# CONFIG_WCN36XX_DEBUGFS is not set
@@ -1685,13 +1755,12 @@ CONFIG_B43=m
CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA=y
-# CONFIG_B43_BCMA_EXTRA is not set
CONFIG_B43_BCMA_PIO=y
# CONFIG_B43_DEBUG is not set
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_HT=y
-# CONFIG_B43_FORCE_PIO is not set
+CONFIG_B43_PHY_G=y
CONFIG_B43LEGACY=m
# CONFIG_B43LEGACY_DEBUG is not set
CONFIG_B43LEGACY_DMA=y
@@ -1702,14 +1771,14 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_SDIO=y
-CONFIG_BRCMFMAC_SDIO_OOB=y
CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
# CONFIG_BRCM_TRACING is not set
-# CONFIG_BRCMISCAN is not set
# CONFIG_BRCMDBG is not set
+# CONFIG_SYSTEMPORT is not set
CONFIG_HERMES=m
CONFIG_HERMES_CACHE_FW_ON_INIT=y
-# CONFIG_HERMES_PRISM is not set
+CONFIG_HERMES_PRISM=y
CONFIG_NORTEL_HERMES=m
CONFIG_PCI_HERMES=m
CONFIG_PLX_HERMES=m
@@ -1732,29 +1801,30 @@ CONFIG_LIBERTAS_CS=m
CONFIG_LIBERTAS_SDIO=m
# CONFIG_LIBERTAS_DEBUG is not set
# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_LIBERTAS_SPI is not set
CONFIG_LIBERTAS_MESH=y
+
CONFIG_IWLWIFI=m
CONFIG_IWLDVM=m
CONFIG_IWLMVM=m
# CONFIG_IWLWIFI_BCAST_FILTERING is not set
+# CONFIG_IWLWIFI_UAPSD is not set
CONFIG_IWLWIFI_DEBUG=y
CONFIG_IWLWIFI_DEBUGFS=y
-CONFIG_IWLWIFI_DEVICE_SVTOOL=y
-# CONFIG_IWLWIFI_EXPERIMENTAL_MFP is not set
-CONFIG_IWLWIFI_UCODE16=y
-# CONFIG_IWLWIFI_P2P is not set
+
CONFIG_IWLEGACY=m
CONFIG_IWLEGACY_DEBUG=y
CONFIG_IWLEGACY_DEBUGFS=y
-# CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING is not set
CONFIG_IWL4965=y
CONFIG_IWL3945=m
# CONFIG_IWM is not set
# CONFIG_IWLWIFI_DEBUG_EXPERIMENTAL_UCODE is not set
+
CONFIG_MAC80211_HWSIM=m
CONFIG_P54_COMMON=m
CONFIG_P54_USB=m
CONFIG_P54_PCI=m
+# CONFIG_P54_SPI is not set
CONFIG_MWL8K=m
# CONFIG_PRISM54 is not set
# CONFIG_PCMCIA_WL3501 is not set
@@ -1765,6 +1835,8 @@ CONFIG_RSI_USB=m
CONFIG_RT2X00=m
CONFIG_RT2X00_LIB_DEBUGFS=y
# CONFIG_RT2X00_DEBUG is not set
+CONFIG_WL_MEDIATEK=y
+CONFIG_MT7601U=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
@@ -1795,8 +1867,6 @@ CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
CONFIG_WL12XX=m
-CONFIG_WL12XX_SPI=m
-CONFIG_WL12XX_SDIO=m
CONFIG_WL1251=m
CONFIG_WL1251_SPI=m
@@ -1808,15 +1878,44 @@ CONFIG_RTL8192CE=m
CONFIG_RTL8192SE=m
CONFIG_RTL8192CU=m
CONFIG_RTL8192DE=m
+CONFIG_RTL8192EE=m
CONFIG_RTL8723AE=m
CONFIG_RTL8723BE=m
CONFIG_RTL8188EE=m
+CONFIG_RTL8821AE=m
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
CONFIG_MWIFIEX_PCIE=m
CONFIG_MWIFIEX_USB=m
+CONFIG_IEEE802154=m
+CONFIG_IEEE802154_SOCKET=m
+CONFIG_IEEE802154_6LOWPAN=m
+CONFIG_IEEE802154_DRIVERS=m
+CONFIG_IEEE802154_FAKELB=m
+CONFIG_IEEE802154_CC2520=m
+# CONFIG_IEEE802154_AT86RF230 is not set
+# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_ATUSB is not set
+
+CONFIG_MAC802154=m
+CONFIG_NET_MPLS_GSO=m
+CONFIG_MPLS_ROUTING=m
+
+CONFIG_NET_SWITCHDEV=y
+
+CONFIG_6LOWPAN=m
+CONFIG_6LOWPAN_NHC=m
+CONFIG_6LOWPAN_NHC_DEST=m
+CONFIG_6LOWPAN_NHC_FRAGMENT=m
+CONFIG_6LOWPAN_NHC_HOP=m
+CONFIG_6LOWPAN_NHC_IPV6=m
+CONFIG_6LOWPAN_NHC_MOBILITY=m
+CONFIG_6LOWPAN_NHC_ROUTING=m
+CONFIG_6LOWPAN_NHC_UDP=m
+
+
#
# Token Ring devices
#
@@ -1832,7 +1931,6 @@ CONFIG_NET_FC=y
#
# PCMCIA network device support
#
-CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_FMVJ18X=m
@@ -1844,7 +1942,43 @@ CONFIG_HAMRADIO=y
CONFIG_AX25=m
CONFIG_AX25_DAMA_SLAVE=y
-# CONFIG_CAN is not set
+CONFIG_CAN=m
+CONFIG_CAN_RAW=m
+CONFIG_CAN_BCM=m
+CONFIG_CAN_GW=m
+CONFIG_CAN_VCAN=m
+CONFIG_CAN_SLCAN=m
+CONFIG_CAN_DEV=m
+CONFIG_CAN_CALC_BITTIMING=y
+CONFIG_CAN_LEDS=y
+# CONFIG_CAN_GRCAN is not set
+# CONFIG_CAN_XILINXCAN is not set
+CONFIG_CAN_SJA1000=m
+# CONFIG_CAN_SJA1000_ISA is not set
+CONFIG_CAN_SJA1000_PLATFORM=m
+# CONFIG_CAN_EMS_PCMCIA is not set
+CONFIG_CAN_EMS_PCI=m
+CONFIG_CAN_EMS_USB=m
+# CONFIG_CAN_PEAK_PCMCIA is not set
+CONFIG_CAN_PEAK_PCI=m
+CONFIG_CAN_PEAK_PCIEC=y
+CONFIG_CAN_PEAK_USB=m
+CONFIG_CAN_KVASER_PCI=m
+CONFIG_CAN_KVASER_USB=m
+CONFIG_CAN_PLX_PCI=m
+# CONFIG_CAN_TSCAN1 is not set
+CONFIG_CAN_C_CAN=m
+CONFIG_CAN_C_CAN_PLATFORM=m
+CONFIG_CAN_C_CAN_PCI=m
+CONFIG_CAN_M_CAN=m
+CONFIG_CAN_CC770=m
+# CONFIG_CAN_CC770_ISA is not set
+CONFIG_CAN_CC770_PLATFORM=m
+CONFIG_CAN_ESD_USB2=m
+CONFIG_CAN_GS_USB=m
+CONFIG_CAN_8DEV_USB=m
+CONFIG_CAN_SOFTING=m
+# CONFIG_CAN_SOFTING_CS is not set
CONFIG_NETROM=m
CONFIG_ROSE=m
@@ -1865,7 +1999,6 @@ CONFIG_NFC_DIGITAL=m
CONFIG_NFC_NCI=m
CONFIG_NFC_HCI=m
CONFIG_NFC_SHDLC=y
-CONFIG_NFC_LLCP=y
CONFIG_NFC_SIM=m
CONFIG_NFC_MRVL=m
@@ -1877,6 +2010,15 @@ CONFIG_NFC_PN533=m
CONFIG_NFC_MICROREAD=m
CONFIG_NFC_MICROREAD_I2C=m
CONFIG_NFC_TRF7970A=m
+CONFIG_NFC_ST21NFCA=m
+CONFIG_NFC_ST21NFCA_I2C=m
+# CONFIG_NFC_ST21NFCB is not set
+# CONFIG_NFC_ST21NFCB_I2C is not set
+# CONFIG_NFC_NXP_NCI is not set
+# CONFIG_NFC_NCI_SPI is not set
+# CONFIG_NFC_NCI_UART is not set
+# CONFIG_NFC_ST_NCI is not set
+
#
# IrDA (infrared) support
@@ -1920,8 +2062,11 @@ CONFIG_WINBOND_FIR=m
# Bluetooth support
#
CONFIG_BT=m
-# CONFIG_BT_6LOWPAN is not set
-CONFIG_BT_L2CAP=y
+CONFIG_BT_BREDR=y
+CONFIG_BT_LE=y
+CONFIG_BT_6LOWPAN=m
+# CONFIG_BT_SELFTEST is not set
+# CONFIG_BT_DEBUGFS is not set
CONFIG_BT_SCO=y
CONFIG_BT_CMTP=m
CONFIG_BT_RFCOMM=m
@@ -1937,11 +2082,15 @@ CONFIG_BT_HIDP=m
CONFIG_BT_HCIBTUSB=m
# Disable the BT_HCIUSB driver.
# It sucks more power than BT_HCIBTUSB which has the same functionality.
+CONFIG_BT_HCIBTUSB_BCM=y
+CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_3WIRE=y
+CONFIG_BT_HCIUART_INTEL=y
+CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIDTL1=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBLUECARD=m
@@ -1997,6 +2146,7 @@ CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
CONFIG_ISDN_CAPI_CAPIDRV=m
+# CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE is not set
CONFIG_ISDN_DIVERSION=m
CONFIG_HISAX_EURO=y
@@ -2044,7 +2194,6 @@ CONFIG_HYSDN_CAPI=y
#
CONFIG_ISDN_CAPI=m
# CONFIG_CAPI_TRACE is not set
-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_ISDN_CAPI_CAPI20=m
@@ -2084,6 +2233,7 @@ CONFIG_GIGASET_M105=m
# Input device support
#
CONFIG_INPUT=y
+CONFIG_INPUT_LEDS=y
CONFIG_INPUT_FF_MEMLESS=m
#
@@ -2104,7 +2254,7 @@ CONFIG_TABLET_USB_AIPTEK=m
CONFIG_TABLET_USB_GTCO=m
CONFIG_TABLET_USB_HANWANG=m
CONFIG_TABLET_USB_KBTAB=m
-CONFIG_TABLET_USB_WACOM=m
+CONFIG_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
@@ -2117,6 +2267,9 @@ CONFIG_INPUT_SPARSEKMAP=m
CONFIG_INPUT_CMA3000=m
CONFIG_INPUT_CMA3000_I2C=m
CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
+# CONFIG_INPUT_DRV260X_HAPTICS is not set
+# CONFIG_INPUT_DRV2665_HAPTICS is not set
+# CONFIG_INPUT_DRV2667_HAPTICS is not set
#
# Input I/O drivers
@@ -2167,11 +2320,14 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_TCA8418 is not set
# CONFIG_KEYBOARD_OMAP4 is not set
+# CONFIG_KEYBOARD_CAP11XX is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_PS2_SENTELIC=y
+# Fedora 22 and 23 don't have a new enough xorg-x11-drv-vmmouse. Revisit
+# CONFIG_MOUSE_PS2_VMMOUSE is not set
CONFIG_MOUSE_SERIAL=m
CONFIG_MOUSE_VSXXXAA=m
CONFIG_MOUSE_APPLETOUCH=m
@@ -2179,6 +2335,9 @@ CONFIG_MOUSE_BCM5974=m
CONFIG_MOUSE_SYNAPTICS_I2C=m
CONFIG_MOUSE_SYNAPTICS_USB=m
CONFIG_MOUSE_CYAPA=m
+CONFIG_MOUSE_ELAN_I2C=m
+CONFIG_MOUSE_ELAN_I2C_I2C=y
+CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=m
CONFIG_JOYSTICK_A3D=m
@@ -2221,6 +2380,7 @@ CONFIG_TOUCHSCREEN_DYNAPRO=m
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_EETI=m
CONFIG_TOUCHSCREEN_EGALAX=m
+CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GUNZE=m
@@ -2254,8 +2414,16 @@ CONFIG_TOUCHSCREEN_ATMEL_MXT=m
CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
CONFIG_TOUCHSCREEN_ZFORCE=m
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_TSC2005 is not set
+# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
+# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
+# CONFIG_TOUCHSCREEN_SX8654 is not set
+# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set
CONFIG_INPUT_MISC=y
+CONFIG_INPUT_E3X0_BUTTON=m
CONFIG_INPUT_PCSPKR=m
CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_UINPUT=m
@@ -2292,7 +2460,6 @@ CONFIG_SYNCLINK_GT=m
CONFIG_N_HDLC=m
CONFIG_N_GSM=m
# CONFIG_TRACE_SINK is not set
-# CONFIG_STALDRV is not set
# CONFIG_DUMMY_IRQ is not set
# CONFIG_IBM_ASM is not set
CONFIG_TIFM_CORE=m
@@ -2305,7 +2472,7 @@ CONFIG_TCG_TIS=m
CONFIG_TCG_NSC=m
CONFIG_TCG_ATMEL=m
# CONFIG_TCG_INFINEON is not set
-# CONFIG_TCG_ST33_I2C is not set
+# CONFIG_TCG_TIS_ST33ZP24 is not set
# CONFIG_TCG_XEN is not set
CONFIG_TELCLOCK=m
@@ -2323,7 +2490,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
CONFIG_SERIAL_8250_RSA=y
-# CONFIG_SERIAL_8250_DW is not set
+CONFIG_SERIAL_8250_DW=y
+# CONFIG_SERIAL_8250_INGENIC is not set
CONFIG_CYCLADES=m
# CONFIG_CYZ_INTR is not set
# CONFIG_MOXA_INTELLIO is not set
@@ -2332,7 +2500,7 @@ CONFIG_CYCLADES=m
# CONFIG_RIO is not set
CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_SCCNXP is not set
-# CONFIG_SERIAL_MFD_HSU is not set
+# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
@@ -2349,8 +2517,12 @@ CONFIG_SERIAL_ARC=m
CONFIG_SERIAL_ARC_NR_PORTS=1
# CONFIG_SERIAL_RP2 is not set
# CONFIG_SERIAL_FSL_LPUART is not set
+# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
# CONFIG_SERIAL_ST_ASC is not set
# CONFIG_SERIAL_PCH_UART is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX310X is not set
+# CONFIG_SERIAL_IFX6X60 is not set
CONFIG_UNIX98_PTYS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
@@ -2397,7 +2569,6 @@ CONFIG_I2C_ALGOPCA=m
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_ISCH is not set
# CONFIG_I2C_NFORCE2_S4985 is not set
-# CONFIG_I2C_INTEL_MID is not set
# CONFIG_I2C_EG20T is not set
# CONFIG_I2C_CBUS_GPIO is not set
CONFIG_I2C_VIPERBOARD=m
@@ -2406,6 +2577,8 @@ CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_LEGACY=m
CONFIG_EEPROM_93CX6=m
CONFIG_EEPROM_MAX6875=m
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_93XX46 is not set
CONFIG_I2C_NFORCE2=m
# CONFIG_I2C_OCORES is not set
@@ -2421,12 +2594,15 @@ CONFIG_I2C_PCA_PLATFORM=m
# CONFIG_I2C_SIS96X is not set
CONFIG_I2C_SIMTEC=m
CONFIG_I2C_STUB=m
+CONFIG_I2C_SLAVE=y
+CONFIG_I2C_SLAVE_EEPROM=m
CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_DESIGNWARE is not set
# CONFIG_I2C_XILINX is not set
+# CONFIG_I2C_RK3X is not set
CONFIG_I2C_DIOLAN_U2C=m
@@ -2479,6 +2655,7 @@ CONFIG_SENSORS_K8TEMP=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_LIS3LV02D=m
CONFIG_SENSORS_LIS3_I2C=m
+# CONFIG_SENSORS_LIS3_SPI is not set
CONFIG_SENSORS_LM63=m
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM77=m
@@ -2500,16 +2677,21 @@ CONFIG_SENSORS_MAX6650=m
CONFIG_SENSORS_MAX6697=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_NCT6775=m
+CONFIG_SENSORS_NCT6683=m
+CONFIG_SENSORS_NCT7802=m
+CONFIG_SENSORS_NCT7904=m
CONFIG_SENSORS_NTC_THERMISTOR=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_PC87427=m
CONFIG_SENSORS_PCF8591=m
CONFIG_SENSORS_SHT15=m
+CONFIG_SENSORS_SHTC1=m
CONFIG_SENSORS_SIS5595=m
CONFIG_CHARGER_SMB347=m
CONFIG_SENSORS_SMSC47M1=m
CONFIG_SENSORS_SMSC47M192=m
CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_TC74=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP401=m
CONFIG_APDS9802ALS=m
@@ -2568,6 +2750,15 @@ CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
CONFIG_SENSORS_EMC6W201=m
+CONFIG_SENSORS_TMP103=m
+CONFIG_SENSORS_ADS7871=m
+CONFIG_SENSORS_PWM_FAN=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_ADCXX=m
+CONFIG_SENSORS_MAX1111=m
+CONFIG_SENSORS_POWR1220=m
+CONFIG_SENSORS_AD7314=m
+
CONFIG_PMBUS=m
CONFIG_SENSORS_PMBUS=m
CONFIG_SENSORS_MAX16064=m
@@ -2577,6 +2768,9 @@ CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
+CONFIG_SENSORS_TPS40422=m
+
+# CONFIG_NTB is not set
# Industrial I/O subsystem configuration
CONFIG_IIO=m
@@ -2589,45 +2783,63 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_HID_SENSOR_IIO_COMMON=m
CONFIG_HID_SENSOR_IIO_TRIGGER=m
-CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y
# CONFIG_IIO_SYSFS_TRIGGER is not set
+# CONFIG_IIO_SSP_SENSORHUB is not set
# CONFIG_AD5446 is not set
# CONFIG_AD5380 is not set
# CONFIG_AD5064 is not set
# CONFIG_BMA180 is not set
+# CONFIG_BMC150_ACCEL is not set
# CONFIG_MAX1363 is not set
# CONFIG_MAX517 is not set
+# CONFIG_MAX5821 is not set
# CONFIG_MCP4725 is not set
# CONFIG_ITG3200 is not set
# CONFIG_APDS9300 is not set
-# CONFIG_CM32181 is not set
+CONFIG_BH1750=m
+CONFIG_CM32181=m
+# CONFIG_CM3232 is not set
+# CONFIG_CM3323 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
# CONFIG_TSL2583 is not set
# CONFIG_TSL2x7x is not set
# CONFIG_LTR501 is not set
+CONFIG_STK3310=m
# CONFIG_TCS3472 is not set
# CONFIG_TSL4531 is not set
# CONFIG_NAU7802 is not set
# CONFIG_TI_ADC081C is not set
-# CONFIG_EXYNOS_ADC is not set
+# CONFIG_TI_ADC128S052 is not set
# CONFIG_VIPERBOARD_ADC is not set
# CONFIG_VF610_ADC is not set
-# CONFIG_XILINX_XADC is not set
+# CONFIG_CC10001_ADC is not set
# CONFIG_INV_MPU6050_IIO is not set
CONFIG_IIO_ST_GYRO_3AXIS=m
CONFIG_IIO_ST_MAGN_3AXIS=m
+# CONFIG_BMC150_MAGN is not set
CONFIG_IIO_ST_ACCEL_3AXIS=m
CONFIG_HID_SENSOR_INCLINOMETER_3D=m
+CONFIG_HID_SENSOR_DEVICE_ROTATION=m
+CONFIG_ACPI_ALS=m
# CONFIG_ADJD_S311 is not set
+# CONFIG_AL3320A is not set
# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_SENSORS_HMC5843_I2C is not set
# CONFIG_VCNL4000 is not set
# CONFIG_AK8975 is not set
# CONFIG_MAG3110 is not set
# CONFIG_TMP006 is not set
+# CONFIG_MLX90614 is not set
+# CONFIG_BMP280 is not set
# CONFIG_HID_SENSOR_PRESS is not set
# CONFIG_IIO_ST_PRESS is not set
# CONFIG_KXSD9 is not set
+# CONFIG_MMA8452 is not set
+# CONFIG_MMA9551 is not set
+# CONFIG_MMA9553 is not set
+# CONFIG_STK8312 is not set
+# CONFIG_STK8BA50 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
@@ -2648,18 +2860,34 @@ CONFIG_HID_SENSOR_INCLINOMETER_3D=m
# CONFIG_AD5764 is not set
# CONFIG_AD5791 is not set
# CONFIG_AD7303 is not set
+# CONFIG_M62332 is not set
# CONFIG_AD9523 is not set
# CONFIG_ADF4350 is not set
# CONFIG_ADIS16080 is not set
# CONFIG_ADIS16130 is not set
# CONFIG_ADIS16136 is not set
# CONFIG_ADIS16260 is not set
+# CONFIG_KMX61 is not set
# CONFIG_ADXRS450 is not set
+# CONFIG_BMG160 is not set
# CONFIG_ADIS16400 is not set
# CONFIG_ADIS16480 is not set
# CONFIG_DHT11 is not set
# CONFIG_MPL3115 is not set
+# CONFIG_MS5611 is not set
+# CONFIG_MPL115 is not set
# CONFIG_SI7005 is not set
+# CONFIG_SI7020 is not set
+# CONFIG_AS3935 is not set
+# CONFIG_SX9500 is not set
+CONFIG_KXCJK1013=m
+# CONFIG_ISL29125 is not set
+# CONFIG_JSA1212 is not set
+# CONFIG_TCS3414 is not set
+# CONFIG_AK09911 is not set
+# CONFIG_T5403 is not set
+# CONFIG_MCP4922 is not set
+# CONFIG_MAX1027 is not set
# staging IIO drivers
# CONFIG_AD7291 is not set
@@ -2674,6 +2902,7 @@ CONFIG_HID_SENSOR_INCLINOMETER_3D=m
# CONFIG_SENSORS_ISL29018 is not set
# CONFIG_SENSORS_ISL29028 is not set
# CONFIG_SENSORS_HMC5843 is not set
+# CONFIG_SENSORS_HMC5843_SPI is not set
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
# CONFIG_ADIS16201 is not set
@@ -2688,13 +2917,8 @@ CONFIG_HID_SENSOR_INCLINOMETER_3D=m
# CONFIG_AD7816 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7280 is not set
-# CONFIG_AD5930 is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
-# CONFIG_AD9850 is not set
-# CONFIG_AD9852 is not set
-# CONFIG_AD9910 is not set
-# CONFIG_AD9951 is not set
# CONFIG_ADIS16060 is not set
# CONFIG_ADE7753 is not set
# CONFIG_ADE7754 is not set
@@ -2712,6 +2936,9 @@ CONFIG_HID_SENSOR_INCLINOMETER_3D=m
# CONFIG_PCH_PHUB is not set
# CONFIG_USB_SWITCH_FSA9480 is not set
# CONFIG_SRAM is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_BMP085_SPI is not set
+# CONFIG_LATTICE_ECP3_CONFIG is not set
CONFIG_W1=m
CONFIG_W1_CON=y
@@ -2733,6 +2960,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS28E04=m
CONFIG_W1_SLAVE_BQ27000=m
+CONFIG_W1_SLAVE_DS2406=m
#
# Mice
@@ -2747,6 +2975,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_SI=m
# CONFIG_IPMI_SI_PROBE_DEFAULTS is not set
+CONFIG_IPMI_SSIF=m
CONFIG_IPMI_POWEROFF=m
#
@@ -2789,16 +3018,14 @@ CONFIG_WM8350_WATCHDOG=m
CONFIG_WM831X_WATCHDOG=m
# CONFIG_MAX63XX_WATCHDOG is not set
# CONFIG_DW_WATCHDOG is not set
-CONFIG_W83697UG_WDT=m
# CONFIG_MEN_A21_WDT is not set
# CONFIG_GPIO_WATCHDOG is not set
# CONFIG_XILINX_WATCHDOG is not set
+# CONFIG_CADENCE_WATCHDOG is not set
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
-# CONFIG_HW_RANDOM_ATMEL is not set
-# CONFIG_HW_RANDOM_EXYNOS is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_RTC_DEBUG is not set
@@ -2812,14 +3039,20 @@ CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
CONFIG_RTC_DRV_CMOS=y
+CONFIG_RTC_DRV_ABX80X=m
CONFIG_RTC_DRV_DS1307=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1685_FAMILY=m
+# CONFIG_RTC_DS1685_PROC_REGS is not set
+CONFIG_RTC_DS1685_SYSFS_REGS=y
CONFIG_RTC_DRV_DS1672=m
CONFIG_RTC_DRV_DS1742=m
CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1374_WDT=y
# CONFIG_RTC_DRV_EP93XX is not set
CONFIG_RTC_DRV_FM3130=m
+# CONFIG_RTC_DRV_HYM8563 is not set
CONFIG_RTC_DRV_ISL1208=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -2831,6 +3064,7 @@ CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_RS5C372=m
# CONFIG_RTC_DRV_SA1100 is not set
+# CONFIG_RTC_DRV_SNVS is not set
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF8523=m
@@ -2854,9 +3088,25 @@ CONFIG_RTC_DRV_RV3029C2=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_DS3232=m
CONFIG_RTC_DRV_ISL12022=m
+CONFIG_RTC_DRV_MCP795=m
+CONFIG_RTC_DRV_RX4581=m
+CONFIG_RTC_DRV_PCF2123=m
+CONFIG_RTC_DRV_DS3234=m
+CONFIG_RTC_DRV_RS5C348=m
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_DS1390=m
+CONFIG_RTC_DRV_DS1347=m
+CONFIG_RTC_DRV_DS1343=m
+CONFIG_RTC_DRV_DS1305=m
+CONFIG_RTC_DRV_M41T94=m
+CONFIG_RTC_DRV_M41T93=m
+CONFIG_RTC_DRV_PCF85063=m
# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_ISL12057 is not set
+# CONFIG_RTC_DRV_XGENE is not set
+# CONFIG_RTC_DRV_ABB5ZES3 is not set
CONFIG_R3964=m
# CONFIG_APPLICOM is not set
@@ -2880,7 +3130,6 @@ CONFIG_AGP_EFFICEON=y
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
-# CONFIG_STUB_POULSBO is not set
CONFIG_DRM=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
@@ -2889,8 +3138,11 @@ CONFIG_DRM_CIRRUS_QEMU=m # do not enable on f17 or older
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_R128 is not set
CONFIG_DRM_RADEON=m
-CONFIG_DRM_RADEON_KMS=y
+CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RADEON_UMS is not set
+CONFIG_DRM_AMDGPU=m
+# CONFIG_DRM_AMDGPU_CIK is not set
+CONFIG_DRM_AMDGPU_USERPTR=y
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_MGA is not set
CONFIG_DRM_MGAG200=m # do not enable on f17 or older
@@ -2900,14 +3152,12 @@ CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_I915_FBDEV=y
# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
-# CONFIG_DRM_I915_UMS is not set
CONFIG_DRM_VIA=m
CONFIG_DRM_NOUVEAU=m
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
-CONFIG_DRM_NOUVEAU_DEBUG=y
-# CONFIG_DRM_PSB is not set
+CONFIG_DRM_I2C_ADV7511=m
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -2916,7 +3166,13 @@ CONFIG_DRM_VMWGFX=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_QXL=m
CONFIG_DRM_BOCHS=m
+CONFIG_DRM_VIRTIO_GPU=m
CONFIG_DRM_PTN3460=m
+CONFIG_DRM_PS8622=m
+# CONFIG_DRM_PANEL is not set
+# CONFIG_DRM_PANEL_SIMPLE is not set
+# CONFIG_DRM_PANEL_S6E8AA0 is not set
+CONFIG_DRM_VGEM=m
#
# PCMCIA character devices
@@ -2943,13 +3199,15 @@ CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
+# CONFIG_MEDIA_CONTROLLER_DVB is not set
+# CONFIG_MEDIA_SDR_SUPPORT is not set
CONFIG_VIDEO_DEV=m
# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
CONFIG_VIDEO_V4L2=y
-# CONFIG_VIDEO_V4L2_INT_DEVICE is not set
CONFIG_VIDEO_V4L2_SUBDEV_API=y
+# CONFIG_V4L2_FLASH_LED_CLASS is not set
# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_XILINX is not set
# CONFIG_USB_SI4713 is not set
# CONFIG_PLATFORM_SI4713 is not set
# CONFIG_I2C_SI4713 is not set
@@ -2962,20 +3220,14 @@ CONFIG_VIDEO_V4L2_SUBDEV_API=y
#
# Video Adapters
#
-CONFIG_V4L_USB_DRIVERS=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-CONFIG_V4L_PCI_DRIVERS=y
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_BT848=m
-CONFIG_VIDEO_BT848_DVB=y
-CONFIG_VIDEO_BWQCAM=m
CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_NOON010PC30=m
CONFIG_VIDEO_CAFE_CCIC=m
# CONFIG_VIDEO_CPIA is not set
CONFIG_VIDEO_CPIA2=m
-CONFIG_VIDEO_CQCAM=m
CONFIG_VIDEO_CX23885=m
CONFIG_MEDIA_ALTERA_CI=m
CONFIG_VIDEO_CX18=m
@@ -3002,18 +3254,17 @@ CONFIG_VIDEO_IVTV=m
CONFIG_VIDEO_MEYE=m
CONFIG_VIDEO_MXB=m
CONFIG_VIDEO_PVRUSB2_DVB=y
-# CONFIG_VIDEO_PMS is not set
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_SAA6588=m
CONFIG_VIDEO_SAA7134=m
CONFIG_VIDEO_SAA7134_ALSA=m
CONFIG_VIDEO_SAA7134_DVB=m
CONFIG_VIDEO_SAA7134_RC=y
+CONFIG_VIDEO_SOLO6X10=m
CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STK1160_AC97=y
-CONFIG_VIDEO_W9966=m
CONFIG_VIDEO_ZORAN=m
CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_ZORAN_BUZ=m
@@ -3028,11 +3279,12 @@ CONFIG_VIDEO_SAA7164=m
CONFIG_VIDEO_TM6000=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
-CONFIG_VIDEO_TLG2300=m
# CONFIG_VIDEO_TIMBERDALE is not set
# CONFIG_VIDEO_M5MOLS is not set
-# CONFIG_EXYNOS_VIDEO is not set
+# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_VIVID is not set
CONFIG_VIDEO_USBTV=m
+# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
@@ -3050,14 +3302,11 @@ CONFIG_MEDIA_ATTACH=y
#
# V4L/DVB tuners
-# Selected automatically by not setting CONFIG_MEDIA_TUNER_CUSTOMISE
#
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
#
# Digital Video Broadcasting Devices
#
-CONFIG_DVB_CAPTURE_DRIVERS=y
CONFIG_DVB_CORE=m
CONFIG_DVB_NET=y
CONFIG_DVB_MAX_ADAPTERS=8
@@ -3065,9 +3314,7 @@ CONFIG_DVB_DYNAMIC_MINORS=y
#
# DVB frontends
-# Selected automatically by not setting CONFIG_DVB_FE_CUSTOMISE
#
-# CONFIG_DVB_FE_CUSTOMISE is not set
#
# Supported DVB bridge Modules
@@ -3075,6 +3322,7 @@ CONFIG_DVB_DYNAMIC_MINORS=y
CONFIG_DVB_BT8XX=m
CONFIG_DVB_BUDGET_CORE=m
CONFIG_DVB_PLUTO2=m
+# CONFIG_DVB_PT3 is not set
CONFIG_SMS_SIANO_MDTV=m
CONFIG_SMS_SIANO_RC=y
# CONFIG_SMS_SIANO_DEBUGFS is not set
@@ -3089,12 +3337,12 @@ CONFIG_DVB_USB_DW2102=m
CONFIG_DVB_USB_FRIIO=m
CONFIG_DVB_USB_EC168=m
CONFIG_DVB_USB_PCTV452E=m
-CONFIG_DVB_USB_IT913X=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_DM1105=m
CONFIG_DVB_FIREDTV=m
CONFIG_DVB_NGENE=m
CONFIG_DVB_DDBRIDGE=m
+CONFIG_DVB_SMIPCIE=m
CONFIG_DVB_USB_TECHNISAT_USB2=m
CONFIG_DVB_USB_V2=m
@@ -3143,6 +3391,7 @@ CONFIG_DVB_USB_AZ6007=m
CONFIG_DVB_USB_LME2510=m
CONFIG_DVB_USB_RTL28XXU=m
CONFIG_DVB_USB_AF9035=m
+CONFIG_DVB_USB_DVBSKY=m
CONFIG_DVB_PT1=m
@@ -3153,7 +3402,6 @@ CONFIG_DVB_HOPPER=m
CONFIG_VIDEO_SAA7146=m
CONFIG_VIDEO_SAA7146_VV=m
CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BTCX=m
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
@@ -3170,7 +3418,6 @@ CONFIG_IR_RC5_DECODER=m
CONFIG_IR_RC6_DECODER=m
CONFIG_IR_JVC_DECODER=m
CONFIG_IR_SONY_DECODER=m
-CONFIG_IR_RC5_SZ_DECODER=m
CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
@@ -3185,9 +3432,12 @@ CONFIG_IR_REDRAT3=m
CONFIG_IR_ENE=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_WINBOND_CIR=m
+CONFIG_IR_IGORPLUGUSB=m
CONFIG_IR_IGUANA=m
CONFIG_IR_TTUSBIR=m
CONFIG_IR_GPIO_CIR=m
+CONFIG_IR_XMP_DECODER=m
+CONFIG_IR_HIX5HD2=m
CONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
@@ -3195,19 +3445,14 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_VIDEO_RENESAS_VSP1 is not set
# CONFIG_V4L_TEST_DRIVERS is not set
-# CONFIG_VIDEO_MEM2MEM_TESTDEV is not set
-
#
# Broadcom Crystal HD video decoder driver
#
-CONFIG_CRYSTALHD=m
#
# Graphics support
#
-CONFIG_DISPLAY_SUPPORT=m
-CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
# CONFIG_FB_FOREIGN_ENDIAN is not set
@@ -3291,6 +3536,8 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
CONFIG_DUMMY_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=80
+CONFIG_DUMMY_CONSOLE_ROWS=25
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
@@ -3316,10 +3563,12 @@ CONFIG_SND=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
# CONFIG_SND_DEBUG_VERBOSE is not set
CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_SEQUENCER=y
+CONFIG_SND_COMPRESS_OFFLOAD=m
CONFIG_SND_HRTIMER=y
+CONFIG_SND_JACK=y
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
CONFIG_SND_OSSEMUL=y
@@ -3330,6 +3579,7 @@ CONFIG_SND_RTCTIMER=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_SPI is not set
#
# Generic devices
@@ -3390,7 +3640,6 @@ CONFIG_SND_HDA_INPUT_JACK=y
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
@@ -3449,6 +3698,11 @@ CONFIG_SND_USB_US122L=m
CONFIG_SND_USB_UA101=m
CONFIG_SND_USB_6FIRE=m
CONFIG_SND_USB_HIFACE=m
+# CONFIG_SND_BCD2000 is not set
+CONFIG_SND_USB_POD=m
+CONFIG_SND_USB_PODHD=m
+CONFIG_SND_USB_TONEPORT=m
+CONFIG_SND_USB_VARIAX=m
#
# PCMCIA devices
@@ -3456,10 +3710,12 @@ CONFIG_SND_USB_HIFACE=m
# CONFIG_SND_PCMCIA is not set
CONFIG_SND_FIREWIRE=y
-CONFIG_SND_FIREWIRE_SPEAKERS=m
CONFIG_SND_ISIGHT=m
CONFIG_SND_SCS1X=m
CONFIG_SND_DICE=m
+CONFIG_SND_OXFW=m
+CONFIG_SND_FIREWORKS=m
+CONFIG_SND_BEBOB=m
#
# Open Sound System
@@ -3474,7 +3730,6 @@ CONFIG_USB_SUPPORT=y
# CONFIG_USB_DEBUG is not set
# DEPRECATED: See bug 362221. Fix udev.
-# CONFIG_USB_DEVICE_CLASS is not set
#
@@ -3482,11 +3737,9 @@ CONFIG_USB_SUPPORT=y
#
# Deprecated.
-# CONFIG_USB_DEVICEFS is not set
CONFIG_USB_DEFAULT_PERSIST=y
# CONFIG_USB_DYNAMIC_MINORS is not set
-CONFIG_USB_SUSPEND=y
#
# USB Host Controller Drivers
@@ -3497,7 +3750,7 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y
# CONFIG_USB_EHCI_MV is not set
# CONFIG_USB_EHCI_HCD_PLATFORM is not set
# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1760 is not set
CONFIG_USB_ISP1362_HCD=m
CONFIG_USB_FUSBH200_HCD=m
# CONFIG_USB_FOTG210_HCD is not set
@@ -3513,7 +3766,7 @@ CONFIG_USB_SL811_HCD_ISO=y
# CONFIG_USB_SL811_CS is not set
# CONFIG_USB_R8A66597_HCD is not set
CONFIG_USB_XHCI_HCD=y
-# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
+# CONFIG_USB_MAX3421_HCD is not set
#
# USB Device Class drivers
@@ -3540,7 +3793,6 @@ CONFIG_USB_STORAGE_KARMA=m
CONFIG_USB_STORAGE_REALTEK=m
CONFIG_REALTEK_AUTOPM=y
CONFIG_USB_STORAGE_ENE_UB6250=m
-# CONFIG_USB_LIBUSUAL is not set
CONFIG_USB_UAS=m
@@ -3549,7 +3801,6 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_HID=y
-CONFIG_HID_SUPPORT=y
CONFIG_HID=y
CONFIG_I2C_HID=m
@@ -3558,40 +3809,46 @@ CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=m
CONFIG_HID_PID=y
+CONFIG_HID_LOGITECH=m
CONFIG_LOGITECH_FF=y
CONFIG_HID_LOGITECH_DJ=m
-CONFIG_LOGIWII_FF=y
+CONFIG_HID_LOGITECH_HIDPP=m
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_PANTHERLORD_FF=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_WACOM=m
-CONFIG_HID_WACOM_POWER_SUPPLY=y
CONFIG_ZEROPLUS_FF=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_IDMOUSE=m
+CONFIG_HID_CYPRESS=m
CONFIG_DRAGONRISE_FF=y
CONFIG_GREENASIA_FF=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
CONFIG_HID_MULTITOUCH=m
CONFIG_HID_NTRIG=y
-CONFIG_HID_QUANTA=y
+CONFIG_HID_PLANTRONICS=m
CONFIG_HID_PRIMAX=m
-CONFIG_HID_PS3REMOTE=m
+CONFIG_HID_BETOP_FF=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
CONFIG_HID_PRODIKEYS=m
CONFIG_HID_DRAGONRISE=m
CONFIG_HID_GYRATION=m
CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
+CONFIG_HID_KENSINGTON=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
+CONFIG_HID_PENMOUNT=m
CONFIG_HID_PETALYNX=m
CONFIG_HID_PICOLCD=m
CONFIG_HID_RMI=m
CONFIG_HID_ROCCAT=m
-CONFIG_HID_ROCCAT_KONE=m
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SONY=m
CONFIG_SONY_FF=y
@@ -3608,37 +3865,37 @@ CONFIG_HID_ZYDACRON=m
CONFIG_HID_SENSOR_HUB=m
CONFIG_HID_SENSOR_GYRO_3D=m
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
+# CONFIG_MMC35240 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
CONFIG_HID_SENSOR_ACCEL_3D=m
+# CONFIG_HID_SENSOR_CUSTOM_SENSOR is not set
CONFIG_HID_EMS_FF=m
CONFIG_HID_ELECOM=m
CONFIG_HID_ELO=m
+CONFIG_HID_EZKEY=m
CONFIG_HID_UCLOGIC=m
CONFIG_HID_WALTOP=m
-CONFIG_HID_ROCCAT_PYRA=m
-CONFIG_HID_ROCCAT_KONEPLUS=m
CONFIG_HID_ACRUX=m
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
-CONFIG_HID_ROCCAT_ARVO=m
-CONFIG_HID_ROCCAT_ISKU=m
-CONFIG_HID_ROCCAT_KOVAPLUS=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
-CONFIG_HID_HUION=m
+CONFIG_HID_GT683R=m
CONFIG_HID_SPEEDLINK=m
CONFIG_HID_WIIMOTE=m
-CONFIG_HID_WIIMOTE_EXT=y
CONFIG_HID_KYE=m
CONFIG_HID_SAITEK=m
CONFIG_HID_TIVO=m
CONFIG_HID_GENERIC=y
CONFIG_HID_AUREAL=m
+CONFIG_HID_A4TECH=m
+CONFIG_HID_APPLE=m
+CONFIG_HID_BELKIN=m
CONFIG_HID_APPLEIR=m
# CONFIG_HID_CP2112 is not set
+CONFIG_HID_LENOVO=m
#
@@ -3652,7 +3909,6 @@ CONFIG_USB_MICROTEK=m
#
CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
CONFIG_USB_M5602=m
CONFIG_USB_STV06XX=m
CONFIG_USB_GSPCA=m
@@ -3660,6 +3916,7 @@ CONFIG_USB_GSPCA_MR97310A=m
CONFIG_USB_GSPCA_BENQ=m
CONFIG_USB_GSPCA_CONEX=m
CONFIG_USB_GSPCA_CPIA1=m
+CONFIG_USB_GSPCA_DTCS033=m
CONFIG_USB_GSPCA_ETOMS=m
CONFIG_USB_GSPCA_FINEPIX=m
CONFIG_USB_GSPCA_MARS=m
@@ -3701,17 +3958,19 @@ CONFIG_USB_GSPCA_NW80X=m
CONFIG_USB_GSPCA_VICAM=m
CONFIG_USB_GSPCA_KINECT=m
CONFIG_USB_GSPCA_SE401=m
+CONFIG_USB_GSPCA_TOUPTEK=m
CONFIG_USB_S2255=m
# CONFIG_VIDEO_SH_MOBILE_CEU is not set
# CONFIG_VIDEO_SH_MOBILE_CSI2 is not set
-# CONFIG_USB_SN9C102 is not set
CONFIG_USB_ZR364XX=m
# CONFIG_SOC_CAMERA is not set
+# CONFIG_SOC_TI is not set
#
# USB Network adaptors
#
+CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_CATC=m
CONFIG_USB_HSO=m
CONFIG_USB_KAWETH=m
@@ -3785,9 +4044,7 @@ CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_EMPEG=m
# CONFIG_USB_SERIAL_F81232 is not set
CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_HP4X=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_IR=m
@@ -3812,11 +4069,8 @@ CONFIG_USB_SERIAL_MCT_U232=m
# CONFIG_USB_SERIAL_METRO is not set
CONFIG_USB_SERIAL_MOS7720=m
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
-# CONFIG_USB_SERIAL_ZIO is not set
# CONFIG_USB_SERIAL_WISHBONE is not set
-# CONFIG_USB_SERIAL_ZTE is not set
CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
# CONFIG_USB_SERIAL_MXUPORT is not set
CONFIG_USB_SERIAL_NAVMAN=m
CONFIG_USB_SERIAL_OPTION=m
@@ -3824,24 +4078,19 @@ CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_QUATECH2 is not set
CONFIG_USB_SERIAL_SAFE=m
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_QCAUX=m
-CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
CONFIG_USB_SERIAL_XSENS_MT=m
CONFIG_USB_SERIAL_DEBUG=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_QT2=m
-CONFIG_USB_SERIAL_FLASHLOADER=m
-CONFIG_USB_SERIAL_SUUNTO=m
CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_EZUSB=y
@@ -3862,14 +4111,16 @@ CONFIG_USB_APPLEDISPLAY=m
# Physical Layer USB driver
CONFIG_USB_PHY=y
# CONFIG_USB_OTG_FSM is not set
+CONFIG_USB_ULPI_BUS=m
# CONFIG_GENERIC_PHY is not set
-# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
-# CONFIG_PHY_EXYNOS_DP_VIDEO is not set
+# CONFIG_PHY_ST_SPEAR1310_MIPHY is not set
+# CONFIG_PHY_ST_SPEAR1340_MIPHY is not set
+# CONFIG_PHY_PXA_28NM_HSIC is not set
+# CONFIG_PHY_PXA_28NM_USB2 is not set
+# CONFIG_PHY_TUSB1210 is not set
# CONFIG_AM335X_PHY_USB is not set
# CONFIG_SAMSUNG_USBPHY is not set
-# CONFIG_SAMSUNG_USB2PHY is not set
-# CONFIG_SAMSUNG_USB3PHY is not set
# CONFIG_BCM_KONA_USB2_PHY is not set
# CONFIG_USB_RCAR_PHY is not set
CONFIG_USB_ATM=m
@@ -3877,10 +4128,7 @@ CONFIG_USB_CXACRU=m
# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_CYTHERM is not set
CONFIG_USB_EMI26=m
-CONFIG_USB_ETH=m
CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
# CONFIG_USB_GADGET is not set
# CONFIG_USB_DWC3 is not set
# CONFIG_USB_GADGETFS is not set
@@ -3890,6 +4138,8 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+# CONFIG_USB_LINK_LAYER_TEST is not set
+CONFIG_USB_CHAOSKEY=m
CONFIG_USB_LCD=m
CONFIG_USB_LD=m
CONFIG_USB_LEGOTOWER=m
@@ -3915,15 +4165,14 @@ CONFIG_USB_TRANCEVIBRATOR=m
CONFIG_USB_U132_HCD=m
CONFIG_USB_UEAGLEATM=m
CONFIG_USB_XUSBATM=m
-CONFIG_USB_ZERO=m
# CONFIG_USB_DWC2 is not set
-
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-
# CONFIG_USB_ISP1301 is not set
-
# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+CONFIG_USB_LED_TRIG=y
+
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
# Sonics Silicon Backplane
@@ -3945,11 +4194,13 @@ CONFIG_PCF50633_GPIO=m
CONFIG_INPUT_PCF50633_PMU=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
-CONFIG_MFD_SUPPORT=y
+CONFIG_MFD_CORE=m
+
CONFIG_MFD_VX855=m
CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
CONFIG_MFD_RTSX_PCI=m
+CONFIG_MFD_RTSX_USB=m
# CONFIG_MFD_TI_AM335X_TSCADC is not set
CONFIG_MFD_VIPERBOARD=m
# CONFIG_MFD_RETU is not set
@@ -3978,6 +4229,7 @@ CONFIG_MFD_VIPERBOARD=m
# CONFIG_MFD_CS5535 is not set
# CONFIG_MFD_STMPE is not set
# CONFIG_MFD_MAX8998 is not set
+# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_TPS6586X is not set
# CONFIG_MFD_TC3589X is not set
# CONFIG_MFD_WL1273_CORE is not set
@@ -3991,10 +4243,26 @@ CONFIG_MFD_VIPERBOARD=m
# CONFIG_MFD_TPS65912 is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_DA9063 is not set
+# CONFIG_MFD_DLN2 is not set
# CONFIG_MFD_LP3943 is not set
+# CONFIG_MFD_ATMEL_HLCDC is not set
# CONFIG_MFD_BCM590XX is not set
-# CONFIG_MFD_RTSX_USB is not set
# CONFIG_MFD_TPS65218 is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_ARIZONA_SPI is not set
+# CONFIG_MFD_TPS65912_SPI is not set
+# CONFIG_MFD_MC13XXX_SPI is not set
+# CONFIG_MFD_DA9052_SPI is not set
+# CONFIG_MFD_MENF21BMC is not set
+# CONFIG_MFD_HI6421_PMIC is not set
+# CONFIG_MFD_RK808 is not set
+# CONFIG_MFD_RN5T618 is not set
+# CONFIG_MFD_DA9150 is not set
+# CONFIG_MFD_RT5033 is not set
+# CONFIG_MFD_SKY81452 is not set
+# CONFIG_MFD_MAX77843 is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_INTEL_SOC_PMIC is not set
#
@@ -4007,9 +4275,9 @@ CONFIG_MISC_FILESYSTEMS=y
# CONFIG_EXT3_FS is not set
CONFIG_EXT4_FS=y
CONFIG_EXT4_USE_FOR_EXT23=y
-CONFIG_EXT4_FS_XATTR=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
+# CONFIG_EXT4_ENCRYPTION is not set
CONFIG_JBD2=y
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=m
@@ -4043,6 +4311,7 @@ CONFIG_AUTOFS4_FS=y
# CONFIG_EXOFS_FS is not set
# CONFIG_EXOFS_DEBUG is not set
CONFIG_NILFS2_FS=m
+# CONFIG_FS_DAX is not set
# CONFIG_LOGFS is not set
CONFIG_CEPH_FS=m
CONFIG_CEPH_FSCACHE=y
@@ -4085,6 +4354,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
+CONFIG_PROC_CHILDREN=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
@@ -4112,6 +4382,7 @@ CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZLIB=y
# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
@@ -4129,9 +4400,17 @@ CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
CONFIG_FUSE_FS=m
+CONFIG_OVERLAY_FS=m
# CONFIG_OMFS_FS is not set
CONFIG_CUSE=m
-# CONFIG_F2FS_FS is not set
+CONFIG_F2FS_FS=m
+CONFIG_F2FS_STAT_FS=y
+CONFIG_F2FS_FS_XATTR=y
+CONFIG_F2FS_FS_POSIX_ACL=y
+CONFIG_F2FS_FS_SECURITY=y
+# CONFIG_F2FS_CHECK_FS is not set
+# CONFIG_F2FS_IO_TRACE is not set
+# CONFIG_F2FS_FS_ENCRYPTION is not set
#
# Network File Systems
@@ -4151,6 +4430,7 @@ CONFIG_NFSD=m
CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
+CONFIG_NFSD_PNFS=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
CONFIG_NFS_FSCACHE=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
@@ -4161,14 +4441,14 @@ CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
-CONFIG_SUNRPC_XPRT_RDMA_CLIENT=m
-# CONFIG_SUNRPC_XPRT_RDMA_SERVER is not set
+CONFIG_SUNRPC_XPRT_RDMA=m
CONFIG_SUNRPC_DEBUG=y
CONFIG_RPCSEC_GSS_KRB5=m
CONFIG_CIFS=m
CONFIG_CIFS_STATS=y
# CONFIG_CIFS_STATS2 is not set
CONFIG_CIFS_SMB2=y
+# CONFIG_CIFS_SMB311 is not set
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
@@ -4216,9 +4496,7 @@ CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_UBIFS_FS=m
-CONFIG_UBIFS_FS_XATTR=y
# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
-# CONFIG_UBIFS_FS_DEBUG is not set
#
# Partition Types
@@ -4316,6 +4594,10 @@ CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x0
CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_VTA=y
+# Revisit both of these options
+# CONFIG_DEBUG_INFO_SPLIT is not set
+# CONFIG_DEBUG_INFO_DWARF4 is not set
CONFIG_FRAME_POINTER=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
# CONFIG_DEBUG_DRIVER is not set
@@ -4325,6 +4607,7 @@ CONFIG_HEADERS_CHECK=y
# CONFIG_READABLE_ASM is not set
# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
# CONFIG_DEBUG_LOCKDEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
@@ -4351,6 +4634,7 @@ CONFIG_DEBUG_NX_TEST=m
CONFIG_DEBUG_SET_MODULE_RONX=y
CONFIG_DEBUG_BOOT_PARAMS=y
CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_VM_VMACACHE is not set
# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
CONFIG_LOCKUP_DETECTOR=y
@@ -4365,7 +4649,7 @@ CONFIG_HWPOISON_INJECT=m
CONFIG_CROSS_MEMORY_ATTACH=y
# CONFIG_DEBUG_SECTION_MISMATCH is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
-CONFIG_RESOURCE_COUNTERS=y
+CONFIG_LATENCYTOP=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_DEBUG_VIRTUAL is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
@@ -4374,13 +4658,13 @@ CONFIG_EARLY_PRINTK_DBGP=y
# CONFIG_CRASH_DUMP is not set
# CONFIG_CRASH is not set
# CONFIG_GCOV_KERNEL is not set
-# CONFIG_RAMOOPS is not set
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
CONFIG_KGDB_LOW_LEVEL_TRAP=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
+# CONFIG_GDB_SCRIPTS is not set
#
@@ -4403,16 +4687,15 @@ CONFIG_SECURITY_SELINUX_AVC_STATS=y
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_SECURITY_YAMA is not set
+CONFIG_SECURITY_YAMA=y
+CONFIG_SECURITY_YAMA_STACKED=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
# http://lists.fedoraproject.org/pipermail/kernel/2013-February/004125.html
-CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
CONFIG_SECCOMP=y
CONFIG_STRICT_DEVMEM=y
-# CONFIG_SSBI is not set
#
# Cryptographic options
@@ -4421,12 +4704,15 @@ CONFIG_CRYPTO=y
CONFIG_CRYPTO_FIPS=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
+CONFIG_CRYPTO_USER_API_RNG=y
+CONFIG_CRYPTO_USER_API_AEAD=y
CONFIG_CRYPTO_MANAGER=y
# Note, CONFIG_CRYPTO_MANAGER_DISABLE_TESTS needs to be unset, or FIPS will be disabled.
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_BLKCIPHER=y
# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_MCRYPTD is not set
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_ANUBIS=m
@@ -4483,10 +4769,20 @@ CONFIG_LIBCRC32C=m
CONFIG_CRYPTO_CRC32C_INTEL=m
CONFIG_CRYPTO_GHASH=m
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_DEV_HIFN_795X=m
CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_USER=m
+CONFIG_CRYPTO_RSA=m
+CONFIG_CRYPTO_CHACHA20POLY1305=m
+CONFIG_CRYPTO_ECHAINIV=m
+CONFIG_CRYPTO_POLY1305=m
+CONFIG_CRYPTO_CHACHA20=m
+CONFIG_CRYPTO_842=m
+CONFIG_CRYPTO_DRBG_HASH=y
+CONFIG_CRYPTO_DRBG_CTR=y
+
@@ -4512,12 +4808,22 @@ CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_INITRAMFS_SOURCE=""
+
+# These were all enabled by default before 3.19 made them individually
+# selectable. Possibly look at enabling only the one(s) Fedora actually
+# uses.
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
+
CONFIG_KEYS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_BIG_KEYS=y
CONFIG_TRUSTED_KEYS=m
CONFIG_ENCRYPTED_KEYS=m
-CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
@@ -4525,7 +4831,6 @@ CONFIG_CDROM_PKTCDVD_BUFFERS=8
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=m
# CONFIG_BACKLIGHT_GENERIC is not set
-CONFIG_BACKLIGHT_PROGEAR=m
# CONFIG_BACKLIGHT_ADP8860 is not set
# CONFIG_BACKLIGHT_ADP8870 is not set
# CONFIG_BACKLIGHT_LM3630 is not set
@@ -4545,12 +4850,26 @@ CONFIG_BACKLIGHT_LP855X=m
CONFIG_LCD_CLASS_DEVICE=m
CONFIG_LCD_PLATFORM=m
-
+# CONFIG_LCD_ILI922X is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_S6E63M0 is not set
+# CONFIG_LCD_LD9040 is not set
+# CONFIG_LCD_AMS369FG06 is not set
+# CONFIG_LCD_LMS501KF03 is not set
+# CONFIG_LCD_HX8357 is not set
+# CONFIG_LCD_L4F00242T03 is not set
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+
+
+CONFIG_SCHEDSTATS=y
CONFIG_SCHED_DEBUG=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
-CONFIG_RT_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
CONFIG_SCHED_AUTOGROUP=y
CONFIG_CPUSETS=y
@@ -4577,6 +4896,7 @@ CONFIG_BLK_CGROUP=y
CONFIG_RELAY=y
CONFIG_PRINTK_TIME=y
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
@@ -4591,8 +4911,11 @@ CONFIG_THERMAL_HWMON=y
CONFIG_THERMAL_GOV_FAIR_SHARE=y
# CONFIG_THERMAL_GOV_USER_SPACE is not set
CONFIG_THERMAL_GOV_STEP_WISE=y
+# CONFIG_THERMAL_GOV_BANG_BANG is not set
# CONFIG_THERMAL_EMULATION is not set
# CONFIG_THERMAL_OF is not set
+# CONFIG_THERMAL_WRITABLE_TRIPS is not set
+# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set
# CONFIG_CPU_THERMAL is not set
CONFIG_INOTIFY=y
@@ -4613,7 +4936,6 @@ CONFIG_PM_DEBUG=y
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
# CONFIG_PM_TEST_SUSPEND is not set
-CONFIG_PM_RUNTIME=y
# CONFIG_PM_OPP is not set
# CONFIG_PM_AUTOSLEEP is not set
# CONFIG_PM_WAKELOCKS is not set
@@ -4628,20 +4950,13 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_STAT=m
CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_IBMTR is not set
-# CONFIG_SKISA is not set
-# CONFIG_PROTEON is not set
-# CONFIG_SMCTR is not set
# CONFIG_MOUSE_ATIXL is not set
-# CONFIG_MEDIA_PARPORT_SUPPORT is not set
-
CONFIG_RADIO_ADAPTERS=y
CONFIG_RADIO_TEA5764=m
CONFIG_RADIO_SAA7706H=m
@@ -4671,7 +4986,86 @@ CONFIG_SND_INDIGOIO=m
CONFIG_SND_INDIGODJ=m
CONFIG_SND_INDIGOIOX=m
CONFIG_SND_INDIGODJX=m
-# CONFIG_SND_SOC is not set
+
+CONFIG_SND_SOC=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SND_DESIGNWARE_I2S=m
+CONFIG_SND_SOC_ALL_CODECS=m
+CONFIG_SND_SOC_DMIC=m
+CONFIG_SND_SOC_HDMI_CODEC=m
+CONFIG_SND_SOC_SPDIF=m
+CONFIG_SND_DMAENGINE_PCM=m
+CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
+# CONFIG_SND_SOC_ADAU1701 is not set
+# CONFIG_SND_SOC_AK4104 is not set
+# CONFIG_SND_SOC_AK4554 is not set
+# CONFIG_SND_SOC_AK4642 is not set
+# CONFIG_SND_SOC_AK5386 is not set
+# CONFIG_SND_SOC_CS42L52 is not set
+# CONFIG_SND_SOC_CS42L73 is not set
+# CONFIG_SND_SOC_CS4270 is not set
+# CONFIG_SND_SOC_CS4271 is not set
+# CONFIG_SND_SOC_CS42XX8_I2C is not set
+# CONFIG_SND_SOC_PCM1681 is not set
+# CONFIG_SND_SOC_PCM1792A is not set
+# CONFIG_SND_SOC_PCM512x_I2C is not set
+# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_QCOM is not set
+# CONFIG_SND_SOC_SGTL5000 is not set
+# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
+# CONFIG_SND_SOC_TAS5086 is not set
+# CONFIG_SND_SOC_TLV320AIC3X is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8523 is not set
+# CONFIG_SND_SOC_WM8580 is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8728 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8737 is not set
+# CONFIG_SND_SOC_WM8741 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8770 is not set
+# CONFIG_SND_SOC_WM8776 is not set
+# CONFIG_SND_SOC_WM8804 is not set
+# CONFIG_SND_SOC_WM8804_I2C is not set
+# CONFIG_SND_SOC_WM8804_SPI is not set
+# CONFIG_SND_SOC_WM8903 is not set
+# CONFIG_SND_SOC_WM8962 is not set
+# CONFIG_SND_SOC_TPA6130A2 is not set
+# CONFIG_SND_SOC_FSL_ASRC is not set
+# CONFIG_SND_SOC_FSL_ESAI is not set
+# CONFIG_SND_SOC_FSL_SAI is not set
+# CONFIG_SND_SOC_FSL_SPDIF is not set
+# CONFIG_SND_SOC_FSL_SSI is not set
+# CONFIG_SND_SOC_IMX_AUDMUX is not set
+# CONFIG_SND_SOC_ALC5623 is not set
+# CONFIG_SND_SOC_CS42L56 is not set
+# CONFIG_SND_SOC_STA350 is not set
+# CONFIG_SND_SOC_CS35L32 is not set
+# CONFIG_SND_SOC_ES8328 is not set
+# CONFIG_SND_SOC_SSM2602_SPI is not set
+# CONFIG_SND_SOC_SSM2602_I2C is not set
+# CONFIG_SND_SOC_SSM4567 is not set
+# CONFIG_SND_SOC_WM8978 is not set
+# CONFIG_SND_ATMEL_SOC is not set
+# CONFIG_SND_SOC_TLV320AIC31XX is not set
+# CONFIG_SND_SOC_TAS2552 is not set
+# CONFIG_SND_SOC_CS4265 is not set
+# CONFIG_SND_SOC_IMX_ES8328 is not set
+# CONFIG_SND_SOC_FSL_ASOC_CARD is not set
+# CONFIG_SND_EDMA_SOC is not set
+# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
+# CONFIG_SND_SOC_CS42L51_I2C is not set
+# CONFIG_SND_SOC_CS4271_I2C is not set
+# CONFIG_SND_SOC_CS4271_SPI is not set
+# CONFIG_SND_SOC_RT5631 is not set
+# CONFIG_SND_SOC_TFA9879 is not set
+# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
+# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
+# CONFIG_SND_SOC_TS3A227E is not set
+# CONFIG_SND_SOC_XTFPGA_I2S is not set
+# CONFIG_SND_SOC_STA32X is not set
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
@@ -4679,23 +5073,29 @@ CONFIG_MIGRATION=y
CONFIG_BOUNCE=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
-# CONFIG_LEDS_AMS_DELTA is not set
+CONFIG_LEDS_CLASS_FLASH=m
# CONFIG_LEDS_LOCOMO is not set
# CONFIG_LEDS_NET48XX is not set
-# CONFIG_LEDS_NET5501 is not set
# CONFIG_LEDS_PCA9532 is not set
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_BD2802 is not set
# CONFIG_LEDS_S3C24XX is not set
-# CONFIG_LEDS_PCA9633 is not set
+# CONFIG_LEDS_BCM6328 is not set
+# CONFIG_LEDS_BCM6358 is not set
+# CONFIG_LEDS_TLC591XX is not set
+# CONFIG_LEDS_KTD2692 is not set
+# CONFIG_LEDS_AAT1290 is not set
+#
CONFIG_LEDS_DELL_NETBOOKS=m
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_LM355x is not set
# CONFIG_LEDS_OT200 is not set
# CONFIG_LEDS_PWM is not set
# CONFIG_LEDS_LP8501 is not set
+# CONFIG_LEDS_LP8860 is not set
# CONFIG_LEDS_PCA963X is not set
-# CONFIG_LEDS_PCA9685 is not set
+# CONFIG_LEDS_PM8941_WLED is not set
+# CONFIG_LEDS_SYSCON is not set
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_ONESHOT=m
@@ -4706,22 +5106,23 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
-CONFIG_LEDS_ALIX2=m
CONFIG_LEDS_CLEVO_MAIL=m
CONFIG_LEDS_INTEL_SS4200=m
CONFIG_LEDS_LM3530=m
# CONFIG_LEDS_LM3642 is not set
-CONFIG_LEDS_LM3556=m
CONFIG_LEDS_BLINKM=m
CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP5521=m
-CONFIG_LEDS_LP5523=m
-CONFIG_LEDS_LP5562=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_WM8350=m
CONFIG_LEDS_WM831X_STATUS=m
+# CONFIG_LEDS_DAC124S085 is not set
+# Do not enable the below. They selects the fw user helper, which we don't want
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
+# CONFIG_LEDS_LP55XX_COMMON is not set
CONFIG_DMADEVICES=y
CONFIG_DMA_ENGINE=y
@@ -4732,7 +5133,11 @@ CONFIG_DW_DMAC_PCI=m
# CONFIG_TIMB_DMA is not set
# CONFIG_DMATEST is not set
# CONFIG_FSL_EDMA is not set
+# CONFIG_NBPFAXI_DMA is not set
CONFIG_ASYNC_TX_DMA=y
+# CONFIG_HSU_DMA is not set
+# CONFIG_HSU_DMA_PCI is not set
+# CONFIG_XGENE_DMA is not set
CONFIG_UNUSED_SYMBOLS=y
@@ -4750,8 +5155,10 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
CONFIG_FUNCTION_PROFILER=y
+# CONFIG_TRACEPOINT_BENCHMARK is not set
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
+# CONFIG_TRACE_ENUM_MAP_FILE is not set
# CONFIG_RBTREE_TEST is not set
# CONFIG_INTERVAL_TREE_TEST is not set
CONFIG_FUNCTION_TRACER=y
@@ -4767,10 +5174,11 @@ CONFIG_OPTPROBES=y
CONFIG_HZ_1000=y
CONFIG_NO_HZ=y
+# CONFIG_SCHED_STACK_END_CHECK is not set
+# CONFIG_DEBUG_TIMEKEEPING is not set
CONFIG_TIMER_STATS=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_PERF_EVENTS=y
-CONFIG_PERF_COUNTERS=y
# Auxillary displays
CONFIG_KS0108=m
@@ -4793,7 +5201,6 @@ CONFIG_APM_POWER=m
# CONFIG_BATTERY_DS2781 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_SBS is not set
-# CONFIG_BATTERY_BQ20Z75 is not set
# CONFIG_BATTERY_DS2780 is not set
# CONFIG_BATTERY_BQ27x00 is not set
# CONFIG_BATTERY_MAX17040 is not set
@@ -4808,7 +5215,16 @@ CONFIG_APM_POWER=m
# CONFIG_CHARGER_BQ2415X is not set
# CONFIG_CHARGER_BQ24190 is not set
# CONFIG_CHARGER_BQ24735 is not set
+# CONFIG_CHARGER_BQ24257 is not set
+# CONFIG_CHARGER_BQ25890 is not set
+# CONFIG_CHARGER_RT9455 is not set
+
CONFIG_POWER_RESET=y
+# CONFIG_POWER_RESET_LTC2952 is not set
+# CONFIG_POWER_RESET_SYSCON is not set
+# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set
+# CONFIG_BATTERY_GAUGE_LTC2941 is not set
+# CONFIG_POWER_RESET_RESTART is not set
# CONFIG_PDA_POWER is not set
@@ -4824,6 +5240,7 @@ CONFIG_UIO_SERCOS3=m
CONFIG_UIO_PCI_GENERIC=m
# CONFIG_UIO_NETX is not set
# CONFIG_UIO_MF624 is not set
+# CONFIG_UIO_PRUSS is not set
CONFIG_VFIO=m
CONFIG_VFIO_IOMMU_TYPE1=m
@@ -4833,7 +5250,6 @@ CONFIG_VFIO_PCI=m
# LIRC
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
-CONFIG_LIRC_IGORPLUGUSB=m
CONFIG_LIRC_IMON=m
CONFIG_LIRC_ZILOG=m
CONFIG_LIRC_PARALLEL=m
@@ -4841,10 +5257,10 @@ CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
CONFIG_LIRC_SASEM=m
CONFIG_LIRC_SIR=m
-CONFIG_LIRC_TTUSBIR=m
# CONFIG_SAMPLES is not set
+CONFIG_DEVMEM=y
# CONFIG_DEVKMEM is not set
CONFIG_NOZOMI=m
@@ -4859,7 +5275,6 @@ CONFIG_INPUT_GP2A=m
CONFIG_ENCLOSURE_SERVICES=m
CONFIG_IPWIRELESS=m
-# CONFIG_BLK_DEV_XIP is not set
CONFIG_MEMSTICK=m
# CONFIG_MEMSTICK_DEBUG is not set
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
@@ -4869,6 +5284,7 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MEMSTICK_JMICRON_38X=m
CONFIG_MEMSTICK_R592=m
CONFIG_MEMSTICK_REALTEK_PCI=m
+CONFIG_MEMSTICK_REALTEK_USB=m
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y
@@ -4889,15 +5305,18 @@ CONFIG_GPIOLIB=y
# CONFIG_PINCONF is not set
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_HWMON=y
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6131=m
CONFIG_NET_DSA_MV88E6123_61_65=m
+CONFIG_NET_DSA_MV88E6171=m
+CONFIG_NET_DSA_MV88E6352=m
+CONFIG_NET_DSA_BCM_SF2=m
# Used by Maemo, we don't care.
# CONFIG_PHONET is not set
# CONFIG_ICS932S401 is not set
-# CONFIG_ATMEL_SSC is not set
# CONFIG_C2PORT is not set
@@ -4907,6 +5326,7 @@ CONFIG_NET_DSA_MV88E6123_61_65=m
CONFIG_WM8350_POWER=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_PCI_SKELETON is not set
CONFIG_USB_WUSB=m
CONFIG_USB_WUSB_CBAF=m
@@ -4923,35 +5343,22 @@ CONFIG_UWB_I1480U=m
CONFIG_STAGING=y
# CONFIG_ANDROID is not set
+# CONFIG_STAGING_BOARD is not set
CONFIG_STAGING_MEDIA=y
# CONFIG_DVB_AS102 is not set
-# CONFIG_ET131X is not set
# CONFIG_SLICOSS is not set
-# CONFIG_WLAGS49_H2 is not set
-# CONFIG_WLAGS49_H25 is not set
# CONFIG_VIDEO_DT3155 is not set
# CONFIG_TI_ST is not set
# CONFIG_FB_XGI is not set
# CONFIG_VIDEO_GO7007 is not set
# CONFIG_I2C_BCM2048 is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_USB_MSI3101 is not set
# CONFIG_DT3155 is not set
-# CONFIG_W35UND is not set
# CONFIG_PRISM2_USB is not set
-# CONFIG_ECHO is not set
CONFIG_USB_ATMEL=m
# CONFIG_COMEDI is not set
-# CONFIG_ASUS_OLED is not set
# CONFIG_PANEL is not set
-# CONFIG_TRANZPORT is not set
-# CONFIG_POHMELFS is not set
-# CONFIG_IDE_PHISON is not set
-# CONFIG_LINE6_USB is not set
# CONFIG_VME_BUS is not set
-# CONFIG_RAR_REGISTER is not set
# CONFIG_VT6656 is not set
-# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
# Larry Finger maintains these (rhbz 913753)
CONFIG_RTLLIB=m
CONFIG_RTLLIB_CRYPTO_CCMP=m
@@ -4960,63 +5367,44 @@ CONFIG_RTLLIB_CRYPTO_WEP=m
CONFIG_RTL8192E=m
# CONFIG_INPUT_GPIO is not set
# CONFIG_VIDEO_CX25821 is not set
-# CONFIG_R8187SE is not set
# CONFIG_R8188EU is not set
-# CONFIG_R8821AE is not set
# CONFIG_RTL8192U is not set
CONFIG_R8723AU=m # Jes Sorensen maintains this (rhbz 1100162)
# CONFIG_8723AU_AP_MODE is not set
-# CONFIG_8723AU_P2P is not set
# CONFIG_8723AU_BT_COEXIST is not set
-# CONFIG_FB_SM7XX is not set
-# CONFIG_SPECTRA is not set
-# CONFIG_EASYCAP is not set
# CONFIG_SOLO6X10 is not set
-# CONFIG_ACPI_QUICKSTART is not set
# CONFIG_LTE_GDM724X is not set
CONFIG_R8712U=m # Larry Finger maintains this (rhbz 699618)
-# CONFIG_R8712_AP is not set
-# CONFIG_ATH6K_LEGACY is not set
-# CONFIG_USB_ENESTORAGE is not set
-# CONFIG_BCM_WIMAX is not set
-# CONFIG_USB_BTMTK is not set
# CONFIG_FT1000 is not set
# CONFIG_SPEAKUP is not set
-# CONFIG_DX_SEP is not set
# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
-# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
-# CONFIG_RTS_PSTOR is not set
CONFIG_ALTERA_STAPL=m
# CONFIG_DVB_CXD2099 is not set
# CONFIG_DVB_RTL2832_SDR is not set
# CONFIG_PWM_FSL_FTM is not set
-# CONFIG_USBIP_CORE is not set
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
# CONFIG_INTEL_MEI is not set
-# CONFIG_ZCACHE is not set
-# CONFIG_RTS5139 is not set
-# CONFIG_NVEC_LEDS is not set
# CONFIG_VT6655 is not set
-# CONFIG_RAMSTER is not set
# CONFIG_USB_WPAN_HCD is not set
# CONFIG_WIMAX_GDM72XX is not set
# CONFIG_IPACK_BUS is not set
-# CONFIG_CSR_WIFI is not set
-# CONFIG_ZCACHE2 is not set
-# CONFIG_NET_VENDOR_SILICOM is not set
-# CONFIG_SBYPASS is not set
-# CONFIG_BPCTL is not set
-# CONFIG_CED1401 is not set
-# CONFIG_DGRP is not set
-# CONFIG_SB105X is not set
# CONFIG_LUSTRE_FS is not set
# CONFIG_XILLYBUS is not set
# CONFIG_DGAP is not set
# CONFIG_DGNC is not set
# CONFIG_RTS5208 is not set
# CONFIG_GS_FPGABOOT is not set
-# CONFIG_BT_NOKIA_H4P is not set
# CONFIG_UNISYSSPAR is not set
# CONFIG_MEDIA_TUNER_MSI001 is not set
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
+# CONFIG_DVB_MN88472 is not set
+# CONFIG_DVB_MN88473 is not set
+# CONFIG_FB_SM7XX is not set
+# CONFIG_FB_TFT is not set
+# CONFIG_FB_SM750 is not set
# END OF STAGING
#
@@ -5026,9 +5414,10 @@ CONFIG_ALTERA_STAPL=m
CONFIG_NOP_USB_XCEIV=m
+# CONFIG_INTEGRITY is not set
+
# CONFIG_IMA is not set
CONFIG_IMA_MEASURE_PCR_IDX=10
-CONFIG_IMA_AUDIT=y
CONFIG_IMA_LSM_RULES=y
# CONFIG_EVM is not set
@@ -5040,15 +5429,25 @@ CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_STRIP_ASM_SYMS=y
# CONFIG_RCU_FANOUT_EXACT is not set
-# FIXME: Revisit FAST_NO_HZ after it's fixed
-# CONFIG_RCU_FAST_NO_HZ is not set
-# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_RCU_NOCB_CPU_ALL=y
CONFIG_RCU_CPU_STALL_TIMEOUT=60
-# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_RCU_TORTURE_TEST=m
+# CONFIG_RCU_TORTURE_TEST_SLOW_INIT is not set
+CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3
+# CONFIG_RCU_TORTURE_TEST_SLOW_PREINIT is not set
+# CONFIG_RCU_TORTURE_TEST_SLOW_CLEANUP is not set
# CONFIG_RCU_TRACE is not set
+# CONFIG_RCU_EQS_DEBUG is not set
# CONFIG_RCU_CPU_STALL_INFO is not set
+# CONFIG_TASKS_RCU is not set
# CONFIG_RCU_USER_QS is not set
+CONFIG_RCU_KTHREAD_PRIO=0
CONFIG_SPARSE_RCU_POINTER=y
+# CONFIG_RCU_EXPERT is not set
+
+# CONFIG_LIVEPATCH is not set
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
@@ -5057,15 +5456,6 @@ CONFIG_FSNOTIFY=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
-CONFIG_IEEE802154=m
-CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_IEEE802154_DRIVERS=m
-CONFIG_IEEE802154_FAKEHARD=m
-CONFIG_IEEE802154_FAKELB=m
-
-CONFIG_MAC802154=m
-CONFIG_NET_MPLS_GSO=m
-
# CONFIG_HSR is not set
# CONFIG_EXTCON is not set
@@ -5087,7 +5477,9 @@ CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
CONFIG_ZSWAP=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
+# CONFIG_ZSMALLOC_STAT is not set
# CONFIG_PGTABLE_MAPPING is not set
# CONFIG_MDIO_GPIO is not set
@@ -5095,7 +5487,7 @@ CONFIG_ZSMALLOC=y
# CONFIG_KEYBOARD_GPIO_POLLED is not set
# CONFIG_MOUSE_GPIO is not set
# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
-# CONFIG_I2C_DESIGNWARE_PCI is not set
+CONFIG_I2C_DESIGNWARE_PCI=m
# CONFIG_I2C_GPIO is not set
# CONFIG_DEBUG_GPIO is not set
# CONFIG_W1_MASTER_GPIO is not set
@@ -5106,9 +5498,11 @@ CONFIG_GPIO_SYSFS=y
# CONFIG_GPIO_PCA953X is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_CS5535 is not set
+# CONFIG_GPIO_ADNP is not set
# CONFIG_GPIO_ADP5588 is not set
# CONFIG_GPIO_IT8761E is not set
# CONFIG SB105x is not set
+# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_TS5500 is not set
CONFIG_GPIO_VIPERBOARD=m
# CONFIG_GPIO_MAX7300 is not set
@@ -5117,7 +5511,6 @@ CONFIG_GPIO_VIPERBOARD=m
# CONFIG_RADIO_MIROPCM20 is not set
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_GPIO_SCH is not set
-# CONFIG_GPIO_LANGWELL is not set
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_VX855 is not set
# CONFIG_GPIO_PCH is not set
@@ -5130,9 +5523,14 @@ CONFIG_GPIO_VIPERBOARD=m
# CONFIG_GPIO_BCM_KONA is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_DWAPB is not set
+# CONFIG_GPIO_74X164 is not set
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_XILINX is not set
+# CONFIG_GPIO_ALTERA is not set
# FIXME: Why?
-CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
CONFIG_TEST_KSTRTOX=y
CONFIG_XZ_DEC=y
@@ -5154,23 +5552,30 @@ CONFIG_TCM_IBLOCK=m
CONFIG_TCM_FILEIO=m
CONFIG_TCM_PSCSI=m
CONFIG_TCM_FC=m
+CONFIG_TCM_USER2=m
CONFIG_HWSPINLOCK=m
CONFIG_PSTORE=y
CONFIG_PSTORE_RAM=m
# CONFIG_PSTORE_CONSOLE is not set
+# CONFIG_PSTORE_PMSG is not set
# CONFIG_PSTORE_FTRACE is not set
-# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_LKM is not set
# CONFIG_TEST_USER_COPY is not set
+# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_UDELAY is not set
+# CONFIG_MEMTEST is not set
+# CONFIG_TEST_HEXDUMP is not set
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_AVERAGE is not set
# CONFIG_VMXNET3 is not set
# CONFIG_SIGMA is not set
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_CHROME_PLATFORMS=y
CONFIG_BCMA=m
CONFIG_BCMA_BLOCKIO=y
@@ -5184,8 +5589,11 @@ CONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_GOOGLE_FIRMWARE is not set
# CONFIG_INTEL_MID_PTI is not set
CONFIG_IOMMU_SUPPORT=y
+# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set
+# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
# CONFIG_MAILBOX is not set
+# CONFIG_ALTERA_MBOX is not set
# CONFIG_RESET_CONTROLLER is not set
@@ -5196,20 +5604,41 @@ CONFIG_FMC_WRITE_EEPROM=m
CONFIG_FMC_CHARDEV=m
# CONFIG_GENWQE is not set
+CONFIG_ECHO=m
-# CONFIG_POWERCAP is not set
+CONFIG_POWERCAP=y
+# CONFIG_THUNDERBOLT is not set
# CONFIG_HSI is not set
# CONFIG_CPU_IDLE is not set
# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set
+# CONFIG_ASM9260_TIMER is not set
+
+# CONFIG_HMC_DRV is not set
# CONFIG_PM_DEVFREQ is not set
+# CONFIG_PM_DEVFREQ_EVENT is not set
+# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set
+# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set
+# CONFIG_DEVFREQ_GOV_POWERSAVE is not set
+# CONFIG_DEVFREQ_GOV_USERSPACE is not set
+
+# CONFIG_CPUFREQ_DT is not set
+
# CONFIG_MODULE_SIG is not set
+# FIXME: Revisit this to see if we can use it instead of the spec file stuff
+# CONFIG_MODULE_COMPRESS is not set
# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set
-# CONFIG_MODULE_VERIFY_ELF is not set
-# CONFIG_CRYPTO_KEY_TYPE is not set
-# CONFIG_PGP_LIBRARY is not set
-# CONFIG_PGP_PRELOAD is not set
+
+# CONFIG_RTC_DRV_EFI is not set
+# CONFIG_NET_XGENE is not set
+
+# CONFIG_GLOB_SELFTEST is not set
+
+# CONFIG_SERIAL_8250_FINTEK is not set
+
+# set in x86-generic presently
+# CONFIG_TOUCHSCREEN_GOODIX is not set
diff --git a/config-i686-PAE b/config-i686-PAE
index fdc8a8bd4..eebaa6fba 100644
--- a/config-i686-PAE
+++ b/config-i686-PAE
@@ -1,6 +1,5 @@
# CONFIG_HIGHMEM4G is not set
CONFIG_HIGHMEM64G=y
-# CONFIG_OLPC_OPENFIRMWARE is not set
CONFIG_XEN_DEV_EVTCHN=m
CONFIG_XEN_SYS_HYPERVISOR=y
diff --git a/config-nodebug b/config-nodebug
index c6b4b7902..15af3c7a1 100644
--- a/config-nodebug
+++ b/config-nodebug
@@ -5,7 +5,6 @@ CONFIG_SND_PCM_XRUN_DEBUG=y
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_LOCK_TORTURE_TEST is not set
@@ -32,13 +31,14 @@ CONFIG_CPUMASK_OFFSTACK=y
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_ACPI_DEBUG is not set
-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_PI_LIST is not set
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_PAGE_OWNER is not set
# CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
# CONFIG_DEBUG_OBJECTS_FREE is not set
@@ -46,14 +46,14 @@ CONFIG_CPUMASK_OFFSTACK=y
# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
-# CONFIG_X86_PTDUMP is not set
+CONFIG_X86_PTDUMP=y
+# CONFIG_ARM64_PTDUMP is not set
# CONFIG_EFI_PGT_DUMP is not set
# CONFIG_CAN_DEBUG_DEVICES is not set
# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
# CONFIG_DEBUG_NOTIFIERS is not set
@@ -97,9 +97,9 @@ CONFIG_PM_ADVANCED_DEBUG=y
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
# CONFIG_QUOTA_DEBUG is not set
-CONFIG_PCI_DEFAULT_USE_CRS=y
CONFIG_KGDB_KDB=y
+CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
@@ -126,7 +126,3 @@ CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
# CONFIG_SPI_DEBUG is not set
# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set
-
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_LATENCYTOP is not set
-
diff --git a/config-powerpc32-generic b/config-powerpc32-generic
deleted file mode 100644
index 10e02fb7b..000000000
--- a/config-powerpc32-generic
+++ /dev/null
@@ -1,180 +0,0 @@
-# CONFIG_SMP is not set
-CONFIG_PPC32=y
-# CONFIG_PPC64 is not set
-# CONFIG_RTAS_PROC is not set
-# CONFIG_PCMCIA_M8XX is not set
-# CONFIG_HOTPLUG_PCI is not set
-CONFIG_CPU_FREQ_PMAC=y
-CONFIG_PPC_CHRP=y
-CONFIG_PPC_PMAC=y
-# CONFIG_PPC_MPC52xx is not set
-CONFIG_PPC_PREP=y
-
-# CONFIG_PPC_MPC5200_SIMPLE is not set
-# CONFIG_SATA_FSL is not set
-# CONFIG_SATA_NV is not set
-
-# busted in .28git1
-# ERROR: "cacheable_memzero" [drivers/net/gianfar_driver.ko] undefined!
-# CONFIG_GIANFAR is not set
-# CONFIG_USB_EHCI_FSL is not set
-
-CONFIG_PMAC_APM_EMU=y
-CONFIG_PMAC_BACKLIGHT=y
-
-CONFIG_HIGHMEM=y
-# CONFIG_HIGHMEM_START_BOOL is not set
-# CONFIG_LOWMEM_SIZE_BOOL is not set
-# CONFIG_TASK_SIZE_BOOL is not set
-# CONFIG_KERNEL_START_BOOL is not set
-# CONFIG_PPC601_SYNC_FIX is not set
-CONFIG_ADVANCED_OPTIONS=y
-CONFIG_SCSI_MESH=m
-CONFIG_SCSI_MESH_SYNC_RATE=5
-CONFIG_SCSI_MESH_RESET_DELAY_MS=4000
-
-CONFIG_LBDAF=y
-
-CONFIG_SCSI_MAC53C94=m
-CONFIG_ADB_CUDA=y
-CONFIG_ADB_MACIO=y
-CONFIG_INPUT_ADBHID=y
-CONFIG_ADB_PMU_LED=y
-CONFIG_ADB_PMU_LED_IDE=y
-
-CONFIG_PMAC_MEDIABAY=y
-CONFIG_NET_VENDOR_APPLE=y
-CONFIG_BMAC=m
-CONFIG_MACE=m
-# CONFIG_MACE_AAUI_PORT is not set
-# CONFIG_MV643XX_ETH is not set
-CONFIG_I2C_HYDRA=m
-CONFIG_I2C_MPC=m
-CONFIG_THERM_WINDTUNNEL=m
-CONFIG_THERM_ADT746X=m
-# CONFIG_ANSLCD is not set
-
-CONFIG_FB_PLATINUM=y
-CONFIG_FB_VALKYRIE=y
-CONFIG_FB_CT65550=y
-# CONFIG_BDI_SWITCH is not set
-
-CONFIG_MAC_FLOPPY=m
-# CONFIG_BLK_DEV_FD is not set
-
-CONFIG_FB_ATY128=y
-CONFIG_FB_ATY=y
-CONFIG_FB_MATROX=y
-# CONFIG_KEXEC is not set
-
-# CONFIG_HVC_RTAS is not set
-
-# CONFIG_UDBG_RTAS_CONSOLE is not set
-CONFIG_BRIQ_PANEL=m
-
-# CONFIG_ATA_PIIX is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_MPC52xx is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_SERVERWORKS is not set
-
-# CONFIG_SERIAL_MPC52xx is not set
-# CONFIG_MPC5200_WDT is not set
-CONFIG_8xxx_WDT=m
-CONFIG_GEF_WDT=m
-
-# CONFIG_PPC_MPC5200_BUGFIX is not set
-# CONFIG_NET_VENDOR_FREESCALE is not set
-#CHECK: This may later become a tristate.
-CONFIG_MDIO_GPIO=m
-
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_DEBUG_STACKOVERFLOW=y
-
-# CONFIG_EMBEDDED6xx is not set
-
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-
-# CONFIG_VIRQ_DEBUG is not set
-
-CONFIG_PPC_BESTCOMM_ATA=m
-CONFIG_PPC_BESTCOMM_FEC=m
-CONFIG_PPC_BESTCOMM_GEN_BD=m
-
-CONFIG_FORCE_MAX_ZONEORDER=11
-# CONFIG_PAGE_OFFSET_BOOL is not set
-# CONFIG_FB_FSL_DIU is not set
-CONFIG_IRQSTACKS=y
-CONFIG_VIRTUALIZATION=y
-
-# CONFIG_DEBUG_GPIO is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_HTC_EGPIO is not set
-
-# CONFIG_TIFM_CORE is not set
-
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-
-# CONFIG_I2C_NFORCE2 is not set
-
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-
-# CONFIG_MEMSTICK is not set
-
-# CONFIG_IPMI_HANDLER is not set
-
-# PPC gets sad with debug alloc (bz 448598)
-# CONFIG_DEBUG_PAGEALLOC is not set
-
-CONFIG_CRYPTO_DEV_TALITOS=m
-
-# CONFIG_FSL_EMB_PERFMON is not set
-# CONFIG_MPC8272_ADS is not set
-# CONFIG_PQ2FADS is not set
-# CONFIG_EP8248E is not set
-# CONFIG_MPC830x_RDB is not set
-# CONFIG_MPC831x_RDB is not set
-# CONFIG_MPC832x_MDS is not set
-# CONFIG_MPC832x_RDB is not set
-# CONFIG_MPC834x_MDS is not set
-# CONFIG_MPC834x_ITX is not set
-# CONFIG_MPC836x_MDS is not set
-# CONFIG_MPC836x_RDK is not set
-# CONFIG_MPC837x_MDS is not set
-# CONFIG_MPC837x_RDB is not set
-# CONFIG_SBC834x is not set
-# CONFIG_ASP834x is not set
-# CONFIG_KMETER1 is not set
-# CONFIG_MPC8641_HPCN is not set
-# CONFIG_SBC8641D is not set
-# CONFIG_MPC8610_HPCD is not set
-# CONFIG_FSL_LBC is not set
-# CONFIG_MTD_NAND_FSL_UPM is not set
-
-# CONFIG_USB_MUSB_HDRC is not set
-
-# busted in 2.6.27
-# drivers/mtd/maps/sbc8240.c: In function 'init_sbc8240_mtd':
-# drivers/mtd/maps/sbc8240.c:172: warning: passing argument 1 of 'simple_map_init' from incompatible pointer type
-# drivers/mtd/maps/sbc8240.c:177: error: 'struct mtd_info' has no member named 'module'
-
-CONFIG_RCU_FANOUT=32
-
-CONFIG_KVM_BOOK3S_32=m
-
-# CONFIG_SCSI_QLA_ISCSI is not set
-
-CONFIG_BATTERY_PMU=m
-
diff --git a/config-powerpc32-smp b/config-powerpc32-smp
deleted file mode 100644
index 5dbe87f7f..000000000
--- a/config-powerpc32-smp
+++ /dev/null
@@ -1,3 +0,0 @@
-# CONFIG_HOTPLUG_CPU is not set
-CONFIG_NR_CPUS=4
-# CONFIG_BATTERY_PMU is not set
diff --git a/config-powerpc64 b/config-powerpc64
index 7f4133593..0edf37b51 100644
--- a/config-powerpc64
+++ b/config-powerpc64
@@ -1,191 +1,109 @@
-CONFIG_WINDFARM_PM81=y
-CONFIG_WINDFARM_PM91=y
-CONFIG_WINDFARM_PM121=y
-CONFIG_WINDFARM_PM72=y
-CONFIG_WINDFARM_RM31=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
-CONFIG_PPC_PMAC64=y
CONFIG_PPC_MAPLE=y
-# CONFIG_PPC_CELL is not set
-# CONFIG_PPC_IBM_CELL_BLADE is not set
-# CONFIG_PPC_ISERIES is not set
-CONFIG_PPC_PSERIES=y
CONFIG_PPC_PMAC=y
-CONFIG_PPC_POWERNV=y
-CONFIG_POWERNV_MSI=y
-CONFIG_PPC_POWERNV_RTAS=y
-CONFIG_SENSORS_IBMPOWERNV=y
-CONFIG_HW_RANDOM_POWERNV=m
-CONFIG_POWERNV_CPUFREQ=m
-CONFIG_SCOM_DEBUGFS=y
-# CONFIG_PPC_PASEMI is not set
-# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
-# CONFIG_PPC_PS3 is not set
-# CONFIG_PPC_CELLEB is not set
-# CONFIG_PPC_CELL_QPACE is not set
-CONFIG_PMAC_RACKMETER=m
-CONFIG_IBMEBUS=y
-CONFIG_RTAS_FLASH=y
-# CONFIG_UDBG_RTAS_CONSOLE is not set
-CONFIG_PPC_SPLPAR=y
-CONFIG_SCANLOG=y
-CONFIG_LPARCFG=y
-CONFIG_SERIAL_ICOM=m
-CONFIG_HVCS=m
-CONFIG_HVC_CONSOLE=y
-# CONFIG_HVC_OLD_HVSI is not set
-CONFIG_HOTPLUG_PCI=y
-CONFIG_THERM_PM72=y
-CONFIG_IBMVETH=m
-CONFIG_SCSI_IBMVSCSI=m
-# CONFIG_HOTPLUG_PCI_CPCI is not set
-CONFIG_HOTPLUG_PCI_SHPC=m
-CONFIG_HOTPLUG_PCI_RPA=m
-CONFIG_HOTPLUG_PCI_RPA_DLPAR=y
-CONFIG_ADB_PMU_LED=y
-CONFIG_ADB_PMU_LED_IDE=y
-CONFIG_PMAC_SMU=y
-CONFIG_CPU_FREQ_PMAC64=y
-CONFIG_CPU_FREQ_MAPLE=y
-CONFIG_SCSI_IPR=m
-CONFIG_SCSI_IPR_TRACE=y
-CONFIG_SCSI_IPR_DUMP=y
-CONFIG_HVC_RTAS=y
-# CONFIG_HVC_ISERIES is not set
-CONFIG_HVC_OPAL=y
+CONFIG_PPC_PMAC64=y
-# iSeries device drivers
#
-# CONFIG_ISERIES_VETH is not set
-CONFIG_VIODASD=m
-CONFIG_VIOCD=m
-CONFIG_VIOTAPE=m
-
-CONFIG_PASEMI_MAC=m
-CONFIG_SERIAL_OF_PLATFORM=m
-
-CONFIG_SERIAL_TXX9=y
-CONFIG_SERIAL_TXX9_NR_UARTS=6
-CONFIG_SERIAL_TXX9_CONSOLE=y
-
-CONFIG_HVC_BEAT=y
-
-CONFIG_PPC_PMI=m
-
-CONFIG_PATA_SCC=m
-
-CONFIG_APM_EMULATION=m
-
-CONFIG_PPC64=y
-CONFIG_VIRT_CPU_ACCOUNTING=y
-CONFIG_NR_CPUS=1024
-# CONFIG_FB_PLATINUM is not set
-# CONFIG_FB_VALKYRIE is not set
-# CONFIG_FB_CT65550 is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-
-# CONFIG_POWER4_ONLY is not set
-
-CONFIG_RTAS_PROC=y
-CONFIG_IOMMU_VMERGE=y
-CONFIG_NUMA=y
-CONFIG_NUMA_BALANCING=y
-CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
-CONFIG_PPC_64K_PAGES=y
-CONFIG_PPC_SUBPAGE_PROT=y
-CONFIG_SCHED_SMT=y
-
-CONFIG_HZ=100
-CONFIG_HZ_100=y
-# CONFIG_HZ_1000 is not set
-
-CONFIG_MEMORY_HOTREMOVE=y
-
-CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y
-
-CONFIG_CGROUP_HUGETLB=y
-
-# CONFIG_MV643XX_ETH is not set
-CONFIG_IRQSTACKS=y
-CONFIG_DEBUG_STACKOVERFLOW=y
-# CONFIG_INPUT_PCSPKR is not set
-
-CONFIG_EHEA=m
-CONFIG_INFINIBAND_EHCA=m
-
-# CONFIG_HCALL_STATS is not set
-
-CONFIG_XMON_DISASSEMBLY=y
-
-CONFIG_SCSI_IBMVSCSIS=m
-
-# CONFIG_TUNE_CELL is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-
-# CONFIG_VIRQ_DEBUG is not set
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_BLK_DEV_GENERIC=y
+CONFIG_BLK_DEV_DELKIN=m
+CONFIG_IDE_TASK_IOCTL=y
+CONFIG_IDE_PROC_FS=y
+# CONFIG_IDEPCI_PCIBUS_ORDER is not set
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+# CONFIG_BLK_DEV_IDEPCI is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SL82C105 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_IDE_PMAC is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+CONFIG_IDE_GD_ATAPI=y
+
+CONFIG_PATA_PLATFORM=m
+CONFIG_PATA_OF_PLATFORM=m
+
+# Power970 / G5
CONFIG_EDAC_CPC925=m
-CONFIG_FRAME_WARN=2048
-
-CONFIG_PHYP_DUMP=y
-CONFIG_FORCE_MAX_ZONEORDER=9
-CONFIG_VIRTUALIZATION=y
-
-CONFIG_VSX=y
-
-CONFIG_SCSI_IBMVFC=m
-# CONFIG_SCSI_IBMVFC_TRACE is not set
-CONFIG_IBM_BSR=m
-
-CONFIG_CRASH_DUMP=y
-CONFIG_RELOCATABLE=y
-
-CONFIG_RCU_FANOUT=64
-
-CONFIG_CMA=y
-# CONFIG_CMA_DEBUG is not set
-CONFIG_KVM_BOOK3S_64=m
-CONFIG_KVM_BOOK3S_64_HV=m
-CONFIG_KVM_BOOK3S_64_PR=m
-# CONFIG_KVM_EXIT_TIMING is not set
-CONFIG_KVM_XICS=y
-
-#-- bz#607175
-#-- active memory sharing
-CONFIG_PPC_SMLPAR=y
-CONFIG_CMM=y
-CONFIG_HV_PERF_CTRS=y
-#-- DLPAR memory remove
-CONFIG_SPARSEMEM_VMEMMAP=y
-
-# CONFIG_COMPACTION is not set
-
-CONFIG_PSERIES_ENERGY=m
-
-CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_GOV_LADDER is not set
-CONFIG_PSERIES_CPUIDLE=y
-CONFIG_POWERNV_CPUIDLE=y
-CONFIG_PPC_ICSWX=y
-CONFIG_IO_EVENT_IRQ=y
+# Maple
+CONFIG_CPU_FREQ_MAPLE=y
+CONFIG_EDAC_AMD8111=m
+CONFIG_EDAC_AMD8131=m
CONFIG_HW_RANDOM_AMD=m
+CONFIG_MMIO_NVRAM=y
-CONFIG_UIO_PDRV=m
-
-CONFIG_HW_RANDOM_PSERIES=m
-CONFIG_CRYPTO_DEV_NX=y
-CONFIG_CRYPTO_842=m
-CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
-CONFIG_CRYPTO_DEV_NX_COMPRESS=m
-
-
-CONFIG_BPF_JIT=y
-# CONFIG_PPC_ICSWX_PID is not set
-# CONFIG_PPC_ICSWX_USE_SIGILL is not set
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PPC_TRANSACTIONAL_MEM is not set
-# CONFIG_SND_HDA_INTEL is not set
-CONFIG_BLK_DEV_RSXX=m
+# Apple G5
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_ADB=y
+CONFIG_ADB_PMU=y
+CONFIG_ADB_PMU_LED=y
+CONFIG_ADB_PMU_LED_IDE=y
+CONFIG_I2C_POWERMAC=y
+CONFIG_PMAC_RACKMETER=m
+CONFIG_PMAC_APM_EMU=m
+CONFIG_APM_EMULATION=m
+CONFIG_PMAC_SMU=y
+CONFIG_APPLE_AIRPORT=m
+CONFIG_SND_POWERMAC=m
+CONFIG_SND_POWERMAC_AUTO_DRC=y
+CONFIG_MAC_EMUMOUSEBTN=y
+CONFIG_PATA_MACIO=y
+CONFIG_WINDFARM=y
+CONFIG_WINDFARM_RM31=y
+CONFIG_WINDFARM_PM72=y
+CONFIG_WINDFARM_PM81=y
+CONFIG_WINDFARM_PM91=y
+CONFIG_WINDFARM_PM112=y
+CONFIG_WINDFARM_PM121=y
+CONFIG_CPU_FREQ_PMAC64=y
+CONFIG_SERIAL_PMACZILOG=m
+# CONFIG_SERIAL_PMACZILOG_TTYS is not set
+CONFIG_AGP_UNINORTH=y
+# CONFIG_PMAC_BACKLIGHT_LEGACY is not set
+
+CONFIG_SND_AOA=m
+CONFIG_SND_AOA_SOUNDBUS=m
+CONFIG_SND_AOA_FABRIC_LAYOUT=m
+CONFIG_SND_AOA_ONYX=m
+CONFIG_SND_AOA_TAS=m
+CONFIG_SND_AOA_TOONIE=m
+CONFIG_SND_AOA_SOUNDBUS_I2S=m
diff --git a/config-powerpc-generic b/config-powerpc64-generic
index 9c0ad6011..ce547a8d2 100644
--- a/config-powerpc-generic
+++ b/config-powerpc64-generic
@@ -1,192 +1,237 @@
-# Most PowerPC kernels we build are SMP
-CONFIG_IRQ_ALL_CPUS=y
CONFIG_PPC=y
-CONFIG_WATCHDOG_RTAS=m
+CONFIG_PPC64=y
+
+CONFIG_PPC_POWERNV=y
+CONFIG_PPC_PSERIES=y
+# CONFIG_PPC_82xx is not set
+# CONFIG_PPC_83xx is not set
+# CONFIG_PPC_86xx is not set
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_QPACE is not set
+# CONFIG_PPC_IBM_CELL_BLADE is not set
+# CONFIG_PPC_MAPLE is not set
+# CONFIG_PPC_PASEMI is not set
+# CONFIG_PPC_PMAC is not set
+# CONFIG_PPC_PMAC64 is not set
+# CONFIG_PPC_PS3 is not set
+
+CONFIG_EXTRA_TARGETS=""
+
+CONFIG_NR_CPUS=1024
+
+CONFIG_NR_IRQS=512
+CONFIG_SPARSE_IRQ=y
+CONFIG_IRQ_ALL_CPUS=y
+CONFIG_IRQSTACKS=y
+
+CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUGGER=y
-CONFIG_GENERIC_NVRAM=y
+CONFIG_PPC_DENORMALISATION=y
+# CONFIG_PPC_EARLY_DEBUG is not set
+CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
+
+CONFIG_FRAME_WARN=2048
+
+CONFIG_FORCE_MAX_ZONEORDER=9
+
+CONFIG_XMON=y
+# CONFIG_XMON_DEFAULT is not set
+CONFIG_XMON_DISASSEMBLY=y
+
+CONFIG_BOOTX_TEXT=y
+
CONFIG_ALTIVEC=y
+CONFIG_VSX=y
+
+CONFIG_HZ=100
+CONFIG_HZ_100=y
+# CONFIG_HZ_1000 is not set
+
+CONFIG_NUMA=y
+CONFIG_NUMA_BALANCING=y
+CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
+CONFIG_PPC_64K_PAGES=y
+CONFIG_PPC_SUBPAGE_PROT=y
+CONFIG_SCHED_SMT=y
+# CONFIG_TUNE_CELL is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y
+
+CONFIG_CGROUP_HUGETLB=y
+
+CONFIG_RCU_FANOUT=64
+CONFIG_RCU_FANOUT_LEAF=16
+
+CONFIG_CRASH=m
+CONFIG_CRASH_DUMP=y
+CONFIG_FA_DUMP=y
+CONFIG_RELOCATABLE=y
-CONFIG_TAU=y
-# CONFIG_TAU_INT is not set
-CONFIG_TAU_AVERAGE=y
+CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_GOV_LADDER is not set
+CONFIG_POWERNV_CPUIDLE=y
+CONFIG_PSERIES_CPUIDLE=y
+
+CONFIG_HW_RANDOM_PSERIES=m
+CONFIG_CRYPTO_DEV_NX=y
+CONFIG_CRYPTO_842=m
+CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
+CONFIG_CRYPTO_DEV_NX_COMPRESS=m
+CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m
+CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m
+CONFIG_CRYPTO_DEV_NX_COMPRESS_CRYPTO=m
+CONFIG_CRYPTO_DEV_VMX=y
+# CONFIG_CRYPTO_DEV_VMX_ENCRYPT is not set
+
+CONFIG_XZ_DEC_POWERPC=y
+
+# HW Virt
+CONFIG_CMA=y
+# CONFIG_CMA_DEBUG is not set
+# CONFIG_CMA_DEBUGFS is not set
+CONFIG_CMA_AREAS=7
+CONFIG_KVM_GUEST=y
+CONFIG_KVM_BOOK3S_64=m
+CONFIG_KVM_BOOK3S_64_HV=m
+CONFIG_KVM_BOOK3S_64_PR=m
+# CONFIG_KVM_BOOK3S_HV_EXIT_TIMING is not set
+# CONFIG_KVM_EXIT_TIMING is not set
+CONFIG_KVM_XICS=y
+# CONFIG_HCALL_STATS is not set
+CONFIG_PPC_SPLPAR=y
+CONFIG_LPARCFG=y
+#-- active memory sharing
+CONFIG_PPC_SMLPAR=y
+CONFIG_CMM=y
+CONFIG_HV_PERF_CTRS=y
+#-- DLPAR memory remove
+CONFIG_SPARSEMEM_VMEMMAP=y
+
+# Power NV
+CONFIG_HVC_CONSOLE=y
+CONFIG_HVCS=m
+CONFIG_HVC_RTAS=y
+CONFIG_HVC_OPAL=y
+CONFIG_I2C_OPAL=m
+CONFIG_RTC_DRV_OPAL=m
+CONFIG_SENSORS_IBMPOWERNV=y
+CONFIG_HW_RANDOM_POWERNV=m
+CONFIG_POWERNV_CPUFREQ=m
+CONFIG_IPMI_POWERNV=m
+CONFIG_RTAS_FLASH=y
+CONFIG_OPAL_PRD=m
+CONFIG_MTD_POWERNV_FLASH=m
+
+# Power 7 and later
+CONFIG_PPC_TRANSACTIONAL_MEM=y
+CONFIG_BLK_DEV_RSXX=m
+CONFIG_CXL=m
+CONFIG_IBMEBUS=y
+CONFIG_EHEA=m
+CONFIG_INFINIBAND_EHCA=m
+CONFIG_PPC_ICSWX=y
+# CONFIG_PPC_ICSWX_PID is not set
+# CONFIG_PPC_ICSWX_USE_SIGILL is not set
+
+# pSeries
+# CONFIG_SCSI_IBMVFC_TRACE is not set
+CONFIG_IBM_BSR=m
+CONFIG_IBMVETH=m
+CONFIG_PSERIES_ENERGY=m
+# CONFIG_HVC_OLD_HVSI is not set
+CONFIG_SCOM_DEBUGFS=y
+CONFIG_SCANLOG=y
+CONFIG_RTAS_PROC=y
+CONFIG_WATCHDOG_RTAS=m
+# CONFIG_UDBG_RTAS_CONSOLE is not set
+CONFIG_IO_EVENT_IRQ=y
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
# CONFIG_GEN_RTC_X is not set
CONFIG_RTC_DRV_GENERIC=y
-CONFIG_PROC_DEVICETREE=y
# CONFIG_CMDLINE_BOOL is not set
-CONFIG_ADB=y
-CONFIG_ADB_PMU=y
-CONFIG_WINDFARM=y
-CONFIG_WINDFARM_PM112=y
-CONFIG_I2C_POWERMAC=y
-CONFIG_APPLE_AIRPORT=m
-CONFIG_SERIAL_PMACZILOG=m
-# CONFIG_SERIAL_PMACZILOG_TTYS is not set
-CONFIG_AGP_UNINORTH=y
+CONFIG_HOTPLUG_PCI_SHPC=m
+CONFIG_HOTPLUG_PCI_RPA=m
+CONFIG_HOTPLUG_PCI_RPA_DLPAR=y
+
+CONFIG_SCSI_IBMVFC=m
+CONFIG_SCSI_IBMVSCSI=m
+CONFIG_SCSI_IPR=m
+CONFIG_SCSI_IPR_TRACE=y
+CONFIG_SCSI_IPR_DUMP=y
+
+CONFIG_SERIAL_ICOM=m
+
+# Things we might want to review for newer architectures
+# CONFIG_PCIEPORTBUS is not set
+
CONFIG_FB_OF=y
# CONFIG_FB_CONTROL is not set
+# CONFIG_FB_CT65550 is not set
CONFIG_FB_IBM_GXT4500=y
CONFIG_FB_MATROX=y
CONFIG_FB_MATROX_G=y
-# CONFIG_FB_VGA16 is not set
-CONFIG_FB_ATY128_BACKLIGHT=y
-CONFIG_FB_ATY_BACKLIGHT=y
-CONFIG_FB_RIVA_BACKLIGHT=y
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_MB862XX_PCI_GDC is not set
# CONFIG_FB_MB862XX_LIME is not set
# CONFIG_FB_MB862XX_I2C is not set
+# CONFIG_FB_PLATINUM is not set
+# CONFIG_FB_VALKYRIE is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_SND_SOC is not set
+# CONFIG_INPUT_PCSPKR is not set
+# CONFIG_SND_HDA_INTEL is not set
-CONFIG_SND_POWERMAC=m
-CONFIG_SND_POWERMAC_AUTO_DRC=y
-CONFIG_SND_AOA=m
-CONFIG_SND_AOA_SOUNDBUS=m
-CONFIG_SND_AOA_FABRIC_LAYOUT=m
-CONFIG_SND_AOA_ONYX=m
-CONFIG_SND_AOA_TAS=m
-CONFIG_SND_AOA_TOONIE=m
-CONFIG_SND_AOA_SOUNDBUS_I2S=m
-
-CONFIG_XMON=y
-# CONFIG_XMON_DEFAULT is not set
-CONFIG_XMON_DISASSEMBLY=y
-
-CONFIG_BOOTX_TEXT=y
-CONFIG_MAC_EMUMOUSEBTN=y
CONFIG_CAPI_EICON=y
-CONFIG_NVRAM=y
-
-# CONFIG_PCMCIA_M8XX is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_IPS is not set
-# CONFIG_NI52 is not set
# CONFIG_NI65 is not set
# CONFIG_LANCE is not set
# CONFIG_3C515 is not set
-# CONFIG_ELPLUS is not set
-
-CONFIG_MEMORY_HOTPLUG=y
+# CONFIG_BLK_DEV_PLATFORM is not set
# Stuff which wants bus_to_virt() or virt_to_bus()
# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_VIDEO_STRADIS is not set
# CONFIG_VIDEO_ZORAN is not set
# CONFIG_ATM_HORIZON is not set
# CONFIG_ATM_FIRESTREAM is not set
# CONFIG_ATM_AMBASSADOR is not set
-# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_BUSLOGIC is not set
-
-# CONFIG_PPC_EARLY_DEBUG is not set
-
-# CONFIG_PMAC_BACKLIGHT_LEGACY is not set
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_PPC_EFIKA=y
-CONFIG_PPC_MEDIA5200=y
-
-# CONFIG_PPC_LITE5200 is not set
-CONFIG_PPC_BESTCOMM=y
-CONFIG_PMAC_RACKMETER=m
-CONFIG_USB_OHCI_HCD_PPC_SOC=y
+CONFIG_USB_EHCI_HCD_PPC_OF=y
CONFIG_USB_OHCI_HCD_PCI=y
CONFIG_USB_OHCI_HCD_PPC_OF=y
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
-CONFIG_SERIAL_UARTLITE=m
-CONFIG_SERIAL_UARTLITE_CONSOLE=y
-
-CONFIG_SENSORS_AMS=m
-CONFIG_SENSORS_AMS_PMU=y
-CONFIG_SENSORS_AMS_I2C=y
-
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=m
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_IDE_TASK_IOCTL=y
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_IDE_PMAC is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_DELKIN=m
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-CONFIG_BLK_DEV_IDEDMA=y
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-CONFIG_MTD_PHYSMAP_OF=m
-CONFIG_IDE_PROC_FS=y
-CONFIG_MACINTOSH_DRIVERS=y
-
-CONFIG_PPC_PASEMI_MDIO=m
+# CONFIG_PATA_PLATFORM is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+# CONFIG_EDAC_CPC925 is not set
+
CONFIG_SPU_FS_64K_LS=y
-CONFIG_PPC_PASEMI_CPUFREQ=y
-CONFIG_PMAC_APM_EMU=m
-CONFIG_HW_RANDOM_PASEMI=m
CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=m
-CONFIG_EDAC_PASEMI=m
-CONFIG_EDAC_AMD8131=m
-CONFIG_EDAC_AMD8111=m
CONFIG_EDAC_LEGACY_SYSFS=y
# CONFIG_AXON_RAM is not set
-# CONFIG_OPROFILE_CELL is not set
CONFIG_SUSPEND_FREEZER=y
# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-CONFIG_PATA_PLATFORM=m
-CONFIG_PATA_OF_PLATFORM=m
-CONFIG_USB_EHCI_HCD_PPC_OF=y
# CONFIG_MPC5121_ADS is not set
-# CONFIG_MPC5121_GENERIC is not set
CONFIG_MTD_OF_PARTS=y
# CONFIG_MTD_NAND_FSL_ELBC is not set
CONFIG_THERMAL=y
@@ -198,10 +243,6 @@ CONFIG_DMADEVICES=y
CONFIG_SND_PPC=y
-# CONFIG_PPC_82xx is not set
-# CONFIG_PPC_83xx is not set
-# CONFIG_PPC_86xx is not set
-CONFIG_EXTRA_TARGETS=""
# CONFIG_CODE_PATCHING_SELFTEST is not set
# CONFIG_FTR_FIXUP_SELFTEST is not set
@@ -216,6 +257,10 @@ CONFIG_EXTRA_TARGETS=""
CONFIG_NET_VENDOR_IBM=y
+CONFIG_MLX4_EN=m
+CONFIG_MLX4_EN_DCB=y
+CONFIG_MLX4_EN_VXLAN=y
+
# CONFIG_SERIO_XILINX_XPS_PS2 is not set
# CONFIG_PPC_SMLPAR is not set
@@ -225,22 +270,10 @@ CONFIG_NET_VENDOR_IBM=y
# CONFIG_GEF_PPC9A is not set
# CONFIG_GEF_SBC310 is not set
-# CONFIG_QUICC_ENGINE is not set
-# CONFIG_QE_GPIO is not set
-# CONFIG_MPC8xxx_GPIO is not set
-
-CONFIG_IDE_GD=y
-CONFIG_IDE_GD_ATA=y
-CONFIG_IDE_GD_ATAPI=y
-
# CONFIG_MCU_MPC8349EMITX is not set
# CONFIG_GPIO_XILINX is not set
-CONFIG_PMIC_DA903X=y
-CONFIG_BACKLIGHT_DA903X=m
-CONFIG_LEDS_DA903X=m
-
CONFIG_MSI_BITMAP_SELFTEST=y
CONFIG_RELOCATABLE=y
@@ -248,11 +281,10 @@ CONFIG_RELOCATABLE=y
# CONFIG_HVC_UDBG is not set
CONFIG_PRINT_STACK_DEPTH=64
-CONFIG_BATTERY_DA9030=m
+# CONFIG_PMIC_DA903X is not set
# CONFIG_TWL4030_CORE is not set
CONFIG_BLK_DEV_IT8172=m
-CONFIG_TOUCHSCREEN_DA9034=m
CONFIG_SIMPLE_GPIO=y
@@ -260,6 +292,7 @@ CONFIG_SIMPLE_GPIO=y
# CONFIG_PS3_VRAM is not set
CONFIG_MDIO_GPIO=m
+CONFIG_SERIAL_OF_PLATFORM=m
# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_PCA953X=m
@@ -270,16 +303,12 @@ CONFIG_GPIO_PCF857X=m
# CONFIG_AMIGAONE is not set
-CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
-
CONFIG_DTL=y
CONFIG_MMC_SDHCI_OF=m
# CONFIG_CONSISTENT_SIZE_BOOL is not set
-CONFIG_CAN_SJA1000_OF_PLATFORM=m
-
CONFIG_PPC_EMULATED_STATS=y
CONFIG_SWIOTLB=y
@@ -287,25 +316,19 @@ CONFIG_SWIOTLB=y
# CONFIG_RDS is not set
CONFIG_PPC_DISABLE_WERROR=y
+# CONFIG_STRICT_MM_TYPECHECKS is not set
# CONFIG_XILINX_LL_TEMAC is not set
# CONFIG_XILINX_EMACLITE is not set
CONFIG_GPIO_WM831X=m
-# CONFIG_GPIO_LANGWELL is not set
# CONFIG_GPIO_UCB1400 is not set
# CONFIG_EDAC_MPC85XX is not set
-CONFIG_NR_IRQS=512
-CONFIG_SPARSE_IRQ=y
-
# CONFIG_PPC_MPC5200_LPBFIFO is not set
# CONFIG_CAN_MSCAN is not set
# CONFIG_CAN_MPC5XXX is not set
-CONFIG_PATA_MACIO=y
-CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_MFD_88PM8607 is not set
# CONFIG_MFD_MAX8997 is not set
# CONFIG_MFD_TPS65910 is not set
# CONFIG_MFD_TPS65912_I2C is not set
@@ -314,18 +337,10 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
# CONFIG_MMC_SDHCI_OF_HLWD is not set
-# CONFIG_MFD_TC35892 is not set
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_GPIO_SCH is not set
-
-# CONFIG_PPC_MPC512x is not set
-# CONFIG_RTC_DRV_MPC5121 is not set
-# CONFIG_RTC_DRV_HYM8563 is not set
-
-# CONFIG_MPC512X_DMA is not set
-
-CONFIG_KVM_GUEST=y
+# CONFIG_GPIO_74XX_MMIO is not set
CONFIG_I2C_MPC=m
@@ -334,8 +349,7 @@ CONFIG_I2C_MPC=m
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
# CONFIG_CRYPTO_SHA1_PPC is not set
-
-# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_CRYPTO_MD5_PPC is not set
# CONFIG_CAN_FLEXCAN is not set
# CONFIG_NET_VENDOR_XILINX is not set
@@ -344,14 +358,12 @@ CONFIG_I2C_MPC=m
# CONFIG_NET_VENDOR_PASEMI is not set
# CONFIG_NET_VENDOR_TOSHIBA is not set
-# CONFIG_CPU_IDLE is not set
-# CONFIG_OF_SELFTEST is not set
+# CONFIG_OF_UNITTEST is not set
+# CONFIG_OF_OVERLAY is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
# CONFIG_INPUT_GP2A is not set
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
-CONFIG_RCU_FANOUT_LEAF=16
-
# CONFIG_IRQ_DOMAIN_DEBUG is not set
# CONFIG_MPIC_MSGR is not set
# CONFIG_FA_DUMP is not set
@@ -361,25 +373,14 @@ CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_SPAPR_TCE_IOMMU is not set
# CONFIG_TRANSPARENT_HUGEPAGE is not set
-CONFIG_PPC_DENORMALISATION=y
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
-# CONFIG_GPIO_ADNP is not set
# CONFIG_MFD_SYSCON is not set
-# CONFIG_RTC_DRV_SNVS is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
-# CONFIG_OF_DISPLAY_TIMING is not set
-# CONFIG_OF_VIDEOMODE is not set
-
-# CONFIG_POWERNV_MSI is not set
-# CONFIG_CPU_LITTLE_ENDIAN is not set
+# CONFIG_WINDFARM is not set
CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_FB_SSD1307=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_BACKLIGHT_PWM=m
-CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=n
-
-CONFIG_XZ_DEC_POWERPC=y
-
-CONFIG_CRASH=m
diff --git a/config-powerpc64le b/config-powerpc64le
new file mode 100644
index 000000000..48c8c0d8a
--- /dev/null
+++ b/config-powerpc64le
@@ -0,0 +1,3 @@
+CONFIG_CPU_LITTLE_ENDIAN=y
+
+CONFIG_POWER7_CPU=y
diff --git a/config-powerpc64p7 b/config-powerpc64p7
index d8ce7e0b1..5e85fbd12 100644
--- a/config-powerpc64p7
+++ b/config-powerpc64p7
@@ -1,181 +1,3 @@
-CONFIG_POWER7_CPU=y
-# CONFIG_PPC_PMAC64 is not set
-# CONFIG_PPC_MAPLE is not set
-# CONFIG_PPC_CELL is not set
-# CONFIG_PPC_IBM_CELL_BLADE is not set
-# CONFIG_PPC_ISERIES is not set
-# CONFIG_POWER3 is not set
-CONFIG_PPC_PSERIES=y
-# CONFIG_PPC_PMAC is not set
-CONFIG_PPC_POWERNV=y
-CONFIG_POWERNV_MSI=y
-CONFIG_PPC_POWERNV_RTAS=y
-CONFIG_HW_RANDOM_POWERNV=m
-CONFIG_SENSORS_IBMPOWERNV=y
-CONFIG_POWERNV_CPUFREQ=m
-CONFIG_SCOM_DEBUGFS=y
-# CONFIG_PPC_PASEMI is not set
-# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
-# CONFIG_PPC_PS3 is not set
-# CONFIG_PPC_CELLEB is not set
-# CONFIG_PPC_CELL_QPACE is not set
-CONFIG_IBMEBUS=y
-CONFIG_RTAS_FLASH=y
-# CONFIG_UDBG_RTAS_CONSOLE is not set
-CONFIG_PPC_SPLPAR=y
-CONFIG_SCANLOG=y
-CONFIG_LPARCFG=y
-CONFIG_SERIAL_ICOM=m
-CONFIG_HVCS=m
-CONFIG_HVC_CONSOLE=y
-# CONFIG_HVC_OLD_HVSI is not set
-CONFIG_HOTPLUG_PCI=y
-CONFIG_THERM_PM72=y
-CONFIG_IBMVETH=m
-CONFIG_SCSI_IBMVSCSI=m
-# CONFIG_HOTPLUG_PCI_CPCI is not set
-CONFIG_HOTPLUG_PCI_SHPC=m
-CONFIG_HOTPLUG_PCI_RPA=m
-CONFIG_HOTPLUG_PCI_RPA_DLPAR=y
-CONFIG_ADB_PMU_LED=y
-CONFIG_ADB_PMU_LED_IDE=y
-CONFIG_SCSI_IPR=m
-CONFIG_SCSI_IPR_TRACE=y
-CONFIG_SCSI_IPR_DUMP=y
-CONFIG_HVC_RTAS=y
-# CONFIG_HVC_ISERIES is not set
-CONFIG_HVC_OPAL=y
-
-# iSeries device drivers
-#
-# CONFIG_ISERIES_VETH is not set
-CONFIG_VIODASD=m
-CONFIG_VIOCD=m
-CONFIG_VIOTAPE=m
-
-CONFIG_SERIAL_OF_PLATFORM=m
-
-CONFIG_SERIAL_TXX9=y
-CONFIG_SERIAL_TXX9_NR_UARTS=6
-CONFIG_SERIAL_TXX9_CONSOLE=y
-
-CONFIG_HVC_BEAT=y
-
-CONFIG_PPC_PMI=m
-
-CONFIG_PATA_SCC=m
-
-CONFIG_APM_EMULATION=m
-
-CONFIG_PPC64=y
-CONFIG_VIRT_CPU_ACCOUNTING=y
-CONFIG_NR_CPUS=1024
-# CONFIG_FB_PLATINUM is not set
-# CONFIG_FB_VALKYRIE is not set
-# CONFIG_FB_CT65550 is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-
-# CONFIG_POWER4_ONLY is not set
-
-CONFIG_RTAS_PROC=y
-CONFIG_IOMMU_VMERGE=y
-CONFIG_NUMA=y
-CONFIG_NUMA_BALANCING=y
-CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
-CONFIG_PPC_64K_PAGES=y
-CONFIG_PPC_SUBPAGE_PROT=y
-CONFIG_SCHED_SMT=y
-
-CONFIG_HZ=100
-CONFIG_HZ_100=y
-# CONFIG_HZ_1000 is not set
-
-CONFIG_MEMORY_HOTREMOVE=y
-
-CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y
-
-CONFIG_CGROUP_HUGETLB=y
-
-# CONFIG_MV643XX_ETH is not set
-CONFIG_IRQSTACKS=y
-CONFIG_DEBUG_STACKOVERFLOW=y
-# CONFIG_INPUT_PCSPKR is not set
-
-CONFIG_EHEA=m
-CONFIG_INFINIBAND_EHCA=m
-
-# CONFIG_HCALL_STATS is not set
-
-CONFIG_XMON_DISASSEMBLY=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
-CONFIG_SCSI_IBMVSCSIS=m
-
-# CONFIG_TUNE_CELL is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-
-# CONFIG_VIRQ_DEBUG is not set
-
-CONFIG_EDAC_CPC925=m
-CONFIG_FRAME_WARN=2048
-
-CONFIG_PHYP_DUMP=y
-CONFIG_FORCE_MAX_ZONEORDER=9
-CONFIG_VIRTUALIZATION=y
-
-CONFIG_VSX=y
-
-CONFIG_SCSI_IBMVFC=m
-# CONFIG_SCSI_IBMVFC_TRACE is not set
-CONFIG_IBM_BSR=m
-
-CONFIG_CRASH_DUMP=y
-CONFIG_RELOCATABLE=y
-
-CONFIG_RCU_FANOUT=64
-
-CONFIG_CMA=y
-# CONFIG_CMA_DEBUG is not set
-CONFIG_KVM_BOOK3S_64=m
-CONFIG_KVM_BOOK3S_64_HV=m
-CONFIG_KVM_BOOK3S_64_PR=m
-# CONFIG_KVM_EXIT_TIMING is not set
-CONFIG_KVM_XICS=y
-
-#-- bz#607175
-#-- active memory sharing
-CONFIG_PPC_SMLPAR=y
-CONFIG_CMM=y
-CONFIG_HV_PERF_CTRS=y
-#-- DLPAR memory remove
-CONFIG_SPARSEMEM_VMEMMAP=y
-
-# CONFIG_COMPACTION is not set
-
-CONFIG_PSERIES_ENERGY=m
-
-CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_GOV_LADDER is not set
-CONFIG_PSERIES_CPUIDLE=y
-CONFIG_POWERNV_CPUIDLE=y
-
-CONFIG_PPC_ICSWX=y
-CONFIG_IO_EVENT_IRQ=y
-CONFIG_HW_RANDOM_AMD=m
-
-CONFIG_UIO_PDRV=m
-
-CONFIG_HW_RANDOM_PSERIES=m
-CONFIG_CRYPTO_DEV_NX=y
-CONFIG_CRYPTO_842=m
-CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
-CONFIG_CRYPTO_DEV_NX_COMPRESS=m
-
-
-CONFIG_BPF_JIT=y
-# CONFIG_PPC_ICSWX_PID is not set
-# CONFIG_PPC_ICSWX_USE_SIGILL is not set
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_SND_HDA_INTEL is not set
-CONFIG_BLK_DEV_RSXX=m
+CONFIG_POWER7_CPU=y
diff --git a/config-s390x b/config-s390x
index 6f3d3253e..f58e4d8b4 100644
--- a/config-s390x
+++ b/config-s390x
@@ -1,5 +1,4 @@
CONFIG_64BIT=y
-# CONFIG_MARCH_G5 is not set
# CONFIG_MARCH_Z900 is not set
CONFIG_MARCH_Z9_109=y
# CONFIG_MARCH_Z990 is not set
@@ -14,7 +13,6 @@ CONFIG_HZ_100=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_LOG_BUF_SHIFT=16
-CONFIG_NO_IDLE_HZ=y
#
# I/O subsystem configuration
@@ -25,13 +23,9 @@ CONFIG_QDIO=m
# Misc
#
CONFIG_IPL=y
-# CONFIG_IPL_TAPE is not set
-CONFIG_IPL_VM=y
-# CONFIG_PROCESS_DEBUG is not set
CONFIG_PFAULT=y
CONFIG_SHARED_KERNEL=y
CONFIG_CMM=m
-CONFIG_CMM_PROC=y
# CONFIG_NETIUCV is not set
CONFIG_SMSGIUCV=m
CONFIG_CRASH_DUMP=y
@@ -40,7 +34,6 @@ CONFIG_CRASH_DUMP=y
# SCSI low-level drivers
#
CONFIG_ZFCP=m
-CONFIG_ZFCPDUMP=y
CONFIG_CCW=y
#
@@ -69,6 +62,7 @@ CONFIG_SCLP_VT220_TTY=y
CONFIG_SCLP_VT220_CONSOLE=y
CONFIG_SCLP_CPI=m
CONFIG_SCLP_ASYNC=m
+CONFIG_SCLP_ASYNC_ID="000000000"
CONFIG_S390_TAPE=m
CONFIG_S390_TAPE_3590=m
@@ -83,14 +77,12 @@ CONFIG_TN3270_FS=m
#
# S/390 tape interface support
#
-CONFIG_S390_TAPE_BLOCK=y
#
# S/390 tape hardware support
#
CONFIG_S390_TAPE_34XX=m
-# CONFIG_PPP is not set
# CONFIG_SLIP is not set
#
@@ -149,19 +141,11 @@ CONFIG_CRYPTO_AES_S390=m
#
CONFIG_PACK_STACK=y
CONFIG_CHECK_STACK=y
-# CONFIG_WARN_STACK is not set
-# CONFIG_SMALL_STACK is not set
-CONFIG_ZVM_WATCHDOG=m
+CONFIG_DIAG288_WATCHDOG=m
CONFIG_VMLOGRDR=m
CONFIG_MONREADER=m
-CONFIG_VIRT_CPU_ACCOUNTING=y
-
-# CONFIG_CLAW is not set
-
-# CONFIG_ATMEL is not set
-
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_MII is not set
@@ -170,15 +154,12 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
CONFIG_STACK_GUARD=256
CONFIG_CMM_IUCV=y
-# CONFIG_DETECT_SOFTLOCKUP is not set
CONFIG_S390_HYPFS_FS=y
CONFIG_MONWRITER=m
CONFIG_ZCRYPT=m
-CONFIG_ZCRYPT_MONOLITHIC=y
-CONFIG_S390_EXEC_PROTECT=y
CONFIG_AFIUCV=m
CONFIG_S390_PRNG=m
@@ -190,7 +171,6 @@ CONFIG_CTCM=m
CONFIG_QETH_L2=m
CONFIG_QETH_L3=m
CONFIG_CRYPTO_SHA512_S390=m
-CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
# CONFIG_KVM_S390_UCONTROL is not set
CONFIG_S390_GUEST=y
@@ -217,16 +197,15 @@ CONFIG_SMSGIUCV_EVENT=m
CONFIG_VMCP=y
-CONFIG_ZFCP_DIF=y
CONFIG_SCHED_MC=y
CONFIG_SCHED_BOOK=y
+CONFIG_SCHED_TOPOLOGY=y
# CONFIG_WARN_DYNAMIC_STACK is not set
CONFIG_CRYPTO_GHASH_S390=m
-CONFIG_BPF_JIT=y
# CONFIG_TRANSPARENT_HUGEPAGE is not set
CONFIG_SCM_BUS=y
CONFIG_EADM_SCH=m
@@ -234,10 +213,30 @@ CONFIG_SCM_BLOCK=m
CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
# CONFIG_S390_PTDUMP is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
-# CONFIG_PCI is not set
+
+CONFIG_PCI=y
+CONFIG_PCI_NR_FUNCTIONS=64
+CONFIG_PCI_NR_MSI=256
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_SHPC=y
+CONFIG_HOTPLUG_PCI_S390=y
# CONFIG_NEW_LEDS is not set
# CONFIG_HID is not set
+# CONFIG_MTD is not set
+
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_PARPORT is not set
+# CONFIG_UWB is not set
+# CONFIG_MMC is not set
+# CONFIG_FB is not set
+# CONFIG_MFD_CORE is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_CB710_CORE is not set
+# CONFIG_FCOE is not set
+# CONFIG_FUSION is not set
+# CONFIG_FIREWIRE is not set
+# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_INPUT is not set
# CONFIG_INPUT_JOYDEV is not set
@@ -247,6 +246,8 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
+# CONFIG_GAMEPORT_EMU10K1 is not set
+# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_SERIO is not set
# CONFIG_ACCESSIBILITY is not set
@@ -268,6 +269,17 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_PTP_1588_CLOCK is not set
# CONFIG_PPS is not set
+# CONFIG_W1 is not set
+# CONFIG_HWMON is not set
+# CONFIG_SSB is not set
+# CONFIG_BCMA is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_LCD_CLASS_DEVICE is not set
+# CONFIG_LCD_PLATFORM is not set
+# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+# CONFIG_MFD_RTSX_PCI is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_VX855 is not set
# CONFIG_PHYLIB is not set
# CONFIG_ATM_DRIVERS is not set
@@ -281,4 +293,17 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
# CONFIG_FMC is not set
+# CONFIG_OF is not set
+
+CONFIG_MLX4_EN=m
+CONFIG_MLX4_EN_DCB=y
+CONFIG_MLX4_EN_VXLAN=y
+CONFIG_INFINIBAND=m
+CONFIG_INFINIBAND_USER_ACCESS=m
+CONFIG_MLX4_INFINIBAND=m
+CONFIG_RDS=m
+CONFIG_RDS_RDMA=m
+CONFIG_RDS_TCP=m
+CONFIG_IRQ_DOMAIN_DEBUG=y
+
CONFIG_CRASH=m
diff --git a/config-x86-32-generic b/config-x86-32-generic
index 6adcfb524..865fb9004 100644
--- a/config-x86-32-generic
+++ b/config-x86-32-generic
@@ -2,15 +2,9 @@
# CONFIG_X86_32_NON_STANDARD is not set
-# CONFIG_X86_ELAN is not set
# CONFIG_X86_GOLDFISH is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
CONFIG_X86_BIGSMP=y
-# CONFIG_X86_VISWS is not set
# CONFIG_X86_RDC321X is not set
-# CONFIG_X86_ES7000 is not set
-# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
@@ -88,8 +82,6 @@ CONFIG_X86_LONGRUN=y
# CONFIG_X86_E_POWERSAVER is not set
CONFIG_X86_HT=y
-CONFIG_X86_TRAMPOLINE=y
-
# CONFIG_4KSTACKS is not set
@@ -112,7 +104,6 @@ CONFIG_SCx200_ACB=m
CONFIG_PC8736x_GPIO=m
# CONFIG_NSC_GPIO is not set
-CONFIG_CS5535_GPIO=m
CONFIG_GPIO_SCH=m
CONFIG_HW_RANDOM_GEODE=m
@@ -142,7 +133,6 @@ CONFIG_LBDAF=y
CONFIG_OLPC=y
-CONFIG_OLPC_OPENFIRMWARE=y
CONFIG_BATTERY_OLPC=y
CONFIG_MOUSE_PS2_OLPC=y
CONFIG_OLPC_XO1_PM=y
@@ -159,10 +149,8 @@ CONFIG_RCU_FANOUT=32
# CONFIG_X86_ANCIENT_MCE is not set
-# CONFIG_X86_MRST is not set
CONFIG_I2C_PXA=m
-# CONFIG_GPIO_LANGWELL is not set
# CONFIG_INTEL_TXT is not set
@@ -178,17 +166,18 @@ CONFIG_XO1_RFKILL=m
CONFIG_X86_32_IRIS=m
CONFIG_POWER_RESET_GPIO=y
+# CONFIG_POWER_RESET_GPIO_RESTART is not set
CONFIG_MTD_OF_PARTS=y
CONFIG_MTD_PHYSMAP_OF=m
-CONFIG_PROC_DEVICETREE=y
CONFIG_SERIAL_OF_PLATFORM=m
CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_MMC_SDHCI_OF is not set
# CONFIG_X86_INTEL_MID is not set
+# CONFIG_X86_INTEL_QUARK is not set
CONFIG_MFD_CS5535=m
# CONFIG_MFD_SYSCON is not set
@@ -208,8 +197,9 @@ CONFIG_BACKLIGHT_PWM=m
# CONFIG_EDAC_SBRIDGE is not set
-# CONFIG_X86_WANT_INTEL_MID is not set
-# CONFIG_OF_SELFTEST is not set
+CONFIG_OF=y
+# CONFIG_OF_UNITTEST is not set
+# CONFIG_OF_OVERLAY is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
# CONFIG_INPUT_GP2A is not set
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
@@ -218,17 +208,15 @@ CONFIG_BACKLIGHT_PWM=m
# CONFIG_MDIO_BUS_MUX_GPIO is not set
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
# CONFIG_GPIO_SODAVILLE is not set
-# CONFIG_GPIO_ADNP is not set
+# CONFIG_GPIO_74XX_MMIO is not set
# CONFIG_BACKLIGHT_OT200 is not set
-# CONFIG_RTC_DRV_SNVS is not set
-# CONFIG_RTC_DRV_HYM8563 is not set
-# CONFIG_OF_DISPLAY_TIMING is not set
-# CONFIG_OF_VIDEOMODE is not set
# CONFIG_MLX5_INFINIBAND is not set
# CONFIG_PINCTRL_SINGLE is not set
-# CONFIG_PINCTRL_CAPRI is not set
-# CONFIG_PINCTRL_MSM8X74 is not set
# CONFIG_PINCTRL_BCM281XX is not set
+# CONFIG_PINCTRL_APQ8064 is not set
+# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_COMMON_CLK_SI570 is not set
# CONFIG_COMMON_CLK_QCOM is not set
+# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
+# CONFIG_KEYBOARD_BCM is not set
diff --git a/config-x86-generic b/config-x86-generic
index 92441b0a7..9bfd81de5 100644
--- a/config-x86-generic
+++ b/config-x86-generic
@@ -10,10 +10,12 @@ CONFIG_HPET_TIMER=y
CONFIG_I8K=m
CONFIG_SONYPI_COMPAT=y
-CONFIG_MICROCODE=m
+CONFIG_MICROCODE=y
+CONFIG_MICROCODE_EARLY=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_INTEL_EARLY=y
CONFIG_MICROCODE_AMD=y
+CONFIG_MICROCODE_AMD_EARLY=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
@@ -32,13 +34,16 @@ CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_X86_PM_TIMER=y
+# This requires changes to binutils and the compiler. Plus you can't actually
+# buy hardware with MPX yet. So... leave it off until all of that seems set.
+# CONFIG_X86_INTEL_MPX is not set
+
CONFIG_EFI=y
CONFIG_EFI_STUB=y
-# CONFIG_EFI_MIXED is not set
-CONFIG_EFI_VARS=y
+# CONFIG_EFI_VARS is not set
CONFIG_EFIVAR_FS=y
-CONFIG_EFI_VARS_PSTORE=y
-CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
+# CONFIG_EFI_VARS_PSTORE is not set
+# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
CONFIG_EFI_PCDP=y
CONFIG_FB_EFI=y
CONFIG_EARLY_PRINTK_EFI=y
@@ -50,7 +55,6 @@ CONFIG_EFI_RUNTIME_MAP=y
# CONFIG_FB_N411 is not set
CONFIG_INTEL_IOMMU=y
-CONFIG_DMAR_BROKEN_GFX_WA=y
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
CONFIG_SCSI_ADVANSYS=m
@@ -62,6 +66,7 @@ CONFIG_CAPI_EICON=y
#
CONFIG_X86_MPPARSE=y
# CONFIG_X86_VERBOSE_BOOTUP is not set
+CONFIG_MMIOTRACE=y
# CONFIG_MMIOTRACE_TEST is not set
# CONFIG_DEBUG_PER_CPU_MAPS is not set
CONFIG_DEBUG_RODATA=y
@@ -69,7 +74,6 @@ CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_ACPI=y
CONFIG_ACPI_AC=y
-# CONFIG_ACPI_ASUS is not set
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_CONTAINER=y
@@ -86,7 +90,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y
# FIXME: Next two are deprecated. Remove them when they disappear upstream
# CONFIG_ACPI_PROCFS_POWER is not set
-# CONFIG_ACPI_PROC_EVENT is not set
CONFIG_PNPACPI=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_HED=m
@@ -99,6 +102,16 @@ CONFIG_ACPI_IPMI=m
CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_EXTLOG is not set
+# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+
+CONFIG_INTEL_SOC_PMIC=y
+CONFIG_PMIC_OPREGION=y
+CONFIG_CRC_PMIC_OPREGION=y
+CONFIG_XPOWER_PMIC_OPREGION=y
+CONFIG_GPIO_CRYSTAL_COVE=y
+CONFIG_AXP288_ADC=y
+CONFIG_AXP288_FUEL_GAUGE=y
+
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_ACPI_CPUFREQ=m
@@ -119,18 +132,16 @@ CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
CONFIG_GENERIC_ISA_DMA=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_BIOS=y
-CONFIG_PCI_IOAPIC=y
-CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_COMPAQ=m
# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
CONFIG_HOTPLUG_PCI_IBM=m
-# CONFIG_HOTPLUG_PCI_CPCI is not set
CONFIG_IPW2100=m
CONFIG_IPW2100_MONITOR=y
@@ -142,6 +153,9 @@ CONFIG_IPW2200_QOS=y
CONFIG_BLK_DEV_AMD74XX=y
+# I2C_ACPI casues I2C to be built in. This should probably be fixed.
+CONFIG_I2C=y
+CONFIG_ACPI_I2C_OPREGION=y
CONFIG_I2C_AMD756=m
CONFIG_I2C_AMD756_S4882=m
CONFIG_I2C_AMD8111=m
@@ -163,6 +177,8 @@ CONFIG_DCDBAS=m
CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=m
+# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
+CONFIG_EDAC_AMD64=m
CONFIG_EDAC_AMD76X=m
CONFIG_EDAC_AMD8111=m
CONFIG_EDAC_AMD8131=m
@@ -183,10 +199,12 @@ CONFIG_EDAC_X38=m
CONFIG_EDAC_MCE_INJ=m
CONFIG_EDAC_DECODE_MCE=m
CONFIG_EDAC_LEGACY_SYSFS=y
+CONFIG_EDAC_IE31200=m
CONFIG_SCHED_MC=y
CONFIG_TCG_INFINEON=m
+CONFIG_TCG_CRB=m
CONFIG_HW_RANDOM_INTEL=m
CONFIG_HW_RANDOM_AMD=m
@@ -200,7 +218,7 @@ CONFIG_AMILO_RFKILL=m
CONFIG_ASUS_LAPTOP=m
CONFIG_COMPAL_LAPTOP=m
CONFIG_DELL_LAPTOP=m
-CONFIG_CHROME_PLATFORMS=y
+CONFIG_DELL_RBTN=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_EEEPC_LAPTOP=m
@@ -223,8 +241,10 @@ CONFIG_ASUS_NB_WMI=m
CONFIG_HP_WIRELESS=m
CONFIG_HP_WMI=m
# CONFIG_INTEL_SCU_IPC is not set
+# CONFIG_INTEL_PMC_IPC is not set
CONFIG_DELL_WMI=m
CONFIG_DELL_WMI_AIO=m
+CONFIG_DELL_SMO8800=m
CONFIG_EEEPC_WMI=m
CONFIG_INTEL_OAKTRAIL=m
CONFIG_SAMSUNG_Q10=m
@@ -235,9 +255,9 @@ CONFIG_INTEL_SMARTCONNECT=y
CONFIG_PVPANIC=m
# CONFIG_TOUCHSCREEN_INTEL_MID is not set
+CONFIG_TOUCHSCREEN_GOODIX=m
# CONFIG_SMSC37B787_WDT is not set
-CONFIG_W83697HF_WDT=m
CONFIG_VIA_WDT=m
CONFIG_IE6XX_WDT=m
@@ -245,7 +265,6 @@ CONFIG_CRASH_DUMP=y
CONFIG_PROC_VMCORE=y
CONFIG_CRASH=m
-CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
@@ -261,7 +280,6 @@ CONFIG_PARAVIRT_TIME_ACCOUNTING=y
# PARAVIRT_SPINLOCKS has a 5% perf hit on native hw (see kconfig)
# CONFIG_PARAVIRT_SPINLOCKS is not set
-CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_MMU_AUDIT=y # default $x would be nice...
# CONFIG_KVM_DEBUG_FS is not set
@@ -285,12 +303,13 @@ CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_DEBUG_FS=y
-CONFIG_XEN_PLATFORM_PCI=y
CONFIG_XEN_GNTDEV=m
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
CONFIG_XEN_SELFBALLOONING=y
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_ACPI_PROCESSOR=m
+# CONFIG_XEN_SCSI_FRONTEND is not set
+# CONFIG_XEN_SCSI_BACKEND is not set
CONFIG_MTD_ESB2ROM=m
CONFIG_MTD_CK804XROM=m
@@ -322,6 +341,8 @@ CONFIG_INTEL_IOATDMA=m
CONFIG_SENSORS_I5K_AMB=m
CONFIG_SENSORS_FAM15H_POWER=m
CONFIG_SENSORS_ACPI_POWER=m
+CONFIG_SENSORS_I5500=m
+CONFIG_SENSORS_DELL_SMM=m
# CONFIG_CPA_DEBUG is not set
@@ -340,6 +361,7 @@ CONFIG_HP_ILO=m
CONFIG_BACKLIGHT_APPLE=m
+CONFIG_X86_PMEM_LEGACY=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
@@ -366,6 +388,7 @@ CONFIG_X86_DECODER_SELFTEST=y
CONFIG_ACPI_CMPC=m
CONFIG_MSI_WMI=m
CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
CONFIG_VGA_SWITCHEROO=y
CONFIG_LPC_SCH=m
@@ -373,15 +396,39 @@ CONFIG_LPC_ICH=m
CONFIG_GPIO_ICH=m
# CONFIG_GPIO_LYNXPOINT is not set
-# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_F7188X is not set
+# These should all go away with IC2_ACPI is fixed
+# CONFIG_MFD_AS3711 is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_AAT2870_CORE is not set
+# CONFIG_MFD_AXP20X is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_DA9052_I2C is not set
+# CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_88PM800 is not set
+# CONFIG_MFD_88PM805 is not set
+# CONFIG_MFD_MAX14577 is not set
+# CONFIG_MFD_MAX77686 is not set
+# CONFIG_MFD_MAX77693 is not set
+# CONFIG_MFD_MAX8907 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_RC5T583 is not set
+# CONFIG_MFD_SEC_CORE is not set
+# CONFIG_MFD_SMSC is not set
+# CONFIG_MFD_LP8788 is not set
+# CONFIG_MFD_PALMAS is not set
+# CONFIG_MFD_TPS65090 is not set
+# CONFIG_MFD_TPS65910 is not set
+# CONFIG_MFD_TPS65912_I2C is not set
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_TWL6040_CORE is not set
CONFIG_PCI_CNB20LE_QUIRK=y
CONFIG_ACPI_EC_DEBUGFS=m
# CONFIG_ACPI_APEI_ERST_DEBUG is not set
-# CONFIG_ACPI_QUICKSTART is not set
CONFIG_INTEL_IDLE=y
@@ -389,7 +436,6 @@ CONFIG_INTEL_IDLE=y
CONFIG_F71808E_WDT=m
CONFIG_HPWDT_NMI_DECODING=y
# CONFIG_MFD_TPS6586X is not set
-# CONFIG_INTEL_MID_DMAC is not set
# CONFIG_GPIO_INTEL_MID is not set
CONFIG_PCH_DMA=m
CONFIG_INTEL_IPS=m
@@ -417,6 +463,7 @@ CONFIG_SCHED_SMT=y
CONFIG_CC_STACKPROTECTOR=y
CONFIG_CC_STACKPROTECTOR_STRONG=y
CONFIG_RELOCATABLE=y
+# CONFIG_RANDOMIZE_BASE is not set # revisit this
CONFIG_HYPERV=m
CONFIG_HYPERV_UTILS=m
@@ -445,23 +492,61 @@ CONFIG_NFC_PN544_MEI=m
CONFIG_NFC_MICROREAD_MEI=m
# Maybe enable in debug kernels?
+# CONFIG_DEBUG_ENTRY is not set
# CONFIG_DEBUG_NMI_SELFTEST is not set
+# CONFIG_X86_GOLDFISH is not set
+
CONFIG_X86_INTEL_LPSS=y
+
+# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
+# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
+
+CONFIG_IOSF_MBI=m
+# CONFIG_IOSF_MBI_DEBUG is not set
CONFIG_PWM_LPSS=m
+CONFIG_PWM_LPSS_PCI=m
+CONFIG_PWM_LPSS_PLATFORM=m
CONFIG_PINCTRL=y
CONFIG_PINCTRL_BAYTRAIL=y
+CONFIG_PINCTRL_CHERRYVIEW=m
+# CONFIG_PINCTRL_AMD is not set
+CONFIG_PINCTRL_SUNRISEPOINT=m
+
+#baytrail/cherrytrail stuff
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_INPUT_SOC_BUTTON_ARRAY=m
+CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_ACPI=m
+CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
+CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
+CONFIG_SND_SOC_INTEL_BAYTRAIL=m
+CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH=m
+CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
+CONFIG_SND_SOC_AC97_CODEC=m
+# CONFIG_SND_SOC_TAS571X is not set
+
# CONFIG_INTEL_POWERCLAMP is not set
CONFIG_X86_PKG_TEMP_THERMAL=m
-CONFIG_ACPI_INT3403_THERMAL=m
+CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INT340X_THERMAL=m
+CONFIG_INTEL_RAPL=m
CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
+CONFIG_MOUSE_PS2_VMMOUSE=y
CONFIG_XZ_DEC_X86=y
CONFIG_MPILIB=y
+CONFIG_PKCS7_MESSAGE_PARSER=y
+# CONFIG_PKCS7_TEST_KEY is not set
+CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_MODULE_SIG=y
@@ -472,9 +557,15 @@ CONFIG_MODULE_SIG_SHA256=y
CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE=y
CONFIG_EFI_SIGNATURE_LIST_PARSER=y
+# CONFIG_KEXEC_FILE is not set
+# CONFIG_KEXEC_VERIFY_SIG is not set
+
CONFIG_MODULE_SIG_UEFI=y
CONFIG_VMXNET3=m
CONFIG_VFIO_PCI_VGA=y
-# CONFIG_NTB is not set
+CONFIG_PCH_CAN=m
+
+# CONFIG_X86_DEBUG_FPU is not set
+# CONFIG_PUNIT_ATOM_DEBUG is not set
diff --git a/config-x86_64-generic b/config-x86_64-generic
index 02883b84b..0fc3068dd 100644
--- a/config-x86_64-generic
+++ b/config-x86_64-generic
@@ -9,9 +9,10 @@ CONFIG_GENERIC_CPU=y
CONFIG_X86_UV=y
CONFIG_UV_MMTIMER=m
CONFIG_NUMA=y
-CONFIG_K8_NUMA=y
CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
+CONFIG_ACPI_NFIT=m
+# CONFIG_ACPI_NFIT_DEBUG is not set
# CONFIG_NUMA_EMU is not set
# CONFIG_X86_NUMACHIP is not set
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -25,6 +26,9 @@ CONFIG_PHYSICAL_ALIGN=0x1000000
# https://lists.fedoraproject.org/pipermail/kernel/2013-December/004753.html
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
+# enable the 32-bit entry point for Baytrail
+CONFIG_EFI_MIXED=y
+
CONFIG_IA32_EMULATION=y
# CONFIG_IA32_AOUT is not set
@@ -42,17 +46,26 @@ CONFIG_CGROUP_HUGETLB=y
CONFIG_MEM_SOFT_DIRTY=y
CONFIG_KEXEC_JUMP=y
+CONFIG_KEXEC_FILE=y
+CONFIG_KEXEC_VERIFY_SIG=y
+CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_ACPI_HOTPLUG_MEMORY=y
# CONFIG_INTEL_SCU_IPC is not set
+CONFIG_SCIF_BUS=m
+CONFIG_SCIF=m
+
CONFIG_INTEL_MIC_HOST=m
CONFIG_INTEL_MIC_CARD=m
+CONFIG_INTEL_MIC_BUS=m
+CONFIG_INTEL_MIC_X100_DMA=m
# SHPC has half-arsed PCI probing, which makes it load on too many systems
CONFIG_HOTPLUG_PCI_SHPC=m
+# CONFIG_CRYPTO_SHA1_MB is not set
CONFIG_CRYPTO_AES_X86_64=y
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
CONFIG_CRYPTO_TWOFISH_X86_64=m
@@ -62,7 +75,6 @@ CONFIG_CRYPTO_SHA1_SSSE3=m
CONFIG_CRYPTO_SHA256_SSSE3=m
CONFIG_CRYPTO_SHA512_SSSE3=m
CONFIG_CRYPTO_BLOWFISH_X86_64=m
-CONFIG_CRYPTO_BLOWFISH_AVX2_X86_64=m
CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m
CONFIG_CRYPTO_CAMELLIA_X86_64=m
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m
@@ -73,7 +85,9 @@ CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
-CONFIG_CRYPTO_TWOFISH_AVX2_X86_64=m
+CONFIG_CRYPTO_DES3_EDE_X86_64=m
+# staging crypto
+# CONFIG_CRYPTO_SKEIN is not set
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
@@ -97,6 +111,7 @@ CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_MEMORY_HOTPLUG=y
# CONFIG_ARCH_MEMORY_PROBE is not set
# CONFIG_MEMORY_HOTREMOVE is not set
+# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
@@ -141,35 +156,51 @@ CONFIG_RCU_FANOUT=64
CONFIG_INTEL_TXT=y
-CONFIG_GPIO_LANGWELL=y
+# CONFIG_OF is not set
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_I7300_IDLE=m
-CONFIG_BPF_JIT=y
-
# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
CONFIG_CHECKPOINT_RESTORE=y
# Should be 32bit only, but lacks KConfig depends
# CONFIG_XO15_EBOOK is not set
+CONFIG_THUNDERBOLT=m
+
CONFIG_NTB=m
CONFIG_NTB_NETDEV=m
+CONFIG_NTB_INTEL=m
+CONFIG_NTB_PINGPONG=m
+CONFIG_NTB_TOOL=m
+CONFIG_NTB_TRANSPORT=m
# 10GigE
#
CONFIG_IP1000=m
CONFIG_MLX4_EN=m
CONFIG_MLX4_EN_DCB=y
+CONFIG_MLX4_EN_VXLAN=y
# CONFIG_MLX4_DEBUG is not set
CONFIG_SFC=m
CONFIG_SFC_MCDI_MON=y
CONFIG_SFC_SRIOV=y
-CONFIG_SFC_PTP=y
CONFIG_SFC_MTD=y
+# CONFIG_SFC_MCDI_LOGGING is not set
# Override MTD stuff because SFC_MTD needs it
-CONFIG_MTD_CHAR=m
CONFIG_MTD_BLOCK=m
+CONFIG_HSA_AMD=m
+
+CONFIG_LIBNVDIMM=m
+CONFIG_BTT=y
+CONFIG_ND_BTT=m
+CONFIG_ND_BLK=m
+
+CONFIG_NO_HZ_FULL=y
+# CONFIG_NO_HZ_IDLE is not set
+# CONFIG_NO_HZ_FULL_ALL is not set
+# CONFIG_NO_HZ_FULL_SYSIDLE is not set
+# CONFIG_CONTEXT_TRACKING_FORCE is not set
diff --git a/crash-driver.patch b/crash-driver.patch
index 31e2b329c..4f4cad0ea 100644
--- a/crash-driver.patch
+++ b/crash-driver.patch
@@ -1,66 +1,67 @@
-From 1786bc697d34af944e29437ce44337b0eb8b6799 Mon Sep 17 00:00:00 2001
-From: Kyle McMartin <kyle@dreadnought.bos.jkkm.org>
+From: Dave Anderson <anderson@redhat.com>
Date: Tue, 26 Nov 2013 12:42:46 -0500
Subject: [PATCH] crash-driver
+Bugzilla: N/A
+Upstream-status: Fedora mustard
---
- arch/arm/include/asm/crash.h | 6 ++
- arch/arm64/include/asm/crash.h | 6 ++
- arch/ia64/include/asm/crash.h | 90 +++++++++++++++++++++++++++
- arch/ia64/kernel/ia64_ksyms.c | 3 +
- arch/powerpc/include/asm/crash.h | 6 ++
- arch/s390/include/asm/crash.h | 60 ++++++++++++++++++
- arch/s390/mm/maccess.c | 2 +
- arch/x86/include/asm/crash.h | 6 ++
- drivers/char/Kconfig | 3 +
- drivers/char/Makefile | 2 +
- drivers/char/crash.c | 128 +++++++++++++++++++++++++++++++++++++++
- include/asm-generic/crash.h | 72 ++++++++++++++++++++++
+ arch/arm/include/asm/crash-driver.h | 6 ++
+ arch/arm64/include/asm/crash-driver.h | 6 ++
+ arch/ia64/include/asm/crash-driver.h | 90 ++++++++++++++++++++++
+ arch/ia64/kernel/ia64_ksyms.c | 3 +
+ arch/powerpc/include/asm/crash-driver.h | 6 ++
+ arch/s390/include/asm/crash-driver.h | 60 +++++++++++++++
+ arch/s390/mm/maccess.c | 2 +
+ arch/x86/include/asm/crash-driver.h | 6 ++
+ drivers/char/Kconfig | 3 +
+ drivers/char/Makefile | 2 +
+ drivers/char/crash.c | 128 ++++++++++++++++++++++++++++++++
+ include/asm-generic/crash-driver.h | 72 ++++++++++++++++++
12 files changed, 384 insertions(+)
- create mode 100644 arch/arm/include/asm/crash.h
- create mode 100644 arch/arm64/include/asm/crash.h
- create mode 100644 arch/ia64/include/asm/crash.h
- create mode 100644 arch/powerpc/include/asm/crash.h
- create mode 100644 arch/s390/include/asm/crash.h
- create mode 100644 arch/x86/include/asm/crash.h
+ create mode 100644 arch/arm/include/asm/crash-driver.h
+ create mode 100644 arch/arm64/include/asm/crash-driver.h
+ create mode 100644 arch/ia64/include/asm/crash-driver.h
+ create mode 100644 arch/powerpc/include/asm/crash-driver.h
+ create mode 100644 arch/s390/include/asm/crash-driver.h
+ create mode 100644 arch/x86/include/asm/crash-driver.h
create mode 100644 drivers/char/crash.c
- create mode 100644 include/asm-generic/crash.h
+ create mode 100644 include/asm-generic/crash-driver.h
-diff --git a/arch/arm/include/asm/crash.h b/arch/arm/include/asm/crash.h
+diff --git a/arch/arm/include/asm/crash-driver.h b/arch/arm/include/asm/crash-driver.h
new file mode 100644
-index 0000000..1d2e537
+index 000000000000..06e7ae916601
--- /dev/null
-+++ b/arch/arm/include/asm/crash.h
++++ b/arch/arm/include/asm/crash-driver.h
@@ -0,0 +1,6 @@
+#ifndef _ARM_CRASH_H
+#define _ARM_CRASH_H
+
-+#include <asm-generic/crash.h>
++#include <asm-generic/crash-driver.h>
+
+#endif /* _ARM_CRASH_H */
-diff --git a/arch/arm64/include/asm/crash.h b/arch/arm64/include/asm/crash.h
+diff --git a/arch/arm64/include/asm/crash-driver.h b/arch/arm64/include/asm/crash-driver.h
new file mode 100644
-index 0000000..a7fcc28
+index 000000000000..43b26da0c5d6
--- /dev/null
-+++ b/arch/arm64/include/asm/crash.h
++++ b/arch/arm64/include/asm/crash-driver.h
@@ -0,0 +1,6 @@
+#ifndef _ARM64_CRASH_H
+#define _ARM64_CRASH_H
+
-+#include <asm-generic/crash.h>
++#include <asm-generic/crash-driver.h>
+
+#endif /* _ARM64_CRASH_H */
-diff --git a/arch/ia64/include/asm/crash.h b/arch/ia64/include/asm/crash.h
+diff --git a/arch/ia64/include/asm/crash-driver.h b/arch/ia64/include/asm/crash-driver.h
new file mode 100644
-index 0000000..28bd955
+index 000000000000..404bcb93c112
--- /dev/null
-+++ b/arch/ia64/include/asm/crash.h
++++ b/arch/ia64/include/asm/crash-driver.h
@@ -0,0 +1,90 @@
+#ifndef _ASM_IA64_CRASH_H
+#define _ASM_IA64_CRASH_H
+
+/*
-+ * linux/include/asm-ia64/crash.h
++ * linux/include/asm-ia64/crash-driver.h
+ *
+ * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
+ *
@@ -147,7 +148,7 @@ index 0000000..28bd955
+
+#endif /* _ASM_IA64_CRASH_H */
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
-index 5b7791d..aee4b87 100644
+index 5b7791dd3965..aee4b870c763 100644
--- a/arch/ia64/kernel/ia64_ksyms.c
+++ b/arch/ia64/kernel/ia64_ksyms.c
@@ -84,6 +84,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs);
@@ -160,23 +161,23 @@ index 5b7791d..aee4b87 100644
#if defined(CONFIG_IA64_ESI) || defined(CONFIG_IA64_ESI_MODULE)
extern void esi_call_phys (void);
EXPORT_SYMBOL_GPL(esi_call_phys);
-diff --git a/arch/powerpc/include/asm/crash.h b/arch/powerpc/include/asm/crash.h
+diff --git a/arch/powerpc/include/asm/crash-driver.h b/arch/powerpc/include/asm/crash-driver.h
new file mode 100644
-index 0000000..daa8c4d
+index 000000000000..50092d965dc5
--- /dev/null
-+++ b/arch/powerpc/include/asm/crash.h
++++ b/arch/powerpc/include/asm/crash-driver.h
@@ -0,0 +1,6 @@
+#ifndef _PPC64_CRASH_H
+#define _PPC64_CRASH_H
+
-+#include <asm-generic/crash.h>
++#include <asm-generic/crash-driver.h>
+
+#endif /* _PPC64_CRASH_H */
-diff --git a/arch/s390/include/asm/crash.h b/arch/s390/include/asm/crash.h
+diff --git a/arch/s390/include/asm/crash-driver.h b/arch/s390/include/asm/crash-driver.h
new file mode 100644
-index 0000000..552be5e
+index 000000000000..552be5e2c571
--- /dev/null
-+++ b/arch/s390/include/asm/crash.h
++++ b/arch/s390/include/asm/crash-driver.h
@@ -0,0 +1,60 @@
+#ifndef _S390_CRASH_H
+#define _S390_CRASH_H
@@ -239,10 +240,10 @@ index 0000000..552be5e
+
+#endif /* _S390_CRASH_H */
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
-index d1e0e0c..a2be459 100644
+index 2eb34bdfc613..11ce5c98462c 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
-@@ -219,6 +219,7 @@ void *xlate_dev_mem_ptr(unsigned long addr)
+@@ -193,6 +193,7 @@ void *xlate_dev_mem_ptr(phys_addr_t addr)
put_online_cpus();
return bounce;
}
@@ -250,25 +251,25 @@ index d1e0e0c..a2be459 100644
/*
* Free converted buffer for /dev/mem access (if necessary)
-@@ -228,3 +229,4 @@ void unxlate_dev_mem_ptr(unsigned long addr, void *buf)
+@@ -202,3 +203,4 @@ void unxlate_dev_mem_ptr(phys_addr_t addr, void *buf)
if ((void *) addr != buf)
free_page((unsigned long) buf);
}
+EXPORT_SYMBOL_GPL(unxlate_dev_mem_ptr);
-diff --git a/arch/x86/include/asm/crash.h b/arch/x86/include/asm/crash.h
+diff --git a/arch/x86/include/asm/crash-driver.h b/arch/x86/include/asm/crash-driver.h
new file mode 100644
-index 0000000..27a4156
+index 000000000000..fd4736ec99f5
--- /dev/null
-+++ b/arch/x86/include/asm/crash.h
++++ b/arch/x86/include/asm/crash-driver.h
@@ -0,0 +1,6 @@
+#ifndef _X86_CRASH_H
+#define _X86_CRASH_H
+
-+#include <asm-generic/crash.h>
++#include <asm-generic/crash-driver.h>
+
+#endif /* _X86_CRASH_H */
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index fa3243d..83643e5b 100644
+index a4af8221751e..193f1a7c2ce5 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -4,6 +4,9 @@
@@ -280,20 +281,20 @@ index fa3243d..83643e5b 100644
+
source "drivers/tty/Kconfig"
- config DEVKMEM
+ config DEVMEM
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
-index 7ff1d0d..3ed67af 100644
+index d06cde26031b..0832636fd9bc 100644
--- a/drivers/char/Makefile
+++ b/drivers/char/Makefile
-@@ -62,3 +62,5 @@ obj-$(CONFIG_JS_RTC) += js-rtc.o
- js-rtc-y = rtc.o
+@@ -62,3 +62,5 @@ js-rtc-y = rtc.o
obj-$(CONFIG_TILE_SROM) += tile-srom.o
+ obj-$(CONFIG_XILLYBUS) += xillybus/
+
+obj-$(CONFIG_CRASH) += crash.o
diff --git a/drivers/char/crash.c b/drivers/char/crash.c
new file mode 100644
-index 0000000..a142bb3
+index 000000000000..085378a1d539
--- /dev/null
+++ b/drivers/char/crash.c
@@ -0,0 +1,128 @@
@@ -329,7 +330,7 @@ index 0000000..a142bb3
+#include <asm/io.h>
+#include <asm/uaccess.h>
+#include <asm/types.h>
-+#include <asm/crash.h>
++#include <asm/crash-driver.h>
+
+#define CRASH_VERSION "1.0"
+
@@ -425,17 +426,17 @@ index 0000000..a142bb3
+module_exit(crash_cleanup_module);
+
+MODULE_LICENSE("GPL");
-diff --git a/include/asm-generic/crash.h b/include/asm-generic/crash.h
+diff --git a/include/asm-generic/crash-driver.h b/include/asm-generic/crash-driver.h
new file mode 100644
-index 0000000..8a0a69a
+index 000000000000..25ab9869d566
--- /dev/null
-+++ b/include/asm-generic/crash.h
++++ b/include/asm-generic/crash-driver.h
@@ -0,0 +1,72 @@
+#ifndef __CRASH_H__
+#define __CRASH_H__
+
+/*
-+ * include/linux/crash.h
++ * include/linux/crash-driver.h
+ *
+ * Copyright (c) 2013 Red Hat, Inc. All rights reserved.
+ *
@@ -503,6 +504,3 @@ index 0000000..8a0a69a
+#endif /* __KERNEL__ */
+
+#endif /* __CRASH_H__ */
---
-1.8.3.1
-
diff --git a/criu-no-expert.patch b/criu-no-expert.patch
index 2124427e9..f7e1ffff1 100644
--- a/criu-no-expert.patch
+++ b/criu-no-expert.patch
@@ -1,22 +1,32 @@
+From: "kernel-team@fedoraproject.org" <kernel-team@fedoraproject.org>
+Date: Wed, 30 Jan 2013 10:55:31 -0500
+Subject: [PATCH] criu: no expert
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard
+---
+ init/Kconfig | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
diff --git a/init/Kconfig b/init/Kconfig
-index be8b7f5..7461760 100644
+index 648bb79d6b73..860ca236975f 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -989,7 +989,7 @@ config DEBUG_BLK_CGROUP
+@@ -1137,7 +1137,7 @@ config CGROUP_WRITEBACK
endif # CGROUPS
config CHECKPOINT_RESTORE
- bool "Checkpoint/restore support" if EXPERT
+ bool "Checkpoint/restore support"
+ select PROC_CHILDREN
default n
help
- Enables additional kernel features in a sake of checkpoint/restore.
-@@ -1000,7 +1000,7 @@ config CHECKPOINT_RESTORE
+@@ -1149,7 +1149,7 @@ config CHECKPOINT_RESTORE
If unsure, say N here.
menuconfig NAMESPACES
- bool "Namespaces support" if EXPERT
+ bool "Namespaces support"
+ depends on MULTIUSER
default !EXPERT
help
- Provides the way to make tasks work with different objects using
diff --git a/defaults-acpi-video.patch b/defaults-acpi-video.patch
deleted file mode 100644
index b83f4b614..000000000
--- a/defaults-acpi-video.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index eaef02a..2029819 100644
---- a/drivers/acpi/video.c
-+++ b/drivers/acpi/video.c
-@@ -69,7 +69,7 @@ MODULE_AUTHOR("Bruno Ducrot");
- MODULE_DESCRIPTION("ACPI Video Driver");
- MODULE_LICENSE("GPL");
-
--static bool brightness_switch_enabled = 1;
-+static bool brightness_switch_enabled = 0;
- module_param(brightness_switch_enabled, bool, 0644);
-
- /*
diff --git a/die-floppy-die.patch b/die-floppy-die.patch
index 76db31218..caaa2dde5 100644
--- a/die-floppy-die.patch
+++ b/die-floppy-die.patch
@@ -1,21 +1,23 @@
-From 4ff58b642f80dedb20533978123d89b5ac9b1ed5 Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle@phobos.i.jkkm.org>
Date: Tue, 30 Mar 2010 00:04:29 -0400
-Subject: die-floppy-die
+Subject: [PATCH] die-floppy-die
Kill the floppy.ko pnp modalias. We were surviving just fine without
autoloading floppy drivers, tyvm.
Please feel free to register all complaints in the wastepaper bin.
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard
---
- drivers/block/floppy.c | 3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
+ drivers/block/floppy.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
-index 90c4038..f4a0b90 100644
+index a08cda955285..e320e1e679cf 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
-@@ -4619,8 +4619,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
+@@ -4633,8 +4633,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
{"PNP0700", 0},
{}
};
@@ -25,6 +27,3 @@ index 90c4038..f4a0b90 100644
#else
---
-1.7.0.1
-
diff --git a/disable-i8042-check-on-apple-mac.patch b/disable-i8042-check-on-apple-mac.patch
index f99d0f900..40cdb7df3 100644
--- a/disable-i8042-check-on-apple-mac.patch
+++ b/disable-i8042-check-on-apple-mac.patch
@@ -1,7 +1,6 @@
-From 2a79554c864ac58fa2ad982f0fcee2cc2aa33eb5 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 20 May 2010 10:30:31 -0400
-Subject: Disable i8042 checks on Intel Apple Macs
+Subject: [PATCH] disable i8042 check on apple mac
As those computers never had any i8042 controllers, and the
current lookup code could potentially lock up/hang/wait for
@@ -9,16 +8,19 @@ timeout for long periods of time.
Fixes intermittent hangs on boot on a MacbookAir1,1
+Bugzilla: N/A
+Upstream-status: http://lkml.indiana.edu/hypermail/linux/kernel/1005.0/00938.html (and pinged on Dec 17, 2013)
+
Signed-off-by: Bastien Nocera <hadess@hadess.net>
---
- drivers/input/serio/i8042.c | 22 ++++++++++++++++++++++
- 1 files changed, 22 insertions(+), 0 deletions(-)
+ drivers/input/serio/i8042.c | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
-index 6440a8f..4d7cf98 100644
+index bfb0b2280df0..06b10fe7e65b 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
-@@ -1451,6 +1451,22 @@ static struct platform_driver i8042_driver = {
+@@ -1484,6 +1484,22 @@ static struct platform_driver i8042_driver = {
.shutdown = i8042_shutdown,
};
@@ -41,7 +43,7 @@ index 6440a8f..4d7cf98 100644
static int __init i8042_init(void)
{
struct platform_device *pdev;
-@@ -1458,6 +1474,12 @@ static int __init i8042_init(void)
+@@ -1491,6 +1507,12 @@ static int __init i8042_init(void)
dbg_init();
@@ -54,6 +56,3 @@ index 6440a8f..4d7cf98 100644
err = i8042_platform_init();
if (err)
return err;
---
-1.7.0.1
-
diff --git a/disable-libdw-unwind-on-non-x86.patch b/disable-libdw-unwind-on-non-x86.patch
deleted file mode 100644
index 445fc1942..000000000
--- a/disable-libdw-unwind-on-non-x86.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
-index ee21fa9..19ee413 100644
---- a/tools/perf/config/Makefile
-+++ b/tools/perf/config/Makefile
-@@ -34,6 +34,10 @@ ifeq ($(ARCH),arm)
- LIBUNWIND_LIBS = -lunwind -lunwind-arm
- endif
-
-+ifneq ($(ARCH),x86)
-+ NO_LIBDW_DWARF_UNWIND := 1
-+endif
-+
- ifeq ($(LIBUNWIND_LIBS),)
- NO_LIBUNWIND := 1
- else
diff --git a/dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch b/dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch
deleted file mode 100644
index 2994fc002..000000000
--- a/dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Bugzilla: 1106856
-Upstream-status: 3.16 and CC'd to stable
-
-From 4adc9ea8915ff9904c3279b1b36478482d1c0825 Mon Sep 17 00:00:00 2001
-From: Lukas Czerner <lczerner@redhat.com>
-Date: Wed, 11 Jun 2014 12:28:43 -0400
-Subject: dm thin: update discard_granularity to reflect the thin-pool
- blocksize
-
-DM thinp already checks whether the discard_granularity of the data
-device is a factor of the thin-pool block size. But when using the
-dm-thin-pool's discard passdown support, DM thinp was not selecting the
-max of the underlying data device's discard_granularity and the
-thin-pool's block size.
-
-Update set_discard_limits() to set discard_granularity to the max of
-these values. This enables blkdev_issue_discard() to properly align the
-discards that are sent to the DM thin device on a full block boundary.
-As such each discard will now cover an entire DM thin-pool block and the
-block will be reclaimed.
-
-Reported-by: Zdenek Kabelac <zkabelac@redhat.com>
-Signed-off-by: Lukas Czerner <lczerner@redhat.com>
-Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-Cc: stable@vger.kernel.org
-
-diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
-index a0bdd56..fc9c848 100644
---- a/drivers/md/dm-thin.c
-+++ b/drivers/md/dm-thin.c
-@@ -3094,7 +3094,8 @@ static void set_discard_limits(struct pool_c *pt, struct queue_limits *limits)
- */
- if (pt->adjusted_pf.discard_passdown) {
- data_limits = &bdev_get_queue(pt->data_dev->bdev)->limits;
-- limits->discard_granularity = data_limits->discard_granularity;
-+ limits->discard_granularity = max(data_limits->discard_granularity,
-+ pool->sectors_per_block << SECTOR_SHIFT);
- } else
- limits->discard_granularity = pool->sectors_per_block << SECTOR_SHIFT;
- }
---
-cgit v0.10.1
-
diff --git a/drm-i915-hush-check-crtc-state.patch b/drm-i915-hush-check-crtc-state.patch
index 295cad7b7..7aef532ec 100644
--- a/drm-i915-hush-check-crtc-state.patch
+++ b/drm-i915-hush-check-crtc-state.patch
@@ -1,20 +1,28 @@
-Bugzilla: 1027037 1028785
-Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/035948.html
+From: Adam Jackson <ajax@redhat.com>
+Date: Wed, 13 Nov 2013 10:17:24 -0500
+Subject: [PATCH] drm/i915: hush check crtc state
This is _by far_ the most common backtrace for i915 on retrace.fp.o, and
it's mostly useless noise. There's not enough context when it's generated
to know if something actually went wrong. Downgrade the message to
KMS debugging so we can still get it if we want it.
-diff -up linux-3.13.0-0.rc0.git2.1.fc21.x86_64/drivers/gpu/drm/i915/intel_display.c.jx linux-3.13.0-0.rc0.git2.1.fc21.x86_64/drivers/gpu/drm/i915/intel_display.c
---- linux-3.13.0-0.rc0.git2.1.fc21.x86_64/drivers/gpu/drm/i915/intel_display.c.jx 2013-11-03 18:41:51.000000000 -0500
-+++ linux-3.13.0-0.rc0.git2.1.fc21.x86_64/drivers/gpu/drm/i915/intel_display.c 2013-11-13 10:12:05.781301624 -0500
-@@ -8803,7 +8803,7 @@ check_crtc_state(struct drm_device *dev)
+Bugzilla: 1027037 1028785
+Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/035948.html
+---
+ drivers/gpu/drm/i915/intel_display.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index f75173c20f47..1003782a38c4 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -10917,7 +10917,7 @@ check_crtc_state(struct drm_device *dev)
if (active &&
- !intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
-- WARN(1, "pipe state doesn't match!\n");
+ !intel_pipe_config_compare(dev, crtc->config, &pipe_config)) {
+- I915_STATE_WARN(1, "pipe state doesn't match!\n");
+ DRM_DEBUG_KMS("pipe state doesn't match!\n");
intel_dump_pipe_config(crtc, &pipe_config,
"[hw state]");
- intel_dump_pipe_config(crtc, &crtc->config,
+ intel_dump_pipe_config(crtc, crtc->config,
diff --git a/drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch b/drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch
deleted file mode 100644
index 60a33a6cf..000000000
--- a/drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-Bugzilla: 1094066
-Upstream-status: Sent for 3.16 and CC'd to stable
-
-Return-Path: intel-gfx-bounces@lists.freedesktop.org
-Received: from zmta02.collab.prod.int.phx2.redhat.com (LHLO
- zmta02.collab.prod.int.phx2.redhat.com) (10.5.81.9) by
- zmail15.collab.prod.int.phx2.redhat.com with LMTP; Mon, 9 Jun 2014 11:25:31
- -0400 (EDT)
-Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26])
- by zmta02.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id 096281200BD;
- Mon, 9 Jun 2014 11:25:31 -0400 (EDT)
-Received: from mx1.redhat.com (ext-mx15.extmail.prod.ext.phx2.redhat.com [10.5.110.20])
- by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s59FPUv0027350;
- Mon, 9 Jun 2014 11:25:30 -0400
-Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177])
- by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s59FPTet021179;
- Mon, 9 Jun 2014 11:25:29 -0400
-Received: from gabe.freedesktop.org (localhost [127.0.0.1])
- by gabe.freedesktop.org (Postfix) with ESMTP id 7B8736E587;
- Mon, 9 Jun 2014 08:25:28 -0700 (PDT)
-X-Original-To: intel-gfx@lists.freedesktop.org
-Delivered-To: intel-gfx@lists.freedesktop.org
-Received: from mga11.intel.com (mga11.intel.com [192.55.52.93])
- by gabe.freedesktop.org (Postfix) with ESMTP id D28006E587
- for <intel-gfx@lists.freedesktop.org>; Mon, 9 Jun 2014 08:25:27 -0700 (PDT)
-Received: from fmsmga002.fm.intel.com ([10.253.24.26])
- by fmsmga102.fm.intel.com with ESMTP; 09 Jun 2014 08:24:37 -0700
-X-ExtLoop1: 1
-X-IronPort-AV: E=Sophos;i="4.98,1002,1392192000"; d="scan'208";a="552705861"
-Received: from jnikula-mobl1.fi.intel.com (HELO localhost) ([10.237.72.185])
- by fmsmga002.fm.intel.com with ESMTP; 09 Jun 2014 08:24:35 -0700
-From: Jani Nikula <jani.nikula@intel.com>
-To: intel-gfx@lists.freedesktop.org
-Date: Mon, 9 Jun 2014 18:24:34 +0300
-Message-Id: <1402327474-27930-1-git-send-email-jani.nikula@intel.com>
-Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo
-Cc: jani.nikula@intel.com, Marc Milgram <mmilgram@redhat.com>,
- Stable <stable@vger.kernel.org>, mcy@lm7.fr
-Subject: [Intel-gfx] [PATCH] drm/i915: set backlight duty cycle after
- backlight enable for gen4
-X-BeenThere: intel-gfx@lists.freedesktop.org
-X-Mailman-Version: 2.1.15
-Precedence: list
-List-Id: Intel graphics driver community testing & development
- <intel-gfx.lists.freedesktop.org>
-List-Unsubscribe: <http://lists.freedesktop.org/mailman/options/intel-gfx>,
- <mailto:intel-gfx-request@lists.freedesktop.org?subject=unsubscribe>
-List-Archive: <http://lists.freedesktop.org/archives/intel-gfx>
-List-Post: <mailto:intel-gfx@lists.freedesktop.org>
-List-Help: <mailto:intel-gfx-request@lists.freedesktop.org?subject=help>
-List-Subscribe: <http://lists.freedesktop.org/mailman/listinfo/intel-gfx>,
- <mailto:intel-gfx-request@lists.freedesktop.org?subject=subscribe>
-MIME-Version: 1.0
-Content-Type: text/plain; charset="us-ascii"
-Content-Transfer-Encoding: 7bit
-Errors-To: intel-gfx-bounces@lists.freedesktop.org
-Sender: "Intel-gfx" <intel-gfx-bounces@lists.freedesktop.org>
-X-RedHat-Spam-Score: -5.25 (BAYES_00,DCC_REPUT_00_12,RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,URIBL_BLOCKED)
-X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26
-X-Scanned-By: MIMEDefang 2.68 on 10.5.110.20
-
-For reasons I can't claim to fully understand gen4 seems to require
-backlight duty cycle setting after the backlight has been enabled, or
-else black screen follows. I don't have documentation for the correct
-sequence on gen4 either. Confirmed on Dell Latitude D630 and MacBook4,1.
-
-This fixes a regression introduced by
-commit b35684b8fa94e04f55fd38bf672b737741d2f9e2
-Author: Jani Nikula <jani.nikula@intel.com>
-Date: Thu Nov 14 12:13:41 2013 +0200
-
- drm/i915: do full backlight setup at enable time
-
-Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=75791
-Reported-and-tested-by: mcy@lm7.fr
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79423
-Reported-and-tested-by: Marc Milgram <mmilgram@redhat.com>
-Cc: Stable <stable@vger.kernel.org> # 3.14+
-Signed-off-by: Jani Nikula <jani.nikula@intel.com>
----
- drivers/gpu/drm/i915/intel_panel.c | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
-index 5e6c888b4928..38a98570d10c 100644
---- a/drivers/gpu/drm/i915/intel_panel.c
-+++ b/drivers/gpu/drm/i915/intel_panel.c
-@@ -798,9 +798,6 @@ static void i965_enable_backlight(struct intel_connector *connector)
- ctl = freq << 16;
- I915_WRITE(BLC_PWM_CTL, ctl);
-
-- /* XXX: combine this into above write? */
-- intel_panel_actually_set_backlight(connector, panel->backlight.level);
--
- ctl2 = BLM_PIPE(pipe);
- if (panel->backlight.combination_mode)
- ctl2 |= BLM_COMBINATION_MODE;
-@@ -809,6 +806,8 @@ static void i965_enable_backlight(struct intel_connector *connector)
- I915_WRITE(BLC_PWM_CTL2, ctl2);
- POSTING_READ(BLC_PWM_CTL2);
- I915_WRITE(BLC_PWM_CTL2, ctl2 | BLM_PWM_ENABLE);
-+
-+ intel_panel_actually_set_backlight(connector, panel->backlight.level);
- }
-
- static void vlv_enable_backlight(struct intel_connector *connector)
---
-1.9.1
-
-_______________________________________________
-Intel-gfx mailing list
-Intel-gfx@lists.freedesktop.org
-http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drm-i915-turn-off-wc-mmaps.patch b/drm-i915-turn-off-wc-mmaps.patch
new file mode 100644
index 000000000..c81b89226
--- /dev/null
+++ b/drm-i915-turn-off-wc-mmaps.patch
@@ -0,0 +1,21 @@
+From: Dave Airlie <airlied@redhat.com>
+Date: Thu, 4 Jun 2015 07:12:20 -0400
+Subject: [PATCH] drm: i915: turn off wc mmaps
+
+---
+ drivers/gpu/drm/i915/i915_dma.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
+index d2df321ba634..775a5b11a366 100644
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -151,7 +151,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
+ value = 1;
+ break;
+ case I915_PARAM_MMAP_VERSION:
+- value = 1;
++ value = 0;
+ break;
+ case I915_PARAM_SUBSLICE_TOTAL:
+ value = INTEL_INFO(dev)->subslice_total;
diff --git a/drm-qxl-validate-monitors-config-modes.patch b/drm-qxl-validate-monitors-config-modes.patch
new file mode 100644
index 000000000..0b2c93804
--- /dev/null
+++ b/drm-qxl-validate-monitors-config-modes.patch
@@ -0,0 +1,148 @@
+From 9851cf5d02703ab60b58a2335481cc195c72ff9c Mon Sep 17 00:00:00 2001
+From: Jonathon Jongsma <jjongsma@redhat.com>
+Date: Thu, 20 Aug 2015 12:04:32 -0700
+Subject: [PATCH] drm/qxl: validate monitors config modes
+
+Due to some recent changes in
+drm_helper_probe_single_connector_modes_merge_bits(), old custom modes
+were not being pruned properly. In current kernels,
+drm_mode_validate_basic() is called to sanity-check each mode in the
+list. If the sanity-check passes, the mode's status gets set to to
+MODE_OK. In older kernels this check was not done, so old custom modes
+would still have a status of MODE_UNVERIFIED at this point, and would
+therefore be pruned later in the function.
+
+As a result of this new behavior, the list of modes for a device always
+includes every custom mode ever configured for the device, with the
+largest one listed first. Since desktop environments usually choose the
+first preferred mode when a hotplug event is emitted, this had the
+result of making it very difficult for the user to reduce the size of
+the display.
+
+The qxl driver did implement the mode_valid connector function, but it
+was empty. In order to restore the old behavior where old custom modes
+are pruned, we implement a proper mode_valid function for the qxl
+driver. This function now checks each mode against the last configured
+custom mode and the list of standard modes. If the mode doesn't match
+any of these, its status is set to MODE_BAD so that it will be pruned as
+expected.
+
+Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
+Cc: stable at vger.kernel.org
+---
+ drivers/gpu/drm/qxl/qxl_display.c | 66 ++++++++++++++++++++++++---------------
+ drivers/gpu/drm/qxl/qxl_drv.h | 2 ++
+ 2 files changed, 42 insertions(+), 26 deletions(-)
+
+diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
+index a8dbb3ef4e3c..7c6225c84ba6 100644
+--- a/drivers/gpu/drm/qxl/qxl_display.c
++++ b/drivers/gpu/drm/qxl/qxl_display.c
+@@ -160,9 +160,35 @@ static int qxl_add_monitors_config_modes(struct drm_connector *connector,
+ *pwidth = head->width;
+ *pheight = head->height;
+ drm_mode_probed_add(connector, mode);
++ /* remember the last custom size for mode validation */
++ qdev->monitors_config_width = mode->hdisplay;
++ qdev->monitors_config_height = mode->vdisplay;
+ return 1;
+ }
+
++static struct mode_size {
++ int w;
++ int h;
++} common_modes[] = {
++ { 640, 480},
++ { 720, 480},
++ { 800, 600},
++ { 848, 480},
++ {1024, 768},
++ {1152, 768},
++ {1280, 720},
++ {1280, 800},
++ {1280, 854},
++ {1280, 960},
++ {1280, 1024},
++ {1440, 900},
++ {1400, 1050},
++ {1680, 1050},
++ {1600, 1200},
++ {1920, 1080},
++ {1920, 1200}
++};
++
+ static int qxl_add_common_modes(struct drm_connector *connector,
+ unsigned pwidth,
+ unsigned pheight)
+@@ -170,29 +196,6 @@ static int qxl_add_common_modes(struct drm_connector *connector,
+ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *mode = NULL;
+ int i;
+- struct mode_size {
+- int w;
+- int h;
+- } common_modes[] = {
+- { 640, 480},
+- { 720, 480},
+- { 800, 600},
+- { 848, 480},
+- {1024, 768},
+- {1152, 768},
+- {1280, 720},
+- {1280, 800},
+- {1280, 854},
+- {1280, 960},
+- {1280, 1024},
+- {1440, 900},
+- {1400, 1050},
+- {1680, 1050},
+- {1600, 1200},
+- {1920, 1080},
+- {1920, 1200}
+- };
+-
+ for (i = 0; i < ARRAY_SIZE(common_modes); i++) {
+ mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h,
+ 60, false, false, false);
+@@ -823,11 +826,22 @@ static int qxl_conn_get_modes(struct drm_connector *connector)
+ static int qxl_conn_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
++ struct drm_device *ddev = connector->dev;
++ struct qxl_device *qdev = ddev->dev_private;
++ int i;
++
+ /* TODO: is this called for user defined modes? (xrandr --add-mode)
+ * TODO: check that the mode fits in the framebuffer */
+- DRM_DEBUG("%s: %dx%d status=%d\n", mode->name, mode->hdisplay,
+- mode->vdisplay, mode->status);
+- return MODE_OK;
++
++ if(qdev->monitors_config_width == mode->hdisplay &&
++ qdev->monitors_config_height == mode->vdisplay)
++ return MODE_OK;
++
++ for (i = 0; i < ARRAY_SIZE(common_modes); i++) {
++ if (common_modes[i].w == mode->hdisplay && common_modes[i].h == mode->vdisplay)
++ return MODE_OK;
++ }
++ return MODE_BAD;
+ }
+
+ static struct drm_encoder *qxl_best_encoder(struct drm_connector *connector)
+diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
+index d8549690801d..01a86948eb8c 100644
+--- a/drivers/gpu/drm/qxl/qxl_drv.h
++++ b/drivers/gpu/drm/qxl/qxl_drv.h
+@@ -325,6 +325,8 @@ struct qxl_device {
+ struct work_struct fb_work;
+
+ struct drm_property *hotplug_mode_update_property;
++ int monitors_config_width;
++ int monitors_config_height;
+ };
+
+ /* forward declaration for QXL_INFO_IO */
+--
+2.4.3
+
diff --git a/drm-radeon-Disable-writeback-by-default-on-ppc.patch b/drm-radeon-Disable-writeback-by-default-on-ppc.patch
deleted file mode 100644
index 0defb1340..000000000
--- a/drm-radeon-Disable-writeback-by-default-on-ppc.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From b67e0a6a7409f9c1a12e573fb7d8d80ee455b103 Mon Sep 17 00:00:00 2001
-From: Adam Jackson <ajax@redhat.com>
-Date: Mon, 17 Jun 2013 09:59:34 -0400
-Subject: [PATCH] drm/radeon: Disable writeback by default on ppc
-
-At least on an IBM Power 720, this check passes, but several piglit
-tests will reliably trigger GPU resets due to the ring buffer pointers
-not being updated. There's probably a better way to limit this to just
-affected machines though.
-
-Signed-off-by: Adam Jackson <ajax@redhat.com>
----
- drivers/gpu/drm/radeon/r600_cp.c | 7 +++++++
- drivers/gpu/drm/radeon/radeon_cp.c | 7 +++++++
- drivers/gpu/drm/radeon/radeon_device.c | 4 ++--
- drivers/gpu/drm/radeon/radeon_drv.c | 2 +-
- 4 files changed, 17 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c
-index 1c51c08..ef28532 100644
---- a/drivers/gpu/drm/radeon/r600_cp.c
-+++ b/drivers/gpu/drm/radeon/r600_cp.c
-@@ -552,6 +552,13 @@ static void r600_test_writeback(drm_radeon_private_t *dev_priv)
- dev_priv->writeback_works = 0;
- DRM_INFO("writeback test failed\n");
- }
-+#if defined(__ppc__) || defined(__ppc64__)
-+ /* the test might succeed on ppc, but it's usually not reliable */
-+ if (radeon_no_wb == -1) {
-+ radeon_no_wb = 1;
-+ DRM_INFO("not trusting writeback test due to arch quirk\n");
-+ }
-+#endif
- if (radeon_no_wb == 1) {
- dev_priv->writeback_works = 0;
- DRM_INFO("writeback forced off\n");
-diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
-index efc4f64..a967b33 100644
---- a/drivers/gpu/drm/radeon/radeon_cp.c
-+++ b/drivers/gpu/drm/radeon/radeon_cp.c
-@@ -892,6 +892,13 @@ static void radeon_test_writeback(drm_radeon_private_t * dev_priv)
- dev_priv->writeback_works = 0;
- DRM_INFO("writeback test failed\n");
- }
-+#if defined(__ppc__) || defined(__ppc64__)
-+ /* the test might succeed on ppc, but it's usually not reliable */
-+ if (radeon_no_wb == -1) {
-+ radeon_no_wb = 1;
-+ DRM_INFO("not trusting writeback test due to arch quirk\n");
-+ }
-+#endif
- if (radeon_no_wb == 1) {
- dev_priv->writeback_works = 0;
- DRM_INFO("writeback forced off\n");
-diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
-index 1899738..524046e 100644
---- a/drivers/gpu/drm/radeon/radeon_device.c
-+++ b/drivers/gpu/drm/radeon/radeon_device.c
-@@ -322,8 +322,8 @@ int radeon_wb_init(struct radeon_device *rdev)
- /* disable event_write fences */
- rdev->wb.use_event = false;
- /* disabled via module param */
-- if (radeon_no_wb == 1) {
-- rdev->wb.enabled = false;
-+ if (radeon_no_wb != -1) {
-+ rdev->wb.enabled = !!radeon_no_wb;
- } else {
- if (rdev->flags & RADEON_IS_AGP) {
- /* often unreliable on AGP */
-diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
-index 094e7e5..04809d4 100644
---- a/drivers/gpu/drm/radeon/radeon_drv.c
-+++ b/drivers/gpu/drm/radeon/radeon_drv.c
-@@ -146,7 +146,7 @@ static inline void radeon_register_atpx_handler(void) {}
- static inline void radeon_unregister_atpx_handler(void) {}
- #endif
-
--int radeon_no_wb;
-+int radeon_no_wb = -1;
- int radeon_modeset = -1;
- int radeon_dynclks = -1;
- int radeon_r4xx_atom = 0;
---
-1.8.2.1
-
diff --git a/drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch b/drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch
new file mode 100644
index 000000000..70204e5e9
--- /dev/null
+++ b/drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch
@@ -0,0 +1,60 @@
+From a19afebb883f2a02ecf4b8d5a114ce6957a59238 Mon Sep 17 00:00:00 2001
+From: Thomas Hellstrom <thellstrom@vmware.com>
+Date: Wed, 26 Aug 2015 05:49:21 -0700
+Subject: [PATCH 2/2] drm/vmwgfx: Allow dropped masters render-node like access
+ on legacy nodes v2
+
+Applications like gnome-shell may try to render after dropping master
+privileges. Since the driver should now be safe against this scenario,
+allow those applications to use their legacy node like a render node.
+
+v2: Add missing return statement.
+
+Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
+Reviewed-by: Sinclair Yeh <syeh@vmware.com>
+---
+ drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 7 ++++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 6 ++++++
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+index a4766acd0ea2..d022b509f1ac 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+@@ -993,10 +993,15 @@ static struct vmw_master *vmw_master_check(struct drm_device *dev,
+ }
+
+ /*
+- * Check if we were previously master, but now dropped.
++ * Check if we were previously master, but now dropped. In that
++ * case, allow at least render node functionality.
+ */
+ if (vmw_fp->locked_master) {
+ mutex_unlock(&dev->master_mutex);
++
++ if (flags & DRM_RENDER_ALLOW)
++ return NULL;
++
+ DRM_ERROR("Dropped master trying to access ioctl that "
+ "requires authentication.\n");
+ return ERR_PTR(-EACCES);
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+index 4d0c98edeb6a..7fc3e8abd0c4 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+@@ -906,6 +906,12 @@ vmw_surface_handle_reference(struct vmw_private *dev_priv,
+ "surface reference.\n");
+ return -EACCES;
+ }
++ if (ACCESS_ONCE(vmw_fpriv(file_priv)->locked_master)) {
++ DRM_ERROR("Locked master refused legacy "
++ "surface reference.\n");
++ return -EACCES;
++ }
++
+ handle = u_handle;
+ }
+
+--
+2.4.3
+
diff --git a/e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch b/e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch
deleted file mode 100644
index 1e51db493..000000000
--- a/e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch
+++ /dev/null
@@ -1,287 +0,0 @@
-Bugzilla: 1064516
-Upstream-status: Sent for 3.16
-
-From b3e5bf1ff32cbc58c56675498565020460c683cd Mon Sep 17 00:00:00 2001
-From: David Ertman <davidx.m.ertman@intel.com>
-Date: Tue, 6 May 2014 03:50:17 +0000
-Subject: e1000e: Failure to write SHRA turns on PROMISC mode
-
-Previously, the check to turn on promiscuous mode only took into account
-the total number of SHared Receive Address (SHRA) registers and if the
-request was for a register within that range. It is possible that the
-Management Engine might have locked a number of SHRA and not allowed a
-new address to be written to the requested register.
-
-Add a function to determine the number of unlocked SHRA registers. Then
-determine if the number of registers available is sufficient for our needs,
-if not then return -ENOMEM so that UNICAST PROMISC mode is activated.
-
-Since the method by which ME claims SHRA registers is non-deterministic,
-also add a return value to the function attempting to write an address
-to a SHRA, and return a -E1000_ERR_CONFIG if the write fails. The error
-will be passed up the function chain and allow the driver to also set
-UNICAST PROMISC when this happens.
-
-Cc: Vlad Yasevich <vyasevic@redhat.com>
-Signed-off-by: Dave Ertman <davidx.m.ertman@intel.com>
-Tested-by: Aaron Brown <aaron.f.brown@intel.com>
-Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-
-diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
-index a5f6b11..08f22f3 100644
---- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c
-+++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
-@@ -1365,6 +1365,7 @@ static const struct e1000_mac_operations es2_mac_ops = {
- .setup_led = e1000e_setup_led_generic,
- .config_collision_dist = e1000e_config_collision_dist_generic,
- .rar_set = e1000e_rar_set_generic,
-+ .rar_get_count = e1000e_rar_get_count_generic,
- };
-
- static const struct e1000_phy_operations es2_phy_ops = {
-diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
-index e0aa7f1..218481e 100644
---- a/drivers/net/ethernet/intel/e1000e/82571.c
-+++ b/drivers/net/ethernet/intel/e1000e/82571.c
-@@ -1896,6 +1896,7 @@ static const struct e1000_mac_operations e82571_mac_ops = {
- .config_collision_dist = e1000e_config_collision_dist_generic,
- .read_mac_addr = e1000_read_mac_addr_82571,
- .rar_set = e1000e_rar_set_generic,
-+ .rar_get_count = e1000e_rar_get_count_generic,
- };
-
- static const struct e1000_phy_operations e82_phy_ops_igp = {
-diff --git a/drivers/net/ethernet/intel/e1000e/hw.h b/drivers/net/ethernet/intel/e1000e/hw.h
-index 6b3de5f..72f5475 100644
---- a/drivers/net/ethernet/intel/e1000e/hw.h
-+++ b/drivers/net/ethernet/intel/e1000e/hw.h
-@@ -469,8 +469,9 @@ struct e1000_mac_operations {
- s32 (*setup_led)(struct e1000_hw *);
- void (*write_vfta)(struct e1000_hw *, u32, u32);
- void (*config_collision_dist)(struct e1000_hw *);
-- void (*rar_set)(struct e1000_hw *, u8 *, u32);
-+ int (*rar_set)(struct e1000_hw *, u8 *, u32);
- s32 (*read_mac_addr)(struct e1000_hw *);
-+ u32 (*rar_get_count)(struct e1000_hw *);
- };
-
- /* When to use various PHY register access functions:
-diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
-index 5f55395..b75862d 100644
---- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
-+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
-@@ -139,8 +139,9 @@ static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
- static s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw);
- static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw);
- static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw);
--static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index);
--static void e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index);
-+static int e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index);
-+static int e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index);
-+static u32 e1000_rar_get_count_pch_lpt(struct e1000_hw *hw);
- static s32 e1000_k1_workaround_lv(struct e1000_hw *hw);
- static void e1000_gate_hw_phy_config_ich8lan(struct e1000_hw *hw, bool gate);
- static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force);
-@@ -704,6 +705,7 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
- mac->ops.rar_set = e1000_rar_set_pch_lpt;
- mac->ops.setup_physical_interface =
- e1000_setup_copper_link_pch_lpt;
-+ mac->ops.rar_get_count = e1000_rar_get_count_pch_lpt;
- }
-
- /* Enable PCS Lock-loss workaround for ICH8 */
-@@ -1668,7 +1670,7 @@ static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw)
- * contain the MAC address but RAR[1-6] are reserved for manageability (ME).
- * Use SHRA[0-3] in place of those reserved for ME.
- **/
--static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index)
-+static int e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index)
- {
- u32 rar_low, rar_high;
-
-@@ -1690,7 +1692,7 @@ static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index)
- e1e_flush();
- ew32(RAH(index), rar_high);
- e1e_flush();
-- return;
-+ return 0;
- }
-
- /* RAR[1-6] are owned by manageability. Skip those and program the
-@@ -1713,7 +1715,7 @@ static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index)
- /* verify the register updates */
- if ((er32(SHRAL(index - 1)) == rar_low) &&
- (er32(SHRAH(index - 1)) == rar_high))
-- return;
-+ return 0;
-
- e_dbg("SHRA[%d] might be locked by ME - FWSM=0x%8.8x\n",
- (index - 1), er32(FWSM));
-@@ -1721,6 +1723,43 @@ static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index)
-
- out:
- e_dbg("Failed to write receive address at index %d\n", index);
-+ return -E1000_ERR_CONFIG;
-+}
-+
-+/**
-+ * e1000_rar_get_count_pch_lpt - Get the number of available SHRA
-+ * @hw: pointer to the HW structure
-+ *
-+ * Get the number of available receive registers that the Host can
-+ * program. SHRA[0-10] are the shared receive address registers
-+ * that are shared between the Host and manageability engine (ME).
-+ * ME can reserve any number of addresses and the host needs to be
-+ * able to tell how many available registers it has access to.
-+ **/
-+static u32 e1000_rar_get_count_pch_lpt(struct e1000_hw *hw)
-+{
-+ u32 wlock_mac;
-+ u32 num_entries;
-+
-+ wlock_mac = er32(FWSM) & E1000_FWSM_WLOCK_MAC_MASK;
-+ wlock_mac >>= E1000_FWSM_WLOCK_MAC_SHIFT;
-+
-+ switch (wlock_mac) {
-+ case 0:
-+ /* All SHRA[0..10] and RAR[0] available */
-+ num_entries = hw->mac.rar_entry_count;
-+ break;
-+ case 1:
-+ /* Only RAR[0] available */
-+ num_entries = 1;
-+ break;
-+ default:
-+ /* SHRA[0..(wlock_mac - 1)] available + RAR[0] */
-+ num_entries = wlock_mac + 1;
-+ break;
-+ }
-+
-+ return num_entries;
- }
-
- /**
-@@ -1734,7 +1773,7 @@ out:
- * contain the MAC address. SHRA[0-10] are the shared receive address
- * registers that are shared between the Host and manageability engine (ME).
- **/
--static void e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index)
-+static int e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index)
- {
- u32 rar_low, rar_high;
- u32 wlock_mac;
-@@ -1756,7 +1795,7 @@ static void e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index)
- e1e_flush();
- ew32(RAH(index), rar_high);
- e1e_flush();
-- return;
-+ return 0;
- }
-
- /* The manageability engine (ME) can lock certain SHRAR registers that
-@@ -1788,12 +1827,13 @@ static void e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index)
- /* verify the register updates */
- if ((er32(SHRAL_PCH_LPT(index - 1)) == rar_low) &&
- (er32(SHRAH_PCH_LPT(index - 1)) == rar_high))
-- return;
-+ return 0;
- }
- }
-
- out:
- e_dbg("Failed to write receive address at index %d\n", index);
-+ return -E1000_ERR_CONFIG;
- }
-
- /**
-@@ -4977,6 +5017,7 @@ static const struct e1000_mac_operations ich8_mac_ops = {
- /* id_led_init dependent on mac type */
- .config_collision_dist = e1000e_config_collision_dist_generic,
- .rar_set = e1000e_rar_set_generic,
-+ .rar_get_count = e1000e_rar_get_count_generic,
- };
-
- static const struct e1000_phy_operations ich8_phy_ops = {
-diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c
-index baa0a46..8c386f3a 100644
---- a/drivers/net/ethernet/intel/e1000e/mac.c
-+++ b/drivers/net/ethernet/intel/e1000e/mac.c
-@@ -211,6 +211,11 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw)
- return 0;
- }
-
-+u32 e1000e_rar_get_count_generic(struct e1000_hw *hw)
-+{
-+ return hw->mac.rar_entry_count;
-+}
-+
- /**
- * e1000e_rar_set_generic - Set receive address register
- * @hw: pointer to the HW structure
-@@ -220,7 +225,7 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw)
- * Sets the receive address array register at index to the address passed
- * in by addr.
- **/
--void e1000e_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index)
-+int e1000e_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index)
- {
- u32 rar_low, rar_high;
-
-@@ -244,6 +249,8 @@ void e1000e_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index)
- e1e_flush();
- ew32(RAH(index), rar_high);
- e1e_flush();
-+
-+ return 0;
- }
-
- /**
-diff --git a/drivers/net/ethernet/intel/e1000e/mac.h b/drivers/net/ethernet/intel/e1000e/mac.h
-index 4e81c28..0513d90 100644
---- a/drivers/net/ethernet/intel/e1000e/mac.h
-+++ b/drivers/net/ethernet/intel/e1000e/mac.h
-@@ -61,7 +61,8 @@ void e1000e_update_adaptive(struct e1000_hw *hw);
- void e1000_write_vfta_generic(struct e1000_hw *hw, u32 offset, u32 value);
-
- void e1000_set_lan_id_multi_port_pcie(struct e1000_hw *hw);
--void e1000e_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index);
-+u32 e1000e_rar_get_count_generic(struct e1000_hw *hw);
-+int e1000e_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index);
- void e1000e_config_collision_dist_generic(struct e1000_hw *hw);
-
- #endif
-diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
-index e4207ef..6084e6b 100644
---- a/drivers/net/ethernet/intel/e1000e/netdev.c
-+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
-@@ -3311,9 +3311,11 @@ static int e1000e_write_uc_addr_list(struct net_device *netdev)
- {
- struct e1000_adapter *adapter = netdev_priv(netdev);
- struct e1000_hw *hw = &adapter->hw;
-- unsigned int rar_entries = hw->mac.rar_entry_count;
-+ unsigned int rar_entries;
- int count = 0;
-
-+ rar_entries = hw->mac.ops.rar_get_count(hw);
-+
- /* save a rar entry for our hardware address */
- rar_entries--;
-
-@@ -3332,9 +3334,13 @@ static int e1000e_write_uc_addr_list(struct net_device *netdev)
- * combining
- */
- netdev_for_each_uc_addr(ha, netdev) {
-+ int rval;
-+
- if (!rar_entries)
- break;
-- hw->mac.ops.rar_set(hw, ha->addr, rar_entries--);
-+ rval = hw->mac.ops.rar_set(hw, ha->addr, rar_entries--);
-+ if (rval < 0)
-+ return -ENOMEM;
- count++;
- }
- }
---
-cgit v0.10.1
-
diff --git a/eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch b/eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch
deleted file mode 100644
index 4cb493325..000000000
--- a/eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Bugzilla: 1097463
-Upstream-status: Sent for 3.16
-
-From 7ad066ecd4dfb4c36fb00f9f9eb1a5d6099db834 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:02 +0200
-Subject: [PATCH 05/14] eeepc-wmi: Add no backlight quirk for Asus H87I-PLUS
- Motherboard
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1097436
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/eeepc-wmi.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/drivers/platform/x86/eeepc-wmi.c b/drivers/platform/x86/eeepc-wmi.c
-index 6112933f6278..a7286bbfe28e 100644
---- a/drivers/platform/x86/eeepc-wmi.c
-+++ b/drivers/platform/x86/eeepc-wmi.c
-@@ -114,6 +114,10 @@ static struct quirk_entry quirk_asus_x101ch = {
- .wmi_backlight_power = true,
- };
-
-+static struct quirk_entry quirk_asus_no_backlight = {
-+ .no_backlight = true,
-+};
-+
- static struct quirk_entry *quirks;
-
- static void et2012_quirks(void)
-@@ -182,6 +186,15 @@ static struct dmi_system_id asus_quirks[] = {
- },
- .driver_data = &quirk_asus_x101ch,
- },
-+ {
-+ .callback = dmi_matched,
-+ .ident = "ASUSTeK Computer INC. H87I-PLUS",
-+ .matches = {
-+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_BOARD_NAME, "H87I-PLUS"),
-+ },
-+ .driver_data = &quirk_asus_no_backlight,
-+ },
- {},
- };
-
---
-1.9.0
-
diff --git a/efi-Add-EFI_SECURE_BOOT-bit.patch b/efi-Add-EFI_SECURE_BOOT-bit.patch
new file mode 100644
index 000000000..318a8e70d
--- /dev/null
+++ b/efi-Add-EFI_SECURE_BOOT-bit.patch
@@ -0,0 +1,39 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Tue, 27 Aug 2013 13:33:03 -0400
+Subject: [PATCH] efi: Add EFI_SECURE_BOOT bit
+
+UEFI machines can be booted in Secure Boot mode. Add a EFI_SECURE_BOOT bit
+for use with efi_enabled.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ arch/x86/kernel/setup.c | 2 ++
+ include/linux/efi.h | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
+index c2e4f52cad30..5def6b4143fa 100644
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -1162,7 +1162,9 @@ void __init setup_arch(char **cmdline_p)
+
+ #ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
+ if (boot_params.secure_boot) {
++ set_bit(EFI_SECURE_BOOT, &efi.flags);
+ enforce_signed_modules();
++ pr_info("Secure boot enabled\n");
+ }
+ #endif
+
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index 85ef051ac6fb..de3e45088d4a 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -959,6 +959,7 @@ extern int __init efi_setup_pcdp_console(char *);
+ #define EFI_PARAVIRT 6 /* Access is via a paravirt interface */
+ #define EFI_ARCH_1 7 /* First arch-specific bit */
+ #define EFI_DBG 8 /* Print additional debug info at runtime */
++#define EFI_SECURE_BOOT 9 /* Are we in Secure Boot mode? */
+
+ #ifdef CONFIG_EFI
+ /*
diff --git a/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch b/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
new file mode 100644
index 000000000..4e0861ce8
--- /dev/null
+++ b/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
@@ -0,0 +1,54 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Tue, 5 Feb 2013 19:25:05 -0500
+Subject: [PATCH] efi: Disable secure boot if shim is in insecure mode
+
+A user can manually tell the shim boot loader to disable validation of
+images it loads. When a user does this, it creates a UEFI variable called
+MokSBState that does not have the runtime attribute set. Given that the
+user explicitly disabled validation, we can honor that and not enable
+secure boot mode if that variable is set.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ arch/x86/boot/compressed/eboot.c | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
+index 105e7360d747..83fc4e9888ee 100644
+--- a/arch/x86/boot/compressed/eboot.c
++++ b/arch/x86/boot/compressed/eboot.c
+@@ -830,8 +830,9 @@ out:
+
+ static int get_secure_boot(void)
+ {
+- u8 sb, setup;
++ u8 sb, setup, moksbstate;
+ unsigned long datasize = sizeof(sb);
++ u32 attr;
+ efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
+ efi_status_t status;
+
+@@ -855,6 +856,23 @@ static int get_secure_boot(void)
+ if (setup == 1)
+ return 0;
+
++ /* See if a user has put shim into insecure_mode. If so, and the variable
++ * doesn't have the runtime attribute set, we might as well honor that.
++ */
++ var_guid = EFI_SHIM_LOCK_GUID;
++ status = efi_early->call((unsigned long)sys_table->runtime->get_variable,
++ L"MokSBState", &var_guid, &attr, &datasize,
++ &moksbstate);
++
++ /* If it fails, we don't care why. Default to secure */
++ if (status != EFI_SUCCESS)
++ return 1;
++
++ if (!(attr & EFI_VARIABLE_RUNTIME_ACCESS)) {
++ if (moksbstate == 1)
++ return 0;
++ }
++
+ return 1;
+ }
+
diff --git a/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch b/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
new file mode 100644
index 000000000..2b9410db8
--- /dev/null
+++ b/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
@@ -0,0 +1,26 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Tue, 27 Aug 2013 13:28:43 -0400
+Subject: [PATCH] efi: Make EFI_SECURE_BOOT_SIG_ENFORCE depend on EFI
+
+The functionality of the config option is dependent upon the platform being
+UEFI based. Reflect this in the config deps.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ arch/x86/Kconfig | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
+index ab403a636357..5dac78119fa7 100644
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -1696,7 +1696,8 @@ config EFI_MIXED
+ If unsure, say N.
+
+ config EFI_SECURE_BOOT_SIG_ENFORCE
+- def_bool n
++ def_bool n
++ depends on EFI
+ prompt "Force module signing when UEFI Secure Boot is enabled"
+ ---help---
+ UEFI Secure Boot provides a mechanism for ensuring that the
diff --git a/elantech-Deal-with-clickpads-reporting-right-button-.patch b/elantech-Deal-with-clickpads-reporting-right-button-.patch
deleted file mode 100644
index 4da9e65b6..000000000
--- a/elantech-Deal-with-clickpads-reporting-right-button-.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-Bugzilla: 1103528
-Upstream-status: Sent for 3.16
-
-From 3b629bf4b018ece0c7b4d1c03bdc0eb69c884531 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Thu, 5 Jun 2014 11:48:30 +0200
-Subject: [PATCH] elantech: Deal with clickpads reporting right button events
-
-At least the Dell Vostro 5470 elantech *clickpad* reports right button
-clicks when clicked in the right bottom area.
-
-This is different from how (elantech) clickpads normally operate,
-normally no matter where the user clicks on the pad the pad always reports
-a left button event, since there is only 1 hardware button beneath the path.
-
-It is unknown if this is caused by Dell having put 2 buttons under the pad,
-one under each bottom corner, or if this is something caused by the specific
-firmware in this clickpad.
-
-Since this however still clearly is a real clickpad hardware-wise, we still
-want to report it as such to userspace, so that things like finger movement
-in the bottom area can be properly ignored as it should be on clickpads.
-
-So deal with this weirdness by simply mapping a right click to a left click
-on elantech clickpads. As an added advantage this is something which we can
-simply do on all elantech clickpads, so no need to add special quirks for
-this weird model.
-
-Reported-by: Elder Marco <eldermarco@gmail.com>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/input/mouse/elantech.c | 22 ++++++++++++++++++----
- 1 file changed, 18 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
-index 4d79821..846926d 100644
---- a/drivers/input/mouse/elantech.c
-+++ b/drivers/input/mouse/elantech.c
-@@ -473,8 +473,15 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse,
- input_report_key(dev, BTN_TOOL_FINGER, fingers == 1);
- input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2);
- input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3);
-- input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
-- input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
-+
-+ /* For clickpads map both buttons to BTN_LEFT */
-+ if (etd->fw_version & 0x001000) {
-+ input_report_key(dev, BTN_LEFT, packet[0] & 0x03);
-+ } else {
-+ input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
-+ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
-+ }
-+
- input_report_abs(dev, ABS_PRESSURE, pres);
- input_report_abs(dev, ABS_TOOL_WIDTH, width);
-
-@@ -484,10 +491,17 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse,
- static void elantech_input_sync_v4(struct psmouse *psmouse)
- {
- struct input_dev *dev = psmouse->dev;
-+ struct elantech_data *etd = psmouse->private;
- unsigned char *packet = psmouse->packet;
-
-- input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
-- input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
-+ /* For clickpads map both buttons to BTN_LEFT */
-+ if (etd->fw_version & 0x001000) {
-+ input_report_key(dev, BTN_LEFT, packet[0] & 0x03);
-+ } else {
-+ input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
-+ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
-+ }
-+
- input_mt_report_pointer_emulation(dev, true);
- input_sync(dev);
- }
---
-2.0.0
-
diff --git a/ext4-dont-manipulate-recovery-flag-when-freezing.patch b/ext4-dont-manipulate-recovery-flag-when-freezing.patch
new file mode 100644
index 000000000..0dbf21b52
--- /dev/null
+++ b/ext4-dont-manipulate-recovery-flag-when-freezing.patch
@@ -0,0 +1,66 @@
+From: Eric Sandeen <sandeen@xxxxxxxxxx>
+Date: Wed, 05 Aug 2015 15:13:58 -0700
+Subject: [PATCH] ext4: don't manipulate recovery flag when freezing no-journal fs
+
+At some point along this sequence of changes:
+
+f6e63f9 ext4: fold ext4_nojournal_sops into ext4_sops
+bb04457 ext4: support freezing ext2 (nojournal) file systems
+9ca9238 ext4: Use separate super_operations structure for no_journal filesystems
+
+ext4 started setting needs_recovery on filesystems without journals
+when they are unfrozen. This makes no sense, and in fact confuses
+blkid to the point where it doesn't recognize the filesystem at all.
+
+(freeze ext2; unfreeze ext2; run blkid; see no output; run dumpe2fs,
+see needs_recovery set on fs w/ no journal).
+
+To fix this, don't manipulate the INCOMPAT_RECOVER feature on
+filesystems without journals.
+
+Reported-by: Stu Mark <smark@xxxxxxxxx>
+Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
+---
+
+Note, is there a reason that in ext4_freeze, if journal_flush
+fails, we skip the ext4_commit_super call? I didn't change that
+here, but it seems odd.
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 58987b5..e7b345d 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -4833,10 +4833,11 @@ static int ext4_freeze(struct super_block *sb)
+ error = jbd2_journal_flush(journal);
+ if (error < 0)
+ goto out;
++
++ /* Journal blocked and flushed, clear needs_recovery flag. */
++ EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
+ }
+
+- /* Journal blocked and flushed, clear needs_recovery flag. */
+- EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
+ error = ext4_commit_super(sb, 1);
+ out:
+ if (journal)
+@@ -4854,8 +4855,11 @@ static int ext4_unfreeze(struct super_block *sb)
+ if (sb->s_flags & MS_RDONLY)
+ return 0;
+
+- /* Reset the needs_recovery flag before the fs is unlocked. */
+- EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
++ if (EXT4_SB(sb)->s_journal) {
++ /* Reset the needs_recovery flag before the fs is unlocked. */
++ EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
++ }
++
+ ext4_commit_super(sb, 1);
+ return 0;
+ }
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
+the body of a message to majordomo@xxxxxxxxxxxxxxx
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+
diff --git a/filter-aarch64.sh b/filter-aarch64.sh
new file mode 100755
index 000000000..e3623aa97
--- /dev/null
+++ b/filter-aarch64.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+# This is the aarch64 override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+driverdirs="atm auxdisplay bcma bluetooth fmc infiniband isdn leds media memstick message mmc mtd nfc ntb pcmcia platform power ssb staging uio uwb"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user"
diff --git a/filter-armv7hl.sh b/filter-armv7hl.sh
new file mode 100755
index 000000000..3056b23c3
--- /dev/null
+++ b/filter-armv7hl.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+# This is the armv7hl override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+driverdirs="atm auxdisplay bcma bluetooth fmc infiniband isdn media memstick message nfc ntb pcmcia platform ssb staging uio uwb"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user"
diff --git a/filter-i686.sh b/filter-i686.sh
new file mode 100755
index 000000000..0533bd53d
--- /dev/null
+++ b/filter-i686.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+# This is the i686 override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+driverdirs="atm auxdisplay bcma bluetooth fmc infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb staging uio uwb"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub hid-sensor-magn-3d hid-sensor-incl-3d hid-sensor-gyro-3d hid-sensor-iio-common hid-sensor-accel-3d hid-sensor-trigger hid-sensor-als hid-sensor-rotation target_core_user"
diff --git a/filter-modules.sh b/filter-modules.sh
new file mode 100755
index 000000000..5abfc8627
--- /dev/null
+++ b/filter-modules.sh
@@ -0,0 +1,143 @@
+#! /bin/bash
+#
+# Called as filter-modules.sh list-of-modules Arch
+
+# This script filters the modules into the kernel-core and kernel-modules
+# subpackages. We list out subsystems/subdirs to prune from the installed
+# module directory. What is left is put into the kernel-core package. What is
+# pruned is contained in the kernel-modules package.
+#
+# This file contains the default subsys/subdirs to prune from all architectures.
+# If an architecture needs to differ, we source a per-arch filter-<arch>.sh file
+# that contains the set of override lists to be used instead. If a module or
+# subsys should be in kernel-modules on all arches, please change the defaults
+# listed here.
+
+# Set the default dirs/modules to filter out
+driverdirs="atm auxdisplay bcma bluetooth fmc iio infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb staging uio uwb"
+
+netdrvs="appletalk can dsa hamradio ieee802154 irda ppp slip usb wireless"
+
+ethdrvs="3com adaptec alteon amd atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell mellanox neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti wiznet xircom"
+
+scsidrvs="aacraid aic7xxx aic94xx be2iscsi bfa bnx2i bnx2fc csiostor cxgbi esas2r fcoe fnic isci libsas lpfc megaraid mpt2sas mpt3sas mvsas pm8001 qla2xxx qla4xxx sym53c8xx_2 ufs"
+
+ttydrvs="ipwireless"
+
+usbdrvs="atm wusbcore"
+
+fsdrvs="affs befs coda cramfs dlm ecryptfs hfs hfsplus jfs minix ncpfs nilfs2 ocfs2 reiserfs romfs squashfs sysv ubifs udf ufs"
+
+netprots="appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee802154 irda l2tp mac80211 mac802154 netrom nfc rds rfkill rose sctp wireless"
+
+drmdrvs="ast gma500 mgag200 via nouveau"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user"
+
+# Grab the arch-specific filter list overrides
+source ./filter-$2.sh
+
+filter_dir() {
+ filelist=$1
+ dir=$2
+
+ grep -v -e "${dir}/" ${filelist} > ${filelist}.tmp
+
+ if [ $? -ne 0 ]
+ then
+ echo "Couldn't remove ${dir}. Skipping."
+ else
+ grep -e "${dir}/" ${filelist} >> k-d.list
+ mv ${filelist}.tmp $filelist
+ fi
+
+ return 0
+}
+
+filter_ko() {
+ filelist=$1
+ mod=$2
+
+ grep -v -e "${mod}.ko" ${filelist} > ${filelist}.tmp
+
+ if [ $? -ne 0 ]
+ then
+ echo "Couldn't remove ${mod}.ko Skipping."
+ else
+ grep -e "${mod}.ko" ${filelist} >> k-d.list
+ mv ${filelist}.tmp $filelist
+ fi
+
+ return 0
+}
+
+# Filter the drivers/ subsystems
+for subsys in ${driverdirs}
+do
+ filter_dir $1 drivers/${subsys}
+done
+
+# Filter the networking drivers
+for netdrv in ${netdrvs}
+do
+ filter_dir $1 drivers/net/${netdrv}
+done
+
+# Filter the ethernet drivers
+for eth in ${ethdrvs}
+do
+ filter_dir $1 drivers/net/ethernet/${eth}
+done
+
+# SCSI
+for scsi in ${scsidrvs}
+do
+ filter_dir $1 drivers/scsi/${scsi}
+done
+
+# TTY
+for tty in ${ttydrvs}
+do
+ filter_dir $1 drivers/tty/${tty}
+done
+
+# USB
+for usb in ${usbdrvs}
+do
+ filter_dir $1 drivers/usb/${usb}
+done
+
+# Filesystems
+for fs in ${fsdrvs}
+do
+ filter_dir $1 fs/${fs}
+done
+
+# Network protocols
+for prot in ${netprots}
+do
+ filter_dir $1 kernel/net/${prot}
+done
+
+# DRM
+for drm in ${drmdrvs}
+do
+ filter_dir $1 drivers/gpu/drm/${drm}
+done
+
+# Just kill sound.
+filter_dir $1 kernel/sound
+
+# Now go through and filter any single .ko files that might have deps on the
+# things we filtered above
+for mod in ${singlemods}
+do
+ filter_ko $1 ${mod}
+done
+
+# Go through our generated drivers list and remove the .ko files. We'll
+# restore them later.
+for mod in `cat k-d.list`
+do
+ rm -rf $mod
+done
diff --git a/filter-ppc64.sh b/filter-ppc64.sh
new file mode 100755
index 000000000..d98e14eb2
--- /dev/null
+++ b/filter-ppc64.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+# This is the ppc64 override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+driverdirs="atm auxdisplay bcma bluetooth fmc infiniband isdn leds media memstick message mmc mtd nfc ntb pcmcia platform power ssb staging uio uwb"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user"
diff --git a/filter-ppc64le.sh b/filter-ppc64le.sh
new file mode 100755
index 000000000..eb0808c6a
--- /dev/null
+++ b/filter-ppc64le.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+# This is the ppc64le override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+driverdirs="atm auxdisplay bcma bluetooth fmc infiniband isdn leds media memstick message mmc mtd nfc ntb pcmcia platform power ssb staging uio uwb"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user"
diff --git a/filter-ppc64p7.sh b/filter-ppc64p7.sh
new file mode 100755
index 000000000..ff5c9fd5f
--- /dev/null
+++ b/filter-ppc64p7.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+# This is the ppc64p7 override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+driverdirs="atm auxdisplay bcma bluetooth fmc infiniband isdn leds media memstick message mmc mtd nfc ntb pcmcia platform power ssb staging uio uwb"
+
+singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs iscsi_tcp megaraid pmcraid qla1280 9pnet_rdma rpcrdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject target_core_user"
diff --git a/filter-s390x.sh b/filter-s390x.sh
new file mode 100755
index 000000000..04f7110ad
--- /dev/null
+++ b/filter-s390x.sh
@@ -0,0 +1,12 @@
+#! /bin/bash
+
+# This is the s390x override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+# Defaults work so no need to override
diff --git a/filter-x86_64.sh b/filter-x86_64.sh
new file mode 100755
index 000000000..1aa80f2e0
--- /dev/null
+++ b/filter-x86_64.sh
@@ -0,0 +1,12 @@
+#! /bin/bash
+
+# This is the x86_64 override file for the core/drivers package split. The
+# module directories listed here and in the generic list in filter-modules.sh
+# will be moved to the resulting kernel-modules package for this arch.
+# Anything not listed in those files will be in the kernel-core package.
+#
+# Please review the default list in filter-modules.sh before making
+# modifications to the overrides below. If something should be removed across
+# all arches, remove it in the default instead of per-arch.
+
+# Defaults work so no need to override
diff --git a/firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch b/firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
new file mode 100644
index 000000000..74ba804ee
--- /dev/null
+++ b/firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
@@ -0,0 +1,89 @@
+From: Laura Abbott <labbott@fedoraproject.org>
+Date: Tue, 28 Apr 2015 15:37:44 -0700
+Subject: [PATCH] firmware: Drop WARN from usermodehelper_read_trylock error
+ case
+
+We've received a number of reports of warnings when coming
+out of suspend with certain bluetooth firmware configurations:
+
+WARNING: CPU: 3 PID: 3280 at drivers/base/firmware_class.c:1126
+_request_firmware+0x558/0x810()
+Modules linked in: ccm ip6t_rpfilter ip6t_REJECT nf_reject_ipv6
+xt_conntrack ebtable_nat ebtable_broute bridge stp llc ebtable_filter
+ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6
+ip6table_mangle ip6table_security ip6table_raw ip6table_filter
+ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4
+nf_nat nf_conntrack iptable_mangle iptable_security iptable_raw
+binfmt_misc bnep intel_rapl iosf_mbi arc4 x86_pkg_temp_thermal
+snd_hda_codec_hdmi coretemp kvm_intel joydev snd_hda_codec_realtek
+iwldvm snd_hda_codec_generic kvm iTCO_wdt mac80211 iTCO_vendor_support
+snd_hda_intel snd_hda_controller snd_hda_codec crct10dif_pclmul
+snd_hwdep crc32_pclmul snd_seq crc32c_intel ghash_clmulni_intel uvcvideo
+snd_seq_device iwlwifi btusb videobuf2_vmalloc snd_pcm videobuf2_core
+ serio_raw bluetooth cfg80211 videobuf2_memops sdhci_pci v4l2_common
+videodev thinkpad_acpi sdhci i2c_i801 lpc_ich mfd_core wacom mmc_core
+media snd_timer tpm_tis hid_logitech_hidpp wmi tpm rfkill snd mei_me mei
+shpchp soundcore nfsd auth_rpcgss nfs_acl lockd grace sunrpc i915
+i2c_algo_bit drm_kms_helper e1000e drm hid_logitech_dj ptp pps_core
+video
+CPU: 3 PID: 3280 Comm: kworker/u17:0 Not tainted 3.19.3-200.fc21.x86_64
+Hardware name: LENOVO 343522U/343522U, BIOS GCET96WW (2.56 ) 10/22/2013
+Workqueue: hci0 hci_power_on [bluetooth]
+ 0000000000000000 0000000089944328 ffff88040acffb78 ffffffff8176e215
+ 0000000000000000 0000000000000000 ffff88040acffbb8 ffffffff8109bc1a
+ 0000000000000000 ffff88040acffcd0 00000000fffffff5 ffff8804076bac40
+Call Trace:
+ [<ffffffff8176e215>] dump_stack+0x45/0x57
+ [<ffffffff8109bc1a>] warn_slowpath_common+0x8a/0xc0
+ [<ffffffff8109bd4a>] warn_slowpath_null+0x1a/0x20
+ [<ffffffff814dbe78>] _request_firmware+0x558/0x810
+ [<ffffffff814dc165>] request_firmware+0x35/0x50
+ [<ffffffffa03a7886>] btusb_setup_bcm_patchram+0x86/0x590 [btusb]
+ [<ffffffff814d40e6>] ? rpm_idle+0xd6/0x230
+ [<ffffffffa04d4801>] hci_dev_do_open+0xe1/0xa90 [bluetooth]
+ [<ffffffff810c51dd>] ? ttwu_do_activate.constprop.90+0x5d/0x70
+ [<ffffffffa04d5980>] hci_power_on+0x40/0x200 [bluetooth]
+ [<ffffffff810b487c>] process_one_work+0x14c/0x3f0
+ [<ffffffff810b52f3>] worker_thread+0x53/0x470
+ [<ffffffff810b52a0>] ? rescuer_thread+0x300/0x300
+ [<ffffffff810ba548>] kthread+0xd8/0xf0
+ [<ffffffff810ba470>] ? kthread_create_on_node+0x1b0/0x1b0
+ [<ffffffff81774958>] ret_from_fork+0x58/0x90
+ [<ffffffff810ba470>] ? kthread_create_on_node+0x1b0/0x1b0
+
+This occurs after every resume.
+
+When resuming, the bluetooth driver needs to re-request the
+firmware. This re-request is happening before usermodehelper
+is fully enabled. If the firmware load succeeded previously, the
+caching behavior of the firmware code typically negates the
+need to call the usermodehelper code again and the request
+succeeds. If the firmware was never loaded because it isn't
+actually present in the file system, this results in a call
+to usermodehelper and a failure warning every resume.
+
+The proper fix is to add a reset_resume functionality to the
+btusb driver to be able to handle the resume case. The
+work for this is ongoing so in the mean time just silence
+the warning since we know it's a problem.
+
+Bugzilla: 1133378
+Upstream-status: Working on it. It's a difficult problem :(
+Signed-off-by: Laura Abbott <labbott@fedoraproject.org>
+---
+ drivers/base/firmware_class.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
+index 6c5c9edf5ff6..8b56d498dd61 100644
+--- a/drivers/base/firmware_class.c
++++ b/drivers/base/firmware_class.c
+@@ -1111,7 +1111,7 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
+ }
+ } else {
+ ret = usermodehelper_read_trylock();
+- if (WARN_ON(ret)) {
++ if (ret) {
+ dev_err(device, "firmware: %s will not be loaded\n",
+ name);
+ goto out;
diff --git a/hibernate-Disable-in-a-signed-modules-environment.patch b/hibernate-Disable-in-a-signed-modules-environment.patch
new file mode 100644
index 000000000..77e1e7036
--- /dev/null
+++ b/hibernate-Disable-in-a-signed-modules-environment.patch
@@ -0,0 +1,35 @@
+From: Josh Boyer <jwboyer@fedoraproject.org>
+Date: Fri, 20 Jun 2014 08:53:24 -0400
+Subject: [PATCH] hibernate: Disable in a signed modules environment
+
+There is currently no way to verify the resume image when returning
+from hibernate. This might compromise the signed modules trust model,
+so until we can work with signed hibernate images we disable it in
+a secure modules environment.
+
+Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
+---
+ kernel/power/hibernate.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
+index 2329daae5255..48a8e82c7e2e 100644
+--- a/kernel/power/hibernate.c
++++ b/kernel/power/hibernate.c
+@@ -29,6 +29,7 @@
+ #include <linux/ctype.h>
+ #include <linux/genhd.h>
+ #include <linux/ktime.h>
++#include <linux/module.h>
+ #include <trace/events/power.h>
+
+ #include "power.h"
+@@ -66,7 +67,7 @@ static const struct platform_hibernation_ops *hibernation_ops;
+
+ bool hibernation_available(void)
+ {
+- return (nohibernate == 0);
++ return ((nohibernate == 0) && !secure_modules());
+ }
+
+ /**
diff --git a/hibernate-freeze-filesystems.patch b/hibernate-freeze-filesystems.patch
deleted file mode 100644
index 841cab643..000000000
--- a/hibernate-freeze-filesystems.patch
+++ /dev/null
@@ -1,287 +0,0 @@
-commit b94887bbc0621e1e8402e7f0ec4bc3adf46c9a6e
-Author: Rafael J. Wysocki <rjw@sisk.pl>
-Date: Fri Feb 17 12:42:08 2012 -0500
-
- Freeze all filesystems during system suspend and (kernel-driven)
- hibernation by calling freeze_supers() for all superblocks and thaw
- them during the subsequent resume with the help of thaw_supers().
-
- This makes filesystems stay in a consistent state in case something
- goes wrong between system suspend (or hibernation) and the subsequent
- resume (e.g. journal replays won't be necessary in those cases). In
- particular, this should help to solve a long-standing issue that, in
- some cases, during resume from hibernation the boot loader causes the
- journal to be replied for the filesystem containing the kernel image
- and/or initrd causing it to become inconsistent with the information
- stored in the hibernation image.
-
- The user-space-driven hibernation (s2disk) is not covered by this
- change, because the freezing of filesystems prevents s2disk from
- accessing device special files it needs to do its job.
-
- This change is based on earlier work by Nigel Cunningham.
-
- Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
-
- Rebased to 3.3-rc3 by Josh Boyer <jwboyer@redhat.com>
-
-diff --git a/fs/super.c b/fs/super.c
-index 6015c02..c8057fa 100644
---- a/fs/super.c
-+++ b/fs/super.c
-@@ -594,6 +594,79 @@ void iterate_supers_type(struct file_system_type *type,
- EXPORT_SYMBOL(iterate_supers_type);
-
- /**
-+ * thaw_supers - call thaw_super() for all superblocks
-+ */
-+void thaw_supers(void)
-+{
-+ struct super_block *sb, *p = NULL;
-+
-+ spin_lock(&sb_lock);
-+ list_for_each_entry(sb, &super_blocks, s_list) {
-+ if (hlist_unhashed(&sb->s_instances))
-+ continue;
-+ sb->s_count++;
-+ spin_unlock(&sb_lock);
-+
-+ if (sb->s_flags & MS_FROZEN) {
-+ thaw_super(sb);
-+ sb->s_flags &= ~MS_FROZEN;
-+ }
-+
-+ spin_lock(&sb_lock);
-+ if (p)
-+ __put_super(p);
-+ p = sb;
-+ }
-+ if (p)
-+ __put_super(p);
-+ spin_unlock(&sb_lock);
-+}
-+
-+/**
-+ * freeze_supers - call freeze_super() for all superblocks
-+ */
-+int freeze_supers(void)
-+{
-+ struct super_block *sb, *p = NULL;
-+ int error = 0;
-+
-+ spin_lock(&sb_lock);
-+ /*
-+ * Freeze in reverse order so filesystems depending on others are
-+ * frozen in the right order (eg. loopback on ext3).
-+ */
-+ list_for_each_entry_reverse(sb, &super_blocks, s_list) {
-+ if (hlist_unhashed(&sb->s_instances))
-+ continue;
-+ sb->s_count++;
-+ spin_unlock(&sb_lock);
-+
-+ if (sb->s_root && sb->s_frozen != SB_FREEZE_TRANS
-+ && !(sb->s_flags & MS_RDONLY)) {
-+ error = freeze_super(sb);
-+ if (!error)
-+ sb->s_flags |= MS_FROZEN;
-+ }
-+
-+ spin_lock(&sb_lock);
-+ if (error)
-+ break;
-+ if (p)
-+ __put_super(p);
-+ p = sb;
-+ }
-+ if (p)
-+ __put_super(p);
-+ spin_unlock(&sb_lock);
-+
-+ if (error)
-+ thaw_supers();
-+
-+ return error;
-+}
-+
-+
-+/**
- * get_super - get the superblock of a device
- * @bdev: device to get the superblock for
- *
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 386da09..a164f4a 100644
---- a/include/linux/fs.h
-+++ b/include/linux/fs.h
-@@ -210,6 +210,7 @@ struct inodes_stat_t {
- #define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
- #define MS_I_VERSION (1<<23) /* Update inode I_version field */
- #define MS_STRICTATIME (1<<24) /* Always perform atime updates */
-+#define MS_FROZEN (1<<25) /* Frozen filesystem */
- #define MS_NOSEC (1<<28)
- #define MS_BORN (1<<29)
- #define MS_ACTIVE (1<<30)
-@@ -2501,6 +2502,8 @@ extern void drop_super(struct super_block *sb);
- extern void iterate_supers(void (*)(struct super_block *, void *), void *);
- extern void iterate_supers_type(struct file_system_type *,
- void (*)(struct super_block *, void *), void *);
-+extern int freeze_supers(void);
-+extern void thaw_supers(void);
-
- extern int dcache_dir_open(struct inode *, struct file *);
- extern int dcache_dir_close(struct inode *, struct file *);
-diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
-index 6d6d288..492fc62 100644
---- a/kernel/power/hibernate.c
-+++ b/kernel/power/hibernate.c
-@@ -626,12 +626,17 @@ int hibernate(void)
- if (error)
- goto Finish;
-
-- error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
-+ error = freeze_supers();
- if (error)
- goto Thaw;
-+
-+ error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
-+ if (error)
-+ goto Thaw_fs;
-+
- if (freezer_test_done) {
- freezer_test_done = false;
-- goto Thaw;
-+ goto Thaw_fs;
- }
-
- if (in_suspend) {
-@@ -655,6 +660,8 @@ int hibernate(void)
- pr_debug("PM: Image restored successfully.\n");
- }
-
-+ Thaw_fs:
-+ thaw_supers();
- Thaw:
- thaw_processes();
- Finish:
-diff --git a/kernel/power/power.h b/kernel/power/power.h
-index 21724ee..40d6f64 100644
---- a/kernel/power/power.h
-+++ b/kernel/power/power.h
-@@ -1,3 +1,4 @@
-+#include <linux/fs.h>
- #include <linux/suspend.h>
- #include <linux/suspend_ioctls.h>
- #include <linux/utsname.h>
-@@ -227,45 +228,3 @@ enum {
- #define TEST_MAX (__TEST_AFTER_LAST - 1)
-
- extern int pm_test_level;
--
--#ifdef CONFIG_SUSPEND_FREEZER
--static inline int suspend_freeze_processes(void)
--{
-- int error;
--
-- error = freeze_processes();
--
-- /*
-- * freeze_processes() automatically thaws every task if freezing
-- * fails. So we need not do anything extra upon error.
-- */
-- if (error)
-- goto Finish;
--
-- error = freeze_kernel_threads();
--
-- /*
-- * freeze_kernel_threads() thaws only kernel threads upon freezing
-- * failure. So we have to thaw the userspace tasks ourselves.
-- */
-- if (error)
-- thaw_processes();
--
-- Finish:
-- return error;
--}
--
--static inline void suspend_thaw_processes(void)
--{
-- thaw_processes();
--}
--#else
--static inline int suspend_freeze_processes(void)
--{
-- return 0;
--}
--
--static inline void suspend_thaw_processes(void)
--{
--}
--#endif
-diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
-index 4fd51be..5f51fc7 100644
---- a/kernel/power/suspend.c
-+++ b/kernel/power/suspend.c
-@@ -29,6 +29,62 @@
-
- #include "power.h"
-
-+#ifdef CONFIG_SUSPEND_FREEZER
-+
-+static inline int suspend_freeze_processes(void)
-+{
-+ int error;
-+
-+ error = freeze_processes();
-+
-+ /*
-+ * freeze_processes() automatically thaws every task if freezing
-+ * fails. So we need not do anything extra upon error.
-+ */
-+
-+ if (error)
-+ goto Finish;
-+
-+ error = freeze_supers();
-+ if (error) {
-+ thaw_processes();
-+ goto Finish;
-+ }
-+
-+ error = freeze_kernel_threads();
-+
-+ /*
-+ * freeze_kernel_threads() thaws only kernel threads upon freezing
-+ * failure. So we have to thaw the userspace tasks ourselves.
-+ */
-+ if (error) {
-+ thaw_supers();
-+ thaw_processes();
-+ }
-+
-+Finish:
-+ return error;
-+}
-+
-+static inline void suspend_thaw_processes(void)
-+{
-+ thaw_supers();
-+ thaw_processes();
-+}
-+
-+#else /* !CONFIG_SUSPEND_FREEZER */
-+
-+static inline int suspend_freeze_processes(void)
-+{
-+ return 0;
-+}
-+
-+static inline void suspend_thaw_processes(void)
-+{
-+}
-+
-+#endif /* !CONFIG_SUSPEND_FREEZER */
-+
- const char *const pm_states[PM_SUSPEND_MAX] = {
- [PM_SUSPEND_STANDBY] = "standby",
- [PM_SUSPEND_MEM] = "mem",
diff --git a/iSCSI-let-session-recovery_tmo-sysfs-writes-persist.patch b/iSCSI-let-session-recovery_tmo-sysfs-writes-persist.patch
new file mode 100644
index 000000000..174cccb02
--- /dev/null
+++ b/iSCSI-let-session-recovery_tmo-sysfs-writes-persist.patch
@@ -0,0 +1,89 @@
+From 9c8108a4d3a837c51a29f28229a06d97654eaeb6 Mon Sep 17 00:00:00 2001
+From: Chris Leech <cleech@redhat.com>
+Date: Tue, 16 Jun 2015 16:07:13 -0700
+Subject: iSCSI: let session recovery_tmo sysfs writes persist across recovery
+
+The iSCSI session recovery_tmo setting is writeable in sysfs, but it's
+also set every time a connection is established when parameters are set
+from iscsid over netlink. That results in the timeout being reset to
+the default value after every recovery.
+
+The DM multipath tools want to use the sysfs interface to lower the
+default timeout when there are multiple paths to fail over. It has
+caused confusion that we have a writeable sysfs value that seem to keep
+resetting itself.
+
+This patch adds an in-kernel flag that gets set once a sysfs write
+occurs, and then ignores netlink parameter setting once it's been
+modified via the sysfs interface. My thinking here is that the sysfs
+interface is much simpler for external tools to influence the session
+timeout, but if we're going to allow it to be modified directly we
+should ensure that setting is maintained.
+
+Signed-off-by: Chris Leech <cleech@redhat.com>
+Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
+Signed-off-by: James Bottomley <JBottomley@Odin.com>
+
+diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
+index 55647aa..4c25539 100644
+--- a/drivers/scsi/scsi_transport_iscsi.c
++++ b/drivers/scsi/scsi_transport_iscsi.c
+@@ -2042,6 +2042,7 @@ iscsi_alloc_session(struct Scsi_Host *shost, struct iscsi_transport *transport,
+ session->transport = transport;
+ session->creator = -1;
+ session->recovery_tmo = 120;
++ session->recovery_tmo_sysfs_override = false;
+ session->state = ISCSI_SESSION_FREE;
+ INIT_DELAYED_WORK(&session->recovery_work, session_recovery_timedout);
+ INIT_LIST_HEAD(&session->sess_list);
+@@ -2786,7 +2787,8 @@ iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev)
+ switch (ev->u.set_param.param) {
+ case ISCSI_PARAM_SESS_RECOVERY_TMO:
+ sscanf(data, "%d", &value);
+- session->recovery_tmo = value;
++ if (!session->recovery_tmo_sysfs_override)
++ session->recovery_tmo = value;
+ break;
+ default:
+ err = transport->set_param(conn, ev->u.set_param.param,
+@@ -4049,13 +4051,15 @@ store_priv_session_##field(struct device *dev, \
+ if ((session->state == ISCSI_SESSION_FREE) || \
+ (session->state == ISCSI_SESSION_FAILED)) \
+ return -EBUSY; \
+- if (strncmp(buf, "off", 3) == 0) \
++ if (strncmp(buf, "off", 3) == 0) { \
+ session->field = -1; \
+- else { \
++ session->field##_sysfs_override = true; \
++ } else { \
+ val = simple_strtoul(buf, &cp, 0); \
+ if (*cp != '\0' && *cp != '\n') \
+ return -EINVAL; \
+ session->field = val; \
++ session->field##_sysfs_override = true; \
+ } \
+ return count; \
+ }
+@@ -4066,6 +4070,7 @@ store_priv_session_##field(struct device *dev, \
+ static ISCSI_CLASS_ATTR(priv_sess, field, S_IRUGO | S_IWUSR, \
+ show_priv_session_##field, \
+ store_priv_session_##field)
++
+ iscsi_priv_session_rw_attr(recovery_tmo, "%d");
+
+ static struct attribute *iscsi_session_attrs[] = {
+diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
+index 2555ee5..6183d20 100644
+--- a/include/scsi/scsi_transport_iscsi.h
++++ b/include/scsi/scsi_transport_iscsi.h
+@@ -241,6 +241,7 @@ struct iscsi_cls_session {
+
+ /* recovery fields */
+ int recovery_tmo;
++ bool recovery_tmo_sysfs_override;
+ struct delayed_work recovery_work;
+
+ unsigned int target_id;
+--
+cgit v0.10.2
+
diff --git a/ideapad-laptop-Add-Lenovo-Yoga-3-14-to-no_hw_rfkill-.patch b/ideapad-laptop-Add-Lenovo-Yoga-3-14-to-no_hw_rfkill-.patch
new file mode 100644
index 000000000..9e2838f22
--- /dev/null
+++ b/ideapad-laptop-Add-Lenovo-Yoga-3-14-to-no_hw_rfkill-.patch
@@ -0,0 +1,40 @@
+From 72695420d48c264b3ca0dacccda1a4789a52c2f6 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Fri, 24 Jul 2015 11:45:28 +0200
+Subject: [PATCH] ideapad-laptop: Add Lenovo Yoga 3 14 to no_hw_rfkill dmi list
+
+Like some of the other Yoga models the Lenovo Yoga 3 14 does not have a
+hw rfkill switch, and trying to read the hw rfkill switch through the
+ideapad module causes it to always reported blocking breaking wifi.
+
+This commit adds the Lenovo Yoga 3 14 to the no_hw_rfkill dmi list, fixing
+the wifi breakage.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1239050
+Cc: stable@vger.kernel.org
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/platform/x86/ideapad-laptop.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
+index 76b57388d01b..81c3e582309a 100644
+--- a/drivers/platform/x86/ideapad-laptop.c
++++ b/drivers/platform/x86/ideapad-laptop.c
+@@ -853,6 +853,13 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
+ },
+ },
+ {
++ .ident = "Lenovo Yoga 3 14",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 3 14"),
++ },
++ },
++ {
+ .ident = "Lenovo Yoga 3 Pro 1370",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+--
+2.4.3
+
diff --git a/ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch b/ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch
deleted file mode 100644
index 29df8d781..000000000
--- a/ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1021036
-Upstream-status: Accepted into 3.16
-
-From ec5a006650d13c183124bd4279b95625f85efc6d Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:00 +0200
-Subject: [PATCH 03/14] ideapad-laptop: Blacklist rfkill control on the Lenovo
- Yoga 2 11
-
-The Lenovo Yoga 2 11 always reports everything as blocked, causing userspace
-to not even try to use the wlan / bluetooth even though they work fine.
-
-Note this patch also removes the "else priv->rfk[i] = NULL;" bit of the
-rfkill initialization, it is not necessary as the priv struct is allocated
-with kzalloc.
-
-Reported-and-tested-by: Vincent Gerris <vgerris@gmail.com>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/ideapad-laptop.c | 23 ++++++++++++++++++-----
- 1 file changed, 18 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
-index 6dd060a0bb65..219eb289a909 100644
---- a/drivers/platform/x86/ideapad-laptop.c
-+++ b/drivers/platform/x86/ideapad-laptop.c
-@@ -36,6 +36,7 @@
- #include <linux/debugfs.h>
- #include <linux/seq_file.h>
- #include <linux/i8042.h>
-+#include <linux/dmi.h>
-
- #define IDEAPAD_RFKILL_DEV_NUM (3)
-
-@@ -819,6 +820,19 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
- }
- }
-
-+/* Blacklist for devices where the ideapad rfkill interface does not work */
-+static struct dmi_system_id rfkill_blacklist[] = {
-+ /* The Lenovo Yoga 2 11 always reports everything as blocked */
-+ {
-+ .ident = "Lenovo Yoga 2 11",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
-+ DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2 11"),
-+ },
-+ },
-+ {}
-+};
-+
- static int ideapad_acpi_add(struct platform_device *pdev)
- {
- int ret, i;
-@@ -854,11 +868,10 @@ static int ideapad_acpi_add(struct platform_device *pdev)
- if (ret)
- goto input_failed;
-
-- for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++) {
-- if (test_bit(ideapad_rfk_data[i].cfgbit, &priv->cfg))
-- ideapad_register_rfkill(priv, i);
-- else
-- priv->rfk[i] = NULL;
-+ if (!dmi_check_system(rfkill_blacklist)) {
-+ for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++)
-+ if (test_bit(ideapad_rfk_data[i].cfgbit, &priv->cfg))
-+ ideapad_register_rfkill(priv, i);
- }
- ideapad_sync_rfk_state(priv);
- ideapad_sync_touchpad_state(priv);
---
-1.9.0
-
diff --git a/input-kill-stupid-messages.patch b/input-kill-stupid-messages.patch
index ff7023f51..a11bcbe6d 100644
--- a/input-kill-stupid-messages.patch
+++ b/input-kill-stupid-messages.patch
@@ -1,8 +1,18 @@
+From: "kernel-team@fedoraproject.org" <kernel-team@fedoraproject.org>
+Date: Thu, 29 Jul 2010 16:46:31 -0700
+Subject: [PATCH] input: kill stupid messages
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard
+---
+ drivers/input/keyboard/atkbd.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
-index add5ffd..5eb2f03 100644
+index 387c51f4b4e4..04a1c7d47aba 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
-@@ -430,11 +430,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
+@@ -436,11 +436,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
goto out;
case ATKBD_RET_ACK:
case ATKBD_RET_NAK:
diff --git a/silence-noise.patch b/input-silence-i8042-noise.patch
index a8032597e..f8651b3e9 100644
--- a/silence-noise.patch
+++ b/input-silence-i8042-noise.patch
@@ -1,34 +1,50 @@
-From b4e96f34c17e5a79cd28774cc722bb33e7e02c6e Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 25 Sep 2008 16:23:33 -0400
-Subject: [PATCH] Don't print an error message just because there's no i8042 chip.
+Subject: [PATCH] input: silence i8042 noise
+Don't print an error message just because there's no i8042 chip.
Some systems, such as EFI-based Apple systems, won't necessarily have an
i8042 to initialize. We shouldn't be printing an error message in this
case, since not detecting the chip is the correct behavior.
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard
---
+ drivers/base/power/main.c | 2 --
+ drivers/input/serio/i8042.c | 1 -
+ net/can/af_can.c | 8 ++------
+ 3 files changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
+index 9717d5f20139..a3101d2fd936 100644
+--- a/drivers/base/power/main.c
++++ b/drivers/base/power/main.c
+@@ -122,8 +122,6 @@ void device_pm_unlock(void)
+ */
+ void device_pm_add(struct device *dev)
+ {
+- pr_debug("PM: Adding info for %s:%s\n",
+- dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
+ mutex_lock(&dpm_list_mtx);
+ if (dev->parent && dev->parent->power.is_prepared)
+ dev_warn(dev, "parent %s should not be sleeping\n",
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
-index 52c9ebf..c374a96 100644
+index 986a71c614b0..bfb0b2280df0 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
-@@ -855,7 +855,6 @@ static int __init i8042_check_aux(void)
+@@ -871,7 +871,6 @@ static int __init i8042_check_aux(void)
static int i8042_controller_check(void)
{
if (i8042_flush()) {
- pr_err("No controller found\n");
return -ENODEV;
}
-
---
-Socket fuzzers like sfuzz will trigger this printk a lot, even though it's
-ratelimited. It isn't particularly useful, so just remove it.
-
-Signed-off-by: Dave Jones <davej@redhat.com>
-
+diff --git a/net/can/af_can.c b/net/can/af_can.c
+index 32d710eaf1fc..af4a20b86ee7 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
-@@ -157,13 +157,9 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
+@@ -155,13 +155,9 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
err = request_module("can-proto-%d", protocol);
/*
@@ -44,22 +60,3 @@ Signed-off-by: Dave Jones <davej@redhat.com>
cp = can_get_proto(protocol);
}
-
-This was removed in revision 1.6 of linux-2.6-silence-noise.patch
-in ye olde CVS tree. I have no idea why. Originally the pr_debug in
-device_pm_remove was nuked as well, but that seems to have gotten lost in
-the r1.634 of kernel.spec (2.6.26-rc2-git5.)
-
-diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
-index 2a52270..bacbdd2 100644
---- a/drivers/base/power/main.c
-+++ b/drivers/base/power/main.c
-@@ -87,8 +87,6 @@ void device_pm_unlock(void)
- */
- void device_pm_add(struct device *dev)
- {
-- pr_debug("PM: Adding info for %s:%s\n",
-- dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
- mutex_lock(&dpm_list_mtx);
- if (dev->parent && dev->parent->power.is_prepared)
- dev_warn(dev, "parent %s should not be sleeping\n",
diff --git a/intel_pstate-Fix-setting-VID.patch b/intel_pstate-Fix-setting-VID.patch
deleted file mode 100644
index a71432c59..000000000
--- a/intel_pstate-Fix-setting-VID.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-
-Delivered-To: jwboyer@gmail.com
-Received: by 10.76.6.212 with SMTP id d20csp423274oaa;
- Fri, 20 Jun 2014 07:30:34 -0700 (PDT)
-X-Received: by 10.66.141.165 with SMTP id rp5mr5252763pab.90.1403274633343;
- Fri, 20 Jun 2014 07:30:33 -0700 (PDT)
-Return-Path: <stable-owner@vger.kernel.org>
-Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
- by mx.google.com with ESMTP id xz4si10079103pac.71.2014.06.20.07.29.38
- for <multiple recipients>;
- Fri, 20 Jun 2014 07:30:33 -0700 (PDT)
-Received-SPF: none (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67;
-Authentication-Results: mx.google.com;
- spf=neutral (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) smtp.mail=stable-owner@vger.kernel.org;
- dkim=neutral (body hash did not verify) header.i=@;
- dmarc=fail (p=NONE dis=NONE) header.from=gmail.com
-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
- id S1752826AbaFTO2N (ORCPT <rfc822;tuffkidtt@gmail.com> + 73 others);
- Fri, 20 Jun 2014 10:28:13 -0400
-Received: from mail-pb0-f42.google.com ([209.85.160.42]:38213 "EHLO
- mail-pb0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
- with ESMTP id S1752069AbaFTO2M (ORCPT
- <rfc822;stable@vger.kernel.org>); Fri, 20 Jun 2014 10:28:12 -0400
-Received: by mail-pb0-f42.google.com with SMTP id ma3so3196581pbc.29
- for <multiple recipients>; Fri, 20 Jun 2014 07:28:11 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=gmail.com; s=20120113;
- h=from:to:cc:subject:date:message-id:in-reply-to:references;
- bh=9oo+zXKxjbr7v1snerKTk1H7F9TqWZtlTUz/dYa9Mtc=;
- b=dYHB8IsNt7nWot8Da4/spNLtKjWeMlpQv+LpR+c7Y8DUuJe1lcMqt6NeLHZcOBUv2Y
- Y6Bw8IIE3DYaVUFzakB2oBRCHaQJwqERAb0+y8zVt4lkxRh6AOjeR6coDk9oE8sDQmkN
- zZzv3mR6rd2sE6CkRFwkJUJgHRd5DgluDU96k7OKLEzJpuq+6BrvwPto8TU6ZMkmQiqj
- pRP0ics6FdaE7GtFE6XmEjGYSnsAFzUn8ycgFPjZU39PhkhTDottomejlUEEs8NORxn3
- eYxzh48Ae/P9JTgydBpMpUkpsb+86akHDWoTWG3z6D6mwCzFl9dNmUL43j/ONVjf6pPh
- wopw==
-X-Received: by 10.66.122.70 with SMTP id lq6mr5211252pab.51.1403274491745;
- Fri, 20 Jun 2014 07:28:11 -0700 (PDT)
-Received: from echolake.localdomain (static-50-43-41-81.bvtn.or.frontiernet.net. [50.43.41.81])
- by mx.google.com with ESMTPSA id vx10sm44287848pac.17.2014.06.20.07.28.09
- for <multiple recipients>
- (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
- Fri, 20 Jun 2014 07:28:10 -0700 (PDT)
-From: dirk.brandewie@gmail.com
-X-Google-Original-From: dirk.j.brandewie@intel.com
-To: linux-pm@vger.kernel.org
-Cc: rjw@rjwysocki.net, dirk.brandewie@gmail.com,
- stable@vger.kernel.org, Dirk Brandewie <dirk.j.brandewie@intel.com>
-Subject: [PATCH 1/3] intel_pstate: Fix setting VID
-Date: Fri, 20 Jun 2014 07:27:58 -0700
-Message-Id: <1403274480-10593-2-git-send-email-dirk.j.brandewie@intel.com>
-X-Mailer: git-send-email 1.9.0
-In-Reply-To: <1403274480-10593-1-git-send-email-dirk.j.brandewie@intel.com>
-References: <1403274480-10593-1-git-send-email-dirk.j.brandewie@intel.com>
-Sender: stable-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <stable.vger.kernel.org>
-X-Mailing-List: stable@vger.kernel.org
-
-From: Dirk Brandewie <dirk.j.brandewie@intel.com>
-
-Commit 21855ff5 intel_pstate: Set turbo VID for BayTrail introduced
-setting the turbo VID which is required to prevent a machine check on
-some Baytrail SKUs under heavy graphics based workloads. The
-docmumentation update that brought the requirement to light also
-changed the bit mask used for enumerating P state and VID values from
-0x7f to 0x3f.
-
-This change returns the mask value to 0x7f.
-
-Tested with the Intel NUC DN2820FYK,
-BIOS version FYBYT10H.86A.0034.2014.0513.1413 with v3.16-rc1 and
-v3.14.8 kernel versions.
-
-Reported-by: Rune Reterson <rune@megahurts.dk>
-Reported-by: Eric Eickmeyer <erich@ericheickmeyer.com>
-Tested-by: Rune Reterson <rune@megahurts.dk>
-Tested-by: Eric Eickmeyer <erich@ericheickmeyer.com>
-
-References: https://bugzilla.kernel.org/show_bug.cgi?id=77951
-
-Cc: Cc: Stable <stable@vger.kernel.org> [3.13+]
-Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
----
- drivers/cpufreq/intel_pstate.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index 924bb2d..74376d6 100644
---- a/drivers/cpufreq/intel_pstate.c
-+++ b/drivers/cpufreq/intel_pstate.c
-@@ -357,21 +357,21 @@ static int byt_get_min_pstate(void)
- {
- u64 value;
- rdmsrl(BYT_RATIOS, value);
-- return (value >> 8) & 0x3F;
-+ return (value >> 8) & 0x7F;
- }
-
- static int byt_get_max_pstate(void)
- {
- u64 value;
- rdmsrl(BYT_RATIOS, value);
-- return (value >> 16) & 0x3F;
-+ return (value >> 16) & 0x7F;
- }
-
- static int byt_get_turbo_pstate(void)
- {
- u64 value;
- rdmsrl(BYT_TURBO_RATIOS, value);
-- return value & 0x3F;
-+ return value & 0x7F;
- }
-
- static void byt_set_pstate(struct cpudata *cpudata, int pstate)
-@@ -405,8 +405,8 @@ static void byt_get_vid(struct cpudata *cpudata)
-
-
- rdmsrl(BYT_VIDS, value);
-- cpudata->vid.min = int_tofp((value >> 8) & 0x3f);
-- cpudata->vid.max = int_tofp((value >> 16) & 0x3f);
-+ cpudata->vid.min = int_tofp((value >> 8) & 0x7f);
-+ cpudata->vid.max = int_tofp((value >> 16) & 0x7f);
- cpudata->vid.ratio = div_fp(
- cpudata->vid.max - cpudata->vid.min,
- int_tofp(cpudata->pstate.max_pstate -
---
-1.9.0
-
---
-To unsubscribe from this list: send the line "unsubscribe stable" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/intel_pstate-Update-documentation-of-max-min_perf_pct-sysfs-files.patch b/intel_pstate-Update-documentation-of-max-min_perf_pct-sysfs-files.patch
deleted file mode 100644
index 304b6009b..000000000
--- a/intel_pstate-Update-documentation-of-max-min_perf_pct-sysfs-files.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-
-Delivered-To: jwboyer@gmail.com
-Received: by 10.76.6.212 with SMTP id d20csp423275oaa;
- Fri, 20 Jun 2014 07:30:34 -0700 (PDT)
-X-Received: by 10.68.190.98 with SMTP id gp2mr5272210pbc.88.1403274634321;
- Fri, 20 Jun 2014 07:30:34 -0700 (PDT)
-Return-Path: <stable-owner@vger.kernel.org>
-Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
- by mx.google.com with ESMTP id hp1si10074557pad.83.2014.06.20.07.29.43
- for <multiple recipients>;
- Fri, 20 Jun 2014 07:30:34 -0700 (PDT)
-Received-SPF: none (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67;
-Authentication-Results: mx.google.com;
- spf=neutral (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) smtp.mail=stable-owner@vger.kernel.org;
- dkim=neutral (body hash did not verify) header.i=@;
- dmarc=fail (p=NONE dis=NONE) header.from=gmail.com
-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
- id S1752837AbaFTO2Q (ORCPT <rfc822;tuffkidtt@gmail.com> + 73 others);
- Fri, 20 Jun 2014 10:28:16 -0400
-Received: from mail-pa0-f44.google.com ([209.85.220.44]:49238 "EHLO
- mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
- with ESMTP id S1752834AbaFTO2P (ORCPT
- <rfc822;stable@vger.kernel.org>); Fri, 20 Jun 2014 10:28:15 -0400
-Received: by mail-pa0-f44.google.com with SMTP id rd3so3177765pab.17
- for <multiple recipients>; Fri, 20 Jun 2014 07:28:15 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=gmail.com; s=20120113;
- h=from:to:cc:subject:date:message-id:in-reply-to:references;
- bh=rsR1AnYOOFONegcKUuZzrIkP/Fwwpd8RySrcXDcatYE=;
- b=H8hEI3Sg3lQRMr4ADxJtNpRGhyOTkP+gFC3du64xhLqVHicLrvtD06Wz7Vv0AowO52
- JpoocTnE8lUQvSMqev+LIh83DoFZxvYqrWqv0815LcZATxquRCPfNw8py9uTm3o0ABIy
- PhXPM7UO278Ov67fqu63akRwHfrgtd22iXkHcn68ZqbTvdfo/jJlMcgRVoysP8XNPoIV
- FZ4uVsHsjcx77zgA6A8t22vG5eozHRabvcvyxAp8eC/GwSjlWRFN7ETD28w4muvZcbFm
- PFDieDk7detiTEqFyXncStI0i81Ezun+IyWnPnI1EOqPXKLoFaUiyxmw6Z7iOWLs0166
- NLoA==
-X-Received: by 10.68.193.100 with SMTP id hn4mr5166204pbc.50.1403274495186;
- Fri, 20 Jun 2014 07:28:15 -0700 (PDT)
-Received: from echolake.localdomain (static-50-43-41-81.bvtn.or.frontiernet.net. [50.43.41.81])
- by mx.google.com with ESMTPSA id vx10sm44287848pac.17.2014.06.20.07.28.13
- for <multiple recipients>
- (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
- Fri, 20 Jun 2014 07:28:13 -0700 (PDT)
-From: dirk.brandewie@gmail.com
-X-Google-Original-From: dirk.j.brandewie@intel.com
-To: linux-pm@vger.kernel.org
-Cc: rjw@rjwysocki.net, dirk.brandewie@gmail.com,
- stable@vger.kernel.org, Dirk Brandewie <dirk.j.brandewie@intel.com>
-Subject: [PATCH 3/3] intel_pstate: Update documentation of {max,min}_perf_pct sysfs files
-Date: Fri, 20 Jun 2014 07:28:00 -0700
-Message-Id: <1403274480-10593-4-git-send-email-dirk.j.brandewie@intel.com>
-X-Mailer: git-send-email 1.9.0
-In-Reply-To: <1403274480-10593-1-git-send-email-dirk.j.brandewie@intel.com>
-References: <1403274480-10593-1-git-send-email-dirk.j.brandewie@intel.com>
-Sender: stable-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <stable.vger.kernel.org>
-X-Mailing-List: stable@vger.kernel.org
-
-From: Dirk Brandewie <dirk.j.brandewie@intel.com>
-
-Update documentation to make the interpretation of the values clearer
-
-References: https://bugzilla.kernel.org/show_bug.cgi?id=64251
-
-Cc: Stable <stable@vger.kernel.org> [3.13+]
-Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
----
- Documentation/cpu-freq/intel-pstate.txt | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/Documentation/cpu-freq/intel-pstate.txt b/Documentation/cpu-freq/intel-pstate.txt
-index e742d21..a69ffe1 100644
---- a/Documentation/cpu-freq/intel-pstate.txt
-+++ b/Documentation/cpu-freq/intel-pstate.txt
-@@ -15,10 +15,13 @@ New sysfs files for controlling P state selection have been added to
- /sys/devices/system/cpu/intel_pstate/
-
- max_perf_pct: limits the maximum P state that will be requested by
-- the driver stated as a percentage of the available performance.
-+ the driver stated as a percentage of the available performance. The
-+ available (P states) performance may be reduced by the no_turbo
-+ setting described below.
-
- min_perf_pct: limits the minimum P state that will be requested by
-- the driver stated as a percentage of the available performance.
-+ the driver stated as a percentage of the max (non-turbo)
-+ performance level.
-
- no_turbo: limits the driver to selecting P states below the turbo
- frequency range.
---
-1.9.0
-
---
-To unsubscribe from this list: send the line "unsubscribe stable" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/intel_pstate-dont-touch-turbo-bit-if-turbo-disabled-or-unavailable.patch b/intel_pstate-dont-touch-turbo-bit-if-turbo-disabled-or-unavailable.patch
deleted file mode 100644
index 5d66cbb88..000000000
--- a/intel_pstate-dont-touch-turbo-bit-if-turbo-disabled-or-unavailable.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-
-Delivered-To: jwboyer@gmail.com
-Received: by 10.76.6.212 with SMTP id d20csp423277oaa;
- Fri, 20 Jun 2014 07:30:35 -0700 (PDT)
-X-Received: by 10.68.139.36 with SMTP id qv4mr5223355pbb.82.1403274634649;
- Fri, 20 Jun 2014 07:30:34 -0700 (PDT)
-Return-Path: <stable-owner@vger.kernel.org>
-Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
- by mx.google.com with ESMTP id qv2si9954447pbb.188.2014.06.20.07.29.40
- for <multiple recipients>;
- Fri, 20 Jun 2014 07:30:34 -0700 (PDT)
-Received-SPF: none (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67;
-Authentication-Results: mx.google.com;
- spf=neutral (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) smtp.mail=stable-owner@vger.kernel.org;
- dkim=neutral (body hash did not verify) header.i=@;
- dmarc=fail (p=NONE dis=NONE) header.from=gmail.com
-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
- id S1752836AbaFTO2P (ORCPT <rfc822;tuffkidtt@gmail.com> + 73 others);
- Fri, 20 Jun 2014 10:28:15 -0400
-Received: from mail-pb0-f51.google.com ([209.85.160.51]:46198 "EHLO
- mail-pb0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
- with ESMTP id S1752834AbaFTO2N (ORCPT
- <rfc822;stable@vger.kernel.org>); Fri, 20 Jun 2014 10:28:13 -0400
-Received: by mail-pb0-f51.google.com with SMTP id rp16so3192728pbb.10
- for <multiple recipients>; Fri, 20 Jun 2014 07:28:13 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=gmail.com; s=20120113;
- h=from:to:cc:subject:date:message-id:in-reply-to:references;
- bh=d4snuLkO7yJL099uI4N/+0VV5Rt4O8Cw+AAMmj8igq8=;
- b=Hmy0dMfQu3uRTZzAq3zGf2sfVMhRUxySItx4tChAq3aaQAehBA+1vqEHeiQ6ZNpXrD
- BJfbmvByR/d4G55woGKZbyOPL/t5XzkVVUuefHgKvEDjWbHns/RYax+lgRFI4Cb1aLEe
- 4u1/8cZ29BpFQ/yVW2D6/K6uwcJ6MQRK8lZISKjf/9oxZLg6vEeR4JGC70qo6yDHeUlu
- VUQ3RrvKJ7NQw2nXTxAPuAvNEd+JCbKp6zO6gi6jET5vAQnevlrx+LxMjKssXI+QjXsH
- N11ImMdOmbmBUgEIkFctpViP+fOFMTfkwIMh05FSQZtcy3NVF5kEUHR8N3B2klbGBYln
- TJ8w==
-X-Received: by 10.68.133.163 with SMTP id pd3mr5111437pbb.166.1403274493273;
- Fri, 20 Jun 2014 07:28:13 -0700 (PDT)
-Received: from echolake.localdomain (static-50-43-41-81.bvtn.or.frontiernet.net. [50.43.41.81])
- by mx.google.com with ESMTPSA id vx10sm44287848pac.17.2014.06.20.07.28.11
- for <multiple recipients>
- (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
- Fri, 20 Jun 2014 07:28:12 -0700 (PDT)
-From: dirk.brandewie@gmail.com
-X-Google-Original-From: dirk.j.brandewie@intel.com
-To: linux-pm@vger.kernel.org
-Cc: rjw@rjwysocki.net, dirk.brandewie@gmail.com,
- stable@vger.kernel.org, Dirk Brandewie <dirk.j.brandewie@intel.com>
-Subject: [PATCH 2/3] intel_pstate: don't touch turbo bit if turbo disabled or unavailable.
-Date: Fri, 20 Jun 2014 07:27:59 -0700
-Message-Id: <1403274480-10593-3-git-send-email-dirk.j.brandewie@intel.com>
-X-Mailer: git-send-email 1.9.0
-In-Reply-To: <1403274480-10593-1-git-send-email-dirk.j.brandewie@intel.com>
-References: <1403274480-10593-1-git-send-email-dirk.j.brandewie@intel.com>
-Sender: stable-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <stable.vger.kernel.org>
-X-Mailing-List: stable@vger.kernel.org
-
-From: Dirk Brandewie <dirk.j.brandewie@intel.com>
-
-If turbo is disabled in the BIOS bit 38 should be set in
-MSR_IA32_MISC_ENABLE register per section 14.3.2.1 of the SDM Vol 3
-document 325384-050US Feb 2014. If this bit is set do *not* attempt
-to disable trubo via the MSR_IA32_PERF_CTL register. On some systems
-trying to disable turbo via MSR_IA32_PERF_CTL will cause subsequent
-writes to MSR_IA32_PERF_CTL not take affect, in fact reading
-MSR_IA32_PERF_CTL will not show the IDA/Turbo DISENGAGE bit(32) as
-set. A write of bit 32 to zero returns to normal operation.
-
-Also deal with the case where the processor does not support
-turbo and the BIOS does not report the fact in MSR_IA32_MISC_ENABLE
-but does report the max and turbo P states as the same value.
-
-References: https://bugzilla.kernel.org/show_bug.cgi?id=64251
-
-Cc: Stable <stable@vger.kernel.org> [3.13+]
-Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
----
- drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
- 1 file changed, 16 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index 74376d6..127ead8 100644
---- a/drivers/cpufreq/intel_pstate.c
-+++ b/drivers/cpufreq/intel_pstate.c
-@@ -128,6 +128,7 @@ static struct pstate_funcs pstate_funcs;
-
- struct perf_limits {
- int no_turbo;
-+ int turbo_disabled;
- int max_perf_pct;
- int min_perf_pct;
- int32_t max_perf;
-@@ -287,7 +288,10 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
- if (ret != 1)
- return -EINVAL;
- limits.no_turbo = clamp_t(int, input, 0 , 1);
--
-+ if (limits.turbo_disabled) {
-+ pr_warn("Turbo disabled by BIOS or unavailable on processor\n");
-+ limits.no_turbo = limits.turbo_disabled;
-+ }
- return count;
- }
-
-@@ -381,7 +385,7 @@ static void byt_set_pstate(struct cpudata *cpudata, int pstate)
- u32 vid;
-
- val = pstate << 8;
-- if (limits.no_turbo)
-+ if (limits.no_turbo && !limits.turbo_disabled)
- val |= (u64)1 << 32;
-
- vid_fp = cpudata->vid.min + mul_fp(
-@@ -448,7 +452,7 @@ static void core_set_pstate(struct cpudata *cpudata, int pstate)
- u64 val;
-
- val = pstate << 8;
-- if (limits.no_turbo)
-+ if (limits.no_turbo && !limits.turbo_disabled)
- val |= (u64)1 << 32;
-
- wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
-@@ -741,7 +745,7 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy)
- limits.min_perf = int_tofp(1);
- limits.max_perf_pct = 100;
- limits.max_perf = int_tofp(1);
-- limits.no_turbo = 0;
-+ limits.no_turbo = limits.turbo_disabled;
- return 0;
- }
- limits.min_perf_pct = (policy->min * 100) / policy->cpuinfo.max_freq;
-@@ -784,6 +788,7 @@ static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
- {
- struct cpudata *cpu;
- int rc;
-+ u64 misc_en;
-
- rc = intel_pstate_init_cpu(policy->cpu);
- if (rc)
-@@ -791,8 +796,13 @@ static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
-
- cpu = all_cpu_data[policy->cpu];
-
-- if (!limits.no_turbo &&
-- limits.min_perf_pct == 100 && limits.max_perf_pct == 100)
-+ rdmsrl(MSR_IA32_MISC_ENABLE, misc_en);
-+ if (misc_en & MSR_IA32_MISC_ENABLE_TURBO_DISABLE ||
-+ cpu->pstate.max_pstate == cpu->pstate.turbo_pstate) {
-+ limits.turbo_disabled = 1;
-+ limits.no_turbo = 1;
-+ }
-+ if (limits.min_perf_pct == 100 && limits.max_perf_pct == 100)
- policy->policy = CPUFREQ_POLICY_PERFORMANCE;
- else
- policy->policy = CPUFREQ_POLICY_POWERSAVE;
---
-1.9.0
-
---
-To unsubscribe from this list: send the line "unsubscribe stable" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/makefile-after_link.patch b/kbuild-AFTER_LINK.patch
index ac7c5e159..2dfb637e8 100644
--- a/makefile-after_link.patch
+++ b/kbuild-AFTER_LINK.patch
@@ -1,7 +1,3 @@
-Bugzilla: N/A
-Upstream-status: ??
-
-From fd4e7f06ecc891474dea3a93df083de5f8c50cdc Mon Sep 17 00:00:00 2001
From: Roland McGrath <roland@redhat.com>
Date: Mon, 6 Oct 2008 23:03:03 -0700
Subject: [PATCH] kbuild: AFTER_LINK
@@ -9,6 +5,9 @@ Subject: [PATCH] kbuild: AFTER_LINK
If the make variable AFTER_LINK is set, it is a command line to run
after each final link. This includes vmlinux itself and vDSO images.
+Bugzilla: N/A
+Upstream-status: ??
+
Signed-off-by: Roland McGrath <roland@redhat.com>
---
arch/arm64/kernel/vdso/Makefile | 3 ++-
@@ -16,22 +15,22 @@ Signed-off-by: Roland McGrath <roland@redhat.com>
arch/powerpc/kernel/vdso64/Makefile | 3 ++-
arch/s390/kernel/vdso32/Makefile | 3 ++-
arch/s390/kernel/vdso64/Makefile | 3 ++-
- arch/x86/vdso/Makefile | 5 +++--
+ arch/x86/entry/vdso/Makefile | 5 +++--
scripts/link-vmlinux.sh | 4 ++++
7 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
-index 6d20b7d162d8..863a01bde0bf 100644
+index f6fe17d88da5..eb6ddbf37f30 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
-@@ -48,7 +48,8 @@ $(obj-vdso): %.o: %.S
+@@ -52,7 +52,8 @@ $(obj-vdso): %.o: %.S FORCE
# Actual build commands
- quiet_cmd_vdsold = VDSOL $@
+ quiet_cmd_vdsold = VDSOL $@
- cmd_vdsold = $(CC) $(c_flags) -Wl,-n -Wl,-T $^ -o $@
+ cmd_vdsold = $(CC) $(c_flags) -Wl,-n -Wl,-T $^ -o $@ \
-+ $(if $(AFTER_LINK),;$(AFTER_LINK))
- quiet_cmd_vdsoas = VDSOA $@
++ $(if $(AFTER_LINK),;$(AFTER_LINK))
+ quiet_cmd_vdsoas = VDSOA $@
cmd_vdsoas = $(CC) $(a_flags) -c -o $@ $<
diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile
@@ -90,11 +89,11 @@ index 2a8ddfd12a5b..452ca53561fe 100644
quiet_cmd_vdso64as = VDSO64A $@
cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
-diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
-index 9206ac7961a5..3d7f533f6757 100644
---- a/arch/x86/vdso/Makefile
-+++ b/arch/x86/vdso/Makefile
-@@ -181,8 +181,9 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
+diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
+index e97032069f88..9ea82f444dea 100644
+--- a/arch/x86/entry/vdso/Makefile
++++ b/arch/x86/entry/vdso/Makefile
+@@ -172,8 +172,9 @@ $(vdso32-images:%=$(obj)/%.dbg): $(obj)/vdso32-%.so.dbg: FORCE \
quiet_cmd_vdso = VDSO $@
cmd_vdso = $(CC) -nostdlib -o $@ \
$(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
@@ -105,9 +104,9 @@ index 9206ac7961a5..3d7f533f6757 100644
+ sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@'
VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) \
- $(LTO_CFLAGS)
+ $(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS)
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
-index 2dcb37736d84..25e170e92ef1 100644
+index 1a10d8ac8162..092d0c0cf72c 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -65,6 +65,10 @@ vmlinux_link()
@@ -121,6 +120,3 @@ index 2dcb37736d84..25e170e92ef1 100644
}
---
-1.8.5.3
-
diff --git a/kernel.spec b/kernel.spec
index b64eb4e24..2c50fbb9f 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -12,39 +12,17 @@ Summary: The Linux kernel
# architectures are added.
%ifarch %{ix86} x86_64
%global signmodules 1
+%global zipmodules 1
%else
%global signmodules 0
+%global zipmodules 0
%endif
-# Save original buildid for later if it's defined
-%if 0%{?buildid:1}
-%global orig_buildid %{buildid}
-%undefine buildid
+%if %{zipmodules}
+%global zipsed -e 's/\.ko$/\.ko.xz/'
%endif
-###################################################################
-# Polite request for people who spin their own kernel rpms:
-# please modify the "buildid" define in a way that identifies
-# that the kernel isn't the stock distribution kernel, for example,
-# by setting the define to ".local" or ".bz123456". This will be
-# appended to the full kernel version.
-#
-# (Uncomment the '#' and both spaces below to set the buildid.)
-#
# % define buildid .local
-###################################################################
-
-# The buildid can also be specified on the rpmbuild command line
-# by adding --define="buildid .whatever". If both the specfile and
-# the environment define a buildid they will be concatenated together.
-%if 0%{?orig_buildid:1}
-%if 0%{?buildid:1}
-%global srpm_buildid %{buildid}
-%define buildid %{srpm_buildid}%{orig_buildid}
-%else
-%define buildid %{orig_buildid}
-%endif
-%endif
# baserelease defines which build revision of this kernel version we're
# building. We used to call this fedora_build, but the magical name
@@ -62,31 +40,25 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 1
+%global baserelease 200
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
# which yields a base_sublevel of 0.
-%define base_sublevel 15
+%define base_sublevel 2
## If this is a released kernel ##
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 2
-# Is it a -stable RC?
-%define stable_rc 0
+%define stable_update 0
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev %{stable_update}
%define stable_base %{stable_update}
-%if 0%{?stable_rc}
-# stable RCs are incremental patches, so we need the previous stable patch
-%define stable_base %(echo $((%{stable_update} - 1)))
-%endif
%endif
-%define rpmversion 3.%{base_sublevel}.%{stable_update}
+%define rpmversion 4.%{base_sublevel}.%{stable_update}
## The not-released-kernel case ##
%else
@@ -97,7 +69,7 @@ Summary: The Linux kernel
# The git snapshot level
%define gitrev 0
# Set rpm version accordingly
-%define rpmversion 3.%{upstream_sublevel}.0
+%define rpmversion 4.%{upstream_sublevel}.0
%endif
# Nb: The above rcrev and gitrev values automagically define Patch00 and Patch01 below.
@@ -112,18 +84,12 @@ Summary: The Linux kernel
#
# standard kernel
%define with_up %{?_without_up: 0} %{?!_without_up: 1}
-# kernel-smp (only valid for ppc 32-bit)
-%define with_smp %{?_without_smp: 0} %{?!_without_smp: 1}
# kernel PAE (only valid for i686 (PAE) and ARM (lpae))
%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1}
# kernel-debug
%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1}
-# kernel-doc
-%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1}
# kernel-headers
%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1}
-# kernel-modules-extra
-%define with_extra %{?_without_extra: 0} %{?!_without_extra: 1}
# perf
%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1}
# tools
@@ -139,8 +105,6 @@ Summary: The Linux kernel
#
# Only build the base kernel (--with baseonly):
%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0}
-# Only build the smp kernel (--with smponly):
-%define with_smponly %{?_with_smponly: 1} %{?!_with_smponly: 0}
# Only build the pae kernel (--with paeonly):
%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0}
# Only build the debug kernel (--with dbgonly):
@@ -163,29 +127,10 @@ Summary: The Linux kernel
# Want to build a vanilla kernel build without any non-upstream patches?
%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
-# Build the kernel-doc package, but don't fail the build if it botches.
-# Here "true" means "continue" and "false" means "fail the build".
-%if 0%{?released_kernel}
-%define doc_build_fail false
-%else
-%define doc_build_fail true
-%endif
-
-%define rawhide_skip_docs 0
-%if 0%{?rawhide_skip_docs}
-%define with_doc 0
-%define doc_build_fail true
-%endif
-
# pkg_release is what we'll fill in for the rpm Release: field
%if 0%{?released_kernel}
-%if 0%{?stable_rc}
-%define stable_rctag .rc%{stable_rc}
-%define pkg_release 0%{stable_rctag}.%{fedora_build}%{?buildid}%{?dist}
-%else
%define pkg_release %{fedora_build}%{?buildid}%{?dist}
-%endif
%else
@@ -205,7 +150,7 @@ Summary: The Linux kernel
%endif
# The kernel tarball/base version
-%define kversion 3.%{base_sublevel}
+%define kversion 4.%{base_sublevel}
%define make_target bzImage
@@ -224,16 +169,6 @@ Summary: The Linux kernel
%if %{nopatches}
%define with_bootwrapper 0
%define variant -vanilla
-%else
-%define variant_fedora -fedora
-%endif
-
-%define using_upstream_branch 0
-%if 0%{?upstream_branch:1}
-%define stable_update 0
-%define using_upstream_branch 1
-%define variant -%{upstream_branch}%{?variant_fedora}
-%define pkg_release 0.%{fedora_build}%{upstream_branch_tag}%{?buildid}%{?dist}
%endif
%if !%{debugbuildsenabled}
@@ -252,14 +187,6 @@ Summary: The Linux kernel
# if requested, only build base kernel
%if %{with_baseonly}
-%define with_smp 0
-%define with_pae 0
-%define with_debug 0
-%endif
-
-# if requested, only build smp kernel
-%if %{with_smponly}
-%define with_up 0
%define with_pae 0
%define with_debug 0
%endif
@@ -267,7 +194,6 @@ Summary: The Linux kernel
# if requested, only build pae kernel
%if %{with_paeonly}
%define with_up 0
-%define with_smp 0
%define with_debug 0
%endif
@@ -277,7 +203,6 @@ Summary: The Linux kernel
%define with_up 0
%define with_pae 0
%endif
-%define with_smp 0
%define with_pae 0
%define with_tools 0
%define with_perf 0
@@ -287,26 +212,16 @@ Summary: The Linux kernel
%if %{with_vdso_install}
# These arches install vdso/ directories.
-%define vdso_arches %{all_x86} x86_64 ppc ppc64 ppc64p7 s390 s390x aarch64
+%define vdso_arches %{all_x86} x86_64 %{power64} s390 s390x aarch64
%endif
# Overrides for generic default options
-# only ppc needs a separate smp kernel
-%ifnarch ppc
-%define with_smp 0
-%endif
-
# don't do debug builds on anything but i686 and x86_64
%ifnarch i686 x86_64
%define with_debug 0
%endif
-# only package docs noarch
-%ifnarch noarch
-%define with_doc 0
-%endif
-
# don't build noarch kernels or headers (duh)
%ifarch noarch
%define with_up 0
@@ -317,12 +232,9 @@ Summary: The Linux kernel
%endif
# bootwrapper is only on ppc
-%ifnarch ppc ppc64 ppc64p7
+# sparse blows up on ppc
+%ifnarch %{power64}
%define with_bootwrapper 0
-%endif
-
-# sparse blows up on ppc64 and sparc64
-%ifarch ppc64 ppc ppc64p7
%define with_sparse 0
%endif
@@ -344,14 +256,19 @@ Summary: The Linux kernel
%define kernel_image arch/x86/boot/bzImage
%endif
-%ifarch ppc64 ppc64p7
+%ifarch %{power64}
%define asmarch powerpc
%define hdrarch powerpc
-%define all_arch_configs kernel-%{version}-ppc64*.config
%define image_install_path boot
%define make_target vmlinux
%define kernel_image vmlinux
%define kernel_image_elf 1
+%ifarch ppc64 ppc64p7
+%define all_arch_configs kernel-%{version}-ppc64*.config
+%endif
+%ifarch ppc64le
+%define all_arch_configs kernel-%{version}-ppc64le*.config
+%endif
%endif
%ifarch s390x
@@ -364,16 +281,6 @@ Summary: The Linux kernel
%define with_tools 0
%endif
-%ifarch ppc
-%define asmarch powerpc
-%define hdrarch powerpc
-%define all_arch_configs kernel-%{version}-ppc{-,.}*config
-%define image_install_path boot
-%define make_target vmlinux
-%define kernel_image vmlinux
-%define kernel_image_elf 1
-%endif
-
%ifarch %{arm}
%define all_arch_configs kernel-%{version}-arm*.config
%define image_install_path boot
@@ -404,7 +311,7 @@ Summary: The Linux kernel
# Should make listnewconfig fail if there's config options
# printed out?
-%if %{nopatches}%{using_upstream_branch}
+%if %{nopatches}
%define listnewconfig_fail 0
%else
%define listnewconfig_fail 1
@@ -421,7 +328,6 @@ Summary: The Linux kernel
%ifarch %nobuildarches
%define with_up 0
-%define with_smp 0
%define with_pae 0
%define with_debuginfo 0
%define with_perf 0
@@ -435,7 +341,7 @@ Summary: The Linux kernel
%endif
# Architectures we build tools/cpupower on
-%define cpupowerarchs %{ix86} x86_64 ppc ppc64 ppc64p7 %{arm} aarch64
+%define cpupowerarchs %{ix86} x86_64 %{power64} %{arm} aarch64
#
# Packages that need to be installed before the kernel is, because the %%post
@@ -444,29 +350,6 @@ Summary: The Linux kernel
%define kernel_prereq fileutils, systemd >= 203-2
%define initrd_prereq dracut >= 027
-#
-# This macro does requires, provides, conflicts, obsoletes for a kernel package.
-# %%kernel_reqprovconf <subpackage>
-# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes
-# macros defined above.
-#
-%define kernel_reqprovconf \
-Provides: kernel = %{rpmversion}-%{pkg_release}\
-Provides: kernel-%{_target_cpu} = %{rpmversion}-%{pkg_release}%{?1:+%{1}}\
-Provides: kernel-drm-nouveau = 16\
-Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\
-Requires(pre): %{kernel_prereq}\
-Requires(pre): %{initrd_prereq}\
-Requires(pre): linux-firmware >= 20130724-29.git31f6b30\
-Requires(preun): systemd >= 200\
-%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\
-%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\
-%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\
-# We can't let RPM do the dependencies automatic because it'll then pick up\
-# a correct but undesirable perl dependency from the module headers which\
-# isn't required for the kernel proper to function\
-AutoReqProv: no\
-%{nil}
Name: kernel%{?variant}
Group: System Environment/Kernel
@@ -476,10 +359,13 @@ Version: %{rpmversion}
Release: %{pkg_release}
# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
# SET %%nobuildarches (ABOVE) INSTEAD
-ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ppc64p7 s390 s390x %{arm} aarch64
+ExclusiveArch: %{all_x86} x86_64 ppc64 ppc64p7 s390 s390x %{arm} aarch64 ppc64le
ExclusiveOS: Linux
+%ifnarch %{nobuildarches}
+Requires: kernel-core-uname-r = %{KVERREL}%{?variant}
+Requires: kernel-modules-uname-r = %{KVERREL}%{?variant}
+%endif
-%kernel_reqprovconf
#
# List the packages used during the kernel build
@@ -488,13 +374,15 @@ BuildRequires: kmod, patch, bash, sh-utils, tar
BuildRequires: bzip2, xz, findutils, gzip, m4, perl, perl-Carp, make, diffutils, gawk
BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc
BuildRequires: net-tools, hostname, bc
-BuildRequires: xmlto, asciidoc
%if %{with_sparse}
BuildRequires: sparse
%endif
%if %{with_perf}
BuildRequires: elfutils-devel zlib-devel binutils-devel newt-devel python-devel perl(ExtUtils::Embed) bison flex
BuildRequires: audit-libs-devel
+%ifnarch s390 s390x %{arm}
+BuildRequires: numactl-devel
+%endif
%endif
%if %{with_tools}
BuildRequires: pciutils-devel gettext ncurses-devel
@@ -515,14 +403,24 @@ BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu
%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu-
%endif
-Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{kversion}.tar.xz
+Source0: ftp://ftp.kernel.org/pub/linux/kernel/v4.x/linux-%{kversion}.tar.xz
+Source10: perf-man-%{kversion}.tar.gz
Source11: x509.genkey
Source15: merge.pl
Source16: mod-extra.list
Source17: mod-extra.sh
Source18: mod-sign.sh
+Source90: filter-x86_64.sh
+Source91: filter-armv7hl.sh
+Source92: filter-i686.sh
+Source93: filter-aarch64.sh
+Source95: filter-ppc64.sh
+Source96: filter-ppc64le.sh
+Source97: filter-s390x.sh
+Source98: filter-ppc64p7.sh
+Source99: filter-modules.sh
%define modsign_cmd %{SOURCE18}
Source19: Makefile.release
@@ -538,11 +436,10 @@ Source32: config-x86-32-generic
Source40: config-x86_64-generic
-Source50: config-powerpc-generic
-Source51: config-powerpc32-generic
-Source52: config-powerpc32-smp
+Source50: config-powerpc64-generic
Source53: config-powerpc64
Source54: config-powerpc64p7
+Source55: config-powerpc64le
Source70: config-s390x
@@ -568,76 +465,77 @@ Source2001: cpupower.config
# For a stable release kernel
%if 0%{?stable_update}
%if 0%{?stable_base}
-%define stable_patch_00 patch-3.%{base_sublevel}.%{stable_base}.xz
+%define stable_patch_00 patch-4.%{base_sublevel}.%{stable_base}.xz
Patch00: %{stable_patch_00}
%endif
-%if 0%{?stable_rc}
-%define stable_patch_01 patch-3.%{base_sublevel}.%{stable_update}-rc%{stable_rc}.xz
-Patch01: %{stable_patch_01}
-%endif
# non-released_kernel case
# These are automagically defined by the rcrev and gitrev values set up
# near the top of this spec file.
%else
%if 0%{?rcrev}
-Patch00: patch-3.%{upstream_sublevel}-rc%{rcrev}.xz
+Patch00: patch-4.%{upstream_sublevel}-rc%{rcrev}.xz
%if 0%{?gitrev}
-Patch01: patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
+Patch01: patch-4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
-Patch00: patch-3.%{base_sublevel}-git%{gitrev}.xz
-%endif
+Patch00: patch-4.%{base_sublevel}-git%{gitrev}.xz
%endif
%endif
-
-%if %{using_upstream_branch}
-### BRANCH PATCH ###
%endif
-# we also need compile fixes for -vanilla
-Patch04: compile-fixes.patch
-
# build tweak for build ID magic, even for -vanilla
-Patch05: makefile-after_link.patch
+Patch05: kbuild-AFTER_LINK.patch
%if !%{nopatches}
-# revert upstream patches we get via other methods
-Patch09: upstream-reverts.patch
# Git trees.
# Standalone patches
-Patch390: defaults-acpi-video.patch
-
Patch450: input-kill-stupid-messages.patch
Patch452: no-pcspkr-modalias.patch
-Patch460: serial-460800.patch
-
Patch470: die-floppy-die.patch
-Patch510: silence-noise.patch
+Patch510: input-silence-i8042-noise.patch
Patch530: silence-fbcon-logo.patch
-Patch600: 0001-lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
+Patch600: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
-#rhbz 917708
-Patch700: Revert-userns-Allow-unprivileged-users-to-create-use.patch
+#rhbz 1126580
+Patch601: Kbuild-Add-an-option-to-enable-GCC-VTA.patch
Patch800: crash-driver.patch
# crypto/
# secure boot
-Patch1000: secure-modules.patch
-Patch1001: modsign-uefi.patch
-Patch1002: sb-hibernate.patch
-Patch1003: sysrq-secure-boot.patch
+Patch1000: Add-secure_modules-call.patch
+Patch1001: PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
+Patch1002: x86-Lock-down-IO-port-access-when-module-security-is.patch
+Patch1003: ACPI-Limit-access-to-custom_method.patch
+Patch1004: asus-wmi-Restrict-debugfs-interface-when-module-load.patch
+Patch1005: Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
+Patch1006: acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
+Patch1007: kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
+Patch1008: x86-Restrict-MSR-access-when-module-loading-is-restr.patch
+Patch1009: Add-option-to-automatically-enforce-module-signature.patch
+Patch1010: efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
+Patch1011: efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
+Patch1012: efi-Add-EFI_SECURE_BOOT-bit.patch
+Patch1013: hibernate-Disable-in-a-signed-modules-environment.patch
+
+Patch1014: Add-EFI-signature-data-types.patch
+Patch1015: Add-an-EFI-signature-blob-parser-and-key-loader.patch
+Patch1016: KEYS-Add-a-system-blacklist-keyring.patch
+Patch1017: MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
+Patch1018: MODSIGN-Support-not-importing-certs-from-db.patch
+
+Patch1019: Add-sysrq-option-to-disable-secure-boot-mode.patch
# virt + ksm patches
@@ -646,6 +544,7 @@ Patch1003: sysrq-secure-boot.patch
# nouveau + drm fixes
# intel drm is all merged upstream
Patch1826: drm-i915-hush-check-crtc-state.patch
+
# Quiet boot fixes
# fs fixes
@@ -655,25 +554,27 @@ Patch1826: drm-i915-hush-check-crtc-state.patch
# patches headed upstream
Patch12016: disable-i8042-check-on-apple-mac.patch
-Patch14000: hibernate-freeze-filesystems.patch
-
Patch14010: lis3-improve-handling-of-null-rate.patch
-Patch15000: nowatchdog-on-virt.patch
+Patch15000: watchdog-Disable-watchdog-on-virtual-machines.patch
-# ARM64
-
-# ARM
+# PPC
-# ARM tegra
-Patch21020: arm-tegra-usb-no-reset-linux33.patch
+# ARM64
+Patch16000: amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch
+Patch16001: amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
+Patch16002: arm64-avoid-needing-console-to-enable-serial-console.patch
+Patch16003: usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
-# ARM i.MX6
-Patch21021: arm-beagle.patch
-Patch21022: arm-imx6-utilite.patch
+# ARMv7
+Patch16020: ARM-tegra-usb-no-reset.patch
+Patch16021: arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
+Patch16022: arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
+Patch16024: arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
+Patch16025: arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
+Patch16026: pinctrl-pinctrl-single-must-be-initialized-early.patch
-# ARM sunxi (AllWinner)
-Patch21025: 0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch
+Patch16028: arm-i.MX6-Utilite-device-dtb.patch
#rhbz 754518
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
@@ -682,78 +583,47 @@ Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
Patch21242: criu-no-expert.patch
#rhbz 892811
-Patch21247: ath9k_rx_dma_stop_check.patch
-
-Patch22000: weird-root-dentry-name-debug.patch
-
-Patch25047: drm-radeon-Disable-writeback-by-default-on-ppc.patch
-
-#rhbz 1025603
-Patch25063: disable-libdw-unwind-on-non-x86.patch
-
-#rhbz 1048314
-Patch25062: 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
-
-#rhbz 1089583
-Patch25064: 0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch
+Patch21247: ath9k-rx-dma-stop-check.patch
-#rhbz 1090161
-Patch25072: HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch
+#CVE-2015-2150 rhbz 1196266 1200397
+Patch26175: xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
-#rhbz 983342 1093120
-Patch25069: 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
+#rhbz 1212230
+Patch26176: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
-Patch25071: s390-appldata-add-slab.h-for-kzalloc-kfree.patch
+#rhbz 1133378
+Patch26219: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
-# Patch series from Hans for various backlight and platform driver fixes
-Patch26001: thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch
-Patch26002: samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
-Patch26003: ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch
-Patch26004: asus-wmi-Add-a-no-backlight-quirk.patch
-Patch26005: eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch
-Patch26006: acpi-video-Don-t-register-acpi_video_resume-notifier.patch
-Patch26007: acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch
-Patch26008: acer-wmi-Switch-to-acpi_video_unregister_backlight.patch
-Patch26009: acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch
-Patch26010: nouveau-Don-t-check-acpi_video_backlight_support-bef.patch
-Patch26011: backlight-Add-backlight-device-un-registration-notif.patch
-Patch26012: acpi-video-Unregister-the-backlight-device-if-a-raw-.patch
-Patch26013: acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch
-Patch26014: acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch
+#rhbz 1226743
+Patch26221: drm-i915-turn-off-wc-mmaps.patch
-#rhbz 1094066
-Patch25096: drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch
-#rhbz 1064516
-Patch25098: e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch
+#rhbz 1244511
+Patch507: HID-chicony-Add-support-for-Acer-Aspire-Switch-12.patch
-#rhbz 1099761
-Patch25099: NFS-populate-net-in-mount-data-when-remounting.patch
+Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch
-#rhbz 1106856
-Patch25100: dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch
+#rhbz 1239050
+Patch509: ideapad-laptop-Add-Lenovo-Yoga-3-14-to-no_hw_rfkill-.patch
-#rhbz 1103528
-Patch25101: elantech-Deal-with-clickpads-reporting-right-button-.patch
+#rhbz 1253789
+Patch511: iSCSI-let-session-recovery_tmo-sysfs-writes-persist.patch
-Patch25102: intel_pstate-Fix-setting-VID.patch
-Patch25103: intel_pstate-dont-touch-turbo-bit-if-turbo-disabled-or-unavailable.patch
-Patch25104: intel_pstate-Update-documentation-of-max-min_perf_pct-sysfs-files.patch
+#rhbz 1250717
+Patch512: ext4-dont-manipulate-recovery-flag-when-freezing.patch
-#CVE-2014-4508 rhbz 1111590 1112073
-Patch25106: x86_32-entry-Do-syscall-exit-work-on-badsys.patch
+#rhbz 1256281
+Patch26265: mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch
-#CVE-2014-0206 rhbz 1094602 1112975
-Patch25107: aio-fix-kernel-memory-disclosure-in-io_getevents-int.patch
-Patch25108: aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch
+#rhbz 1257534
+Patch515: nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch
-Patch25109: revert-input-wacom-testing-result-shows-get_report-is-unnecessary.patch
+#rhbz 1212201
+Patch514: drm-qxl-validate-monitors-config-modes.patch
-#rhbz 1021036, submitted upstream
-Patch25110: 0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch
-
-#rhbz 1015989
-Patch25111: netfilter-nf_nat-fix-oops-on-netns-removal.patch
+#rhbz 1257500
+Patch517: vmwgfx-Rework-device-initialization.patch
+Patch518: drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch
# END OF PATCH DEFINITIONS
@@ -762,29 +632,43 @@ Patch25111: netfilter-nf_nat-fix-oops-on-netns-removal.patch
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
%description
-The kernel package contains the Linux kernel (vmlinuz), the core of any
-Linux operating system. The kernel handles the basic functions
-of the operating system: memory allocation, process allocation, device
-input and output, etc.
-
-
-%package doc
-Summary: Various documentation bits found in the kernel source
-Group: Documentation
-%description doc
-This package contains documentation files from the kernel
-source. Various bits of information about the Linux kernel and the
-device drivers shipped with it are documented in these files.
-
-You'll want to install this package if you need a reference to the
-options that can be passed to Linux kernel modules at load time.
+The kernel meta package
+#
+# This macro does requires, provides, conflicts, obsoletes for a kernel package.
+# %%kernel_reqprovconf <subpackage>
+# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes
+# macros defined above.
+#
+%define kernel_reqprovconf \
+Provides: kernel = %{rpmversion}-%{pkg_release}\
+Provides: kernel-%{_target_cpu} = %{rpmversion}-%{pkg_release}%{?1:+%{1}}\
+Provides: kernel-drm-nouveau = 16\
+Provides: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+Requires(pre): %{kernel_prereq}\
+Requires(pre): %{initrd_prereq}\
+Requires(pre): linux-firmware >= 20130724-29.git31f6b30\
+Requires(preun): systemd >= 200\
+Conflicts: xorg-x11-drv-vmmouse < 13.0.99\
+%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\
+%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\
+%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\
+# We can't let RPM do the dependencies automatic because it'll then pick up\
+# a correct but undesirable perl dependency from the module headers which\
+# isn't required for the kernel proper to function\
+AutoReq: no\
+AutoProv: yes\
+%{nil}
%package headers
Summary: Header files for the Linux kernel for use by glibc
Group: Development/System
Obsoletes: glibc-kernheaders < 3.0-46
Provides: glibc-kernheaders = 3.0-46
+%if "0%{?variant}"
+Obsoletes: kernel-headers < %{rpmversion}-%{pkg_release}
+Provides: kernel-headers = %{rpmversion}-%{pkg_release}
+%endif
%description headers
Kernel-headers includes the C header files that specify the interface
between the Linux kernel and userspace libraries and programs. The
@@ -828,7 +712,7 @@ This package provides debug information for the perf package.
# symlinks because of the trailing nonmatching alternation and
# the leading .*, because of find-debuginfo.sh's buggy handling
# of matching the pattern against the symlinks file.
-%{expand:%%global debuginfo_args %{?debuginfo_args} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|XXX' -o perf-debuginfo.list}
+%{expand:%%global debuginfo_args %{?debuginfo_args} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/traceevent/plugins/.*|XXX' -o perf-debuginfo.list}
%package -n python-perf
Summary: Python bindings for apps which will manipulate perf events
@@ -920,7 +804,7 @@ Group: Development/Debug\
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\
Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\
AutoReqProv: no\
-%description -n %{name}%{?1:-%{1}}-debuginfo\
+%description %{?1:%{1}-}debuginfo\
This package provides debug information for package %{name}%{?1:-%{1}}.\
This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\
%{expand:%%global debuginfo_args %{?debuginfo_args} -p '/.*/%%{KVERREL}%{?1:[+]%{1}}/.*|/.*%%{KVERREL}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\
@@ -937,11 +821,12 @@ Group: System Environment/Kernel\
Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\
Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
Provides: kernel-devel = %{version}-%{release}%{?1:+%{1}}\
-Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\
+Provides: kernel-devel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+Provides: installonlypkg(kernel)\
AutoReqProv: no\
Requires(pre): /usr/bin/find\
Requires: perl\
-%description -n kernel%{?variant}%{?1:-%{1}}-devel\
+%description %{?1:%{1}-}devel\
This package provides kernel headers and makefiles sufficient to build modules\
against the %{?2:%{2} }kernel package.\
%{nil}
@@ -958,55 +843,75 @@ Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}
Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\
Provides: installonlypkg(kernel-module)\
-Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\
-Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\
-AutoReqProv: no\
-%description -n kernel%{?variant}%{?1:-%{1}}-modules-extra\
+Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+Requires: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+AutoReq: no\
+AutoProv: yes\
+%description %{?1:%{1}-}modules-extra\
This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\
%{nil}
#
+# This macro creates a kernel-<subpackage>-modules package.
+# %%kernel_modules_package <subpackage> <pretty-name>
+#
+%define kernel_modules_package() \
+%package %{?1:%{1}-}modules\
+Summary: kernel modules to match the %{?2:%{2}-}core kernel\
+Group: System Environment/Kernel\
+Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\
+Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
+Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\
+Provides: installonlypkg(kernel-module)\
+Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+Requires: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+AutoReq: no\
+AutoProv: yes\
+%description %{?1:%{1}-}modules\
+This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\
+%{nil}
+
+#
+# this macro creates a kernel-<subpackage> meta package.
+# %%kernel_meta_package <subpackage>
+#
+%define kernel_meta_package() \
+%package %{1}\
+summary: kernel meta-package for the %{1} kernel\
+group: system environment/kernel\
+Requires: kernel-%{1}-core-uname-r = %{KVERREL}%{?variant}+%{1}\
+Requires: kernel-%{1}-modules-uname-r = %{KVERREL}%{?variant}+%{1}\
+%description %{1}\
+The meta-package for the %{1} kernel\
+%{nil}
+
+#
# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too.
# %%define variant_summary The Linux kernel compiled for <configuration>
# %%kernel_variant_package [-n <pretty-name>] <subpackage>
#
%define kernel_variant_package(n:) \
-%package %1\
+%package %{?1:%{1}-}core\
Summary: %{variant_summary}\
Group: System Environment/Kernel\
-%kernel_reqprovconf\
-%{expand:%%kernel_devel_package %1 %{!?-n:%1}%{?-n:%{-n*}}}\
-%if %{with_extra}\
-%{expand:%%kernel_modules_extra_package %1 %{!?-n:%1}%{?-n:%{-n*}}}\
+Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
+%{expand:%%kernel_reqprovconf}\
+%if %{?1:1} %{!?1:0} \
+%{expand:%%kernel_meta_package %{?1:%{1}}}\
%endif\
-%{expand:%%kernel_debuginfo_package %1}\
+%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
+%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
+%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
+%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\
%{nil}
-
-# First the auxiliary packages of the main kernel package.
-%kernel_devel_package
-%if %{with_extra}
-%kernel_modules_extra_package
-%endif
-%kernel_debuginfo_package
-
-
# Now, each variant package.
-%define variant_summary The Linux kernel compiled for SMP machines
-%kernel_variant_package -n SMP smp
-%description smp
-This package includes a SMP version of the Linux kernel. It is
-required only on machines with two or more CPUs as well as machines with
-hyperthreading technology.
-
-Install the kernel-smp package if your machine uses two or more CPUs.
-
-
%ifnarch armv7hl
%define variant_summary The Linux kernel compiled for PAE capable machines
%kernel_variant_package %{pae}
-%description %{pae}
+%description %{pae}-core
This package includes a version of the Linux kernel with support for up to
64GB of high memory. It requires a CPU with Physical Address Extensions (PAE).
The non-PAE kernel can only address up to 4GB of memory.
@@ -1014,7 +919,7 @@ Install the kernel-PAE package if your machine has more than 4GB of memory.
%else
%define variant_summary The Linux kernel compiled for Cortex-A15
%kernel_variant_package %{pae}
-%description %{pae}
+%description %{pae}-core
This package includes a version of the Linux kernel with support for
Cortex-A15 devices with LPAE and HW virtualisation support
%endif
@@ -1023,7 +928,7 @@ Cortex-A15 devices with LPAE and HW virtualisation support
%define variant_summary The Linux kernel compiled with extra debugging enabled for PAE capable machines
%kernel_variant_package %{pae}debug
Obsoletes: kernel-PAE-debug
-%description %{pae}debug
+%description %{pae}debug-core
This package includes a version of the Linux kernel with support for up to
64GB of high memory. It requires a CPU with Physical Address Extensions (PAE).
The non-PAE kernel can only address up to 4GB of memory.
@@ -1036,7 +941,7 @@ on kernel bugs, as some of these options impact performance noticably.
%define variant_summary The Linux kernel compiled with extra debugging enabled
%kernel_variant_package debug
-%description debug
+%description debug-core
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
@@ -1046,6 +951,16 @@ This variant of the kernel has numerous debugging options enabled.
It should only be installed when trying to gather additional information
on kernel bugs, as some of these options impact performance noticably.
+# And finally the main -core package
+
+%define variant_summary The Linux kernel
+%kernel_variant_package
+%description core
+The kernel package contains the Linux kernel (vmlinuz), the core of any
+Linux operating system. The kernel handles the basic functions
+of the operating system: memory allocation, process allocation, device
+input and output, etc.
+
%prep
# do a few sanity-checks for --with *only builds
@@ -1056,13 +971,6 @@ exit 1
%endif
%endif
-%if %{with_smponly}
-%if !%{with_smp}
-echo "Cannot build --with smponly, smp build is disabled"
-exit 1
-%endif
-%endif
-
%if "%{baserelease}" == "0"
echo "baserelease must be greater than zero"
exit 1
@@ -1086,14 +994,12 @@ ApplyPatch()
if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
exit 1
fi
-%if !%{using_upstream_branch}
if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then
- if [ "${patch:0:8}" != "patch-3." ] ; then
+ if [ "${patch:0:8}" != "patch-4." ] ; then
echo "ERROR: Patch $patch not listed as a source patch in specfile"
exit 1
fi
fi 2>/dev/null
-%endif
case "$patch" in
*.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
*.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
@@ -1122,20 +1028,20 @@ ApplyOptionalPatch()
# Update to latest upstream.
%if 0%{?released_kernel}
-%define vanillaversion 3.%{base_sublevel}
+%define vanillaversion 4.%{base_sublevel}
# non-released_kernel case
%else
%if 0%{?rcrev}
-%define vanillaversion 3.%{upstream_sublevel}-rc%{rcrev}
+%define vanillaversion 4.%{upstream_sublevel}-rc%{rcrev}
%if 0%{?gitrev}
-%define vanillaversion 3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
+%define vanillaversion 4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
-%define vanillaversion 3.%{base_sublevel}-git%{gitrev}
+%define vanillaversion 4.%{base_sublevel}-git%{gitrev}
%else
-%define vanillaversion 3.%{base_sublevel}
+%define vanillaversion 4.%{base_sublevel}
%endif
%endif
%endif
@@ -1148,7 +1054,7 @@ ApplyOptionalPatch()
# Build a list of the other top-level kernel tree directories.
# This will be used to hardlink identical vanilla subdirs.
-sharedirs=$(find "$PWD" -maxdepth 1 -type d -name 'kernel-3.*' \
+sharedirs=$(find "$PWD" -maxdepth 1 -type d -name 'kernel-4.*' \
| grep -x -v "$PWD"/kernel-%{kversion}%{?dist}) ||:
# Delete all old stale trees.
@@ -1219,14 +1125,14 @@ if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
# Update vanilla to the latest upstream.
# (non-released_kernel case only)
%if 0%{?rcrev}
- ApplyPatch patch-3.%{upstream_sublevel}-rc%{rcrev}.xz
+ ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}.xz
%if 0%{?gitrev}
- ApplyPatch patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
+ ApplyPatch patch-4.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
- ApplyPatch patch-3.%{base_sublevel}-git%{gitrev}.xz
+ ApplyPatch patch-4.%{base_sublevel}-git%{gitrev}.xz
%endif
%endif
@@ -1252,13 +1158,6 @@ cd linux-%{KVERREL}
%if 0%{?stable_base}
ApplyPatch %{stable_patch_00}
%endif
-%if 0%{?stable_rc}
-ApplyPatch %{stable_patch_01}
-%endif
-
-%if %{using_upstream_branch}
-### BRANCH APPLY ###
-%endif
# Drop some necessary files from the source dir into the buildroot
cp $RPM_SOURCE_DIR/config-* .
@@ -1276,38 +1175,44 @@ make -f %{SOURCE19} config-release
make -f %{SOURCE20} VERSION=%{version} configs
# Merge in any user-provided local config option changes
+%ifnarch %nobuildarches
for i in %{all_arch_configs}
do
mv $i $i.tmp
./merge.pl %{SOURCE1000} $i.tmp > $i
rm $i.tmp
done
+%endif
-ApplyPatch makefile-after_link.patch
+ApplyPatch kbuild-AFTER_LINK.patch
-#
-# misc small stuff to make things compile
-#
-ApplyOptionalPatch compile-fixes.patch
%if !%{nopatches}
-# revert patches from upstream that conflict or that we get via other means
-ApplyOptionalPatch upstream-reverts.patch -R
-
# Architecture patches
# x86(-64)
-ApplyPatch 0001-lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
+ApplyPatch lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
+
+# PPC
# ARM64
+ApplyPatch amd-xgbe-a0-Add-support-for-XGBE-on-A0.patch
+ApplyPatch amd-xgbe-phy-a0-Add-support-for-XGBE-PHY-on-A0.patch
+ApplyPatch arm64-avoid-needing-console-to-enable-serial-console.patch
+ApplyPatch usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
#
# ARM
#
-ApplyPatch arm-tegra-usb-no-reset-linux33.patch
-ApplyPatch 0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch
-ApplyPatch arm-imx6-utilite.patch
-ApplyPatch arm-beagle.patch
+ApplyPatch ARM-tegra-usb-no-reset.patch
+
+ApplyPatch arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
+ApplyPatch arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
+ApplyPatch arm-dts-am335x-bone-common-setup-default-pinmux-http.patch
+ApplyPatch arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
+ApplyPatch pinctrl-pinctrl-single-must-be-initialized-early.patch
+
+ApplyPatch arm-i.MX6-Utilite-device-dtb.patch
#
# bugfixes to drivers and filesystems
@@ -1328,7 +1233,6 @@ ApplyPatch arm-beagle.patch
# WMI
# ACPI
-ApplyPatch defaults-acpi-video.patch
#
# PCI
@@ -1353,19 +1257,15 @@ ApplyPatch die-floppy-die.patch
ApplyPatch no-pcspkr-modalias.patch
-# Allow to use 480600 baud on 16C950 UARTs
-ApplyPatch serial-460800.patch
-
# Silence some useless messages that still get printed with 'quiet'
-ApplyPatch silence-noise.patch
+ApplyPatch input-silence-i8042-noise.patch
# Make fbcon not show the penguins with 'quiet'
ApplyPatch silence-fbcon-logo.patch
# Changes to upstream defaults.
-
-#rhbz 917708
-ApplyPatch Revert-userns-Allow-unprivileged-users-to-create-use.patch
+#rhbz 1126580
+ApplyPatch Kbuild-Add-an-option-to-enable-GCC-VTA.patch
# /dev/crash driver.
ApplyPatch crash-driver.patch
@@ -1373,10 +1273,28 @@ ApplyPatch crash-driver.patch
# crypto/
# secure boot
-ApplyPatch secure-modules.patch
-ApplyPatch modsign-uefi.patch
-ApplyPatch sb-hibernate.patch
-ApplyPatch sysrq-secure-boot.patch
+ApplyPatch Add-secure_modules-call.patch
+ApplyPatch PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
+ApplyPatch x86-Lock-down-IO-port-access-when-module-security-is.patch
+ApplyPatch ACPI-Limit-access-to-custom_method.patch
+ApplyPatch asus-wmi-Restrict-debugfs-interface-when-module-load.patch
+ApplyPatch Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
+ApplyPatch acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
+ApplyPatch kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
+ApplyPatch x86-Restrict-MSR-access-when-module-loading-is-restr.patch
+ApplyPatch Add-option-to-automatically-enforce-module-signature.patch
+ApplyPatch efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
+ApplyPatch efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
+ApplyPatch efi-Add-EFI_SECURE_BOOT-bit.patch
+ApplyPatch hibernate-Disable-in-a-signed-modules-environment.patch
+
+ApplyPatch Add-EFI-signature-data-types.patch
+ApplyPatch Add-an-EFI-signature-blob-parser-and-key-loader.patch
+ApplyPatch KEYS-Add-a-system-blacklist-keyring.patch
+ApplyPatch MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
+ApplyPatch MODSIGN-Support-not-importing-certs-from-db.patch
+
+ApplyPatch Add-sysrq-option-to-disable-secure-boot-mode.patch
# Assorted Virt Fixes
@@ -1392,91 +1310,63 @@ ApplyPatch drm-i915-hush-check-crtc-state.patch
# Patches headed upstream
ApplyPatch disable-i8042-check-on-apple-mac.patch
-# FIXME: REBASE
-#ApplyPatch hibernate-freeze-filesystems.patch
-
ApplyPatch lis3-improve-handling-of-null-rate.patch
# Disable watchdog on virtual machines.
-ApplyPatch nowatchdog-on-virt.patch
+ApplyPatch watchdog-Disable-watchdog-on-virtual-machines.patch
#rhbz 754518
ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
-#pplyPatch weird-root-dentry-name-debug.patch
-
# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
ApplyPatch criu-no-expert.patch
#rhbz 892811
-ApplyPatch ath9k_rx_dma_stop_check.patch
-
-ApplyPatch drm-radeon-Disable-writeback-by-default-on-ppc.patch
+ApplyPatch ath9k-rx-dma-stop-check.patch
-#rhbz 1048314
-ApplyPatch 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
-#rhbz 1089583
-ApplyPatch 0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch
-#rhbz 1090161
-ApplyPatch HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch
+#CVE-2015-2150 rhbz 1196266 1200397
+ApplyPatch xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
-#rhbz 1025603
-ApplyPatch disable-libdw-unwind-on-non-x86.patch
+#rhbz 1212230
+ApplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
-#rhbz 983342 1093120
-ApplyPatch 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
+#rhbz 1133378
+ApplyPatch firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
-ApplyPatch s390-appldata-add-slab.h-for-kzalloc-kfree.patch
+#rhbz 1226743
+ApplyPatch drm-i915-turn-off-wc-mmaps.patch
-# Patch series from Hans for various backlight and platform driver fixes
-ApplyPatch thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch
-ApplyPatch samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
-ApplyPatch ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch
-ApplyPatch asus-wmi-Add-a-no-backlight-quirk.patch
-ApplyPatch eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch
-ApplyPatch acpi-video-Don-t-register-acpi_video_resume-notifier.patch
-ApplyPatch acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch
-ApplyPatch acer-wmi-Switch-to-acpi_video_unregister_backlight.patch
-ApplyPatch acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch
-ApplyPatch nouveau-Don-t-check-acpi_video_backlight_support-bef.patch
-ApplyPatch backlight-Add-backlight-device-un-registration-notif.patch
-ApplyPatch acpi-video-Unregister-the-backlight-device-if-a-raw-.patch
-ApplyPatch acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch
-ApplyPatch acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch
+#rhbz 1212230
+# pplyPatch Input-Revert-Revert-synaptics-use-dmax-in-input_mt_a.patch
+# pplyPatch Input-synaptics-allocate-3-slots-to-keep-stability-i.patch
+# pplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
-#rhbz 1094066
-ApplyPatch drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch
+#rhbz 1244511
+ApplyPatch HID-chicony-Add-support-for-Acer-Aspire-Switch-12.patch
-#rhbz 1064516
-ApplyPatch e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch
+ApplyPatch kexec-uefi-copy-secure_boot-flag-in-boot-params.patch
-#rhbz 1099761
-ApplyPatch NFS-populate-net-in-mount-data-when-remounting.patch
+#rhbz 1239050
+ApplyPatch ideapad-laptop-Add-Lenovo-Yoga-3-14-to-no_hw_rfkill-.patch
-#rhbz 1106856
-ApplyPatch dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch
+#rhbz 1253789
+ApplyPatch iSCSI-let-session-recovery_tmo-sysfs-writes-persist.patch
-#rhbz 1103528
-ApplyPatch elantech-Deal-with-clickpads-reporting-right-button-.patch
+#rhbz 1250717
+ApplyPatch ext4-dont-manipulate-recovery-flag-when-freezing.patch
-ApplyPatch intel_pstate-Fix-setting-VID.patch
-ApplyPatch intel_pstate-dont-touch-turbo-bit-if-turbo-disabled-or-unavailable.patch
-ApplyPatch intel_pstate-Update-documentation-of-max-min_perf_pct-sysfs-files.patch
+#rhbz 1256281
+ApplyPatch mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch
-#CVE-2014-4508 rhbz 1111590 1112073
-ApplyPatch x86_32-entry-Do-syscall-exit-work-on-badsys.patch
+#rhbz 1257534
+ApplyPatch nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch
-#CVE-2014-0206 rhbz 1094602 1112975
-ApplyPatch aio-fix-kernel-memory-disclosure-in-io_getevents-int.patch
-ApplyPatch aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch
+#rhbz 1212201
+ApplyPatch drm-qxl-validate-monitors-config-modes.patch
-ApplyPatch revert-input-wacom-testing-result-shows-get_report-is-unnecessary.patch
-
-#rhbz 1021036, submitted upstream
-ApplyPatch 0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch
-
-#rhbz 1015989
-ApplyPatch netfilter-nf_nat-fix-oops-on-netns-removal.patch
+#rhbz 1257500
+ApplyPatch vmwgfx-Rework-device-initialization.patch
+ApplyPatch drm-vmwgfx-Allow-dropped-masters-render-node-like-ac.patch
# END OF PATCH APPLICATIONS
@@ -1610,10 +1500,8 @@ BuildKernel() {
%{make} -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
%ifarch %{arm} aarch64
- %{make} -s ARCH=$Arch V=1 dtbs
- mkdir -p $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
- install -m 644 arch/$Arch/boot/dts/*.dtb $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer/
- rm -f arch/$Arch/boot/dts/*.dtb
+ %{make} -s ARCH=$Arch V=1 dtbs dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
+ find arch/$Arch/boot/dts -name '*.dtb' -type f | xargs rm -f
%endif
# Start installing the results
@@ -1663,6 +1551,7 @@ BuildKernel() {
fi
%{__install} -D -m 444 ldconfig-kernel.conf \
$RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf
+ rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id
%endif
# And save the headers/makefiles etc for building modules against
@@ -1700,12 +1589,16 @@ BuildKernel() {
fi
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
-%ifarch ppc ppc64 ppc64p7
+%ifarch %{power64}
cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
%endif
if [ -d arch/%{asmarch}/include ]; then
cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
fi
+%ifarch aarch64
+ # arch/arm64/include/asm/xen references arch/arm
+ cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
+%endif
# include the machine specific headers for ARM variants, if available.
%ifarch %{arm}
if [ -d arch/%{asmarch}/mach-${Flavour}/include ]; then
@@ -1773,10 +1666,64 @@ BuildKernel() {
rm -f modules.{alias*,builtin.bin,dep*,*map,symbols*,devname,softdep}
popd
-%if %{with_extra}
# Call the modules-extra script to move things around
%{SOURCE17} $RPM_BUILD_ROOT/lib/modules/$KernelVer %{SOURCE16}
-%endif
+
+ #
+ # Generate the kernel-core and kernel-modules files lists
+ #
+
+ # Copy the System.map file for depmod to use, and create a backup of the
+ # full module tree so we can restore it after we're done filtering
+ cp System.map $RPM_BUILD_ROOT/.
+ pushd $RPM_BUILD_ROOT
+ mkdir restore
+ cp -r lib/modules/$KernelVer/* restore/.
+
+ # don't include anything going into k-m-e in the file lists
+ rm -rf lib/modules/$KernelVer/extra
+
+ # Find all the module files and filter them out into the core and modules
+ # lists. This actually removes anything going into -modules from the dir.
+ find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list
+ cp $RPM_SOURCE_DIR/filter-*.sh .
+ %{SOURCE99} modules.list %{_target_cpu}
+ rm filter-*.sh
+
+ # Run depmod on the resulting module tree and make sure it isn't broken
+ depmod -b . -aeF ./System.map $KernelVer &> depmod.out
+ if [ -s depmod.out ]; then
+ echo "Depmod failure"
+ cat depmod.out
+ exit 1
+ else
+ rm depmod.out
+ fi
+ # remove files that will be auto generated by depmod at rpm -i time
+ pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/
+ rm -f modules.{alias*,builtin.bin,dep*,*map,symbols*,devname,softdep}
+ popd
+
+ # Go back and find all of the various directories in the tree. We use this
+ # for the dir lists in kernel-core
+ find lib/modules/$KernelVer/kernel -type d | sort -n > module-dirs.list
+
+ # Cleanup
+ rm System.map
+ cp -r restore/* lib/modules/$KernelVer/.
+ rm -rf restore
+ popd
+
+ # Make sure the files lists start with absolute paths or rpmbuild fails.
+ # Also add in the dir entries
+ sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Flavour:+-${Flavour}}-modules.list
+ sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Flavour:+-${Flavour}}-core.list
+ sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Flavour:+-${Flavour}}-core.list
+
+ # Cleanup
+ rm -f $RPM_BUILD_ROOT/k-d.list
+ rm -f $RPM_BUILD_ROOT/modules.list
+ rm -f $RPM_BUILD_ROOT/module-dirs.list
%if %{signmodules}
# Save the signing keys so we can sign the modules in __modsign_install_post
@@ -1825,16 +1772,11 @@ BuildKernel %make_target %kernel_image %{pae}
BuildKernel %make_target %kernel_image
%endif
-%if %{with_smp}
-BuildKernel %make_target %kernel_image smp
-%endif
-
%global perf_make \
- make -s %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix}
+ make -s EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix}
%if %{with_perf}
# perf
-%{perf_make} all
-%{perf_make} man || %{doc_build_fail}
+%{perf_make} DESTDIR=$RPM_BUILD_ROOT all
%endif
%if %{with_tools}
@@ -1867,15 +1809,6 @@ pushd tools/thermal/tmon/
popd
%endif
-%if %{with_doc}
-# Make the HTML pages.
-make htmldocs || %{doc_build_fail}
-
-# sometimes non-world-readable files sneak into the kernel source tree
-chmod -R a=rX Documentation
-find Documentation -type d | xargs chmod u+w
-%endif
-
# In the modsign case, we do 3 things. 1) We check the "flavour" and hard
# code the value in the following invocations. This is somewhat sub-optimal
# but we're doing this inside of an RPM macro and it isn't as easy as it
@@ -1902,6 +1835,9 @@ find Documentation -type d | xargs chmod u+w
%{modsign_cmd} signing_key.priv.sign signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \
fi \
fi \
+ if [ "%{zipmodules}" -eq "1" ]; then \
+ find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs xz; \
+ fi \
%{nil}
###
@@ -1944,15 +1880,6 @@ find Documentation -type d | xargs chmod u+w
cd linux-%{KVERREL}
-%if %{with_doc}
-docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion}
-
-# copy the source over
-mkdir -p $docdir
-tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir
-
-%endif # with_doc
-
# We have to do the headers install before the tools install because the
# kernel headers_install will remove any header files in /usr/include that
# it doesn't install itself.
@@ -1961,15 +1888,6 @@ tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir
# Install kernel headers
make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install
-# Do headers_check but don't die if it fails.
-make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_check \
- > hdrwarnings.txt || :
-if grep -q exist hdrwarnings.txt; then
- sed s:^$RPM_BUILD_ROOT/usr/include/:: hdrwarnings.txt
- # Temporarily cause a build failure if header inconsistencies.
- # exit 1
-fi
-
find $RPM_BUILD_ROOT/usr/include \
\( -name .install -o -name .check -o \
-name ..install.cmd -o -name ..check.cmd \) | xargs rm -f
@@ -1978,7 +1896,7 @@ find $RPM_BUILD_ROOT/usr/include \
%if %{with_perf}
# perf tool binary and supporting scripts/binaries
-%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-bin
+%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin install-traceevent-plugins
# remove the 'trace' symlink.
rm -f %{buildroot}%{_bindir}/trace
@@ -1986,7 +1904,10 @@ rm -f %{buildroot}%{_bindir}/trace
%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext
# perf man pages (note: implicit rpm magic compresses them later)
-%{perf_make} DESTDIR=$RPM_BUILD_ROOT try-install-man || %{doc_build_fail}
+mkdir -p %{buildroot}/%{_mandir}/man1
+pushd %{buildroot}/%{_mandir}/man1
+tar -xf %{SOURCE10}
+popd
%endif
%if %{with_tools}
@@ -2071,11 +1992,28 @@ fi\
#
# This macro defines a %%post script for a kernel*-modules-extra package.
+# It also defines a %%postun script that does the same thing.
# %%kernel_modules_extra_post [<subpackage>]
#
%define kernel_modules_extra_post() \
%{expand:%%post %{?1:%{1}-}modules-extra}\
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
+%{nil}\
+%{expand:%%postun %{?1:%{1}-}modules-extra}\
+/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
+%{nil}
+
+#
+# This macro defines a %%post script for a kernel*-modules package.
+# It also defines a %%postun script that does the same thing.
+# %%kernel_modules_post [<subpackage>]
+#
+%define kernel_modules_post() \
+%{expand:%%post %{?1:%{1}-}modules}\
+/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
+%{nil}\
+%{expand:%%postun %{?1:%{1}-}modules}\
+/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
%{nil}
# This macro defines a %%posttrans script for a kernel package.
@@ -2083,7 +2021,7 @@ fi\
# More text can follow to go at the end of this variant's %%post.
#
%define kernel_variant_posttrans() \
-%{expand:%%posttrans %{?1}}\
+%{expand:%%posttrans %{?1:%{1}-}core}\
/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /%{image_install_path}/vmlinuz-%{KVERREL}%{?1:+%{1}} || exit $?\
%{nil}
@@ -2094,11 +2032,10 @@ fi\
#
%define kernel_variant_post(v:r:) \
%{expand:%%kernel_devel_post %{?-v*}}\
-%if %{with_extra}\
+%{expand:%%kernel_modules_post %{?-v*}}\
%{expand:%%kernel_modules_extra_post %{?-v*}}\
-%endif\
%{expand:%%kernel_variant_posttrans %{?-v*}}\
-%{expand:%%post %{?-v*}}\
+%{expand:%%post %{?-v*:%{-v*}-}core}\
%{-r:\
if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\
[ -f /etc/sysconfig/kernel ]; then\
@@ -2111,16 +2048,13 @@ fi}\
# %%kernel_variant_preun <subpackage>
#
%define kernel_variant_preun() \
-%{expand:%%preun %{?1}}\
+%{expand:%%preun %{?1:%{1}-}core}\
/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /%{image_install_path}/vmlinuz-%{KVERREL}%{?1:+%{1}} || exit $?\
%{nil}
%kernel_variant_preun
%kernel_variant_post -r kernel-smp
-%kernel_variant_preun smp
-%kernel_variant_post -v smp
-
%kernel_variant_preun %{pae}
%kernel_variant_post -v %{pae} -r (kernel|kernel-smp)
@@ -2152,19 +2086,12 @@ fi
%{_libdir}/kernel-wrapper
%endif
-# only some architecture builds need kernel-doc
-%if %{with_doc}
-%files doc
-%defattr(-,root,root)
-%{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation/*
-%dir %{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation
-%dir %{_datadir}/doc/kernel-doc-%{rpmversion}
-%endif
-
%if %{with_perf}
%files -n perf
%defattr(-,root,root)
%{_bindir}/perf
+%dir %{_libdir}/traceevent/plugins
+%{_libdir}/traceevent/plugins/*
%dir %{_libexecdir}/perf-core
%{_libexecdir}/perf-core/*
%{_mandir}/man[1-8]/perf*
@@ -2221,6 +2148,10 @@ fi
%endif
%endif # with_perf
+# empty meta-package
+%files
+%defattr(-,root,root)
+
# This is %%{image_install_path} on an arch where that includes ELF files,
# or empty otherwise.
%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}}
@@ -2232,8 +2163,10 @@ fi
#
%define kernel_variant_files(k:) \
%if %{1}\
-%{expand:%%files %{?2}}\
+%{expand:%%files -f kernel-%{?2:%{2}-}core.list %{?2:%{2}-}core}\
%defattr(-,root,root)\
+%{!?_licensedir:%global license %%doc}\
+%license linux-%{KVERREL}/COPYING\
/%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?2:+%{2}}\
/%{image_install_path}/.vmlinuz-%{KVERREL}%{?2:+%{2}}.hmac \
%ifarch %{arm} aarch64\
@@ -2241,8 +2174,10 @@ fi
%endif\
%attr(600,root,root) /boot/System.map-%{KVERREL}%{?2:+%{2}}\
/boot/config-%{KVERREL}%{?2:+%{2}}\
+%ghost /boot/initramfs-%{KVERREL}%{?2:+%{2}}.img\
+%dir /lib/modules\
%dir /lib/modules/%{KVERREL}%{?2:+%{2}}\
-/lib/modules/%{KVERREL}%{?2:+%{2}}/kernel\
+%dir /lib/modules/%{KVERREL}%{?2:+%{2}}/kernel\
/lib/modules/%{KVERREL}%{?2:+%{2}}/build\
/lib/modules/%{KVERREL}%{?2:+%{2}}/source\
/lib/modules/%{KVERREL}%{?2:+%{2}}/updates\
@@ -2251,13 +2186,12 @@ fi
/etc/ld.so.conf.d/kernel-%{KVERREL}%{?2:+%{2}}.conf\
%endif\
/lib/modules/%{KVERREL}%{?2:+%{2}}/modules.*\
-%ghost /boot/initramfs-%{KVERREL}%{?2:+%{2}}.img\
+%{expand:%%files -f kernel-%{?2:%{2}-}modules.list %{?2:%{2}-}modules}\
+%defattr(-,root,root)\
%{expand:%%files %{?2:%{2}-}devel}\
%defattr(-,root,root)\
/usr/src/kernels/%{KVERREL}%{?2:+%{2}}\
-%if %{with_extra}\
%{expand:%%files %{?2:%{2}-}modules-extra}\
-%endif\
%defattr(-,root,root)\
/lib/modules/%{KVERREL}%{?2:+%{2}}/extra\
%if %{with_debuginfo}\
@@ -2266,12 +2200,15 @@ fi
%defattr(-,root,root)\
%endif\
%endif\
+%if %{?2:1} %{!?2:0}\
+%{expand:%%files %{2}}\
+%defattr(-,root,root)\
+%endif\
%endif\
%{nil}
%kernel_variant_files %{with_up}
-%kernel_variant_files %{with_smp} smp
%kernel_variant_files %{with_debug} debug
%kernel_variant_files %{with_pae} %{pae}
%kernel_variant_files %{with_pae_debug} %{pae}debug
@@ -2280,1776 +2217,1867 @@ fi
# and build.
#
#
-# ___________________________________________________________
-# / This branch is for Fedora 21. You probably want to commit \
-# _____ ____ _ \ to the F-20 branch instead, or in addition to this one. /
-# | ___|___ \/ | -----------------------------------------------------------
-# | |_ __) | | \ ^__^
-# | _| / __/| | \ (@@)\_______
-# |_| |_____|_| (__)\ )\/\
-# ||----w |
-# || ||
%changelog
-* Mon Jun 30 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Backport netfilter panic fix (rhbz 1015989)
+* Tue Sep 1 2015 Laura Abbott <labbott@fedoraproject.org> - 4.2.0-200
+- Linux v4.2
-* Sun Jun 29 2014 Peter Robinson <pbrobinson@fedoraproject.org>
-- Rebase ARM based BeagleBone and Utilite stable patches
+* Thu Aug 27 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix vmware driver issues from Thomas Hellström (rhbz 1227193)
+- Add patch from Hans de Goede to fix nv46 based cards (rhbz 1257534)
+- Add patch from Jonathon Jongsma to fix modes in qxl (rhbz 1212201)
-* Fri Jun 27 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.15.2
+* Wed Aug 26 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Disable CRYPTO_DEV_VMX_ENCRYPT on PPC for now to fix Power 8 boot (rhbz 1237089)
-* Fri Jun 27 2014 Hans de Goede <hdegoede@redhat.com>
-- Add patch to fix wifi on lenove yoga 2 series (rhbz#1021036)
+* Tue Aug 25 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix x2apic refactoring breakage (rhbz 1224764)
-* Wed Jun 25 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Revert commit that breaks Wacom Intuos4 from Benjamin Tissoires
-- CVE-2014-0206 aio: insufficient head sanitization in aio_read_events_ring (rhbz 1094602 1112975)
+* Tue Aug 25 2015 Laura Abbott <labbott@fedoraproject.org>
+- Correct the sdhci DMA leak patch to actually compile (oops)
-* Mon Jun 23 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2014-4508 BUG in x86_32 syscall auditing (rhbz 1111590 1112073)
+* Tue Aug 25 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix DMA leak from sdhci (rhbz 1256281)
-* Fri Jun 20 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Bring in intel_pstate regression fixes for BayTrail (rhbz 1111920)
+* Tue Aug 25 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2015-6666 x86_64 NT flag handling DoS (rhbz 1256746 1256753)
-* Tue Jun 17 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.15.1
+* Fri Aug 21 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Disable EFI_VARS (rhbz 1252137)
-* Mon Jun 16 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2014-4014 possible priv escalation in userns (rhbz 1107966 1109836)
+* Thu Aug 20 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix incorrect ext4 freezing behavior on non-journaled fs (rhbz 1250717)
-* Wed Jun 11 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix elantech right click on Dell vostro 5470 (rhbz 1103528)
-- Fix fstrim on dm-thin volume data (rhbz 1106856)
-- Fix NFS NULL pointer deref with ipv6 (rhbz 1099761)
-- Fix promisc mode on certain e1000e cards (rhbz 1064516)
-- Fix i915 backlight issue on gen4 (rhbz 1094066)
+* Mon Aug 17 2015 Laura Abbott <labbott@fedoraproject.org> - 4.1.6-200
+- Linux v4.1.6
+- Actually apply the fix for rhbz 1253789
-* Mon Jun 09 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Update to Linux v3.15
+* Mon Aug 17 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix iscsi issue (rhbz 1253789)
-* Fri Apr 25 2014 Hans de Goede <hdegoede@redhat.com>
-- Add synaptics min-max quirk for ThinkPad Edge E431 (rhbz#1089689)
+* Sat Aug 15 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Patch from Hans de Goede to add yoga 3 rfkill quirk (rhbz 1239050)
-* Thu Apr 17 2014 Hans de Goede <hdegoede@redhat.com>
-- Update min/max quirk patch to add a quirk for the ThinkPad L540 (rhbz1088588)
+* Tue Aug 11 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Drop UACCESS_WITH_MEMCPY on ARMv7 as it's broken (rhbz 1250613)
-* Mon Apr 14 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.14.1
+* Mon Aug 10 2015 Laura Abbott <labbott@fedoraproject.org> - 4.1.5-200
+- Linux v4.1.5
-* Mon Apr 14 2014 Hans de Goede <hdegoede@redhat.com>
-- Add min/max quirks for various new Thinkpad touchpads (rhbz 1085582 1085697)
+* Mon Aug 10 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix use after free in HID input (rhbz 1251877 1251880 1250279 1248741)
-* Mon Apr 14 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2014-2851 net ipv4 ping refcount issue in ping_init_sock (rhbz 1086730 1087420)
+* Tue Aug 04 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Patch from Nicholas Kudriavtsev for Acer Switch 12 Fn keys (rhbz 1244511)
-* Sat Apr 12 2014 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.14.1-rc1
+* Tue Aug 4 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Back port AMD Seattle a0 4.1 NIC driver update
-* Thu Dec 12 2013 Justin M. Forbes <jforbes@fedoraproject.org> - 3.12.5-1
-- Linux v3.12.5
+* Mon Aug 03 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.1.4-200
+- Linux v4.1.4
+- CVE-2015-5697 info leak in md driver (rhbz 1249011 1249013)
-* Thu Dec 12 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2013-4587 kvm: out-of-bounds access (rhbz 1030986 1042071)
-- CVE-2013-6376 kvm: BUG_ON in apic_cluster_id (rhbz 1033106 1042099)
-- CVE-2013-6368 kvm: cross page vapic_addr access (rhbz 1032210 1042090)
-- CVE-2013-6367 kvm: division by 0 in apic_get_tmcct (rhbz 1032207 1042081)
+* Wed Jul 29 2015 Laura Abbott <labbott@redhat.com> - 4.1.3-201
+- tag and build for CVE fixes
-* Wed Dec 11 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Fix am33xx cpsw ethernet (Beagle Bone)
+* Mon Jul 27 2015 Laura Abbott <labbott@fedoraproject.org>
+- CVE-2015-3290 CVE-2015-3291 NMI issues (rhbz 1243465 1245927)
-* Wed Dec 11 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patches to support ETPS/2 Elantech touchpads (rhbz 1030802)
+* Mon Jul 27 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2015-1333 add_key memory leak (rhbz 1244171)
-* Mon Dec 09 2013 Justin M. Forbes <jforbes@fedoraproject.org> - 3.12.4-1
-- Linux v3.12.4
+* Thu Jul 23 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix warning from pcmcia (rhbz 1180920 1206724)
-* Thu Dec 05 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add various fixes for keys crashes and an SELinux issue (rhbz 1035000)
+* Wed Jul 22 2015 Laura Abbott <labbott@fedoraproject.org> - 4.1.3-200
+- Add patches for Ideapad RF switches (rhbz 1192270)
-* Wed Dec 04 2013 Justin M. Forbes <jforbes@fedoraproject.org> - 3.12.3-1
-- Linux v3.12.3
+* Wed Jul 22 2015 Laura Abbott <labbott@fedoraproject.org>
+- Linux v4.1.3
-* Tue Dec 3 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM cleanups and remove obsolete options
+* Wed Jul 15 2015 Laura Abbott <labbott@fedoraproject.org> - 4.1.2-200
+- Linux v4.1.2 rebase
-* Tue Dec 03 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patches to fix rfkill switch on Dell machines (rhbz 958826)
+* Fri Jul 10 2015 Laura Abbott <labbott@redhat.com> - 4.0.8-300
+- Linux v4.0.8
-* Mon Dec 2 2013 Justin M. Forbes <jforbes@fedoraproject.org> - 3.12.2-3
-- bump for build
+* Tue Jul 07 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Drop incorrect patches for now (rhbz 1212230)
-* Mon Dec 2 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch set for AM33xx BeagleBones
+* Mon Jun 29 2015 Laura Abbott <labbott@fedoraproject.org> - 4.0.7-300
+- Linux v4.0.7
-* Mon Dec 02 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix crash driver build and re-enable on s390x (from Dan Horák)
+* Tue Jun 23 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.6-300
+- Linux v4.0.6
-* Sat Nov 30 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix mdadm soft lockup and crash (rhbz 1033971)
-- CVE-2013-6405 net: leak of uninited mem to userspace via recv syscalls (rhbz 1035875 1035887)
+* Thu Jun 18 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix touchpad issues on Razer machines (rhbz 1227891)
-* Fri Nov 29 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.12.2
-- Fix memory leak in qxl (from Dave Airlie)
+* Fri Jun 12 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2015-XXXX kvm: NULL ptr deref in kvm_apic_has_events (rhbz 1230770 1230774)
-* Tue Nov 26 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix usbnet URB handling (rhbz 998342)
-- Fix crash in via-velocity driver (rhbz 1022733)
-- CVE-2013-6382 xfs: missing check for ZERO_SIZE_PTR (rhbz 1033603 1034670)
+* Thu Jun 11 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport fixes for synaptic 3 finger tap (rhbz 1212230)
+- Backport btrfs fixes queued for stable (rhbz 1217191)
-* Mon Nov 25 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2013-6380 aacraid: invalid pointer dereference (rhbz 1033593 1034304)
-- CVE-2013-6378 libertas: potential oops in debugfs (rhbz 1033578 1034183)
+* Tue Jun 09 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix touchpad for Thinkpad S540 (rhbz 1223051)
-* Sat Nov 23 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Fix ARM Utilite DTB
-- Enable FSL RTC (for i.MX6)
+* Mon Jun 08 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v4.0.5
-* Fri Nov 22 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patches from Jeff Layton to fix 15sec NFS mount hang
+* Thu Jun 04 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport commit to fix block spew (rhbz 1226621)
+- Add patch to fix SMT guests on POWER7 (rhbz 1227877)
+- Add patch to turn of WC mmaps on i915 from airlied (rhbz 1226743)
-* Fri Nov 22 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config update
+* Wed Jun 03 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix del_timer_sync in mwifiex
-* Wed Nov 20 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.12.1
+* Wed Jun 03 2015 Laura Abbott <labbott@fedoraproject.org>
+- Drop that blasted firwmare warning until we get a real fix (rhbz 1133378)
-* Tue Nov 19 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Enable CGROUP_HUGETLB on ppc64/ppc64p7 and x86_64 (rhbz 1031984)
+* Wed Jun 03 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix auditing of canonical mode (rhbz 1188695)
-* Mon Nov 18 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix rhel5.9 KVM guests (rhbz 967652)
-- Add patches from Pierre Ossman to fix 24Hz/24p radeon audio (rhbz 1010679)
-- Add patch to fix ALX phy issues after resume (rhbz 1011362)
-- Fix ipv6 sit panic with packet size > mtu (from Michele Baldessari) (rbhz 1015905)
+* Wed Jun 03 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2015-1420 fhandle race condition (rhbz 1187534 1227417)
-* Sun Nov 17 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Fix up ARM usb gadget config to make it useful
+* Tue Jun 02 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix fd_do_rw error (rhbz 1218882)
-* Thu Nov 14 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2013-4563: net: large udp packet over IPv6 over UFO-enabled device with TBF qdisc panic (rhbz 1030015 1030017)
+* Tue Jun 02 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix middle button issues on external Lenovo keyboards (rhbz 1225563)
-* Sat Nov 09 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-2
-- Add patch from Daniel Stone to avoid high order allocations in evdev
-- Add qxl backport fixes from Dave Airlie
+* Thu May 28 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add quirk for Mac Pro backlight (rhbz 1217249)
-* Tue Nov 05 2013 Kyle McMartin <kyle@fedoraproject.org>
-- Enable crash on {arm,aarch64,ppc64,s390x}
+* Thu May 28 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.4-303
+- Add patch to avoid vmmouse being classified as a joystic (rhbz 1214474)
-* Mon Nov 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-1
-- Linux v3.12
-- Disable debugging options.
+* Wed May 27 2015 Josh Boyer <jwboyer@fedoraproject.org> -4.0.4-302
+- Apply queued fixes for crasher reported by Alex Larsson
+- Enable in-kernel vmmouse driver (rhbz 1214474)
-* Fri Nov 01 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc7.git4.1
-- Linux v3.12-rc7-111-g9581b7d
+* Tue May 26 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix signed division error (rhbz 1200353)
-* Fri Nov 01 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc7.git3.1
-- Linux v3.12-rc7-79-g4f794ee
-- Set NR_CPUS=1024 on non-debug x86_64 builds (MAXSMP is set on debug)
+* Tue May 26 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport patch to fix might_sleep splat (rhbz 1220519)
-* Fri Nov 01 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2013-4348 net: deadloop path in skb_flow_dissect (rhbz 1007939 1025647)
+* Thu May 21 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.4-301
+- Add patch to fix discard on md RAID0 (rhbz 1223332)
+- Add submitted stable fix for i915 flickering on ilk (rhbz 1218688)
-* Thu Oct 31 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc7.git2.1
-- Linux v3.12-rc7-48-g12aee27
+* Mon May 18 2015 Laura Abbott <labbott@fedoraproject.org>
+- Re-add the v4l2 query caps patch which was dropped
-* Tue Oct 29 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc7.git1.1
-- Linux v3.12-rc7-9-gc9ca72f
-- Fixes sg_open lock held when returning to userspace (rhbz 1018620)
-- Reenable debugging options.
+* Mon May 18 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix incorrect bandwidth on some Chicony webcams
-* Mon Oct 28 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc7.git0.1
-- Linux v3.12-rc7
-- Disable debugging options.
+* Mon May 18 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.4-300
+- Linux v4.0.4
-* Fri Oct 25 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add touchpad support for Dell XT2 (rhbz 1023413)
+* Fri May 15 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix DVB oops (rhbz 1220118)
-* Fri Oct 25 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc6.git4.1
-- Linux v3.12-rc6-292-g4208c47
+* Thu May 14 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.3-301
+- Disable i915 verbose state checks
-* Thu Oct 24 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch for i.MX6 Utilite device dtb
+* Thu May 14 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix non-empty dir removal in overlayfs (rhbz 1220915)
-* Thu Oct 24 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc6.git3.1
-- Linux v3.12-rc6-284-ge6036c0
+* Wed May 13 2015 Laura Abbott <labbott@fedoraproject.org>
+- Fix spew from KVM switch (rhbz 1219343)
-* Wed Oct 23 2013 Kyle McMartin <kyle@fedoraproject.org>
-- Clean up some BuildRequires that reference hilariously old packages.
- Replace module-init-tools BR with kmod.
+* Wed May 13 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.3-300
+- Linux v4.0.3
-* Wed Oct 23 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc6.git2.1
-- Linux v3.12-rc6-275-g320437af
+* Sat May 9 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor ARMv7 updates
-* Tue Oct 22 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Build virtio drivers as modules (rhbz 1019569)
+* Thu May 07 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.2-300
+- Linux v4.0.2 (rhbz 1182816)
-* Tue Oct 22 2013 Adam Jackson <ajax@redhat.com>
-- Drop voodoo1 fbdev driver
+* Tue May 05 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport patch to blacklist TRIM on all Samsung 8xx series SSDs (rhbz 1218662)
+- CVE-2015-3636 ping-sockets use-after-free privilege escalation (rhbz 1218074 1218110)
-* Tue Oct 22 2013 Kyle McMartin <kyle@fedoraproject.org>
-- Clean up kernel Provides, nobody references kernel-drm, or kernel-modeset...
- drop pre-F20 ARM flavor names. Turn off AutoProv on the main kernel package.
+* Thu Apr 30 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix backlight on various Toshiba machines (rhbz 1206036 1215989)
-* Tue Oct 22 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix warning in tcp_fastretrans_alert (rhbz 989251)
+* Wed Apr 29 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.1-300
+- Linux v4.0.1
-* Tue Oct 22 2013 Kyle McMartin <kyle@fedoraproject.org>
-- armv7hl,aarch64: re-enable kernel-modules-extra temporarily
+* Tue Apr 28 2015 Justin M. Forbes <jforbes@fedoraproject.org>
+- Fix up boot times for live images (rhbz 1210857)
-* Tue Oct 22 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc6.git1.1
-- Linux v3.12-rc6-57-g69c88dc
-- Reenable debugging options.
+* Mon Apr 27 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport NFS DIO fixes from 4.1 (rhbz 1211017 1211013)
-* Tue Oct 22 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config update
+* Fri Apr 24 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2015-3339 race condition between chown and execve (rhbz 1214030)
+- Fix iscsi with QNAP devices (rhbz 1208999)
-* Mon Oct 21 2013 Kyle McMartin <kyle@fedoraproject.org>
-- aarch64: add AFTER_LINK to $vdsold for debuginfo generation of the vdso.
+* Wed Apr 22 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Fix RTC on TrimSlice
+- Enable all sound modules for TrimSlice (also needed for other devices)
-* Sun Oct 20 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Build BIG_KEYS into the kernel (rhbz 1017683)
+* Mon Apr 20 2015 Laura Abbott
+- Fix sound issues (rhbz 1188741)
-* Sun Oct 20 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable U8500 SoC (Snowball) on ARM
+* Fri Apr 17 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add support for touchpad on Google Pixel 2 (rhbz 1209088)
+- Allow disabling raw mode in logitech-hidpp (rhbz 1210801)
-* Sun Oct 20 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc6.git0.1
-- Linux v3.12-rc6
-- Disable debugging options.
+* Wed Apr 15 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix tty closure race (rhbz 1208953)
-* Fri Oct 18 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc5.git4.1
-- Linux v3.12-rc5-123-g04919af
+* Sun Apr 12 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-1
+- Linux v4.0
-* Fri Oct 18 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix keyring quota misaccounting (rhbz 1017683)
+* Fri Apr 10 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc7.git2.1
+- Linux v4.0-rc7-42-ge5e02de0665e
-* Thu Oct 17 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc5.git3.1
-- Linux v3.12-rc5-78-g056cdce
+* Thu Apr 09 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc7.git1.1
+- Linux v4.0-rc7-30-g20624d17963c
-* Thu Oct 17 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix BusLogic error (rhbz 1015558)
-- Fix rt2800usb polling timeouts and throughput issues (rhbz 984696)
+* Thu Apr 02 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc6.git2.1
+- Linux v4.0-rc6-101-g0a4812798fae
-* Wed Oct 16 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix btrfs balance/scrub issue (rhbz 1011714)
-- Clean up a bunch of stale patches
+* Thu Apr 02 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- DoS against IPv6 stacks due to improper handling of RA (rhbz 1203712 1208491)
-* Wed Oct 16 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc5.git2.1
-- Linux v3.12-rc5-48-g34ec4de
+* Wed Apr 01 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc6.git1.1
+- Linux v4.0-rc6-31-gd4039314d0b1
+- CVE-2015-2150 xen: NMIs triggerable by guests (rhbz 1196266 1200397)
-* Wed Oct 16 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- ARM config updates for IIO and enable sensors for ARM platforms
+* Tue Mar 31 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable MLX4_EN_VXLAN (rhbz 1207728)
-* Wed Oct 16 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Enable VIRTIO_CONSOLE as a module on all ARM (rhbz 1005551)
+* Mon Mar 30 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc6.git0.1
+- Linux v4.0-rc6
-* Tue Oct 15 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Enable IIO and various sensor options for Win8 laptops (rhbz 995510)
+* Fri Mar 27 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc5.git4.1
+- Linux v4.0-rc5-96-g3c435c1e472b
+- Fixes hangs due to i915 issues (rhbz 1204050 1206056)
-* Tue Oct 15 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc5.git1.1
-- Linux v3.12-rc5-36-g1e52db6
-- Reenable debugging options.
+* Thu Mar 26 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc5.git3.1
+- Linux v4.0-rc5-80-g4c4fe4c24782
-* Mon Oct 14 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc5.git0.1
-- Linux v3.12-rc5
-- Disable debugging options.
+* Wed Mar 25 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add aarch64 patches to fix mustang usb, seattle eth, and console settings
-* Sun Oct 13 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config updates/cleanups
-- ARM GPIO/I2C updates
-- ARM usb gadget updates
+* Wed Mar 25 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc5.git2.4
+- Add patches to fix a few more i915 hangs/oopses
-* Sat Oct 12 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc4.git4.1
-- Linux v3.12-rc4-91-g46f3751
+* Wed Mar 25 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc5.git2.1
+- Linux v4.0-rc5-53-gc875f421097a
-* Fri Oct 11 2013 Kyle McMartin <kyle@fedoraproject.org>
-- Turn off some drivers on aarch64 and armv7hl that are unlikely to ever be
- seen there.
+* Tue Mar 24 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix ALPS v5 and v7 trackpads (rhbz 1203584)
-* Fri Oct 11 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc4.git3.1
-- Fix segfault in cpupower set (rhbz 1000439)
-- Linux v3.12-rc4-62-g2fe80d3
+* Tue Mar 24 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc5.git1.3
+- Linux v4.0-rc5-25-g90a5a895cc8b
+- Add some i915 fixes
-* Thu Oct 10 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix large order allocation in dm mq policy (rhbz 993744)
+* Mon Mar 23 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc5.git0.3
+- Enable CONFIG_SND_BEBOB (rhbz 1204342)
+- Validate iovec range in sys_sendto/sys_recvfrom
+- Revert i915 commit that causes boot hangs on at least some headless machines
+- Linux v4.0-rc5
-* Wed Oct 09 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc4.git2.1
-- Don't trigger a stack trace on crashing iwlwifi firmware (rhbz 896695)
-- Linux v3.12-rc4-29-g0e7a3ed
+* Fri Mar 20 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc4.git2.1
+- Linux v4.0-rc4-199-gb314acaccd7e
+- Fix brightness on Lenovo Ideapad Z570 (rhbz 1187004)
-* Wed Oct 09 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix VFIO IOMMU crash (rhbz 998732)
+* Thu Mar 19 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc4.git1.3
+- Linux v4.0-rc4-88-g7b09ac704bac
+- Rename arm64-xgbe-a0.patch
-* Tue Oct 8 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Tiny ARM config update
+* Thu Mar 19 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Drop arm64 non upstream patch
-* Tue Oct 08 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc4.git1.1
-- Linux v3.12-rc4-19-g8b5ede6
-- Reenable debugging options.
-- Quiet irq remapping stack trace (rhbz 982153)
-
-* Mon Oct 7 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- General ARM config cleanups
-- Remove old/dupe ARM config options
-- Enable external connectors on ARM
-- Enable i.MX and TI thermal controllers
-- Enable i.MX RNG driver
-- ARM MFD and REGULATOR changes and cleanups
-- AM33xx (BeagleBone) config improvements
-- Rebase OMAP DVI patch
-- Enable console for Zynq-7xxx SoCs
-
-* Sun Oct 06 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc4.git0.1
-- Linux v3.12-rc4
+* Thu Mar 19 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix high cpu usage on direct_read kernfs files (rhbz 1202362)
+
+* Wed Mar 18 2015 Jarod Wilson <jwilson@fedoraproject.org>
+- Fix kernel-uname-r Requires/Provides variant mismatches
+
+* Tue Mar 17 2015 Kyle McMartin <kmcmarti@redhat.com> - 4.0.0-0.rc4.git0.3
+- Update kernel-arm64.patch, move EDAC to arm-generic, add EDAC_XGENE on arm64.
+- Add PCI_ECAM on generic, since it'll be selected most places anyway.
+
+* Mon Mar 16 2015 Jarod Wilson <jwilson@fedoraproject.org>
+- Fix bad variant usage in kernel dependencies
+
+* Mon Mar 16 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc4.git0.1
+- Linux v4.0-rc4
+- Drop arm64 RCU revert patch. Should be fixed properly upstream now.
- Disable debugging options.
-* Fri Oct 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc3.git5.1
-- Linux v3.12-rc3-296-g15c83d2
+* Sun Mar 15 2015 Jarod Wilson <jwilson@fedoraproject.org>
+- Fix kernel-tools sub-packages for variant builds
-* Thu Oct 03 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc3.git4.1
-- Linux v3.12-rc3-267-g6d15ee4
+* Fri Mar 13 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix esrt build on aarch64
-* Thu Oct 03 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to support not importing certs from db
+* Fri Mar 13 2015 Kyle McMartin <kyle@fedoraproject.org>
+- arm64-revert-tlb-rcu_table_free.patch: revert 5e5f6dc1 which
+ causes lockups on arm64 machines.
+- Also revert ESRT on AArch64 for now.
-* Thu Oct 03 2013 Kyle McMartin <kyle@fedoraproject.org>
-- Add config-no-extra and disable with_extra on ARM and AArch64 to reduce
- time building untestable code (because the hardware doesn't exist, or it
- would be futile.)
+* Fri Mar 13 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc3.git2.1
+- Linux v4.0-rc3-148-gc202baf017ae
+- Add patch to support clickpads (rhbz 1201532)
-* Thu Oct 03 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc3.git3.1
-- Linux v3.12-rc3-253-ge6e7fb1
+* Thu Mar 12 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-8159 infiniband: uverbs: unprotected physical memory access (rhbz 1181166 1200950)
-* Wed Oct 02 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc3.git2.1
-- Linux v3.12-rc3-186-gc31eeac
-- Enable options for Intel Low Power Subsystem Support
+* Wed Mar 11 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc3.git1.1
+- Linux v4.0-rc3-111-gaffb8172de39
+- CVE-2015-2150 xen: NMIs triggerable by guests (rhbz 1196266 1200397)
+- Patch series to fix Lenovo *40 and Carbon X1 touchpads (rhbz 1200777 1200778)
+- Revert commit that added bad rpath to cpupower (rhbz 1199312)
+- Reenable debugging options.
-* Tue Oct 01 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc3.git1.1
-- Linux v3.12-rc3-65-gf927318
+* Mon Mar 09 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc3.git0.1
+- Linux v4.0-rc3
+- Disable debugging options.
+
+* Sun Mar 8 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- ARMv7: add patches to fix crash on boot for some devices on multiplatform
+
+* Fri Mar 06 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc2.git2.1
+- Linux v4.0-rc2-255-g5f237425f352
+
+* Thu Mar 05 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc2.git1.1
+- Linux v4.0-rc2-150-g6587457b4b3d
- Reenable debugging options.
-* Mon Sep 30 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add support for rf3070 devices from Stanislaw Gruszka (rhbz 974072)
-- Drop VC_MUTE patch (rhbz 859485)
+* Wed Mar 04 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable MLX4_EN on ppc64/aarch64 (rhbz 1198719)
-* Mon Sep 30 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc3.git0.1
-- Linux v3.12-rc3
+* Tue Mar 03 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc2.git0.1
+- Linux v4.0-rc2
+- Enable CONFIG_CM32181 for ALS on Carbon X1
- Disable debugging options.
-* Sun Sep 29 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc2.git4.1
-- Linux v3.12-rc2-160-g669fc2f
+* Tue Mar 03 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc1.git3.1
+- Linux v4.0-rc1-178-g023a6007a08d
+
+* Mon Mar 02 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix nfsd soft lockup (rhbz 1185519)
+- Enable ET131X driver (rhbz 1197842)
+- Enable YAMA (rhbz 1196825)
-* Fri Sep 27 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc2.git3.1
-- Linux v3.12-rc2-108-g6cac446
+* Sat Feb 28 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- ARMv7 OMAP updates, fix panda boot
-* Fri Sep 27 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix oops from applesmc (rhbz 1011719)
-- Add patches to fix soft lockup from elevator changes (rhbz 902012)
+* Fri Feb 27 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc1.git2.1
+- Linux v4.0-rc1-36-g4f671fe2f952
-* Thu Sep 26 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc2.git2.1
-- Linux v3.12-rc2-83-g4b97280
+* Wed Feb 25 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add support for AR5B195 devices from Alexander Ploumistos (rhbz 1190947)
-* Wed Sep 25 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc2.git1.1
-- Linux v3.12-rc2-33-g22356f4
+* Tue Feb 24 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc1.git1.1
+- Linux v4.0-rc1-22-gb24e2bdde4af
- Reenable debugging options.
-* Wed Sep 25 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix debuginfo_args regex for + separator (rhbz 1009751)
-- Fix invalid value passed to pci_unmap_single in skge (rhbz 1008323)
+* Tue Feb 24 2015 Richard W.M. Jones <rjones@redhat.com> - 4.0.0-0.rc1.git0.2
+- Add patch to fix aarch64 KVM bug with module loading (rhbz 1194366).
+
+* Tue Feb 24 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor ARM config update
+
+* Mon Feb 23 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.0.0-0.rc1.git0.1
+- Add patch for HID i2c from Seth Forshee (rhbz 1188439)
-* Tue Sep 24 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc2.git0.1
-- Linux v3.12-rc2
+* Mon Feb 23 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v4.0-rc1
+- CVE-2015-0275 ext4: fallocate zero range page size > block size BUG (rhbz 1193907 1195178)
- Disable debugging options.
-* Mon Sep 23 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Revert rt2x00 commit that breaks connectivity (rhbz 1010431)
+* Fri Feb 20 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git10.1
+- Linux v3.19-8975-g3d883483dc0a
+- Add patch to fix intermittent hangs in nouveau driver
+- Move mtpspi and related mods to kernel-core for VMWare guests (rhbz 1194612)
+
+* Wed Feb 18 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git9.1
+- Linux v3.19-8784-gb2b89ebfc0f0
+
+* Wed Feb 18 2015 Kyle McMartin <kyle@fedoraproject.org> - 3.20.0-0.rc0.git8.2
+- kernel-arm64.patch: Revert dropping some of the xgene fixes we carried
+ against upstream. (#1193875)
+- kernel-arm64-fix-psci-when-pg.patch: make it simpler.
+- config-arm64: turn on CONFIG_DEBUG_SECTION_MISMATCH.
+
+* Wed Feb 18 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git8.1
+- Linux v3.19-8217-gcc4f9c2a91b7
+
+* Tue Feb 17 2015 Kyle McMartin <kyle@fedoraproject.org> - 3.20.0-0.rc0.git7.3
+- kernel-arm64.patch turned on.
+
+* Tue Feb 17 2015 Kyle McMartin <kyle@fedoraproject.org> - 3.20.0-0.rc0.git7.2
+- kernel-arm64.patch merge, but leave it off.
+- kernel-arm64-fix-psci-when-pg.patch: when -pg (because of ftrace) is enabled
+ we must explicitly annotate which registers should be assigned, otherwise
+ gcc will do unexpected things behind our backs.
+
+* Tue Feb 17 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git7.1
+- Linux v3.19-7478-g796e1c55717e
+- DRM merge
-* Mon Sep 23 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git6.1
-- Linux v3.12-rc1-336-gd8524ae
+* Mon Feb 16 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-XXXX-XXXX potential memory corruption in vhost/scsi driver (rhbz 1189864 1192079)
+- CVE-2015-1593 stack ASLR integer overflow (rhbz 1192519 1192520)
-* Fri Sep 20 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git5.1
-- Linux v3.12-rc1-250-g7b9e3a6
+* Mon Feb 16 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor updates for ARMv7/ARM64
-* Fri Sep 20 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix RTC updates from ntp (rhbz 985522)
+* Mon Feb 16 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git6.1
+- Linux v3.19-6676-g1fa185ebcbce
-* Fri Sep 20 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git4.1
-- Linux v3.12-rc1-250-g7b9e3a6
+* Fri Feb 13 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git5.1
+- Linux v3.19-5015-gc7d7b9867155
-* Thu Sep 19 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git3.1
-- Linux v3.12-rc1-101-ged24fee
+* Thu Feb 12 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git4.1
+- Linux v3.19-4542-g8cc748aa76c9
-* Wed Sep 18 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git2.1
-- Linux v3.12-rc1-46-g9baa505
+* Thu Feb 12 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git3.1
+- Linux v3.19-4020-gce01e871a1d4
-* Wed Sep 18 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git1.1
-- Linux v3.12-rc1-27-g62d228b
+* Wed Feb 11 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git2.1
+- Linux v3.19-2595-gc5ce28df0e7c
+
+* Wed Feb 11 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.20.0-0.rc0.git1.1
+- Linux v3.19-463-g3e8c04eb1174
- Reenable debugging options.
+- Temporarily disable aarch64 patches
+
+* Mon Feb 09 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-1
+- Linux v3.19
+
+* Sat Feb 07 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc7.git3.1
+- Linux v3.19-rc7-189-g26cdd1f76a88
-* Tue Sep 17 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- CVE-2013-4345 ansi_cprng: off by one error in non-block size request (rhbz 1007690 1009136)
+* Thu Feb 5 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Allwinner A23 (sun8i) SoC
+- Move ARM usb platform options to arm-generic
-* Tue Sep 17 2013 Kyle McMartin <kyle@redhat.com>
-- Add nvme.ko to modules.block for anaconda.
+* Thu Feb 05 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc7.git2.1
+- Linux v3.19-rc7-32-g5ee0e962603e
-* Tue Sep 17 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc1.git0.1
-- Linux v3.12-rc1
+* Wed Feb 04 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc7.git1.1
+- Linux v3.19-rc7-22-gdc6d6844111d
+
+* Tue Feb 03 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc7.git0.3
+- Add patch to fix NFS backtrace (rhbz 1188638)
+
+* Mon Feb 02 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc7.git0.1
+- Linux v3.19-rc7
- Disable debugging options.
-* Sun Sep 15 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git26.1
-- Linux v3.11-10064-gbff157b
+* Fri Jan 30 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc6.git3.1
+- Linux v3.19-rc6-142-g1c999c47a9f1
-* Sat Sep 14 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Update keys-x509-improv.patch to latest back from upstream git
+* Thu Jan 29 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backport patch from Rob Clark to toggle i915 state machine checks
-* Sat Sep 14 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git25.1
-- Linux v3.11-10050-g3711d86
+* Thu Jan 29 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- More ARMv7 updates
+- A few more sound config cleanups
-* Fri Sep 13 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git24.1
-- Linux v3.11-10007-g399a946
+* Wed Jan 28 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc6.git2.1
+- Linux v3.19-rc6-105-gc59c961ca511
-* Fri Sep 13 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix btrfs build on ARM
-- CVE-2013-4350 net: sctp: ipv6 ipsec encryption bug in sctp_v6_xmit (rhbz 1007872 1007903)
-- CVE-2013-4343 net: use-after-free TUNSETIFF (rhbz 1007733 1007741)
+* Tue Jan 27 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable SND_SOC and the button array driver on x86 for Baytrail devices
-* Thu Sep 12 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git23.1
-- Linux v3.11-9747-gff812d7
+* Tue Jan 27 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc6.git1.1
+- Linux v3.19-rc6-21-g4adca1cbc4ce
+- Reenable debugging options.
-* Thu Sep 12 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git22.1
-- Linux v3.11-9420-gd5d04bb
+* Mon Jan 26 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc6.git0.1
+- Linux v3.19-rc6
+- Remove symbolic link hunk from patch-3.19-rc6 (rbhz 1185928)
+- Disable debugging options.
-* Thu Sep 12 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git21.1
-- Linux v3.11-9411-gc2d9572
+* Thu Jan 22 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc5.git2.1
+- Linux v3.19-rc5-134-gf8de05ca38b7
-* Wed Sep 11 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git20.1
-- Linux v3.11-9031-ga22a0fd
+* Wed Jan 21 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc5.git1.1
+- Linux v3.19-rc5-117-g5eb11d6b3f55
+- Reenable debugging options.
-* Tue Sep 10 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git19.1
-- Linux v3.11-8935-g31f7c3a
+* Tue Jan 20 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- More ARM config option cleanups
-* Tue Sep 10 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git18.1
-- Linux v3.11-8716-g26b0332
+* Mon Jan 19 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc5.git0.1
+- Linux v3.19-rc5
+- Disable debugging options.
-* Mon Sep 9 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable OF option to allocate CMA memory using device tree on ARM
+* Sat Jan 17 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Move Rockchip to ARMv7 generic to support rk32xx on LPAE
+- Enable Device Tree Overlays for dynamic DTB
+- ARM config updates
-* Mon Sep 09 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git17.1
-- Linux fscache-fixes-for-ceph-8429-g300893b
+* Fri Jan 16 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git4.1
+- Linux v3.19-rc4-155-gcb59670870d9
-* Mon Sep 09 2013 Kyle McMartin <kyle@redhat.com>
-- [arm] re-enable CONFIG_PCIEPORTBUS, now that tegra is fixed upstream.
+* Thu Jan 15 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Re-enable BUILD_DOCSRC
-* Mon Sep 09 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git16.1
-- Linux v3.11-7890-ge5c832d
+* Thu Jan 15 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git3.1
+- Linux v3.19-rc4-141-gf800c25b7a76
-* Mon Sep 09 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git15.1
-- Linux v3.11-7547-g44598f9
+* Wed Jan 14 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git2.1
+- Linux v3.19-rc4-46-g188c901941ef
+- Enable I40E_VXLAN (rhbz 1182116)
-* Sun Sep 8 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor updates to OMAP and AM33xx
+* Tue Jan 13 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable Checkpoint/Restore on ARMv7 (rhbz 1146995)
-* Sat Sep 07 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch to fix ARM kernel neon build
+* Tue Jan 13 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add installonlypkg(kernel) to kernel-devel subpackages (rhbz 1079906)
-* Fri Sep 06 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git14.1
-- Linux v3.11-6855-g4de9ad9
+* Tue Jan 13 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git1.1
+- Linux v3.19-rc4-23-g971780b70194
+- Reenable debugging options.
-* Fri Sep 06 2013 Kyle McMartin <kyle@redhat.com>
-- [arm] enable KERNEL_MODE_NEON, safe to do, as the raid6 code tests hwcaps
- so it won't impact tegra.
+* Mon Jan 12 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git0.1
+- Linux v3.19-rc4
+- Disable debugging options.
-* Fri Sep 06 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git13.1
-- Linux v3.11-6422-g2e03285
+* Mon Jan 12 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backlight fixes for Samsung and Dell machines (rhbz 1094948 1115713)
+- Add various UAS quirks (rhbz 1124119)
+- Add patch to fix loop in VDSO (rhbz 1178975)
-* Thu Sep 05 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git12.1
-- Linux v3.11-4809-ga09e9a7
+* Fri Jan 09 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc3.git2.1
+- Linux v3.19-rc3-69-g11c8f01b423b
-* Thu Sep 05 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git11.1
-- Fix perf build on ARM (from Kyle McMartin)
+* Wed Jan 07 2015 Kyle McMartin <kyle@fedoraproject.org> - 3.19.0-0.rc3.git1.2
+- kernel-arm64.patch: fix up build... no idea if it works.
-* Thu Sep 05 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Linux v3.11-3891-gae7a835
+* Wed Jan 07 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-9529 memory corruption or panic during key gc (rhbz 1179813 1179853)
-* Thu Sep 05 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git10.1
-- Linux v3.11-3120-g816434e
+* Wed Jan 07 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc3.git1.1
+- Linux v3.19-rc3-38-gbdec41963890
+- Enable POWERCAP and INTEL_RAPL options
+- Reenable debugging options.
-* Thu Sep 5 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fixup perf build
+* Tue Jan 06 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.19-rc3
-* Wed Sep 4 2013 Kyle McMartin <kyle@redhat.com>
-- [arm] Disable CONFIG_PCIEPORTBUS in arm-generic, causes untold problems
- with registering bus windows on tegra.
+* Mon Jan 05 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.19-rc2
+- Temporarily disable aarch64patches
+- Happy New Year
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git9.1
-- Linux v3.11-3070-gcb3e433
+* Sun Dec 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable F2FS (rhbz 972446)
-* Wed Sep 4 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Update linux-firmware requirements for newer radeon firmware (rhbz 988268 972518)
+* Thu Dec 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.1-2
+- CVE-2014-8989 userns can bypass group restrictions (rhbz 1170684 1170688)
+- Fix from Kyle McMartin for target_core_user uapi issue since it's enabled
+- Fix dm-cache crash (rhbz 1168434)
+- Fix blk-mq crash on CPU hotplug (rhbz 1175261)
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git8.1
-- Linux v3.11-2654-g458c3f6
+* Wed Dec 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.1-1
+- Linux v3.18.1
+- CVE-2014-XXXX isofs: infinite loop in CE record entries (rhbz 1175235 1175250)
+- Enable TCM_USER (rhbz 1174986)
+- Enable USBIP in modules-extra from Johnathan Dieter (rhbz 1169478)
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git7.1
-- Linux v3.11-2529-ga923874
+* Tue Dec 16 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-2
+- Add patch from Josh Stone to restore var-tracking via Kconfig (rhbz 1126580)
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git6.1
-- Linux v3.11-2455-g40031da
+* Mon Dec 15 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix ppc64 boot with smt-enabled=off (rhbz 1173806)
+- CVE-2014-8133 x86: espfix(64) bypass via set_thread_area and CLONE_SETTLS (rhbz 1172797 1174374)
+- CVE-2014-8559 deadlock due to incorrect usage of rename_lock (rhbz 1159313 1173814)
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git5.1
-- Linux v3.11-2200-gf66c83d
+* Fri Dec 12 2014 Kyle McMartin <kyle@fedoraproject.org>
+- build in ahci_platform on aarch64 temporarily.
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git4.1
-- Linux v3.11-1851-g7511442
+* Fri Dec 12 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Remove pointless warning in cfg80211 (rhbz 1172543)
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git3.1
-- Linux v3.11-782-g1d1fdd9
+* Thu Dec 11 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch: update from git.
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git2.1
-- Linux v3.11-716-gb3b4911
+* Wed Dec 10 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix UAS crashes with Seagate and Fresco Logic drives (rhbz 1164945)
+- CVE-2014-8134 fix espfix for 32-bit KVM paravirt guests (rhbz 1172765 1172769)
-* Wed Sep 4 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch set to fix MMC on AM33xx
-- Add support for BeagleBone Black (very basic!)
-- Renable cpuidle on ARM, was disabled sometime back due to instability
+* Tue Dec 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-1
+- Linux v3.18
-* Wed Sep 04 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.12.0-0.rc0.git1.1
-- Linux v3.11-351-g1ccfd5e
-- Reenable debugging options.
+* Fri Dec 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc7.git3.1
+- Linux v3.18-rc7-59-g56c67ce187a8
-* Tue Sep 03 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-3
-- Add system_keyring patches back in
+* Thu Dec 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc7.git2.1
+- Linux v3.18-rc7-48-g7cc78f8fa02c
-* Tue Sep 03 2013 Kyle McMartin <kyle@redhat.com>
-- Pull in some Calxeda highbank fixes that are destined for 3.12
-- Add a %with_extra twiddle to disable building kernel-modules-extra
- subpackages.
-- Fix dtbs install path to use %install_image_path (not that it's different
- at the moment.)
+* Wed Dec 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc7.git1.1
+- Linux v3.18-rc7-3-g3a18ca061311
-* Tue Sep 03 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add keyring patches to support krb5 (rhbz 1003043)
+* Mon Dec 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc7.git0.1
+- Linux v3.18-rc7
-* Tue Sep 03 2013 Kyle McMartin <kyle@redhat.com>
-- [arm64] disable VGA_CONSOLE and PARPORT_PC
-- [arm64] install dtb as on %{arm}
+* Thu Nov 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc6.git1.1
+- Linux v3.18-rc6-28-g3314bf6ba2ac
+- Gobble Gobble
-* Tue Sep 03 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-1
-- Linux v3.11
-- Disable debugging options.
+* Mon Nov 24 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.18-rc6
+- Add quirk for Laser Mouse 6000 (rhbz 1165206)
-* Mon Sep 02 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc7.git5.1
-- Linux v3.11-rc7-96-ga878764
+* Fri Nov 21 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Move TPM drivers to main kernel package (rhbz 1164937)
-* Sun Sep 1 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Build in OMAP MMC again (fix at least omap3)
+* Wed Nov 19 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Disable SERIAL_8250 on s390x (rhbz 1158848)
-* Sat Aug 31 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc7.git4.1
-- Linux v3.11-rc7-42-gd9eda0f
+* Mon Nov 17 2014 Kyle McMartin <kyle@fedoraproject.org> - 3.18.0-0.rc5.git0.2
+- Re-merge kernel-arm64.patch
-* Fri Aug 30 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Fix HID CVEs. Absurd.
-- CVE-2013-2888 rhbz 1000451 1002543 CVE-2013-2889 rhbz 999890 1002548
-- CVE-2013-2891 rhbz 999960 1002555 CVE-2013-2892 rhbz 1000429 1002570
-- CVE-2013-2893 rhbz 1000414 1002575 CVE-2013-2894 rhbz 1000137 1002579
-- CVE-2013-2895 rhbz 1000360 1002581 CVE-2013-2896 rhbz 1000494 1002594
-- CVE-2013-2897 rhbz 1000536 1002600 CVE-2013-2899 rhbz 1000373 1002604
+* Mon Nov 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc5.git0.1
+- Linux v3.18-rc5
+- Disable debugging options.
-* Fri Aug 30 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc7.git3.1
-- Linux v3.11-rc7-30-g41615e8
+* Fri Nov 14 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable I40EVF driver (rhbz 1164029)
-* Fri Aug 30 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Rework Secure Boot support to use the secure_modules approach
-- Drop pekey
+* Fri Nov 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc4.git2.1
+- Linux v3.18-rc4-184-gb23dc5a7cc6e
-* Thu Aug 29 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc7.git2.1
-- Linux v3.11-rc7-24-gc95389b
-- Add mei patches that fix various s/r issues (rhbz 994824 989373)
+* Thu Nov 13 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch for MS Surface Pro 3 Type Cover (rhbz 1135338)
+- CVE-2014-7843 aarch64: copying from /dev/zero causes local DoS (rhbz 1163744 1163745)
-* Wed Aug 28 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc7.git1.1
-- Linux v3.11-rc7-14-gfa8218d
+* Thu Nov 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc4.git1.1
+- Linux v3.18-rc4-52-g04689e749b7e
- Reenable debugging options.
-* Tue Aug 27 2013 Kyle McMartin <kyle@redhat.com>
-- [arm] build pinctrl-single in, needed to prevent deferral of
- omap_serial registration.
+* Wed Nov 12 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-7841 sctp: NULL ptr deref on malformed packet (rhbz 1163087 1163095)
+
+* Tue Nov 11 2014 Kyle McMartin <kyle@fedoraproject.org> - 3.18.0-0.rc4.git0.2
+- Re-enable kernel-arm64.patch, and fix up merge conflicts with 3.18-rc4
+
+* Mon Nov 10 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix Samsung pci-e SSD handling on some macbooks (rhbz 1161805)
-* Mon Aug 26 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc7.git0.1
-- Linux v3.11-rc7
+* Mon Nov 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc4.git0.1
+- Linux v3.18-rc4
+- Temporarily disable aarch64patches
- Disable debugging options.
-* Fri Aug 23 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc6.git4.1
-- Linux v3.11-rc6-139-g89b53e5
+* Fri Nov 07 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc3.git4.1
+- Linux v3.18-rc3-82-ged78bb846e8b
-* Fri Aug 23 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc6.git3.1
-- Linux v3.11-rc6-76-g6a7492a
+* Thu Nov 06 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc3.git3.1
+- Linux v3.18-rc3-68-g20f3963d8f48
-* Fri Aug 23 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config cleanups
-- Enable some IOMMU drivers on ARM
-- Enable some i.MX sound drivers
+* Wed Nov 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc3.git2.1
+- Linux v3.18-rc3-61-ga1cff6e25e6e
-* Thu Aug 22 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc6.git2.1
-- Linux v3.11-rc6-72-g1f8b766
+* Tue Nov 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc3.git1.1
+- Linux v3.18-rc3-31-g980d0d51b1c9
+- Reenable debugging options.
-* Thu Aug 22 2013 Kyle McMartin <kyle@redhat.com>
-- Drop arm-tegra-remove-direct-vbus-regulator-control.patch, proper fix
- will be in the next rebase.
+* Mon Nov 03 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable CONFIG_KXCJK1013
+- Add driver for goodix touchscreen from Bastien Nocera
-* Wed Aug 21 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc6.git1.2
-- Add patch to fix brcmsmac oops (rhbz 989269)
-- CVE-2013-0343 handling of IPv6 temporary addresses (rhbz 914664 999380)
+* Mon Nov 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc3.git0.1
+- Linux v3.18-rc3
+- Disable debugging options.
-* Tue Aug 20 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc6.git1.1
-- Linux v3.11-rc6-28-gfd3930f
-- Reenable debugging options.
+* Thu Oct 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc2.git3.1
+- Linux v3.18-rc2-106-ga7ca10f263d7
-* Tue Aug 20 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Disable Dell RBU so userspace firmware path isn't selected (rhbz 997149)
+* Wed Oct 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc2.git2.1
+- Linux v3.18-rc2-53-g9f76628da20f
+
+* Tue Oct 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add quirk for rfkill on Yoga 3 machines (rhbz 1157327)
+
+* Tue Oct 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc2.git1.1
+- Linux v3.18-rc2-43-gf7e87a44ef60
+- Add two RCU patches to fix a deadlock and a hang
+- Reenable debugging options.
-* Mon Aug 19 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc6.git0.1
-- Linux v3.11-rc6
+* Mon Oct 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc2.git0.1
+- Linux v3.18-rc2
- Disable debugging options.
-* Mon Aug 19 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor kernel configs cleanup merging duplicated config opts into generic
+* Sun Oct 26 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Update ARM config options, some minor cleanups
+
+* Sun Oct 26 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc1.git4.1
+- Linux v3.18-rc1-422-g2cc91884b6b3
+
+* Fri Oct 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc1.git3.3
+- CVE-2014-3610 kvm: noncanonical MSR writes (rhbz 1144883 1156543)
+- CVE-2014-3611 kvm: PIT timer race condition (rhbz 1144878 1156537)
+- CVE-2014-3646 kvm: vmx: invvpid vm exit not handled (rhbz 1144825 1156534)
+- CVE-2014-8369 kvm: excessive pages un-pinning in kvm_iommu_map error path (rhbz 1156518 1156522)
+- CVE-2014-8480 CVE-2014-8481 kvm: NULL pointer dereference during rip relative instruction emulation (rhbz 1156615 1156616)
+
+* Fri Oct 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc1.git3.1
+- Linux v3.18-rc1-280-g816fb4175c29
+- Add touchpad quirk for Fujitsu Lifebook A544/AH544 models (rhbz 1111138)
+
+* Wed Oct 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc1.git2.1
+- Linux v3.18-rc1-221-gc3351dfabf5c
+- Add patch to fix wifi on X550VB machines (rhbz 1089731)
+
+* Tue Oct 21 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Drop pinctrl qcom revert now that it's dependencies should be merged
+
+* Tue Oct 21 2014 Kyle McMartin <kyle@fedoraproject.org> - 3.18.0-0.rc1.git1.2
+- Re-enable kernel-arm64.patch after updating.
+- CONFIG_SERIAL_8250_FINTEK moved to generic since it appears on x86-generic
+ and arm64 now.
+- CONFIG_IMX_THERMAL=n added to config-arm64.
+- arm64: disable BPF_JIT temporarily
+
+* Tue Oct 21 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc1.git1.1
+- Linux v3.18-rc1-68-gc2661b806092
+- Make LOG_BUF_SHIFT on arm64 the same as the rest of the arches (rhbz 1123327)
+- Enable RTC PL031 driver on arm64 (rhbz 1123882)
+- Reenable debugging options.
-* Sun Aug 18 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc5.git6.1
-- Linux v3.11-rc5-168-ga08797e
+* Mon Oct 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc1.git0.1
+- Linux v3.18-rc1
+- Disable debugging options.
-* Sat Aug 17 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc5.git5.1
-- Linux v3.11-rc5-165-g215b28a
+* Fri Oct 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git9.4
+- CVE-2014-8086 ext4: race condition (rhbz 1151353 1152608)
+- Enable B43_PHY_G to fix b43 driver regression (rhbz 1152502)
-* Fri Aug 16 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM drivers config for Zynq 7000 devices
+* Wed Oct 15 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git9.3
+- Revert Btrfs ro snapshot commit that causes filesystem corruption
-* Fri Aug 16 2013 Josh Boyer <jwboyer@fedoraproject.org> - 3.11.0-0.rc5.git4.1
-- Linux v3.11-rc5-150-g0f7dd1a
+* Wed Oct 15 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git9.1
+- Linux v3.17-9670-g0429fbc0bdc2
-* Fri Aug 16 2013 Josh Boyer <jwboyer@fedoraproject.org>
-- Add patch from Nathanael Noblet to fix mic on Gateway LT27 (rhbz 845699)
+* Tue Oct 14 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patches to fix elantech touchscreens (rhbz 1149509)
-* Thu Aug 15 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Major cleanup of arm64 config
-- Add patch to enable build exynos5 as multi platform for lpae
-- Minor cleanup of ARMv7 configs
+* Tue Oct 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git8.1
+- Linux v3.17-9283-g2d65a9f48fcd
-* Thu Aug 15 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc5.git3.1
-- Enable CONFIG_HID_SENSOR_HUB (rhbz 995510)
-- Add patch to fix regression on TeVII S471 devices (rhbz 963715)
-- Linux v3.11-rc5-35-gf1d6e17
+* Tue Oct 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git7.1
+- Linux v3.17-8307-gf1d0d14120a8
-* Wed Aug 14 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc5.git2.1
-- Linux v3.11-rc5-21-g28fbc8b
-- Disable WIMAX. It's fairly broken and abandoned upstream.
+* Mon Oct 13 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Update armv7/aarch64 config options
-* Tue Aug 13 2013 Josh Boyer <jwboyer@gmail.com> - 3.11.0-0.rc5.git1.1
-- Linux v3.11-rc5-13-g584d88b
-- Reenable debugging options.
+* Mon Oct 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git6.1
+- Linux v3.17-7872-g5ff0b9e1a1da
-* Mon Aug 12 2013 Josh Boyer <jwboyer@gmail.com> - 3.11.0-0.rc5.git0.1
-- Linux v3.11-rc5
-- Disable debugging options.
+* Sun Oct 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git5.1
+- Linux v3.17-7639-g90eac7eee2f4
-* Sun Aug 11 2013 Josh Boyer <jwboyer@gmail.com> - 3.11.0-0.rc4.git5.1
-- Linux v3.11-rc4-216-g77f63b4
+* Sun Oct 12 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable CONFIG_I2C_DESIGNWARE_PCI (rhbz 1045821)
-* Sun Aug 11 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Drop a bunch of generic dupe config from aarch64
+* Fri Oct 10 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-7970 VFS: DoS with USER_NS (rhbz 1151095 1151484)
-* Sat Aug 10 2013 Josh Boyer <jwboyer@gmail.com> - 3.11.0-0.rc4.git4.1
-- Linux v3.11-rc4-162-g14e9419
+* Fri Oct 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git4.1
+- Linux v3.17-6136-gc798360cd143
-* Fri Aug 09 2013 Josh Boyer <jwboyer@gmail.com> - 3.11.0-0.rc4.git3.1
-- Linux v3.11-rc4-103-g6c2580c
+* Thu Oct 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git3.1
+- Linux v3.17-5585-g782d59c5dfc5
-* Wed Aug 07 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc4.git2.1
-- Linux v3.11-rc4-27-ge4ef108
-- Add zero file length check to make sure pesign didn't fail (rhbz 991808)
+* Thu Oct 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git2.1
+- Linux v3.17-5503-g35a9ad8af0bb
-* Tue Aug 06 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc4.git1.1
-- Linux v3.11-rc4-20-g0fff106
+* Wed Oct 08 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.0-0.rc0.git1.1
+- Linux v3.17-2860-gef0625b70dac
- Reenable debugging options.
-- Don't package API man pages in -doc (rhbz 993905)
+- Temporarily disable aarch64patches
+- Add patch to fix ATA blacklist
-* Mon Aug 05 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc4.git0.1
-- Linux v3.11-rc4
-- Disable debugging options.
+* Tue Oct 07 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix GFS2 regression (from Bob Peterson)
-* Sun Aug 04 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc3.git4.1
-- Linux v3.11-rc3-376-g72a67a9
+* Mon Oct 06 2014 Kyle McMartin <kyle@fedoraproject.org>
+- enable 64K pages on arm64... (presently) needed to boot on amd seattle
+ platforms due to physical memory being unreachable.
-* Sat Aug 03 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc3.git3.1
-- Linux v3.11-rc3-288-gabe0308
+* Mon Oct 06 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-1
+- Linux v3.17
-* Fri Aug 02 2013 Kyle McMartin <kyle@redhat.com> - 3.11.0-0.rc3.git2.1
-- radeon-si_calculate_leakage-use-div64.patch: fix a compile error on i686.
-- arm: disable CONFIG_LOCK_STAT, bloats .data massively, revisit shortly.
-- arm: build-in more rtc drivers.
+* Fri Oct 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc7.git3.1
+- Linux v3.17-rc7-76-g58586869599f
+- Various ppc64/ppc64le config changes
-* Fri Aug 02 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc3.git2.1
-- Linux v3.11-rc3-207-g64ccccf
+* Thu Oct 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc7.git2.1
+- Linux v3.17-rc7-46-g50dddff3cb9a
+- Cleanup dead Kconfig symbols in config-* from Paul Bolle
-* Thu Aug 1 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config update
+* Wed Oct 01 2014 Kyle McMartin <kyle@fedoraproject.org>
+- Update kernel-arm64.patch from git, again... enable AMD_XGBE on arm64.
-* Thu Aug 01 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix mac80211 connection issues (rhbz 981445)
-- Fix firmware issues with iwl4965 and rfkill (rhbz 977053)
-- Drop hid-logitech-dj patch that was breaking enumeration (rhbz 989138)
+* Wed Oct 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc7.git1.1
+- Linux v3.17-rc7-6-gaad7fb916a10
-* Tue Jul 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.11.0-0.rc3.git1.1
-- Linux v3.11-rc3-4-g36f571e
-- Reenable debugging options.
+* Tue Sep 30 2014 Kyle McMartin <kyle@fedoraproject.org> - 3.17.0-0.rc7.git0.2
+- Revert some v3.16 changes to mach-highbank which broke L2 cache enablement.
+ Will debug upstream separately, but we need F22/21 running there. (#1139762)
+
+* Tue Sep 30 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Don't build Exynos4 on lpae kernel
+- Add dts for BananaPi
+- Minor ARM updates
+- Build 6lowpan modules
-* Tue Jul 30 2013 Josh Boyer <jwboyer@redhat.com>
-- Revert some changes to make Logitech devices function properly (rhbz 989138)
+* Mon Sep 29 2014 Kyle McMartin <kyle@fedoraproject.org>
+- Update kernel-arm64.patch from git.
-* Mon Jul 29 2013 Kyle McMartin <kyle@redhat.com> - 3.11.0-0.rc3.git0.1
-- arm-sound-soc-samsung-dma-avoid-another-64bit-division.patch: ditto
+* Mon Sep 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc7.git0.1
+- Linux v3.17-rc7
-* Mon Jul 29 2013 Kyle McMartin <kyle@redhat.com>
-- arm-dma-amba_pl08x-avoid-64bit-division.patch: STAHP libgcc callouts
+* Wed Sep 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc6.git2.1
+- Linux v3.17-rc6-180-g452b6361c4d9
-* Mon Jul 29 2013 Josh Boyer <jwboyer@redhat.com>
-- Linux v3.11-rc3
+* Tue Sep 23 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix return code when adding keys (rhbz 1145318)
+- Add patch to fix XPS 13 touchpad issue (rhbz 1123584)
+
+* Tue Sep 23 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc6.git1.1
+- Linux v3.17-rc6-125-gf3670394c29f
+
+* Mon Sep 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc6.git0.1
+- Linux v3.17-rc6
+- Revert EFI GOT fixes as it causes boot failures
- Disable debugging options.
-- Always include x509.genkey in Sources list
-* Fri Jul 26 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc2.git4.1
-- Linux v3.11-rc2-333-ga9b5f02
+* Fri Sep 19 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc5.git5.1
+- Linux v3.17-rc5-105-g598a0c7d0932
-* Fri Jul 26 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to fix NULL deref in iwlwifi (rhbz 979581)
+* Fri Sep 19 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Disable NO_HZ_FULL again
+- Enable early microcode loading (rhbz 1083716)
-* Thu Jul 25 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc2.git3.1
-- Linux v3.11-rc2-185-g07bc9dc
+* Fri Sep 19 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc5.git4.1
+- Linux v3.17-rc5-63-gd9773ceabfaf
+- Enable infiniband on s390x
-* Wed Jul 24 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc2.git2.1
-- Linux v3.11-rc2-158-g04012e3
+* Thu Sep 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc5.git3.1
+- Linux v3.17-rc5-25-g8ba4caf1ee15
-* Tue Jul 23 2013 Kyle McMartin <kyle@redhat.com>
-- arm-tegra-remove-direct-vbus-regulator-control.patch: backport patches
- to fix ehci-tegra.
+* Wed Sep 17 2014 Kyle McMartin <kyle@fedoraproject.org>
+- I also like to live dangerously. (Re-enable RCU_FAST_NO_HZ which has been off
+ since April 2012. Also enable NO_HZ_FULL on x86_64.)
+- I added zipped modules ages ago, remove it from TODO.
-* Tue Jul 23 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc2.git1.1
-- Linux v3.11-rc2-93-gb3a3a9c
+* Wed Sep 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc5.git2.1
+- Linux v3.17-rc5-24-g37504a3be90b
+- Fix vmwgfx header include (rhbz 1138759)
-* Mon Jul 22 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc2.git0.2
-- let flavors/variants end with "+$flavor" in the uname patch from harald@redhat.com
+* Tue Sep 16 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc5.git1.1
+- Linux v3.17-rc5-13-g2324067fa9a4
- Reenable debugging options.
-* Mon Jul 22 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix timer issue in bridge code (rhbz 980254)
-
-* Mon Jul 22 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc2.git0.1
-- Linux v3.11-rc2
+* Mon Sep 15 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc5.git0.1
+- Linux v3.17-rc5
- Disable debugging options.
-* Sun Jul 21 2013 Kyle McMartin <kmcmartin@redhat.com> - 3.11.0-0.rc1.git4.1
-- Linux v3.11-rc1-247-g90db76e
+* Fri Sep 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc4.git4.1
+- Linux v3.17-rc4-244-g5874cfed0b04
-* Sun Jul 21 2013 Kyle McMartin <kyle@redhat.com>
-- arm-omap-bbb-dts.patch: disable for now, it needs too much work for
- a sunday morning.
+* Thu Sep 11 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable ACPI_I2C_OPREGION
-* Fri Jul 19 2013 Kyle McMartin <kyle@redhat.com>
-- arm-omap-bbb-dts.patch: fix arch/arm/boot/dtb/Makefile rule
+* Thu Sep 11 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc4.git3.1
+- Linux v3.17-rc4-168-g7ec62d421bdf
+- Add support for touchpad in Asus X450 and X550 (rhbz 1110011)
-* Fri Jul 19 2013 Kyle McMartin <kmcmartin@redhat.com> - 3.11.0-0.rc1.git3.1
-- Linux v3.11-rc1-181-gb8a33fc
+* Wed Sep 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc4.git2.1
+- Linux v3.17-rc4-158-ge874a5fe3efa
+- Add patch to fix oops on keyring gc (rhbz 1116347)
-* Fri Jul 19 2013 Kyle McMartin <kmcmartin@redhat.com> - 3.11.0-0.rc1.git2.1
-- Linux v3.11-rc1-135-g0a693ab
+* Tue Sep 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc4.git1.1
+- Linux v3.17-rc4-140-g8c68face5548
+- Reenable debugging options.
-* Thu Jul 18 2013 Kyle McMartin <kyle@redhat.com>
-- Applied patch from Kay Sievers to kill initscripts Conflicts & Requires and
- udev Conflicts...
-- And then clean up some of the ancient crap from our Conflicts and Requires
- which reference versions not shipped since 2006.
+* Mon Sep 08 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Remove ppc32 support
-* Thu Jul 18 2013 Kyle McMartin <kyle@redhat.com>
-- devel-sysrq-secure-boot-20130717.patch: add a patch that allows the user to
- disable secure boot restrictions from the local console or local serial
- (but not /proc/sysrq-trigger or via uinput) by using SysRQ-x.
+* Mon Sep 8 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Build tools on ppc64le (rhbz 1138884)
+- Some minor ppc64 cleanups
-* Wed Jul 17 2013 Kyle McMartin <kyle@redhat.com> - 3.11.0-0.rc1.git1.1
-- Linux v3.11-rc1-19-gc0d15cc
-- Reenable debugging options.
+* Mon Sep 08 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc4.git0.1
+- Linux v3.17-rc4
+- Disable debugging options.
-* Wed Jul 17 2013 Kyle McMartin <kyle@redhat.com>
-- update s390x config [Dan Horák]
+* Fri Sep 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc3.git3.1
+- Linux v3.17-rc3-94-gb7fece1be8b1
-* Wed Jul 17 2013 Petr Pisar <ppisar@redhat.com> - 3.11.0-0.rc1.git0.2
-- Perl 5.18 rebuild
+* Thu Sep 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc3.git2.1
+- Linux v3.17-rc3-63-g44bf091f5089
+- Enable kexec bzImage signature verification (from Vivek Goyal)
+- Add support for Wacom Cintiq Companion from Benjamin Tissoires (rhbz 1134969)
-* Wed Jul 17 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch for BeagleBone Black DTB
+* Wed Sep 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc3.git1.1
+- Linux v3.17-rc3-16-g955837d8f50e
+- Reenable debugging options.
-* Tue Jul 16 2013 Kyle McMartin <kyle@redhat.com> - 3.11.0-0.rc1.git0.1
-- Linux v3.11-rc1
+* Tue Sep 02 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Remove with_extra switch
+
+* Mon Sep 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc3.git0.1
+- Linux v3.17-rc3
- Disable debugging options.
-- Fix %kernel_modules warning.
-* Sun Jul 14 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM config
-- Enable USB gadget module on ARM to fix build i.MX usb modules
+* Fri Aug 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc2.git3.1
+- Linux v3.17-rc2-89-g59753a805499
-* Sun Jul 14 2013 Dennis Gilmore <dennis@ausil.us>
-- update and reenable wandboard quad dtb patch
+* Thu Aug 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix NFSv3 ACL regression (rhbz 1132786)
-* Fri Jul 12 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc0.git7.1
-- Linux v3.10-9289-g9903883
+* Thu Aug 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc2.git2.1
+- Linux v3.17-rc2-42-gf1bd473f95e0
+- Don't enable CONFIG_DEBUG_WW_MUTEX_SLOWPATH (rhbz 1114160)
-* Fri Jul 12 2013 Dave Jones <davej@redhat.com> - 3.11.0-0.rc0.git6.4
-- Disable LATENCYTOP/SCHEDSTATS in non-debug builds.
+* Wed Aug 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc2.git1.1
+- Disable streams on via XHCI (rhbz 1132666)
+- Linux v3.17-rc2-9-g68e370289c29
+- Reenable debugging options.
-* Fri Jul 12 2013 Josh Boyer <jwboyer@redhat.com>
-- Add iwlwifi fix for connection issue (rhbz 885407)
+* Tue Aug 26 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor tegra updates due to incorrect nvidia kernel config options
-* Thu Jul 11 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc0.git6.1
-- Linux v3.10-9080-g19d2f8e
+* Tue Aug 26 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc2.git0.1
+- Linux v3.17-rc2
+- Fixup ARM MFD options after I2C=y change
+- Disable debugging options.
-* Thu Jul 11 2013 Kyle McMartin <kyle@redhat.com>
-- Enable USB on Wandboard Duallite and other i.MX based boards, patch
- from Niels de Vos.
+* Tue Aug 26 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor generic ARMv7 updates
+- Build tegra on both LPAE and general ARMv7 kernels (thank srwarren RHBZ 1110963)
+- Set CMA to 64mb on LPAE kernel (RHBZ 1127000)
-* Thu Jul 11 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- ARM config cleanups and changes for 3.11
+* Mon Aug 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc1.git4.1
+- Linux v3.17-rc1-231-g7be141d05549
+- Add patch to fix NFS oops on /proc removal (rhbz 1132368)
-* Wed Jul 10 2013 Kyle McMartin <kyle@redhat.com>
-- Fix crash-driver.patch to properly use page_is_ram.
+* Fri Aug 22 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Drop userns revert patch (rhbz 917708)
-* Tue Jul 09 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc0.git3.1
-- Linux v3.10-6378-ga82a729
+* Fri Aug 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc1.git3.1
+- Linux v3.17-rc1-99-g5317821c0853
-* Mon Jul 8 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Initial ARM config for 3.11
+* Thu Aug 21 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc1.git2.1
+- Linux v3.17-rc1-51-g372b1dbdd1fb
-* Mon Jul 08 2013 Justin M. Forbes <jforbes@redhat.com> - 3.11.0-0.rc0.git2.1
-- Linux v3.10-6005-gd2b4a64
+* Wed Aug 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc1.git1.1
+- Linux v3.17-rc1-22-g480cadc2b7e0
- Reenable debugging options.
-* Fri Jul 05 2013 Josh Boyer <jwboyer@redhat.com>
-- Add vhost-net use-after-free fix (rhbz 976789 980643)
-- Add fix for timer issue in bridge code (rhbz 980254)
+* Mon Aug 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc1.git0.1
+- Linux v3.17-rc1
+- Disable debugging options.
-* Wed Jul 03 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patches to fix iwl skb managment (rhbz 977040)
+* Sat Aug 16 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc0.git7.1
+- Linux v3.16-11452-g88ec63d6f85c
-* Tue Jul 02 2013 Dennis Gilmore <dennis@ausil.us> - 3.10-2
-- create a dtb for wandboard quad
+* Fri Aug 15 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc0.git6.1
+- Linux v3.16-11383-gc9d26423e56c
-* Mon Jul 01 2013 Justin M. Forbes <jforbes@redhat.com> - 3.10-1
-- Linux v3.10
+* Thu Aug 14 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64: resynch with git head (no functional change)
-* Fri Jun 28 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Only enable ARM A15 errata on the LPAE kernel as it breaks A8
+* Thu Aug 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc0.git5.1
+- Linux v3.16-10959-gf0094b28f303
-* Thu Jun 27 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix stack memory usage for DMA in ath3k (rhbz 977558)
+* Wed Aug 13 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- 3.17 ARMv7 updates
+- Cleanup some old removed options
+- Disable legacy USB OTG (using new configfs equivilents)
-* Wed Jun 26 2013 Josh Boyer <jwboyer@redhat.com>
-- Add two patches to fix bridge networking issues (rhbz 880035)
+* Tue Aug 12 2014 Kyle McMartin <kyle@fedoraproject.org> 3.17.0-0.rc0.git4.2
+- tegra-powergate-header-move.patch: deal with armv7hl breakage
+- nouveau_platform-fix.patch: handle nouveau_dev() removal
-* Mon Jun 24 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix battery issue with bluetooth keyboards (rhbz 903741)
+* Tue Aug 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc0.git4.1
+- Add updated crash driver from Dave Anderson and re-enable
-* Mon Jun 24 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc7.git0.1
-- Linux v3.10-rc7
-- Disable debugging options.
+* Tue Aug 12 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch: fix up merge conflict and re-enable
+
+* Tue Aug 12 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.16-10473-gc8d6637d0497
-* Tue Jun 18 2013 Dave Jones <davej@redhat.com>
-- Disable MTRR sanitizer by default.
+* Sat Aug 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc0.git3.1
+- Linux v3.16-10013-gc309bfa9b481
+- Temporarily don't apply crash driver patch
-* Tue Jun 18 2013 Justin M. Forbes <jforbes@redhat.com> - 3.10.0-0.rc6.git0.4
-- Testing the test harness
+* Thu Aug 07 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.17.0-0.rc0.git2.1
+- Linux v3.16-7503-g33caee39925b
-* Tue Jun 18 2013 Justin M. Forbes <jforbes@redhat.com> - 3.10.0-0.rc6.git0.3
+* Tue Aug 05 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch: fix up merge conflict and re-enable
+
+* Tue Aug 05 2014 Josh Boyer <jwboyer@gmail.com> - 3.17.0-0.rc0.git1.1
+- Linux v3.16-3652-gf19107379dbc
- Reenable debugging options.
-* Mon Jun 17 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to fix radeon issues on powerpc
-
-* Mon Jun 17 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc6.git0.1
-- Linux v3.10-rc6
-
-* Fri Jun 14 2013 Kyle McMartin <kyle@redhat.com>
-- ARM64 support (config-arm64)
- Split out some config-armv7-generic options common between 32-bit and 64-bit
- ARM into a new config-arm-generic, and use that as a base for
- both.
- Buildable in rawhide, and F-19 by installing {gcc,binutils}-aarch64-linux-gnu
- and running:
- rpmbuild --rebuild --target $ARCH --with cross --without perf \
- --without tools --without debuginfo --define "_arch aarch64" \
- --define "_build_arch aarch64" \
- --define "__strip /usr/bin/aarch64-linux-gnu-strip" kernel*.src.rpm
- As rpm in F-19 doesn't have aarch64-linux macros yet.
-
-* Thu Jun 13 2013 Kyle McMartin <kyle@redhat.com>
-- Introduce infrastructure for cross-compiling Fedora kernels. Intended to
- assist building for secondary architectures like ppc64, s390x, and arm.
- To use, create an .src.rpm using "fedpkg srpm" and then run
- "rpmbuild --rebuild --target t --with cross --without perf --without tools \
- kernel*.src.rpm" to cross compile. This requires binutils and gcc
- packages named like %_target_cpu, which all but powerpc64 currently provides
- in rawhide/F-19. Can't (currently) cross compile perf or kernel-tools, since
- libc is missing from the cross environment.
-
-* Thu Jun 13 2013 Kyle McMartin <kyle@redhat.com>
-- arm-export-read_current_timer.patch: drop upstream patch
- (results in duplicate exports)
-
-* Wed Jun 12 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config updates
-
-* Wed Jun 12 2013 Kyle McMartin <kmcmarti@redhat.com>
-- Merge %{with_pae} and %{with_lpae} so both ARM and i686 use the same
- flavours. Set %{pae} to the flavour name {lpae, PAE}. Merging
- the descriptions would be nice, but is somewhat irrelevant...
-
-* Wed Jun 12 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix KVM divide by zero error (rhbz 969644)
-- Add fix for rt5390/rt3290 regression (rhbz 950735)
-
-* Tue Jun 11 2013 Dave Jones <davej@redhat.com>
-- Disable soft lockup detector on virtual machines. (rhbz 971139)
-
-* Tue Jun 11 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patches to fix MTRR issues in 3.9.5 (rhbz 973185)
-- Add two patches to fix issues with vhost_net and macvlan (rhbz 954181)
-
-* Tue Jun 11 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc5.git0.1
-- Linux v3.10-rc5
-- CVE-2013-2164 information leak in cdrom driver (rhbz 973100 973109)
-
-* Mon Jun 10 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable Freescale i.MX platforms and initial config
-
-* Fri Jun 07 2013 Josh Boyer <jwboyer@redhat.com>
-- CVE-2013-2851 block: passing disk names as format strings (rhbz 969515 971662)
-- CVE-2013-2852 b43: format string leaking into error msgs (rhbz 969518 971665)
-
-* Thu Jun 06 2013 Josh Boyer <jwboyer@redhat.com>
-- CVE-2013-2148 fanotify: info leak in copy_event_to_user (rhbz 971258 971261)
-- CVE-2013-2147 cpqarray/cciss: information leak via ioctl (rhbz 971242 971249)
-
-* Wed Jun 05 2013 Josh Boyer <jwboyer@redhat.com>
-- CVE-2013-2140 xen: blkback: insufficient permission checks for BLKIF_OP_DISCARD (rhbz 971146 971148)
-
-* Tue Jun 04 2013 Dave Jones <davej@redhat.com> - 3.10.0-0.rc4.git0.1
-- 3.10-rc4
- merged: radeon-use-max_bus-speed-to-activate-gen2-speeds.patch
- merged: iscsi-target-fix-heap-buffer-overflow-on-error.patch
-
-* Mon Jun 03 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix UEFI anti-bricking code (rhbz 964335)
-
-* Mon Jun 3 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config changes
-
-* Sun Jun 2 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch to fix DRM/X on omap (panda)
-- Enable Cortex-A8 errata on multiplatform kernels (omap3)
-- Minor ARM config updates
-
-* Fri May 31 2013 Josh Boyer <jwboyer@redhat.com>
-- CVE-2013-2850 iscsi-target: heap buffer overflow on large key error (rhbz 968036 969272)
-
-* Thu May 30 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config update for tegra (AC100)
-
-* Mon May 27 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc3.git0.1
-- Linux v3.10-rc3
+* Mon Aug 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-1
+- Linux v3.16
- Disable debugging options.
-* Mon May 27 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM updates
+* Sun Aug 3 2014 Peter Robinson <pbrobinson@redhat.com>
+- Minor config updates for Armada and Sunxi ARM devices
-* Fri May 24 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to quiet irq remapping failures (rhbz 948262)
+* Fri Aug 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc7.git4.1
+- Linux v3.16-rc7-84-g6f0928036bcb
-* Fri May 24 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc2.git3.1
-- Linux v3.10-rc2-328-g0e255f1
+* Thu Jul 31 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc7.git3.1
+- Linux v3.16-rc7-76-g3a1122d26c62
-* Fri May 24 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc2.git2.1
-- Linux v3.10-rc2-221-g514e250
+* Wed Jul 30 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch: fix up merge conflict and re-enable
-* Thu May 23 2013 Kyle McMartin <kyle@redhat.com>
-- Fix modules.* removal from /lib/modules/$KernelVer
+* Wed Jul 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc7.git2.1
+- Linux v3.16-rc7-64-g26bcd8b72563
+- Temporarily disable aarch64patches
-* Thu May 23 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix oops from incorrect rfkill set in hp-wmi (rhbz 964367)
+* Wed Jul 30 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Apply different patch from Milan Broz to fix LUKS partitions (rhbz 1115120)
-* Wed May 22 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc2.git1.1
-- Linux v3.10-rc2-68-gbb3ec6b
-- Reenable debugging options.
+* Tue Jul 29 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch: update from upstream git.
-* Tue May 21 2013 Kyle McMartin <kyle@redhat.com>
-- Rewrite the modinfo license check to generate significantly less noise in
- build logs.
-- Ditto for the modules.* removal (and move it earlier, as pointed out by jwb)
+* Tue Jul 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc7.git1.1
+- Linux v3.16-rc7-7-g31dab719fa50
+- Reenable debugging options.
-* Tue May 21 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable OMAP5 on ARM multiplatform
+* Mon Jul 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Make sure acpi brightness_switch is disabled (like forever in Fedora)
+- CVE-2014-5077 sctp: fix NULL ptr dereference (rhbz 1122982 1123696)
-* Tue May 21 2013 Kyle McMartin <kyle@redhat.com> - 3.10.0-0.rc2.git0.2
+* Mon Jul 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc7.git0.1
+- Linux v3.16-rc7
- Disable debugging options.
-* Mon May 20 2013 Kyle McMartin <kyle@redhat.com> - 3.10.0-0.rc2.git0.1
-- Linux v3.10-rc2
-- Disable debugging options
+* Mon Jul 28 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add patch to fix loading of tegra drm using device tree
+
+* Sat Jul 26 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc6.git3.1
+- Linux v3.16-rc6-139-g9c5502189fa0
+
+* Fri Jul 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc6.git2.1
+- Linux v3.16-rc6-118-g82e13c71bc65
+- Fix selinux sock_graft hook for AF_ALG address family (rhbz 1115120)
-* Mon May 20 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM update
+* Thu Jul 24 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch: update from upstream git.
+- arm64: update config-arm64 to include PCI support.
+
+* Thu Jul 24 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-5045 vfs: refcount issues during lazy umount on symlink (rhbz 1122471 1122482)
+- Fix regression in sched_setparam (rhbz 1117942)
+
+* Tue Jul 22 2014 Justin M. Forbes <jforbes@fedoraproject.org> - 3.16.0-0.rc6.git1.1
+- Linux v3.16-rc6-75-g15ba223
+- Reenable debugging options.
-* Mon May 20 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git7.1
-- Linux v3.10-rc1-369-g343cd4f
+* Mon Jul 21 2014 Justin M. Forbes <jforbes@fedoraproject.org> - 3.16.0-0.rc6.git0.1
+- Linux v3.16-rc6
+- Disable debugging options.
-* Fri May 17 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git6.1
-- Linux v3.10-rc1-266-gec50f2a
+* Mon Jul 21 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor ARMv7 config update
-* Thu May 16 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable memory cgroup swap accounting (rhbz 918951)
-- Fix config-local usage (rhbz 950841)
+* Thu Jul 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc5.git2.1
+- Linux v3.16-rc5-143-gb6603fe574af
-* Wed May 15 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git5.1
-- Linux v3.10-rc1-185-gc240a53
+* Wed Jul 16 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable hermes prism driver (rhbz 1120393)
-* Wed May 15 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch from Harald Hoyer to migrate to using kernel-install
+* Wed Jul 16 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc5.git1.1
+- Linux v3.16-rc5-130-g2da294474093
+- Reenable debugging options.
-* Wed May 15 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git4.1
-- Linux v3.10-rc1-120-gb973425
+* Mon Jul 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc5.git0.1
+- Linux v3.16-rc5
+- Fix i915 regression with external monitors (rhbz 1117008)
+- Disable debugging options.
-* Tue May 14 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git3.1
-- Linux v3.10-rc1-113-ga2c7a54
+* Sat Jul 12 2014 Tom Callaway <spot@fedoraproject.org>
+- Fix license handling (I hope)
-* Tue May 14 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git2.1
-- Linux v3.10-rc1-79-gdbbffe6
+* Fri Jul 11 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc4.git3.1
+- Linux v3.16-rc4-120-g85d90faed31e
-* Mon May 13 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git1.1
-- Linux v3.10-rc1-34-g1f63876
+* Thu Jul 10 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Rebase Utilute and BeagleBone patches
+- Minor ARM updates
+- Enable ISL12057 RTC for ARM (NetGear ReadyNAS)
-* Mon May 13 2013 Josh Boyer <jwboyer@redhat.com>
-- Add radeon fixes for PCI-e gen2 speed issues (rhbz 961527)
+* Wed Jul 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc4.git2.1
+- Linux v3.16-rc4-28-g163e40743f73
+- Fix bogus vdso .build-id links (rhbz 1117563)
-* Mon May 13 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git0.2
+* Tue Jul 08 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc4.git1.1
+- Linux v3.16-rc4-20-g448bfad8a185
- Reenable debugging options.
-* Mon May 13 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc1.git0.1
-- Linux v3.10-rc1
+* Sun Jul 06 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc4.git0.1
+- Linux v3.16-rc4
- Disable debugging options.
-* Sat May 11 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Another patch to fix ARM kernel build
-
-* Fri May 10 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch to fix exynosdrm build, drop old tegra patches, minor config updates
+* Fri Jul 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc3.git3.1
+- Linux v3.16-rc3-149-g034a0f6b7db7
-* Fri May 10 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git26.1
-- Linux v3.9-12555-g2dbd3ca
+* Wed Jul 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc3.git2.1
+- Linux v3.16-rc3-62-gd92a333a65a1
+- Add patch to fix virt_blk oops (rhbz 1113805)
-* Fri May 10 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable RTLWIFI_DEBUG in debug kernels (rhbz 889425)
-- Switch the loop driver to a module and change to doing on-demand creation
- (rhbz 896160)
-- Disable CRYPTOLOOP as F18 util-linux is the last to support it (rhbz 896160)
+* Wed Jul 02 2014 Kyle McMartin <kyle@fedoraproject.org>
+- arm64: build-in ahci, ethernet, and rtc drivers.
-* Fri May 10 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git25.1
-- Linux v3.9-12316-g70eba42
+* Tue Jul 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc3.git1.1
+- Linux v3.16-rc3-6-g16874b2cb867
+- Reenable debugging options.
-* Thu May 09 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git24.1
-- Linux v3.9-12070-g8cbc95e
+* Tue Jul 1 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor ARMv7 cleanup
-* Thu May 9 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable DMA for ARM sound drivers
+* Mon Jun 30 2014 Kyle McMartin <kyle@fedoraproject.org>
+- kernel-arm64.patch, update from git.
-* Thu May 09 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git23.1
-- Linux v3.9-11789-ge0fd9af
+* Mon Jun 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc3.git0.1.1
+- Linux v3.16-rc3
+- Enable USB rtsx drivers (rhbz 1114229)
+- Disable debugging options.
-* Wed May 8 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable RemoteProc drivers on ARM
+* Fri Jun 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc2.git4.1
+- Linux v3.16-rc2-222-g3493860c76eb
-* Wed May 08 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git22.1
-- Linux v3.9-11572-g5af43c2
+* Fri Jun 27 2014 Hans de Goede <hdegoede@redhat.com>
+- Add patch to fix wifi on lenove yoga 2 series (rhbz#1021036)
-* Tue May 07 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git21.1
-- Linux v3.9-11485-gbb9055b
+* Thu Jun 26 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable rtl8192ee (rhbz 1113422)
-* Tue May 07 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git20.1
-- Linux v3.9-10996-g0f47c94
+* Thu Jun 26 2014 Kyle McMartin <kyle@fedoraproject.org> - 3.16.0-0.rc2.git3.2
+- Add kernel-arm64.patch, which contains AArch64 support destined for upstream.
+ ssh://git.fedorahosted.org/git/kernel-arm64.git is Mark Salter's source tree
+ integrating these patches on the devel branch. I've added a twiddle to the
+ top of the spec file to disable the aarch64 patchset, and also set aarch64
+ to nobuildarches, so we still get kernel-headers, but no one accidentally
+ installs a non-booting kernel if the patchset causes rejects during a
+ rebase.
-* Tue May 07 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix dmesg_restrict patch to avoid regression (rhbz 952655)
+* Thu Jun 26 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Trimmed changelog, see fedpkg git for earlier history.
-* Mon May 06 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git19.1
-- Linux v3.9-10936-g51a26ae
+* Thu Jun 26 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc2.git3.1
+- Linux v3.16-rc2-211-gd7933ab727ed
-* Mon May 6 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable TPS65217 (am33xx) and EC on ChromeOS devices
+* Wed Jun 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc2.git2.1
+- Linux v3.16-rc2-69-gd91d66e88ea9
-* Mon May 06 2013 Josh Boyer <jwboyer@redhat.com>
-- Don't remove headers explicitly exported via UAPI (rhbz 959467)
+* Wed Jun 25 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Revert commit that breaks Wacom Intuos4 from Benjamin Tissoires
-* Mon May 06 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git18.1
-- Linux v3.9-10518-gd7ab730
+* Tue Jun 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc2.git1.1
+- Linux v3.16-rc2-35-g8b8f5d971584
+- Reenable debugging options.
-* Mon May 06 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git17.1
-- Linux v3.9-10104-g1aaf6d3
+* Mon Jun 23 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-4508 BUG in x86_32 syscall auditing (rhbz 1111590 1112073)
-* Sun May 5 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM config
+* Mon Jun 23 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc2.git0.1
+- Linux v3.16-rc2
+- Disable debugging options.
-* Sat May 04 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git16.1
-- Linux v3.9-9472-g1db7722
+* Sun Jun 22 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable Exynos now it's finally multi platform capable
+- Minor TI Keystone update
+- ARM config cleanups
-* Fri May 03 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git15.1
-- Linux v3.9-9409-g8665218
+* Fri Jun 20 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Bring in intel_pstate regression fixes for BayTrail (rhbz 1111920)
-* Fri May 03 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git14.1
-- Linux v3.9-8933-gce85722
+* Fri Jun 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc1.git4.1
+- Linux v3.16-rc1-215-g3c8fb5044583
-* Fri May 3 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- ARM 3.10 merge and general cleanup
-- Drop dedicated tegra kernel as now Multiplatform enabled
-- Enable Tegra and UX500 (Snowball) in Multiplatform
+* Thu Jun 19 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc1.git3.1
+- Linux v3.16-rc1-112-g894e552cfaa3
-* Thu May 02 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git13.1
-- Linux v3.9-8153-g5a148af
+* Thu Jun 19 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add missing bits for NVIDIA Jetson TK1 (thanks Stephen Warren)
-* Thu May 02 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git12.1
-- Linux v3.9-7992-g99c6bcf
+* Wed Jun 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc1.git2.1
+- Linux v3.16-rc1-17-ge99cfa2d0634
-* Thu May 02 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git11.1
-- Linux v3.9-7391-g20b4fb4
+* Tue Jun 17 2014 Dennis Gilmore <dennis@ausil.us>
+- when ipuv3 moved out of staging the config was renamed
+- adjust the config to suit
-* Wed May 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git10.1
-- Linux v3.9-5308-g8a72f38
+* Tue Jun 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc1.git1.1
+- Linux v3.16-rc1-2-gebe06187bf2a
+- Reenable debugging options.
-* Wed May 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git9.1
-- Linux v3.9-5293-g823e75f
+* Mon Jun 16 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable Qualcomm SoCs on ARM
-* Wed May 1 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM updates
+* Mon Jun 16 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc1.git0.1
+- Linux v3.16-rc1
+- Disable debugging options.
-* Wed May 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git8.1
-- Linux v3.9-5165-g5f56886
+* Mon Jun 16 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- ARM config updates for 3.16
-* Tue Apr 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git7.1
-- Linux v3.9-4597-g8c55f14
+* Sat Jun 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git11.1
+- Linux v3.15-9930-g0e04c641b199
+- Enable CONFIG_RCU_NOCB_CPU(_ALL) (rbhz 1109113)
-* Tue Apr 30 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable CONFIG_SERIAL_8250_DW on ARM
+* Fri Jun 13 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add patch to fix build failure on aarch64
-* Tue Apr 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git6.1
-- Linux v3.9-4516-gc9ef713
+* Fri Jun 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git10.1
+- Linux v3.15-9837-g682b7c1c8ea8
-* Tue Apr 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git5.1
-- Linux v3.9-3520-g5a5a1bf
+* Fri Jun 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git9.1
+- Linux v3.15-8981-g5c02c392cd23
-* Tue Apr 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git4.1
-- Linux v3.9-3143-g56847d8
+* Fri Jun 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git8.1
+- Linux v3.15-8835-g859862ddd2b6
-* Mon Apr 29 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git3.1
-- Linux v3.9-2154-gec25e24
+* Fri Jun 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git7.1
+- Linux v3.15-8556-gdfb945473ae8
-* Mon Apr 29 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git2.1
-- Linux v3.9-332-g92ddcf4
+* Fri Jun 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git6.1
+- Linux v3.15-8351-g9ee4d7a65383
-* Mon Apr 29 2013 Josh Boyer <jwboyer@redhat.com> - 3.10.0-0.rc0.git1.1
-- Linux v3.9-84-g916bb6d7
-- Reenable debugging options.
+* Thu Jun 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git5.1
+- Linux v3.15-8163-g5b174fd6472b
-* Mon Apr 29 2013 Neil Horman <nhorman@redhat.com>
-- Enable CONFIG_PACKET_DIAG (rhbz 956870)
+* Thu Jun 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git4.1
+- Linux v3.15-7926-gd53b47c08d8f
-* Mon Apr 29 2013 Josh Boyer <jwboyer@redhat.com>
-- Linux v3.9
+* Thu Jun 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git3.1
+- Linux v3.15-7378-g14208b0ec569
-* Fri Apr 26 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to prevent scheduling while atomic error in blkcg
+* Wed Jun 11 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git2.1
+- Linux v3.15-7283-gda85d191f58a
-* Wed Apr 24 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to fix EFI boot on Macs (rhbz 953447)
+* Tue Jun 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.16.0-0.rc0.git1.1
+- Linux v3.15-7218-g3f17ea6dea8b
+- Reenable debugging options.
-* Mon Apr 22 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc8.git0.1
-- Linux v3.9-rc8
+* Mon Jun 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-1
+- Linux v3.15
- Disable debugging options.
-* Mon Apr 22 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM updates
-
-* Fri Apr 19 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to fix RCU splat from perf events
+* Mon Jun 9 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable USB_EHCI_HCD_ORION to fix USB on Marvell (fix boot for some devices)
-* Fri Apr 19 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Temporaily disable cpu idle on ARM as it appears to be causing stability issues
+* Fri Jun 06 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc8.git4.1
+- CVE-2014-3940 missing check during hugepage migration (rhbz 1104097 1105042)
+- Linux v3.15-rc8-81-g951e273060d1
-* Fri Apr 19 2013 Josh Boyer <jwboyer@redhat.com>
-- Disable Intel HDA and enable RSXX block dev on ppc64/ppc64p7
+* Thu Jun 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc8.git3.1
+- Linux v3.15-rc8-72-g54539cd217d6
-* Thu Apr 18 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc7.git3.1
-- Linux v3.9-rc7-70-gd202f05
+* Wed Jun 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc8.git2.1
+- Linux v3.15-rc8-58-gd2cfd3105094
-* Wed Apr 17 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc7.git2.1
-- Linux v3.9-rc7-24-g542a672
+* Tue Jun 03 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add filter-ppc64p7.sh because ppc64p7 is an entirely separate RPM arch
-* Wed Apr 17 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM config updates
-- Add patch for DT DMA issues that affect at least highbank/tegra ARM devices
+* Tue Jun 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc8.git1.2
+- Fixes from Hans de Goede for backlight and platform drivers on various
+ machines. (rhbz 1025690 1012674 1093171 1097436 861573)
-* Tue Apr 16 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc7.git1.1
-- Linux v3.9-rc7-4-gbb33db7
+* Tue Jun 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc8.git1.1
+- Add patch to install libtraceevent plugins from Kyle McMartin
+- Linux v3.15-rc8-53-gcae61ba37b4c
- Reenable debugging options.
-* Tue Apr 16 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix uninitialized variable free in iwlwifi (rhbz 951241)
-- Fix race in regulatory code (rhbz 919176)
-
-* Mon Apr 15 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix debug patches to build on s390x/ppc
+* Mon Jun 2 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor ARM MMC config updates
-* Mon Apr 15 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc7.git0.1
-- Linux v3.9-rc7
+* Mon Jun 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc8.git0.1
+- Linux v3.15-rc8
- Disable debugging options.
-* Fri Apr 12 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable CONFIG_LDM_PARTITION (rhbz 948636)
+* Sat May 31 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc7.git4.2
+- Add patch to fix dentry lockdep splat
-* Fri Apr 12 2013 Justin M. Forbes <jforbes@redhat.com>
-- Fix forcedeth DMA check error (rhbz 928024)
+* Sat May 31 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc7.git4.1
+- Linux v3.15-rc7-102-g1487385edb55
-* Thu Apr 11 2013 Dave Jones <davej@redhat.com>
-- Print out some extra debug information when we hit bad page tables.
+* Fri May 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc7.git3.1
+- Linux v3.15-rc7-79-gfe45736f4134
+- Disable CARL9170 on ppc64le
-* Thu Apr 11 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc6.git2.1
-- Linux v3.9-rc6-115-g7ee32a6
-- libsas: use right function to alloc smp response (rhbz 949875)
+* Thu May 29 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-3917 DoS with syscall auditing (rhbz 1102571 1102715)
-* Tue Apr 09 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc6.git1.1
-- Linux v3.9-rc6-36-ge8f2b54
+* Wed May 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc7.git2.1
+- Linux v3.15-rc7-53-g4efdedca9326
+
+* Wed May 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc7.git1.1
+- Linux v3.15-rc7-40-gcd79bde29f00
- Reenable debugging options.
-* Tue Apr 9 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch to fix building some ARM tegra modules
-- Some minor ARM OMAP updates
+* Mon May 26 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc7.git0.1
+- Linux v3.15-rc7
+- Disable debugging options.
+
+* Sun May 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc6.git1.1
+- Linux v3.15-rc6-213-gdb1003f23189
+- Reenable debugging options.
-* Mon Apr 08 2013 Neil Horman <nhorman@redhat.com>
-- Fix dma unmap error in e100 (rhbz 907694)
+* Thu May 22 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable CONFIG_R8723AU (rhbz 1100162)
-* Mon Apr 08 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc6.git0.1
+* Thu May 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc6.git0.1
+- Linux v3.15-rc6
- Disable debugging options.
-- Linux-3.9-rc6
-* Thu Apr 04 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc5.git3.1
-- Linux v3.9-rc5-183-g22d1e6f
+* Wed May 21 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git4.1
+- Linux v3.15-rc5-270-gfba69f042ad9
-* Wed Apr 03 2013 Dave Jones <davej@redhat.com>
-- Enable MTD_CHAR/MTD_BLOCK (Needed for SFC)
- Enable 10gigE on 64-bit only.
+* Tue May 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git3.1
+- Linux v3.15-rc5-157-g60b5f90d0fac
-* Wed Apr 03 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc5.git2.1
-- Linux v3.9-rc5-146-gda241ef
+* Mon May 19 2014 Dan Horák <dan@danny.cz>
+- kernel metapackage shouldn't depend on subpackages we don't build
-* Wed Apr 3 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add upstream usb-next OMAP patch to fix usb on omap/mvebu
+* Thu May 15 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git2.9
+- Fix build fail on s390x
-* Tue Apr 02 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable CONFIG_FB_MATROX_G on powerpc
+* Wed May 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git2.8
+- Enable autoprov for kernel module Provides (rhbz 1058331)
+- Enable xz compressed modules (from Kyle McMartin)
-* Tue Apr 02 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc5.git1.1
-- Linux v3.9-rc5-108-g118c9a4
-- Reenable debugging options.
+* Tue May 13 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Don't try and merge local config changes on arches we aren't building
-* Tue Apr 02 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable CONFIG_SCSI_DMX3191D (rhbz 919874)
+* Tue May 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git2.1
+- Linux v3.15-rc5-77-g14186fea0cb0
-* Mon Apr 01 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable CONFIG_MCE_INJECT (rhbz 927353)
+* Mon May 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git1.1
+- Linux v3.15-rc5-9-g7e338c9991ec
+- Reenable debugging options.
-* Mon Apr 01 2013 Justin M. Forbes <jforbes@redhat.com> - 3.9.0-0.rc5.git0.1
+* Sat May 10 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable Marvell Dove support
+- Minor ARM cleanups
+- Disable some unneed drivers on ARM
+
+* Sat May 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc5.git0.1
+- Linux v3.15-rc5
- Disable debugging options.
-- Linux v3.9-rc5
-- fix htmldoc build for 8250 rename. Patch from Kyle McMartin
-* Mon Apr 1 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM LPAE updates
+* Fri May 09 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Move isofs to kernel-core
-* Sun Mar 31 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Make tegra inherit armv7-generic, fix and re-enable tegra
-- Enable SPI on ARM
-- Drop config-arm-generic
-- ARM config updates
+* Fri May 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc4.git4.1
+- Linux v3.15-rc4-320-gafcf0a2d9289
-* Thu Mar 28 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM unified config for OMAP
+* Thu May 08 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc4.git3.1
+- Linux v3.15-rc4-298-g9f1eb57dc706
-* Tue Mar 26 2013 Justin M. Forbes <jforbes@redhat.com>
-- Fix child thread introspection of of /proc/self/exe (rhbz 927469)
+* Wed May 07 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc4.git2.1
+- Linux v3.15-rc4-260-g38583f095c5a
-* Tue Mar 26 2013 Dave Jones <davej@redhat.com>
-- Enable CONFIG_DM_CACHE (rhbz 924325)
+* Tue May 06 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc4.git1.1
+- Linux v3.15-rc4-202-g30321c7b658a
+- Reenable debugging options.
-* Tue Mar 26 2013 Josh Boyer <jwboyer@redhat.com>
-- Add quirk for Realtek card reader to avoid 10 sec boot delay (rhbz 806587)
-- Add quirk for MSI keyboard backlight to avoid 10 sec boot delay (rhbz 907221)
+* Mon May 5 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Fix some USB on ARM LPAE kernels
-* Mon Mar 25 2013 Justin M. Forbes <jforbes@redhat.com>
-- disable whci-hcd since it doesnt seem to have users (rhbz 919289)
+* Mon May 05 2014 Kyle McMartin <kyle@fedoraproject.org>
+- Install arch/arm/include/asm/xen headers on aarch64, since the headers in
+ arch/arm64/include/asm/xen reference them.
-* Sun Mar 24 2013 Dave Jones <davej@redhat.com> -3.9.0-0.rc4.git0.1
-- Linux 3.9-rc4
- merged: drm-i915-bounds-check-execbuffer-relocation-count.patch
+* Mon May 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc4.git0.1
+- Linux v3.15-rc4
+- Disable debugging options.
-* Sun Mar 24 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM config for OMAP/mvebu/lpae
+* Mon May 5 2014 Hans de Goede <hdegoede@redhat.com>
+- Add use_native_brightness quirk for the ThinkPad T530 (rhbz 1089545)
-* Fri Mar 22 2013 Dave Jones <davej@redhat.com>
-- Fix calculation of current frequency in intel_pstate driver. (rhbz 923942)
-- Add missing build-req for perl-Carp
+* Sun May 4 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- General minor ARM cleanups
-* Thu Mar 21 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix workqueue crash in mac80211 (rhbz 920218)
+* Sun May 04 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix k-m-e requires on k-m-uname-r provides
+- ONE MORE TIME WITH FEELING
-* Thu Mar 21 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc3.git1.1
-- Linux v3.9-rc3-148-g2ffdd7e
-- Fixes CVE-2013-1796, CVE-2013-1797, CVE-2013-1798 in kvm.
+* Sat May 3 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Disable OMAP-3 boards (use DT) and some minor omap3 config updates
-* Wed Mar 20 2013 Dave Jones <davej@redhat.com>
-- Enable CONFIG_DM_DELAY (rhbz 923721)
+* Sat May 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git5.1
+- Linux v3.15-rc3-159-g6c6ca9c2a5b9
-* Tue Mar 19 2013 Dave Jones <davej@redhat.com> - 3.9.0-0.rc3.git0.5
-- Reenable debugging options.
+* Sat May 03 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix HID rmi driver from Benjamin Tissoires (rhbz 1090161)
-* Tue Mar 19 2013 Dave Jones <davej@redhat.com>
-- cpufreq/intel_pstate: Add function to check that all MSR's are valid (rhbz 922923)
+* Sat May 03 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix up Provides on kernel-module variant packages
+- Enable CONFIG_USB_UAS unconditionally per Hans
-* Mon Mar 18 2013 Dave Jones <davej@redhat.com> - 3.9.0-0.rc3.git0.4
-- s390x config option changes from Dan Horák <dan@danny.cz>
- - enable PCI
- - disable few useless drivers
- - disable drivers conflicting with s390x
+* Fri May 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git4.1
+- Linux v3.15-rc3-121-gb7270cce7db7
-* Mon Mar 18 2013 Dave Jones <davej@redhat.com> - 3.9.0-0.rc3.git0.3
-- Linux v3.9-rc3
- merged: w1-fix-oops-when-w1_search-is-called-from.patch
-- Disable debugging options.
+* Thu May 01 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Rename kernel-drivers to kernel-modules
+- Add kernel metapackages for all flavors, not just debug
-* Sun Mar 17 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Merge OMAP support into ARM unified kernel
-- Add ARM LPAE kernel for Cortex A-15 devices that support LPAE and HW virtualisation
-- Unified ARM kernel provides highbank and OMAP support
-- Drop remantents of ARM softfp kernels
+* Thu May 1 2014 Hans de Goede <hdegoede@redhat.com>
+- Add use_native_backlight quirk for 4 laptops (rhbz 983342 1093120)
-* Fri Mar 15 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix divide by zero on host TSC calibration failure (rhbz 859282)
+* Wed Apr 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git3.1
+- Linux v3.15-rc3-82-g8aa9e85adac6
-* Fri Mar 15 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc2.git1.1
-- Linux v3.9-rc2-292-ga2362d2
-- Fixes CVE-2013-1860 kernel: usb: cdc-wdm buffer overflow triggered by device
+* Wed Apr 30 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add kernel-debug metapackage when debugbuildsenabled is set
-* Thu Mar 14 2013 Dave Jones <davej@redhat.com>
-- Move cpufreq drivers to be modular (rhbz 746372)
+* Wed Apr 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git2.1
+- Linux v3.15-rc3-62-ged8c37e158cb
+- Drop noarch from ExclusiveArch. Nothing is built as noarch
-* Wed Mar 13 2013 Dave Jones <davej@redhat.com> - 3.9.0-0.rc2.git0.3
-- Reenable debugging options.
+* Tue Apr 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git1.10
+- Make depmod call fatal if it errors or warns
-* Tue Mar 12 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to fix ieee80211_do_stop (rhbz 892599)
-- Add patches to fix cfg80211 issues with suspend (rhbz 856863)
-- CVE-2013-0913 drm/i915: head writing overflow (rhbz 920471 920529)
-- CVE-2013-0914 sa_restorer information leak (rhbz 920499 920510)
+* Tue Apr 29 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Introduce kernel-core/kernel-drivers split for F21 Feature work
-* Tue Mar 12 2013 Dave Airlie <airlied@redhat.com>
-- add QXL driver (f19 only)
+* Tue Apr 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git1.1
+- Linux v3.15-rc3-41-g2aafe1a4d451
+- Reenable debugging options.
-* Mon Mar 11 2013 Dave Jones <davej@redhat.com> - 3.9.0-0.rc2.git0.2
+* Mon Apr 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc3.git0.1
+- Linux v3.15-rc3
- Disable debugging options.
-* Mon Mar 11 2013 Dave Jones <davej@redhat.com>
-- Linux 3.9-rc2
+* Fri Apr 25 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Drop obsolete ARM LPAE patches
+
+* Fri Apr 25 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch from Will Woods to fix fanotify EOVERFLOW issue (rhbz 696821)
+- Fix ACPI issue preventing boot on AMI firmware (rhbz 1090746)
-* Mon Mar 11 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to allow "8250." prefix to keep working (rhbz 911771)
-- Add patch to fix w1_search oops (rhbz 857954)
+* Fri Apr 25 2014 Hans de Goede <hdegoede@redhat.com>
+- Add synaptics min-max quirk for ThinkPad Edge E431 (rhbz#1089689)
-* Sun Mar 10 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc1.git2.1
-- Linux v3.9-rc1-278-g8343bce
+* Fri Apr 25 2014 Hans de Goede <hdegoede@redhat.com>
+- Add a patch to add support for the mmc controller on sunxi ARM SoCs
-* Sun Mar 10 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Enable Xilinx Zynq
-- Enable highbank cpufreq driver
+* Thu Apr 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc2.git3.1
+- Linux v3.15-rc2-107-g76429f1dedbc
-* Fri Mar 08 2013 Josh Boyer <jwboyer@redhat.com>
-- Add turbostat and x86_engery_perf_policy debuginfo to kernel-tools-debuginfo
+* Wed Apr 23 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc2.git2.1
+- Linux v3.15-rc2-69-g1aae31c8306e
-* Fri Mar 08 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc1.git1.1
-- Linux v3.9-rc1-211-g47b3bc9
+* Tue Apr 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc2.git1.1
+- Linux v3.15-rc2-42-g4d0fa8a0f012
- Reenable debugging options.
-- CVE-2013-1828 sctp: SCTP_GET_ASSOC_STATS stack buffer overflow (rhbz 919315 919316)
-* Thu Mar 07 2013 Josh Boyer <jwboyer@redhat.com>
-- CVE-2013-1792 keys: race condition in install_user_keyrings (rhbz 916646 919021)
+* Tue Apr 22 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix Synaptics touchscreens and HID rmi driver (rhbz 1089583)
-* Wed Mar 06 2013 Josh Boyer <jwboyer@redhat.com>
-- Adjust secure-boot patchset to work with boot_params sanitizing
-- Don't clear efi_info in boot_params (rhbz 918408)
+* Mon Apr 21 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc2.git0.1
+- Linux v3.15-rc2
+- Disable debugging options.
-* Wed Mar 06 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM mvebu config
+* Fri Apr 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc1.git4.1
+- Linux v3.15-rc1-137-g81cef0fe19e0
-* Wed Mar 06 2013 Dave Jones <davej@redhat.com>
-- drop acpi debugging patch.
+* Thu Apr 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc1.git3.1
+- Linux v3.15-rc1-113-g6ca2a88ad820
+- Build perf with unwind support via libdw (rhbz 1025603)
-* Wed Mar 06 2013 Justin M. Forbes <jforbes@redhat.com>
-- Remove Ricoh multifunction DMAR patch as it's no longer needed (rhbz 880051)
+* Thu Apr 17 2014 Hans de Goede <hdegoede@redhat.com>
+- Update min/max quirk patch to add a quirk for the ThinkPad L540 (rhbz1088588)
-* Tue Mar 05 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc1.git0.3
-- Fix intel_pstate init error path (rhbz 916833)
+* Thu Apr 17 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Drop OMAP DRM hack to load encoder module now it fully supports DT (YAY!)
-* Tue Mar 5 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Temporarily disable tegra until we get a fix from upstream
+* Wed Apr 16 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc1.git2.1
+- Linux v3.15-rc1-49-g10ec34fcb100
-* Tue Mar 05 2013 Josh Boyer <jwboyer@redhat.com>
-- Add 3 fixes for efi issues (rhbz 917984)
-- Enable CONFIG_IP6_NF_TARGET_MASQUERADE
+* Tue Apr 15 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc1.git1.1
+- Linux v3.15-rc1-12-g55101e2d6ce1
+- Reenable debugging options.
-* Mon Mar 04 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc1.git0.1
-- Linux v3.9-rc1
-- Add patch from Dirk Brandewie to fix intel pstate divide error (rhbz 916833)
+* Mon Apr 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc1.git0.1
+- Linux v3.15-rc1
- Disable debugging options.
+- Turn SLUB_DEBUG off
+
+* Mon Apr 14 2014 Hans de Goede <hdegoede@redhat.com>
+- Add min/max quirks for various new Thinkpad touchpads (rhbz 1085582 1085697)
-* Mon Mar 4 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update vexpress and omap options (fix MMC on qemu, hopefully fix OMAP3)
+* Mon Apr 14 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Minor ARM config changes and cleanups for 3.15 merge window
-* Sun Mar 03 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git15.1
-- Linux v3.8-10734-ga7c1120
+* Mon Apr 14 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-2851 net ipv4 ping refcount issue in ping_init_sock (rhbz 1086730 1087420)
-* Fri Mar 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git14.1
-- Linux v3.8-10206-gb0af9cd
+* Sun Apr 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git13.1
+- Linux v3.14-12812-g321d03c86732
-* Fri Mar 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git13.1
-- Linux v3.8-9761-gde1a226
+* Fri Apr 11 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git12.1
+- Linux v3.14-12380-g9e897e13bd46
+- Add queued urgent efi fixes (rhbz 1085349)
-* Thu Feb 28 2013 Kyle McMartin <kmcmarti@redhat.com>
-- Make iso9660 a module.
+* Thu Apr 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git11.1
+- Linux v3.14-12376-g4ba85265790b
-* Thu Feb 28 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git12.1
-- Linux v3.8-9633-g2a7d2b9
+* Thu Apr 10 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Backported HID RMI driver for Haswell Dell XPS machines from Benjamin Tissoires (rhbz 1048314)
-* Wed Feb 27 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Drop ARM kirkwood kernel
-- Enable SPI on ARM
-- General 3.9 updates
+* Wed Apr 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git10.1
+- Linux v3.14-12042-g69cd9eba3886
-* Wed Feb 27 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git11.1
-- Linux v3.8-9456-g309667e
+* Wed Apr 09 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-0155 KVM: BUG caused by invalid guest ioapic redirect table (rhbz 1081589 1085016)
-* Wed Feb 27 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git10.1
-- Linux v3.8-9405-gd895cb1
+* Thu Apr 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git9.1
+- Linux v3.14-7333-g59ecc26004e7
-* Tue Feb 26 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git9.1
-- Linux v3.8-9165-g1cef935
+* Thu Apr 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git8.1
+- Linux v3.14-7247-gcd6362befe4c
-* Tue Feb 26 2013 Kyle McMartin <kmcmarti@redhat.com>
-- Move VMXNET3 to config-x86-generic from config-generic, it's VMware
- virtual ethernet.
+* Wed Apr 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git7.1
+- Linux v3.14-5146-g0f1b1e6d73cb
-* Tue Feb 26 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git8.1
-- Linux v3.8-8664-gc41b381
+* Wed Apr 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git6.1
+- Linux v3.14-4600-g467cbd207abd
-* Tue Feb 26 2013 Kyle McMartin <kmcmarti@redhat.com>
-- Add blk_queue_physical_block_size and register_netdevice to the symbols
- used for initrd generation (synched from .el6)
-- ipr.ko driven SAS VRAID cards found on x86_64 machines these days, and not
- just on ppc64
+* Wed Apr 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git5.1
+- Linux v3.14-4555-gb33ce4429938
-* Tue Feb 26 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix vmalloc_fault oops during lazy MMU (rhbz 914737)
+* Wed Apr 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git4.1
+- Linux v3.14-4227-g3e75c6de1ac3
-* Mon Feb 25 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git7.1
-- Honor dmesg_restrict for /dev/kmsg (rhbz 903192)
-- Linux v3.8-7888-gab78265
+* Wed Apr 02 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git3.1
+- Linux v3.14-3893-gc12e69c6aaf7
-* Sun Feb 24 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git6.1
-- Linux v3.8-6988-g9e2d59a
+* Tue Apr 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git2.1
+- CVE-2014-2678 net: rds: deref of NULL dev in rds_iw_laddr_check (rhbz 1083274 1083280)
-* Sun Feb 24 2013 Josh Boyer <jwboyer@redhat.com>
-- CVE-2013-1763 sock_diag: out-of-bounds access to sock_diag_handlers (rhbz 915052,915057)
+* Tue Apr 01 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.14-751-g683b6c6f82a6
-* Fri Feb 22 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git5.1
-- Linux v3.8-6071-g8b5628a
+* Tue Apr 01 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.0-0.rc0.git1.1
+- Linux v3.14-313-g918d80a13643
+- Reenable debugging options.
+- Turn on SLUB_DEBUG
-* Fri Feb 22 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git4.1
-- Linux v3.8-6071-g8b5628a
-- Enable the rtl8192e driver (rhbz 913753)
+* Mon Mar 31 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-1
+- Linux v3.14
+- Disable debugging options.
-* Thu Feb 21 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git3.1
-- Linux v3.8-3195-g024e4ec
-- Shut up perf about missing build things we don't care about
-- Drop the old aic7xxx driver, from Paul Bolle
+* Mon Mar 31 2014 Hans de Goede <hdegoede@redhat.com>
+- Fix clicks getting lost with cypress_ps2 touchpads with recent
+ xorg-x11-drv-synaptics versions (bfdo#76341)
-* Thu Feb 21 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git2.1
-- Linux v3.8-3040-ga0b1c42
+* Fri Mar 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc8.git1.1
+- CVE-2014-2580 xen: netback crash trying to disable due to malformed packet (rhbz 1080084 1080086)
+- CVE-2014-0077 vhost-net: insufficent big packet handling in handle_rx (rhbz 1064440 1081504)
+- CVE-2014-0055 vhost-net: insufficent error handling in get_rx_bufs (rhbz 1062577 1081503)
+- CVE-2014-2568 net: potential info leak when ubuf backed skbs are zero copied (rhbz 1079012 1079013)
-* Thu Feb 21 2013 Josh Boyer <jwboyer@redhat.com> - 3.9.0-0.rc0.git1.1
-- Linux v3.8-523-gece8e0b
+* Fri Mar 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.14-rc8-12-g75c5a52
- Reenable debugging options.
-* Tue Feb 19 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-2
-- Add pekey support from David Howells and rework secure-boot patchset on top
-- Add support for Atheros 04ca:3004 bluetooth devices (rhbz 844750)
-- Backport support for newer ALPS touchpads (rhbz 812111)
-- Enable CONFIG_AUDIT_LOGINUID_IMMUTABLE
+* Fri Mar 28 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable Tegra 114/124 SoCs
+- Re-enable OMAP cpufreq
+- Re-enable CPSW PTP option
+
+* Thu Mar 27 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Switch to CONFIG_TRANSPARENT_HUGEPAGE_MADVISE instead of always on
-* Tue Feb 19 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-1
-- Linux v3.8
-- Fix build with CONFIG_EFI disabled, reported by Peter Bowey (rhbz 911833)
+* Tue Mar 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc8.git0.1
+- Linux v3.14-rc8
- Disable debugging options.
-* Mon Feb 18 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc7.git4.1
-- Linux v3.8-rc7-93-gf741656
+* Mon Mar 24 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Update some generic ARM config options
+- Build in TPS65217 for ARM non lpae kernels (fixes BBW booting)
-* Thu Feb 14 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc7.git3.1
-- Linux v3.8-rc7-73-g323a72d
+* Fri Mar 21 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc7.git2.1
+- Linux v3.14-rc7-59-g08edb33
-* Thu Feb 14 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to fix corruption on newer M6116 SATA bridges (rhbz 909591)
-- CVE-2013-0228 xen: xen_iret() invalid %ds local DoS (rhbz 910848 906309)
+* Wed Mar 19 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc7.git1.1
+- Linux v3.14-rc7-26-g4907cdc
+- Reenable debugging options.
-* Wed Feb 13 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Disable tegra30
+* Tue Mar 18 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable TEGRA_FBDEV (rhbz 1073960)
-* Wed Feb 13 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc7.git2.1
-- Linux v3.8-rc7-32-gecf223f
+* Mon Mar 17 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add bootwrapper for ppc64le
-* Tue Feb 12 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch to create a convenient mount point for pstore (rhbz 910126)
+* Mon Mar 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc7.git0.1
+- Linux v3.14-rc7
+- Disable debugging options.
-* Tue Feb 12 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc7.git1.1
-- Linux v3.8-rc7-6-g211b0cd
-- Reenable debugging options.
+* Mon Mar 17 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Build in Palmas regulator on ARM to fix ext MMC boot on OMAP5
-* Mon Feb 11 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch from Kees Cook to restrict MSR writting in secure boot mode
-- Build PATA_MACIO in on powerpc (rhbz 831361)
+* Fri Mar 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc6.git4.1
+- Linux v3.14-rc6-133-gc60f7d5
-* Fri Feb 08 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc7.git0.1
-- Linux v3.8-rc7
-- Add patch to fix atomic sleep issue on alloc_pid failure (rhbz 894623)
-- Disable debugging options.
+* Thu Mar 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc6.git3.1
+- Linux v3.14-rc6-41-gac9dc67
+
+* Wed Mar 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc6.git2.1
+- Fix locking issue in iwldvm (rhbz 1046495)
+- Linux v3.14-rc6-26-g33807f4
+
+* Wed Mar 12 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Add some general missing ARM drivers (mostly sound)
+- ARM config tweaks and cleanups
+- Update i.MX6 dtb
+
+* Tue Mar 11 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc6.git1.1
+- CVE-2014-2309 ipv6: crash due to router advertisment flooding (rhbz 1074471 1075064)
+- Linux v3.14-rc6-17-g8712a00
+- Reenable debugging options.
-* Thu Feb 7 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Minor ARM build fixes
+* Mon Mar 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc6.git0.1
+- Linux v3.14-rc6
+- Disable debugging options.
-* Wed Feb 06 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git3.3
-- Enable CONFIG_NAMESPACES everywhere (rhbz 907576)
-- Add patch to fix ath9k dma stop checks (rhbz 892811)
+* Fri Mar 07 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Revert two xhci fixes that break USB mass storage (rhbz 1073180)
-* Wed Feb 06 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git3.1
-- Linux v3.8-rc6-98-g1589a3e
-- Add patch to honor MokSBState (rhbz 907406)
+* Thu Mar 06 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix stale EC events on Samsung systems (rhbz 1003602)
+- Add ppc64le support from Brent Baude (rhbz 1073102)
+- Fix depmod error message from hci_vhci module (rhbz 1051748)
+- Fix bogus WARN in iwlwifi (rhbz 1071998)
-* Tue Feb 05 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git2.1
-- Linux v3.8-rc6-62-gfe547d7
-- Enable CONFIG_DRM_VMWGFX_FBCON (rhbz 907620)
-- Enable CONFIG_DETECT_HUNG_TASK
+* Wed Mar 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc5.git2.1
+- Linux v3.14-rc5-185-gc3bebc7
-* Mon Feb 04 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git1.1
-- Linux v3.8-rc6-22-g6edacf0
-- Enable CONFIG_EXT4_DEBUG
-- Fix rtlwifi scheduling while atomic from Larry Finger (rhbz 903881)
+* Tue Mar 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc5.git1.1
+- Linux v3.14-rc5-43-g0c0bd34
+- Reenable debugging options.
-* Fri Feb 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git0.1
-- Linux v3.8-rc6
-- Enable CONFIG_DMA_API_DEBUG
-- Add patches to improve mac80211 latency and throughput (rhbz 830151)
+* Mon Mar 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc5.git0.1
+- Linux v3.14-rc5
+- Disable debugging options.
-* Thu Jan 31 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git3.1
-- Linux v3.8-rc5-245-g04c2eee
-- Enable CONFIG_DEBUG_STACK_USAGE
+* Fri Feb 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc4.git3.1
+- Linux v3.14-rc4-78-gd8efcf3
-* Wed Jan 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git2.1
-- Linux v3.8-rc5-218-ga56e160
-- Enable NAMESPACES and CHECKPOINT_RESTORE on x86_64 for F19 CRIU feature
-- Enable CONFIG_DEBUG_ATOMIC_SLEEP
+* Fri Feb 28 2014 Kyle McMartin <kyle@fedoraproject.org>
+- Enable appropriate CONFIG_XZ_DEC_$arch options to ensure we can mount
+ squashfs images on supported architectures.
-* Tue Jan 29 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git1.1
-- Linux v3.8-rc5-150-g6abb7c2
+* Fri Feb 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-0102 keyctl_link can be used to cause an oops (rhbz 1071396)
-* Tue Jan 29 2013 Josh Boyer <jwboyer@redhat.com>
-- Backport driver for Cypress PS/2 trackpad (rhbz 799564)
+* Thu Feb 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc4.git2.1
+- Linux v3.14-rc4-45-gd2a0476
-* Mon Jan 28 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git0.1
-- Linux v3.8-rc5
-- Add patches to fix issues with iwlwifi (rhbz 863424)
-- Enable CONFIG_PROVE_RCU
+* Wed Feb 26 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc4.git1.1
+- Linux v3.14-rc4-34-g6dba6ec
+- Reenable debugging options.
-* Sun Jan 27 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Reenable perf on ARM (was suppose to be temporary)
-- Build and package dtbs on ARM
-- Enable FB options for qemu vexpress on unified
+* Wed Feb 26 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Re-enable KVM on aarch64 now it builds again
-* Fri Jan 25 2013 Kyle McMartin <kmcmarti@redhat.com>
-- Sign all modules with the mod-extra-sign.sh script, ensures nothing gets
- missed because of .config differences between invocations of BuildKernel.
+* Tue Feb 25 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix mounting issues on cifs (rhbz 1068862)
-* Fri Jan 25 2013 Justin M. Forbes <jforbes@redhat.com>
-- Turn off THP for 32bit
+* Mon Feb 24 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix lockdep issue in EHCI when using threaded IRQs (rhbz 1056170)
-* Fri Jan 25 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git5.1
-- Linux v3.8-rc4-277-g66e2d3e
-- Enable slub debug
+* Mon Feb 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc4.git0.1
+- Linux v3.14-rc4
+- Disable debugging options.
-* Thu Jan 24 2013 Josh Boyer <jwboyer@redhat.com>
-- Update secure-boot patchset
+* Thu Feb 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc3.git5.1
+- Linux v3.14-rc3-219-gd158fc7
-* Thu Jan 24 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git4.1
-- Linux v3.8-rc4-183-gff7532c
-- Enable lockdep
+* Thu Feb 20 2014 Kyle McMartin <kyle@fedoraproject.org>
+- armv7: disable CONFIG_DEBUG_SET_MODULE_RONX until debugged (rhbz#1067113)
-* Wed Jan 23 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git3.1
-- Linux v3.8-rc4-139-g1d85490
-- Enable debug spinlocks
+* Thu Feb 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc3.git4.1
+- Linux v3.14-rc3-184-ge95003c
-* Wed Jan 23 2013 Dave Jones <davej@redhat.com>
-- Remove warnings about empty IPI masks.
+* Wed Feb 19 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc3.git3.1
+- Linux v3.14-rc3-168-g960dfc4
-* Sun Jan 20 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Remove obsolete ARM configs
-- Update OMAP config for TI AM35XX SoCs
-- Add patch to fix versatile build failure
+* Tue Feb 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc3.git2.1
+- Linux v3.14-rc3-43-g805937c
-* Sat Jan 19 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git1.1
-- Linux v3.8-rc4-42-g5da1f88
+* Tue Feb 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc3.git1.1
+- Linux v3.14-rc3-20-g60f76ea
+- Reenable debugging options.
+- Fix r8169 ethernet after suspend (rhbz 1054408)
+- Enable INTEL_MIC drivers (rhbz 1064086)
-* Fri Jan 18 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git0.1
-- Linux v3.8-rc4
+* Mon Feb 17 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc3.git0.1
+- Linux v3.14-rc3
- Disable debugging options.
+- Enable CONFIG_PPC_DENORMALIZATION (from Tony Breeds)
+
+* Fri Feb 14 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc2.git4.1
+- Linux v3.14-rc2-342-g5e57dc8
+- CVE-2014-0069 cifs: incorrect handling of bogus user pointers (rhbz 1064253 1062578)
+
+* Thu Feb 13 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc2.git3.1
+- Linux v3.14-rc2-271-g4675348
-* Fri Jan 18 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Disable problematic PL310 ARM errata
-- Minor ARM config tweaks
-- OMAP DRM driver to fix OMAP kernel build
+* Wed Feb 12 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc2.git2.1
+- Linux v3.14-rc2-267-g9398a10
-* Wed Jan 16 2013 Josh Boyer <jwboyer@redhat.com>
-- Fix power management sysfs on non-secure boot machines (rhbz 896243)
+* Wed Feb 12 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Fix cgroup destroy oops (rhbz 1045755)
+- Fix backtrace in amd_e400_idle (rhbz 1031296)
-* Wed Jan 16 2013 Dave Jones <davej@redhat.com>
-- Experiment: Double the length of the brcmsmac transmit timeout.
+* Tue Feb 11 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc2.git1.1
+- Linux v3.14-rc2-26-g6792dfe
+- Reenable debugging options.
-* Wed Jan 16 2013 Josh Boyer <jwboyer@redhat.com>
-- Add patch from Stanislaw Gruszka to fix iwlegacy IBSS cleanup (rhbz 886946)
+* Mon Feb 10 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc2.git0.1
+- Linux v3.14-rc2
+- Disable debugging options.
-* Tue Jan 15 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git2.1
-- Linux v3.8-rc3-293-g406089d
+* Sun Feb 9 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable CMA on aarch64
+- Disable KVM temporarily on aarch64
+- Minor ARM config updates and cleanups
-* Tue Jan 15 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable CONFIG_DVB_USB_V2 (rhbz 895460)
+* Sun Feb 09 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git5.1.1
+- Linux v3.14-rc1-182-g4944790
-* Mon Jan 14 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable Orinoco drivers in kernel-modules-extra (rhbz 894069)
+* Sat Feb 08 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git4.1
+- Linux v3.14-rc1-150-g34a9bff
-* Mon Jan 14 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git1.1
-- Linux v3.8-rc3-74-gb719f43
+* Fri Feb 07 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git3.1
+- Linux v3.14-rc1-86-g9343224
-* Fri Jan 11 2013 Josh Boyer <jwboyer@redhat.com>
-- Update secure-boot patchset
+* Thu Feb 06 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git2.1
+- Linux v3.14-rc1-54-gef42c58
-* Thu Jan 10 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git0.2
-- Reenable debugging options.
+* Wed Feb 05 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git1.1
+- Linux v3.14-rc1-13-g878a876
-* Thu Jan 10 2013 Dave Jones <davej@redhat.com>
-- Drop old Montevina era E1000 workaround.
+* Tue Feb 04 2014 Kyle McMartin <kyle@fedoraproject.org>
+- Fix %all_arch_configs on aarch64.
-* Thu Jan 10 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git0.1
-- Linux v3.8-rc3
+* Tue Feb 04 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git0.2
+- Add NUMA oops patches
+- Reenable debugging options.
+
+* Mon Feb 03 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc1.git0.1
+- Linux v3.14-rc1
- Disable debugging options.
+- Disable Xen on ARM temporarily as it doesn't build
-* Wed Jan 09 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git4.1
-- Linux v3.8-rc2-370-g57a0c1e
+* Mon Feb 3 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Re-enable modular Tegra DRM driver
+- Add SD driver for ZYNQ SoCs
-* Wed Jan 9 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM mvebu config
+* Fri Jan 31 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git19.1
+- Linux v3.13-10637-ge7651b8
+- Enable ZRAM/ZSMALLOC (rhbz 1058072)
+- Turn EXYNOS_HDMI back on now that it should build
-* Wed Jan 09 2013 Josh Boyer <jwboyer@redhat.com>
-- Enable CONFIG_CIFS_DEBUG as it was on before it was split out
+* Thu Jan 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git18.1
+- Linux v3.13-10231-g53d8ab2
-* Tue Jan 08 2013 Kyle McMartin <kmcmarti@redhat.com>
-- Ensure modules are signed even if *-debuginfo rpms are not produced by
- re-defining __spec_install_post and adding a hook after all strip
- invocations. Ideally, in the future, we could patch the rpm macro and
- remove the re-define from kernel.spec, but that's another windmill to tilt
- at.
+* Thu Jan 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git17.1
+- Linux v3.13-10094-g9b0cd30
+- Add patches to fix imx-hdmi build, and fix kernfs lockdep oops (rhbz 1055105)
-* Tue Jan 08 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git3.1
-- Linux v3.8-rc2-222-g2a893f9
+* Thu Jan 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git16.1
+- Linux v3.13-9240-g1329311
-* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git2.1
-- Linux v3.8-rc2-191-gd287b87
-- remove the namei-include.patch, it's upstream now
+* Wed Jan 29 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git15.1
+- Linux v3.13-9218-g0e47c96
-* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git1.2
-- Reenable debugging options.
+* Tue Jan 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git14.1
+- Linux v3.13-8905-g627f4b3
-* Mon Jan 7 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Further ARM config updates
-- Add patch to fix building omapdrm
+* Tue Jan 28 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git13.1
+- Linux v3.13-8789-g54c0a4b
+- Enable CONFIG_CC_STACKPROTECTOR_STRONG on x86
-* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com>
-- Bye sparc
+* Mon Jan 27 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Build AllWinner (sunxi) on LPAE too (Cortex-A7 supports LPAE/KVM)
-* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com>
-- Fix up configs for build
+* Mon Jan 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git12.1
+- Linux v3.13-8631-gba635f8
-* Mon Jan 07 2013 Josh Boyer <jwboyer@redhat.com>
-- Patch to fix efivarfs underflow from Lingzhu Xiang (rhbz 888163)
+* Mon Jan 27 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git11.1
+- Linux v3.13-8598-g77d143d
-* Sat Jan 5 2013 Peter Robinson <pbrobinson@fedoraproject.org>
-- Initial update of ARM configs for 3.8
-- Enable DRM driver for tegra
-- Drop separate imx kernel. Will be reintroduced soon in unified
+* Sat Jan 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git10.1
+- Linux v3.13-8330-g4ba9920
-* Fri Jan 04 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git1.1
-- Linux v3.8-rc2-116-g5f243b9
+* Sat Jan 25 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git9.1
+- Linux v3.13-6058-g2d08cd0
+- Quiet incorrect usb phy error (rhbz 1057529)
-* Thu Jan 03 2013 Justin M. Forbes <jforbes@redhat.com>
-- Initial 3.8-rc2 rebase
+* Sat Jan 25 2014 Ville Skyttä <ville.skytta@iki.fi>
+- Own the /lib/modules dir.
-* Wed Jan 02 2013 Josh Boyer <jwboyer@redhat.com>
-- BR the hostname package (rhbz 886113)
+* Sat Jan 25 2014 Peter Robinson <pbrobinson@fedoraproject.org>
+- Initial ARM config updates for 3.14
+- Disable highbank cpuidle driver
+- Enable mtd-nand drivers on ARM
+- Update CPU thermal scaling options for ARM
-* Tue Dec 18 2012 Dave Jones <davej@redhat.com>
-- On rebases, list new config options.
- (Revert to pre-18 behaviour)
+* Fri Jan 24 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git8.1
+- Linux v3.13-5617-g3aacd62
-* Mon Dec 17 2012 Josh Boyer <jwboyer@redhat.com>
-- Fix oops in sony-laptop setup (rhbz 873107)
+* Thu Jan 23 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git7.1
+- Linux v3.13-4156-g90804ed
-* Fri Dec 14 2012 Peter Robinson <pbrobinson@fedoraproject.org>
-- Add patch to fix arm imx drm driver build
+* Thu Jan 23 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git6.1.1
+- Revert fsnotify changes as they cause slab corruption for multiple people
+- Linux v3.13-3995-g0dc3fd0
-* Wed Dec 12 2012 Josh Boyer <jwboyer@redhat.com>
-- Fix infinite loop in efi signature parser
-- Don't error out if db doesn't exist
+* Thu Jan 23 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git5.1
+- Linux v3.13-3667-ge1ba845
-* Tue Dec 11 2012 Peter Robinson <pbrobinson@fedoraproject.org>
-- Update ARM configs for latest 3.7
-- Drop highbank kernel build variant as its in unified kernel
+* Wed Jan 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git4.1
+- Linux v3.13-3477-gdf32e43
-* Tue Dec 11 2012 Josh Boyer <jwboyer@redhat.com>
-- Update secure boot patches to include MoK support
-- Fix IBSS scanning in mac80211 (rhbz 883414)
+* Wed Jan 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git3.1
+- Linux v3.13-3260-g03d11a0
-* Tue Dec 11 2012 Dave Jones <davej@redhat.com> - 3.7.0-2
-- Reenable debugging options.
+* Wed Jan 22 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git2.1
+- Linux v3.13-2502-gec513b1
+
+* Tue Jan 21 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.14.0-0.rc0.git1.1
+- Linux v3.13-737-g7fe67a1
+- Reenable debugging options. Enable SLUB_DEBUG
-* Tue Dec 11 2012 Dave Jones <davej@redhat.com> - 3.7.0-1
-- Linux v3.7
+* Mon Jan 20 2014 Kyle McMartin <kyle@fedoraproject.org>
+- Enable CONFIG_KVM on AArch64.
+* Mon Jan 20 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.13.0-1
+- Linux v3.13
+- Disable debugging options.
+- Use versioned perf man pages tarball
###
# The following Emacs magic makes C-c C-e use UTC dates.
# Local Variables:
diff --git a/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch b/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
new file mode 100644
index 000000000..5e2d79ec3
--- /dev/null
+++ b/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
@@ -0,0 +1,40 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 9 Aug 2013 03:33:56 -0400
+Subject: [PATCH] kexec: Disable at runtime if the kernel enforces module
+ loading restrictions
+
+kexec permits the loading and execution of arbitrary code in ring 0, which
+is something that module signing enforcement is meant to prevent. It makes
+sense to disable kexec in this situation.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ kernel/kexec.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/kernel/kexec.c b/kernel/kexec.c
+index 38c25b1f2fd5..f2b5272156ce 100644
+--- a/kernel/kexec.c
++++ b/kernel/kexec.c
+@@ -36,6 +36,7 @@
+ #include <linux/syscore_ops.h>
+ #include <linux/compiler.h>
+ #include <linux/hugetlb.h>
++#include <linux/module.h>
+
+ #include <asm/page.h>
+ #include <asm/uaccess.h>
+@@ -1247,6 +1248,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
+ return -EPERM;
+
+ /*
++ * kexec can be used to circumvent module loading restrictions, so
++ * prevent loading in that case
++ */
++ if (secure_modules())
++ return -EPERM;
++
++ /*
+ * Verify we have a legal set of flags
+ * This leaves us room for future extensions.
+ */
diff --git a/kexec-uefi-copy-secure_boot-flag-in-boot-params.patch b/kexec-uefi-copy-secure_boot-flag-in-boot-params.patch
new file mode 100644
index 000000000..e239ea908
--- /dev/null
+++ b/kexec-uefi-copy-secure_boot-flag-in-boot-params.patch
@@ -0,0 +1,30 @@
+From: Dave Young <dyoung@redhat.com>
+
+[PATCH] kexec/uefi: copy secure_boot flag in boot params across kexec reboot
+
+Kexec reboot in case secure boot being enabled does not keep the secure boot
+mode in new kernel, so later one can load unsigned kernel via legacy kexec_load.
+In this state, the system is missing the protections provided by secure boot.
+
+Adding a patch to fix this by retain the secure_boot flag in original kernel.
+
+secure_boot flag in boot_params is set in EFI stub, but kexec bypasses the stub.
+Fixing this issue by copying secure_boot flag across kexec reboot.
+
+Signed-off-by: Dave Young <dyoung@redhat.com>
+---
+ arch/x86/kernel/kexec-bzimage64.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c
+index 9642b9b..0539ec7 100644
+--- a/arch/x86/kernel/kexec-bzimage64.c
++++ b/arch/x86/kernel/kexec-bzimage64.c
+@@ -178,6 +178,7 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr,
+ if (efi_enabled(EFI_OLD_MEMMAP))
+ return 0;
+
++ params->secure_boot = boot_params.secure_boot;
+ ei->efi_loader_signature = current_ei->efi_loader_signature;
+ ei->efi_systab = current_ei->efi_systab;
+ ei->efi_systab_hi = current_ei->efi_systab_hi;
diff --git a/0001-lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch b/lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
index d25452268..199868bbb 100644
--- a/0001-lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
+++ b/lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
@@ -1,7 +1,3 @@
-Bugzilla: N/A
-Upstream-status: Nak'd, supposedly replacement coming to auto-select
-
-From 0f3f5c5b4ca2eb1f41947c50bedb9b17aa1a1f80 Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer@fedoraproject.org>
Date: Mon, 11 Nov 2013 08:39:16 -0500
Subject: [PATCH] lib/cpumask: Make CPUMASK_OFFSTACK usable without debug
@@ -14,16 +10,19 @@ operation of the feature, and we need CPUMASK_OFFSTACK to increase the
NR_CPUS value beyond 512 on x86. We drop the current dependency and make
sure SMP is set.
+Bugzilla: N/A
+Upstream-status: Nak'd, supposedly replacement coming to auto-select
+
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
---
lib/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/Kconfig b/lib/Kconfig
-index b3c8be0..50b47cd 100644
+index 87da53bb1fef..c767ba0cbab7 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
-@@ -342,7 +342,8 @@ config CHECK_SIGNATURE
+@@ -391,7 +391,8 @@ config CHECK_SIGNATURE
bool
config CPUMASK_OFFSTACK
@@ -33,6 +32,3 @@ index b3c8be0..50b47cd 100644
help
Use dynamic allocation for cpumask_var_t, instead of putting
them on the stack. This is a bit more expensive, but avoids
---
-1.8.3.1
-
diff --git a/lis3-improve-handling-of-null-rate.patch b/lis3-improve-handling-of-null-rate.patch
index 30ed26d80..022a95174 100644
--- a/lis3-improve-handling-of-null-rate.patch
+++ b/lis3-improve-handling-of-null-rate.patch
@@ -1,10 +1,6 @@
->From 56fb161a9ca0129f8e266e4dbe79346552ff8089 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89ric=20Piel?= <eric.piel@tremplin-utc.net>
Date: Thu, 3 Nov 2011 16:22:40 +0100
-Subject: [PATCH] lis3: Improve handling of null rate
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
+Subject: [PATCH] lis3: improve handling of null rate
When obtaining a rate of 0, we would disable the device supposely
because it seems to behave incorectly. It actually only comes from the
@@ -12,16 +8,19 @@ fact that the device is off and on lis3dc it's reflected in the rate.
So handle this nicely by just waiting a safe time, and then using the
device as normally.
+Bugzilla: 785814
+Upstream-status: ??
+
Signed-off-by: ??ric Piel <eric.piel@tremplin-utc.net>
---
- drivers/misc/lis3lv02d/lis3lv02d.c | 16 ++++++++--------
- 1 files changed, 8 insertions(+), 8 deletions(-)
+ drivers/misc/lis3lv02d/lis3lv02d.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c b/drivers/misc/lis3lv02d/lis3lv02d.c
-index 35c67e0..42dce2a 100644
+index 3ef4627f9cb1..2b2d2e8e5eeb 100644
--- a/drivers/misc/lis3lv02d/lis3lv02d.c
+++ b/drivers/misc/lis3lv02d/lis3lv02d.c
-@@ -188,7 +188,8 @@ static void lis3lv02d_get_xyz(struct lis3lv02d *lis3, int *x, int *y, int *z)
+@@ -216,7 +216,8 @@ static void lis3lv02d_get_xyz(struct lis3lv02d *lis3, int *x, int *y, int *z)
/* conversion btw sampling rate and the register values */
static int lis3_12_rates[4] = {40, 160, 640, 2560};
static int lis3_8_rates[2] = {100, 400};
@@ -31,7 +30,7 @@ index 35c67e0..42dce2a 100644
static int lis3_3dlh_rates[4] = {50, 100, 400, 1000};
/* ODR is Output Data Rate */
-@@ -202,12 +203,11 @@ static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
+@@ -231,12 +232,11 @@ static int lis3lv02d_get_odr(struct lis3lv02d *lis3)
return lis3->odrs[(ctrl >> shift)];
}
@@ -47,7 +46,7 @@ index 35c67e0..42dce2a 100644
/* LIS3 power on delay is quite long */
msleep(lis3->pwron_delay / div);
-@@ -274,7 +274,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
+@@ -303,7 +303,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
lis3->read(lis3, ctlreg, &reg);
lis3->write(lis3, ctlreg, (reg | selftest));
@@ -56,7 +55,7 @@ index 35c67e0..42dce2a 100644
if (ret)
goto fail;
-@@ -285,7 +285,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
+@@ -314,7 +314,7 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
/* back to normal settings */
lis3->write(lis3, ctlreg, reg);
@@ -65,8 +64,8 @@ index 35c67e0..42dce2a 100644
if (ret)
goto fail;
-@@ -397,7 +397,7 @@ int lis3lv02d_poweron(struct lis3lv02d *lis3)
- lis3->write(lis3, CTRL_REG2, reg);
+@@ -434,7 +434,7 @@ int lis3lv02d_poweron(struct lis3lv02d *lis3)
+ }
}
- err = lis3lv02d_get_pwron_wait(lis3);
@@ -74,6 +73,3 @@ index 35c67e0..42dce2a 100644
if (err)
return err;
---
-1.7.7.1
-
diff --git a/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch b/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch
new file mode 100644
index 000000000..c755534a0
--- /dev/null
+++ b/mmc-sdhci-fix-dma-memory-leak-in-sdhci_pre_req.patch
@@ -0,0 +1,203 @@
+From: Haibo Chen <haibo.chen@freescale.com>
+Date: Tue, 25 Aug 2015 10:02:11 +0800
+Subject: [PATCH] mmc: sdhci: fix dma memory leak in sdhci_pre_req()
+
+Currently one mrq->data maybe execute dma_map_sg() twice
+when mmc subsystem prepare over one new request, and the
+following log show up:
+ sdhci[sdhci_pre_dma_transfer] invalid cookie: 24, next-cookie 25
+
+In this condition, mrq->date map a dma-memory(1) in sdhci_pre_req
+for the first time, and map another dma-memory(2) in sdhci_prepare_data
+for the second time. But driver only unmap the dma-memory(2), and
+dma-memory(1) never unmapped, which cause the dma memory leak issue.
+
+This patch use another method to map the dma memory for the mrq->data
+which can fix this dma memory leak issue.
+
+Fixes: commit 348487cb28e66b0 ("mmc: sdhci: use pipeline mmc requests to improve performance")
+Cc: stable@vger.kernel.org # 4.0+
+Reported-and-tested-by: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Haibo Chen <haibo.chen@freescale.com>
+---
+ drivers/mmc/host/sdhci.c | 67 ++++++++++++++++++------------------------------
+ drivers/mmc/host/sdhci.h | 8 +++---
+ 2 files changed, 29 insertions(+), 46 deletions(-)
+
+diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
+index 1dbe932..ea10ebc 100644
+--- a/drivers/mmc/host/sdhci.c
++++ b/drivers/mmc/host/sdhci.c
+@@ -54,8 +54,7 @@ static void sdhci_finish_command(struct sdhci_host *);
+ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode);
+ static void sdhci_enable_preset_value(struct sdhci_host *host, bool enable);
+ static int sdhci_pre_dma_transfer(struct sdhci_host *host,
+- struct mmc_data *data,
+- struct sdhci_host_next *next);
++ struct mmc_data *data);
+ static int sdhci_do_get_cd(struct sdhci_host *host);
+
+ #ifdef CONFIG_PM
+@@ -496,7 +495,7 @@ static int sdhci_adma_table_pre(struct sdhci_host *host,
+ goto fail;
+ BUG_ON(host->align_addr & host->align_mask);
+
+- host->sg_count = sdhci_pre_dma_transfer(host, data, NULL);
++ host->sg_count = sdhci_pre_dma_transfer(host, data);
+ if (host->sg_count < 0)
+ goto unmap_align;
+
+@@ -635,9 +634,11 @@ static void sdhci_adma_table_post(struct sdhci_host *host,
+ }
+ }
+
+- if (!data->host_cookie)
++ if (data->host_cookie == COOKIE_MAPPED) {
+ dma_unmap_sg(mmc_dev(host->mmc), data->sg,
+ data->sg_len, direction);
++ data->host_cookie = COOKIE_UNMAPPED;
++ }
+ }
+
+ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd)
+@@ -833,7 +834,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
+ } else {
+ int sg_cnt;
+
+- sg_cnt = sdhci_pre_dma_transfer(host, data, NULL);
++ sg_cnt = sdhci_pre_dma_transfer(host, data);
+ if (sg_cnt <= 0) {
+ /*
+ * This only happens when someone fed
+@@ -949,11 +950,13 @@ static void sdhci_finish_data(struct sdhci_host *host)
+ if (host->flags & SDHCI_USE_ADMA)
+ sdhci_adma_table_post(host, data);
+ else {
+- if (!data->host_cookie)
++ if (data->host_cookie == COOKIE_MAPPED) {
+ dma_unmap_sg(mmc_dev(host->mmc),
+ data->sg, data->sg_len,
+ (data->flags & MMC_DATA_READ) ?
+ DMA_FROM_DEVICE : DMA_TO_DEVICE);
++ data->host_cookie = COOKIE_UNMAPPED;
++ }
+ }
+ }
+
+@@ -2097,49 +2100,36 @@ static void sdhci_post_req(struct mmc_host *mmc, struct mmc_request *mrq,
+ struct mmc_data *data = mrq->data;
+
+ if (host->flags & SDHCI_REQ_USE_DMA) {
+- if (data->host_cookie)
++ if (data->host_cookie == COOKIE_GIVEN ||
++ data->host_cookie == COOKIE_MAPPED)
+ dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
+ data->flags & MMC_DATA_WRITE ?
+ DMA_TO_DEVICE : DMA_FROM_DEVICE);
+- mrq->data->host_cookie = 0;
++ data->host_cookie = COOKIE_UNMAPPED;
+ }
+ }
+
+ static int sdhci_pre_dma_transfer(struct sdhci_host *host,
+- struct mmc_data *data,
+- struct sdhci_host_next *next)
++ struct mmc_data *data)
+ {
+ int sg_count;
+
+- if (!next && data->host_cookie &&
+- data->host_cookie != host->next_data.cookie) {
+- pr_debug(DRIVER_NAME "[%s] invalid cookie: %d, next-cookie %d\n",
+- __func__, data->host_cookie, host->next_data.cookie);
+- data->host_cookie = 0;
++ if (data->host_cookie == COOKIE_MAPPED) {
++ data->host_cookie = COOKIE_GIVEN;
++ return data->sg_count;
+ }
+
+- /* Check if next job is already prepared */
+- if (next ||
+- (!next && data->host_cookie != host->next_data.cookie)) {
+- sg_count = dma_map_sg(mmc_dev(host->mmc), data->sg,
+- data->sg_len,
+- data->flags & MMC_DATA_WRITE ?
+- DMA_TO_DEVICE : DMA_FROM_DEVICE);
+-
+- } else {
+- sg_count = host->next_data.sg_count;
+- host->next_data.sg_count = 0;
+- }
++ WARN_ON(data->host_cookie == COOKIE_GIVEN);
+
++ sg_count = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
++ data->flags & MMC_DATA_WRITE ?
++ DMA_TO_DEVICE : DMA_FROM_DEVICE);
+
+ if (sg_count == 0)
+- return -EINVAL;
++ return -ENOSPC;
+
+- if (next) {
+- next->sg_count = sg_count;
+- data->host_cookie = ++next->cookie < 0 ? 1 : next->cookie;
+- } else
+- host->sg_count = sg_count;
++ data->sg_count = sg_count;
++ data->host_cookie = COOKIE_MAPPED;
+
+ return sg_count;
+ }
+@@ -2149,16 +2139,10 @@ static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq,
+ {
+ struct sdhci_host *host = mmc_priv(mmc);
+
+- if (mrq->data->host_cookie) {
+- mrq->data->host_cookie = 0;
+- return;
+- }
++ mrq->data->host_cookie = COOKIE_UNMAPPED;
+
+ if (host->flags & SDHCI_REQ_USE_DMA)
+- if (sdhci_pre_dma_transfer(host,
+- mrq->data,
+- &host->next_data) < 0)
+- mrq->data->host_cookie = 0;
++ sdhci_pre_dma_transfer(host, mrq->data);
+ }
+
+ static void sdhci_card_event(struct mmc_host *mmc)
+@@ -3030,7 +3014,6 @@ int sdhci_add_host(struct sdhci_host *host)
+ host->max_clk = host->ops->get_max_clock(host);
+ }
+
+- host->next_data.cookie = 1;
+ /*
+ * In case of Host Controller v3.00, find out whether clock
+ * multiplier is supported.
+diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
+index 5521d29..a9512a4 100644
+--- a/drivers/mmc/host/sdhci.h
++++ b/drivers/mmc/host/sdhci.h
+@@ -309,9 +309,10 @@ struct sdhci_adma2_64_desc {
+ */
+ #define SDHCI_MAX_SEGS 128
+
+-struct sdhci_host_next {
+- unsigned int sg_count;
+- s32 cookie;
++enum sdhci_cookie {
++ COOKIE_UNMAPPED,
++ COOKIE_MAPPED,
++ COOKIE_GIVEN,
+ };
+
+ struct sdhci_host {
+@@ -503,7 +504,6 @@ struct sdhci_host {
+ unsigned int tuning_mode; /* Re-tuning mode supported by host */
+ #define SDHCI_TUNING_MODE_1 0
+
+- struct sdhci_host_next next_data;
+ unsigned long private[0] ____cacheline_aligned;
+ };
+
diff --git a/mod-extra.list b/mod-extra.list
index 2803a4325..9794fefb0 100644
--- a/mod-extra.list
+++ b/mod-extra.list
@@ -164,10 +164,6 @@ ksdazzle-sir.ko
ma600-sir.ko
mcp2120-sir.ko
toim3232-sir.ko
-tpm_atmel.ko
-tpm_infineon.ko
-tpm_nsc.ko
-tpm_tis.ko
slip.ko
nilfs2.ko
batman-adv.ko
@@ -193,3 +189,6 @@ orinoco_plx.ko
orinoco_pci.ko
orinoco_nortel.ko
orinoco_usb.ko
+usbip-core.ko
+vhci-hcd.ko
+usbip-host.ko
diff --git a/modsign-uefi.patch b/modsign-uefi.patch
deleted file mode 100644
index af6844d5a..000000000
--- a/modsign-uefi.patch
+++ /dev/null
@@ -1,624 +0,0 @@
-Bugzilla: N/A
-Upstream-status: Fedora mustard for now
-
-From 779183da2955e33a221c3f7a622766cd53e06d45 Mon Sep 17 00:00:00 2001
-From: Dave Howells <dhowells@redhat.com>
-Date: Tue, 23 Oct 2012 09:30:54 -0400
-Subject: [PATCH 1/5] Add EFI signature data types
-
-Add the data types that are used for containing hashes, keys and certificates
-for cryptographic verification.
-
-Signed-off-by: David Howells <dhowells@redhat.com>
----
- include/linux/efi.h | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 3a77a70fff27..4c7f7011ea19 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -575,6 +575,12 @@ typedef efi_status_t efi_query_variable_store_t(u32 attributes, unsigned long si
- #define EFI_FILE_SYSTEM_GUID \
- EFI_GUID( 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
-
-+#define EFI_CERT_SHA256_GUID \
-+ EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 )
-+
-+#define EFI_CERT_X509_GUID \
-+ EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
-+
- typedef struct {
- efi_guid_t guid;
- u64 table;
-@@ -782,6 +788,20 @@ typedef struct _efi_file_io_interface {
-
- #define EFI_INVALID_TABLE_ADDR (~0UL)
-
-+typedef struct {
-+ efi_guid_t signature_owner;
-+ u8 signature_data[];
-+} efi_signature_data_t;
-+
-+typedef struct {
-+ efi_guid_t signature_type;
-+ u32 signature_list_size;
-+ u32 signature_header_size;
-+ u32 signature_size;
-+ u8 signature_header[];
-+ /* efi_signature_data_t signatures[][] */
-+} efi_signature_list_t;
-+
- /*
- * All runtime access to EFI goes through this structure:
- */
---
-1.9.0
-
-
-From 8592d1f6a8cc8d901c94582b9d0b57d170a0940b Mon Sep 17 00:00:00 2001
-From: Dave Howells <dhowells@redhat.com>
-Date: Tue, 23 Oct 2012 09:36:28 -0400
-Subject: [PATCH 2/5] Add an EFI signature blob parser and key loader.
-
-X.509 certificates are loaded into the specified keyring as asymmetric type
-keys.
-
-Signed-off-by: David Howells <dhowells@redhat.com>
----
- crypto/asymmetric_keys/Kconfig | 8 +++
- crypto/asymmetric_keys/Makefile | 1 +
- crypto/asymmetric_keys/efi_parser.c | 109 ++++++++++++++++++++++++++++++++++++
- include/linux/efi.h | 4 ++
- 4 files changed, 122 insertions(+)
- create mode 100644 crypto/asymmetric_keys/efi_parser.c
-
-diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig
-index 03a6eb95ab50..6306ffc2a7fe 100644
---- a/crypto/asymmetric_keys/Kconfig
-+++ b/crypto/asymmetric_keys/Kconfig
-@@ -37,4 +37,12 @@ config X509_CERTIFICATE_PARSER
- data and provides the ability to instantiate a crypto key from a
- public key packet found inside the certificate.
-
-+config EFI_SIGNATURE_LIST_PARSER
-+ bool "EFI signature list parser"
-+ depends on EFI
-+ select X509_CERTIFICATE_PARSER
-+ help
-+ This option provides support for parsing EFI signature lists for
-+ X.509 certificates and turning them into keys.
-+
- endif # ASYMMETRIC_KEY_TYPE
-diff --git a/crypto/asymmetric_keys/Makefile b/crypto/asymmetric_keys/Makefile
-index 0727204aab68..cd8388e5f2f1 100644
---- a/crypto/asymmetric_keys/Makefile
-+++ b/crypto/asymmetric_keys/Makefile
-@@ -8,6 +8,7 @@ asymmetric_keys-y := asymmetric_type.o signature.o
-
- obj-$(CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE) += public_key.o
- obj-$(CONFIG_PUBLIC_KEY_ALGO_RSA) += rsa.o
-+obj-$(CONFIG_EFI_SIGNATURE_LIST_PARSER) += efi_parser.o
-
- #
- # X.509 Certificate handling
-diff --git a/crypto/asymmetric_keys/efi_parser.c b/crypto/asymmetric_keys/efi_parser.c
-new file mode 100644
-index 000000000000..424896a0b169
---- /dev/null
-+++ b/crypto/asymmetric_keys/efi_parser.c
-@@ -0,0 +1,109 @@
-+/* EFI signature/key/certificate list parser
-+ *
-+ * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
-+ * Written by David Howells (dhowells@redhat.com)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public Licence
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the Licence, or (at your option) any later version.
-+ */
-+
-+#define pr_fmt(fmt) "EFI: "fmt
-+#include <linux/module.h>
-+#include <linux/printk.h>
-+#include <linux/err.h>
-+#include <linux/efi.h>
-+#include <keys/asymmetric-type.h>
-+
-+static __initdata efi_guid_t efi_cert_x509_guid = EFI_CERT_X509_GUID;
-+
-+/**
-+ * parse_efi_signature_list - Parse an EFI signature list for certificates
-+ * @data: The data blob to parse
-+ * @size: The size of the data blob
-+ * @keyring: The keyring to add extracted keys to
-+ */
-+int __init parse_efi_signature_list(const void *data, size_t size, struct key *keyring)
-+{
-+ unsigned offs = 0;
-+ size_t lsize, esize, hsize, elsize;
-+
-+ pr_devel("-->%s(,%zu)\n", __func__, size);
-+
-+ while (size > 0) {
-+ efi_signature_list_t list;
-+ const efi_signature_data_t *elem;
-+ key_ref_t key;
-+
-+ if (size < sizeof(list))
-+ return -EBADMSG;
-+
-+ memcpy(&list, data, sizeof(list));
-+ pr_devel("LIST[%04x] guid=%pUl ls=%x hs=%x ss=%x\n",
-+ offs,
-+ list.signature_type.b, list.signature_list_size,
-+ list.signature_header_size, list.signature_size);
-+
-+ lsize = list.signature_list_size;
-+ hsize = list.signature_header_size;
-+ esize = list.signature_size;
-+ elsize = lsize - sizeof(list) - hsize;
-+
-+ if (lsize > size) {
-+ pr_devel("<--%s() = -EBADMSG [overrun @%x]\n",
-+ __func__, offs);
-+ return -EBADMSG;
-+ }
-+ if (lsize < sizeof(list) ||
-+ lsize - sizeof(list) < hsize ||
-+ esize < sizeof(*elem) ||
-+ elsize < esize ||
-+ elsize % esize != 0) {
-+ pr_devel("- bad size combo @%x\n", offs);
-+ return -EBADMSG;
-+ }
-+
-+ if (efi_guidcmp(list.signature_type, efi_cert_x509_guid) != 0) {
-+ data += lsize;
-+ size -= lsize;
-+ offs += lsize;
-+ continue;
-+ }
-+
-+ data += sizeof(list) + hsize;
-+ size -= sizeof(list) + hsize;
-+ offs += sizeof(list) + hsize;
-+
-+ for (; elsize > 0; elsize -= esize) {
-+ elem = data;
-+
-+ pr_devel("ELEM[%04x]\n", offs);
-+
-+ key = key_create_or_update(
-+ make_key_ref(keyring, 1),
-+ "asymmetric",
-+ NULL,
-+ &elem->signature_data,
-+ esize - sizeof(*elem),
-+ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
-+ KEY_USR_VIEW,
-+ KEY_ALLOC_NOT_IN_QUOTA |
-+ KEY_ALLOC_TRUSTED);
-+
-+ if (IS_ERR(key))
-+ pr_err("Problem loading in-kernel X.509 certificate (%ld)\n",
-+ PTR_ERR(key));
-+ else
-+ pr_notice("Loaded cert '%s' linked to '%s'\n",
-+ key_ref_to_ptr(key)->description,
-+ keyring->description);
-+
-+ data += esize;
-+ size -= esize;
-+ offs += esize;
-+ }
-+ }
-+
-+ return 0;
-+}
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 4c7f7011ea19..96174a7f9e90 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -883,6 +883,10 @@ extern int efi_set_rtc_mmss(const struct timespec *now);
- extern void efi_reserve_boot_services(void);
- extern struct efi_memory_map memmap;
-
-+struct key;
-+extern int __init parse_efi_signature_list(const void *data, size_t size,
-+ struct key *keyring);
-+
- /**
- * efi_range_is_wc - check the WC bit on an address range
- * @start: starting kvirt address
---
-1.9.0
-
-
-From a4da3547b2eb4e0c7111eee7e5d5043413142835 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Fri, 26 Oct 2012 12:36:24 -0400
-Subject: [PATCH 3/5] KEYS: Add a system blacklist keyring
-
-This adds an additional keyring that is used to store certificates that
-are blacklisted. This keyring is searched first when loading signed modules
-and if the module's certificate is found, it will refuse to load. This is
-useful in cases where third party certificates are used for module signing.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
----
- include/keys/system_keyring.h | 4 ++++
- init/Kconfig | 9 +++++++++
- kernel/module_signing.c | 12 ++++++++++++
- kernel/system_keyring.c | 17 +++++++++++++++++
- 4 files changed, 42 insertions(+)
-
-diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h
-index 8dabc399bd1d..e466de10ceec 100644
---- a/include/keys/system_keyring.h
-+++ b/include/keys/system_keyring.h
-@@ -18,6 +18,10 @@
-
- extern struct key *system_trusted_keyring;
-
-+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
-+extern struct key *system_blacklist_keyring;
-+#endif
-+
- #endif
-
- #endif /* _KEYS_SYSTEM_KEYRING_H */
-diff --git a/init/Kconfig b/init/Kconfig
-index 9d3585bb2a7a..932f22f7cc40 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -1658,6 +1658,15 @@ config SYSTEM_TRUSTED_KEYRING
-
- Keys in this keyring are used by module signature checking.
-
-+config SYSTEM_BLACKLIST_KEYRING
-+ bool "Provide system-wide ring of blacklisted keys"
-+ depends on KEYS
-+ help
-+ Provide a system keyring to which blacklisted keys can be added.
-+ Keys in the keyring are considered entirely untrusted. Keys in this
-+ keyring are used by the module signature checking to reject loading
-+ of modules signed with a blacklisted key.
-+
- config PROFILING
- bool "Profiling support"
- help
-diff --git a/kernel/module_signing.c b/kernel/module_signing.c
-index be5b8fac4bd0..fed815fcdaf2 100644
---- a/kernel/module_signing.c
-+++ b/kernel/module_signing.c
-@@ -158,6 +158,18 @@ static struct key *request_asymmetric_key(const char *signer, size_t signer_len,
-
- pr_debug("Look up: \"%s\"\n", id);
-
-+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
-+ key = keyring_search(make_key_ref(system_blacklist_keyring, 1),
-+ &key_type_asymmetric, id);
-+ if (!IS_ERR(key)) {
-+ /* module is signed with a cert in the blacklist. reject */
-+ pr_err("Module key '%s' is in blacklist\n", id);
-+ key_ref_put(key);
-+ kfree(id);
-+ return ERR_PTR(-EKEYREJECTED);
-+ }
-+#endif
-+
- key = keyring_search(make_key_ref(system_trusted_keyring, 1),
- &key_type_asymmetric, id);
- if (IS_ERR(key))
-diff --git a/kernel/system_keyring.c b/kernel/system_keyring.c
-index 52ebc70263f4..478c4f8ec908 100644
---- a/kernel/system_keyring.c
-+++ b/kernel/system_keyring.c
-@@ -20,6 +20,9 @@
-
- struct key *system_trusted_keyring;
- EXPORT_SYMBOL_GPL(system_trusted_keyring);
-+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
-+struct key *system_blacklist_keyring;
-+#endif
-
- extern __initconst const u8 system_certificate_list[];
- extern __initconst const unsigned long system_certificate_list_size;
-@@ -41,6 +44,20 @@ static __init int system_trusted_keyring_init(void)
- panic("Can't allocate system trusted keyring\n");
-
- set_bit(KEY_FLAG_TRUSTED_ONLY, &system_trusted_keyring->flags);
-+
-+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
-+ system_blacklist_keyring = keyring_alloc(".system_blacklist_keyring",
-+ KUIDT_INIT(0), KGIDT_INIT(0),
-+ current_cred(),
-+ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
-+ KEY_USR_VIEW | KEY_USR_READ,
-+ KEY_ALLOC_NOT_IN_QUOTA, NULL);
-+ if (IS_ERR(system_blacklist_keyring))
-+ panic("Can't allocate system blacklist keyring\n");
-+
-+ set_bit(KEY_FLAG_TRUSTED_ONLY, &system_blacklist_keyring->flags);
-+#endif
-+
- return 0;
- }
-
---
-1.9.0
-
-
-From 25adb4e43fb5c23723f33a806399ad484f8dcfa5 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Fri, 26 Oct 2012 12:42:16 -0400
-Subject: [PATCH 4/5] MODSIGN: Import certificates from UEFI Secure Boot
-
-Secure Boot stores a list of allowed certificates in the 'db' variable.
-This imports those certificates into the system trusted keyring. This
-allows for a third party signing certificate to be used in conjunction
-with signed modules. By importing the public certificate into the 'db'
-variable, a user can allow a module signed with that certificate to
-load. The shim UEFI bootloader has a similar certificate list stored
-in the 'MokListRT' variable. We import those as well.
-
-In the opposite case, Secure Boot maintains a list of disallowed
-certificates in the 'dbx' variable. We load those certificates into
-the newly introduced system blacklist keyring and forbid any module
-signed with those from loading.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
----
- include/linux/efi.h | 6 ++++
- init/Kconfig | 9 +++++
- kernel/Makefile | 3 ++
- kernel/modsign_uefi.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 110 insertions(+)
- create mode 100644 kernel/modsign_uefi.c
-
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 96174a7f9e90..8f7466023105 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -581,6 +581,12 @@ typedef efi_status_t efi_query_variable_store_t(u32 attributes, unsigned long si
- #define EFI_CERT_X509_GUID \
- EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
-
-+#define EFI_IMAGE_SECURITY_DATABASE_GUID \
-+ EFI_GUID( 0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f )
-+
-+#define EFI_SHIM_LOCK_GUID \
-+ EFI_GUID( 0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 )
-+
- typedef struct {
- efi_guid_t guid;
- u64 table;
-diff --git a/init/Kconfig b/init/Kconfig
-index 932f22f7cc40..6023af12ef4f 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -1812,6 +1812,15 @@ config MODULE_SIG_ALL
- comment "Do not forget to sign required modules with scripts/sign-file"
- depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL
-
-+config MODULE_SIG_UEFI
-+ bool "Allow modules signed with certs stored in UEFI"
-+ depends on MODULE_SIG && SYSTEM_BLACKLIST_KEYRING && EFI
-+ select EFI_SIGNATURE_LIST_PARSER
-+ help
-+ This will import certificates stored in UEFI and allow modules
-+ signed with those to be loaded. It will also disallow loading
-+ of modules stored in the UEFI dbx variable.
-+
- choice
- prompt "Which hash algorithm should modules be signed with?"
- depends on MODULE_SIG
-diff --git a/kernel/Makefile b/kernel/Makefile
-index f2a8b6246ce9..706e7952bde5 100644
---- a/kernel/Makefile
-+++ b/kernel/Makefile
-@@ -46,6 +46,7 @@ obj-$(CONFIG_UID16) += uid16.o
- obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o
- obj-$(CONFIG_MODULES) += module.o
- obj-$(CONFIG_MODULE_SIG) += module_signing.o
-+obj-$(CONFIG_MODULE_SIG_UEFI) += modsign_uefi.o
- obj-$(CONFIG_KALLSYMS) += kallsyms.o
- obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
- obj-$(CONFIG_KEXEC) += kexec.o
-@@ -99,6 +100,8 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o
-
- $(obj)/configs.o: $(obj)/config_data.h
-
-+$(obj)/modsign_uefi.o: KBUILD_CFLAGS += -fshort-wchar
-+
- # config_data.h contains the same information as ikconfig.h but gzipped.
- # Info from config_data can be extracted from /proc/config*
- targets += config_data.gz
-diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
-new file mode 100644
-index 000000000000..94b0eb38a284
---- /dev/null
-+++ b/kernel/modsign_uefi.c
-@@ -0,0 +1,92 @@
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/cred.h>
-+#include <linux/err.h>
-+#include <linux/efi.h>
-+#include <linux/slab.h>
-+#include <keys/asymmetric-type.h>
-+#include <keys/system_keyring.h>
-+#include "module-internal.h"
-+
-+static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size)
-+{
-+ efi_status_t status;
-+ unsigned long lsize = 4;
-+ unsigned long tmpdb[4];
-+ void *db = NULL;
-+
-+ status = efi.get_variable(name, guid, NULL, &lsize, &tmpdb);
-+ if (status != EFI_BUFFER_TOO_SMALL) {
-+ pr_err("Couldn't get size: 0x%lx\n", status);
-+ return NULL;
-+ }
-+
-+ db = kmalloc(lsize, GFP_KERNEL);
-+ if (!db) {
-+ pr_err("Couldn't allocate memory for uefi cert list\n");
-+ goto out;
-+ }
-+
-+ status = efi.get_variable(name, guid, NULL, &lsize, db);
-+ if (status != EFI_SUCCESS) {
-+ kfree(db);
-+ db = NULL;
-+ pr_err("Error reading db var: 0x%lx\n", status);
-+ }
-+out:
-+ *size = lsize;
-+ return db;
-+}
-+
-+/*
-+ * * Load the certs contained in the UEFI databases
-+ * */
-+static int __init load_uefi_certs(void)
-+{
-+ efi_guid_t secure_var = EFI_IMAGE_SECURITY_DATABASE_GUID;
-+ efi_guid_t mok_var = EFI_SHIM_LOCK_GUID;
-+ void *db = NULL, *dbx = NULL, *mok = NULL;
-+ unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
-+ int rc = 0;
-+
-+ /* Check if SB is enabled and just return if not */
-+ if (!efi_enabled(EFI_SECURE_BOOT))
-+ return 0;
-+
-+ /* Get db, MokListRT, and dbx. They might not exist, so it isn't
-+ * an error if we can't get them.
-+ */
-+ db = get_cert_list(L"db", &secure_var, &dbsize);
-+ if (!db) {
-+ pr_err("MODSIGN: Couldn't get UEFI db list\n");
-+ } else {
-+ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
-+ if (rc)
-+ pr_err("Couldn't parse db signatures: %d\n", rc);
-+ kfree(db);
-+ }
-+
-+ mok = get_cert_list(L"MokListRT", &mok_var, &moksize);
-+ if (!mok) {
-+ pr_info("MODSIGN: Couldn't get UEFI MokListRT\n");
-+ } else {
-+ rc = parse_efi_signature_list(mok, moksize, system_trusted_keyring);
-+ if (rc)
-+ pr_err("Couldn't parse MokListRT signatures: %d\n", rc);
-+ kfree(mok);
-+ }
-+
-+ dbx = get_cert_list(L"dbx", &secure_var, &dbxsize);
-+ if (!dbx) {
-+ pr_info("MODSIGN: Couldn't get UEFI dbx list\n");
-+ } else {
-+ rc = parse_efi_signature_list(dbx, dbxsize,
-+ system_blacklist_keyring);
-+ if (rc)
-+ pr_err("Couldn't parse dbx signatures: %d\n", rc);
-+ kfree(dbx);
-+ }
-+
-+ return rc;
-+}
-+late_initcall(load_uefi_certs);
---
-1.9.0
-
-
-From 20b7de055a87e6f5555c27de8188b7c975e3e330 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Thu, 3 Oct 2013 10:14:23 -0400
-Subject: [PATCH 5/5] MODSIGN: Support not importing certs from db
-
-If a user tells shim to not use the certs/hashes in the UEFI db variable
-for verification purposes, shim will set a UEFI variable called MokIgnoreDB.
-Have the uefi import code look for this and not import things from the db
-variable.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
----
- kernel/modsign_uefi.c | 40 +++++++++++++++++++++++++++++++---------
- 1 file changed, 31 insertions(+), 9 deletions(-)
-
-diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
-index 94b0eb38a284..ae28b974d49a 100644
---- a/kernel/modsign_uefi.c
-+++ b/kernel/modsign_uefi.c
-@@ -8,6 +8,23 @@
- #include <keys/system_keyring.h>
- #include "module-internal.h"
-
-+static __init int check_ignore_db(void)
-+{
-+ efi_status_t status;
-+ unsigned int db = 0;
-+ unsigned long size = sizeof(db);
-+ efi_guid_t guid = EFI_SHIM_LOCK_GUID;
-+
-+ /* Check and see if the MokIgnoreDB variable exists. If that fails
-+ * then we don't ignore DB. If it succeeds, we do.
-+ */
-+ status = efi.get_variable(L"MokIgnoreDB", &guid, NULL, &size, &db);
-+ if (status != EFI_SUCCESS)
-+ return 0;
-+
-+ return 1;
-+}
-+
- static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size)
- {
- efi_status_t status;
-@@ -47,23 +64,28 @@ static int __init load_uefi_certs(void)
- efi_guid_t mok_var = EFI_SHIM_LOCK_GUID;
- void *db = NULL, *dbx = NULL, *mok = NULL;
- unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
-- int rc = 0;
-+ int ignore_db, rc = 0;
-
- /* Check if SB is enabled and just return if not */
- if (!efi_enabled(EFI_SECURE_BOOT))
- return 0;
-
-+ /* See if the user has setup Ignore DB mode */
-+ ignore_db = check_ignore_db();
-+
- /* Get db, MokListRT, and dbx. They might not exist, so it isn't
- * an error if we can't get them.
- */
-- db = get_cert_list(L"db", &secure_var, &dbsize);
-- if (!db) {
-- pr_err("MODSIGN: Couldn't get UEFI db list\n");
-- } else {
-- rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
-- if (rc)
-- pr_err("Couldn't parse db signatures: %d\n", rc);
-- kfree(db);
-+ if (!ignore_db) {
-+ db = get_cert_list(L"db", &secure_var, &dbsize);
-+ if (!db) {
-+ pr_err("MODSIGN: Couldn't get UEFI db list\n");
-+ } else {
-+ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
-+ if (rc)
-+ pr_err("Couldn't parse db signatures: %d\n", rc);
-+ kfree(db);
-+ }
- }
-
- mok = get_cert_list(L"MokListRT", &mok_var, &moksize);
---
-1.9.0
-
diff --git a/netfilter-nf_nat-fix-oops-on-netns-removal.patch b/netfilter-nf_nat-fix-oops-on-netns-removal.patch
deleted file mode 100644
index 4cd521895..000000000
--- a/netfilter-nf_nat-fix-oops-on-netns-removal.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-Bugzilla: 1015989
-Upstream-status: 3.16-rc3 and queued for stable
-
-From 945b2b2d259d1a4364a2799e80e8ff32f8c6ee6f Mon Sep 17 00:00:00 2001
-From: Florian Westphal <fw@strlen.de>
-Date: Sat, 7 Jun 2014 21:17:04 +0200
-Subject: [PATCH] netfilter: nf_nat: fix oops on netns removal
-
-Quoting Samu Kallio:
-
- Basically what's happening is, during netns cleanup,
- nf_nat_net_exit gets called before ipv4_net_exit. As I understand
- it, nf_nat_net_exit is supposed to kill any conntrack entries which
- have NAT context (through nf_ct_iterate_cleanup), but for some
- reason this doesn't happen (perhaps something else is still holding
- refs to those entries?).
-
- When ipv4_net_exit is called, conntrack entries (including those
- with NAT context) are cleaned up, but the
- nat_bysource hashtable is long gone - freed in nf_nat_net_exit. The
- bug happens when attempting to free a conntrack entry whose NAT hash
- 'prev' field points to a slot in the freed hash table (head for that
- bin).
-
-We ignore conntracks with null nat bindings. But this is wrong,
-as these are in bysource hash table as well.
-
-Restore nat-cleaning for the netns-is-being-removed case.
-
-bug:
-https://bugzilla.kernel.org/show_bug.cgi?id=65191
-
-Fixes: c2d421e1718 ('netfilter: nf_nat: fix race when unloading protocol modules')
-Reported-by: Samu Kallio <samu.kallio@aberdeencloud.com>
-Debugged-by: Samu Kallio <samu.kallio@aberdeencloud.com>
-Signed-off-by: Florian Westphal <fw@strlen.de>
-Tested-by: Samu Kallio <samu.kallio@aberdeencloud.com>
-Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
----
- net/netfilter/nf_nat_core.c | 35 ++++++++++++++++++++++++++++++++++-
- 1 file changed, 34 insertions(+), 1 deletion(-)
-
-diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c
-index 09096a670c45..a49907b1dabc 100644
---- a/net/netfilter/nf_nat_core.c
-+++ b/net/netfilter/nf_nat_core.c
-@@ -525,6 +525,39 @@ static int nf_nat_proto_remove(struct nf_conn *i, void *data)
- return i->status & IPS_NAT_MASK ? 1 : 0;
- }
-
-+static int nf_nat_proto_clean(struct nf_conn *ct, void *data)
-+{
-+ struct nf_conn_nat *nat = nfct_nat(ct);
-+
-+ if (nf_nat_proto_remove(ct, data))
-+ return 1;
-+
-+ if (!nat || !nat->ct)
-+ return 0;
-+
-+ /* This netns is being destroyed, and conntrack has nat null binding.
-+ * Remove it from bysource hash, as the table will be freed soon.
-+ *
-+ * Else, when the conntrack is destoyed, nf_nat_cleanup_conntrack()
-+ * will delete entry from already-freed table.
-+ */
-+ if (!del_timer(&ct->timeout))
-+ return 1;
-+
-+ spin_lock_bh(&nf_nat_lock);
-+ hlist_del_rcu(&nat->bysource);
-+ ct->status &= ~IPS_NAT_DONE_MASK;
-+ nat->ct = NULL;
-+ spin_unlock_bh(&nf_nat_lock);
-+
-+ add_timer(&ct->timeout);
-+
-+ /* don't delete conntrack. Although that would make things a lot
-+ * simpler, we'd end up flushing all conntracks on nat rmmod.
-+ */
-+ return 0;
-+}
-+
- static void nf_nat_l4proto_clean(u8 l3proto, u8 l4proto)
- {
- struct nf_nat_proto_clean clean = {
-@@ -795,7 +828,7 @@ static void __net_exit nf_nat_net_exit(struct net *net)
- {
- struct nf_nat_proto_clean clean = {};
-
-- nf_ct_iterate_cleanup(net, &nf_nat_proto_remove, &clean, 0, 0);
-+ nf_ct_iterate_cleanup(net, nf_nat_proto_clean, &clean, 0, 0);
- synchronize_rcu();
- nf_ct_free_hashtable(net->ct.nat_bysource, net->ct.nat_htable_size);
- }
---
-1.9.3
-
diff --git a/no-pcspkr-modalias.patch b/no-pcspkr-modalias.patch
index 439269cef..e43cd97eb 100644
--- a/no-pcspkr-modalias.patch
+++ b/no-pcspkr-modalias.patch
@@ -1,8 +1,18 @@
+From: "kernel-team@fedoraproject.org" <kernel-team@fedoraproject.org>
+Date: Thu, 29 Jul 2010 16:46:31 -0700
+Subject: [PATCH] no pcspkr modalias
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard
+---
+ drivers/input/misc/pcspkr.c | 1 -
+ 1 file changed, 1 deletion(-)
+
diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c
-index 34f4d2e..3e40c70 100644
+index 72b1fc3ab910..86907eaa4883 100644
--- a/drivers/input/misc/pcspkr.c
+++ b/drivers/input/misc/pcspkr.c
-@@ -24,7 +24,6 @@
+@@ -23,7 +23,6 @@
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
MODULE_DESCRIPTION("PC Speaker beeper driver");
MODULE_LICENSE("GPL");
diff --git a/nouveau-Don-t-check-acpi_video_backlight_support-bef.patch b/nouveau-Don-t-check-acpi_video_backlight_support-bef.patch
deleted file mode 100644
index b6ed45c39..000000000
--- a/nouveau-Don-t-check-acpi_video_backlight_support-bef.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-Bugzilla: 1093171
-Upstream-status: Queued for 3.16
-
-From abf17f7885656ccc181a608d2a9ee770b23d9e23 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:41:07 +0200
-Subject: [PATCH 10/14] nouveau: Don't check acpi_video_backlight_support()
- before registering backlight
-
-acpi_video_backlight_support() is supposed to be called by other (vendor
-specific) firmware backlight controls, not by native / raw backlight controls
-like nv_backlight.
-
-Userspace will normally prefer firmware interfaces over raw interfaces, so
-if acpi_video backlight support is present it will use that even if
-nv_backlight is registered as well.
-
-Except when video.use_native_backlight is present on the kernel cmdline
-(or enabled through a dmi based quirk). As the name indicates the goal here
-is to make only the raw interface available to userspace so that it will use
-that (it only does this when it sees a win8 compliant bios).
-
-This is done by:
-1) Not registering any acpi_video# backlight devices; and
-2) Making acpi_video_backlight_support() return true so that other firmware
-drivers, ie acer_wmi, thinkpad_acpi, dell_laptop, etc. Don't register their
-own vender specific interfaces.
-
-Currently nouveau breaks this setup, as when acpi_video_backlight_support()
-returns true, it does not register itself, resulting in no backlight control
-at all.
-
-This is esp. going to be a problem with 3.16 which will default to
-video.use_native_backlight=1, and thus nouveau based laptops with a win8 bios
-will get no backlight control at all.
-
-This also likely explains why the previous attempt to make
-video.use_native_backlight=1 the default was not a success, as without this
-patch having a default of video.use_native_backlight=1 will cause regressions.
-
-Note this effectively reverts commit 5bead799
-
-Also see: https://bugzilla.redhat.com/show_bug.cgi?id=1093171
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/gpu/drm/nouveau/nouveau_backlight.c | 9 ---------
- 1 file changed, 9 deletions(-)
-
-diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c
-index 630f6e84fc01..2c1e4aad7da3 100644
---- a/drivers/gpu/drm/nouveau/nouveau_backlight.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c
-@@ -31,7 +31,6 @@
- */
-
- #include <linux/backlight.h>
--#include <linux/acpi.h>
-
- #include "nouveau_drm.h"
- #include "nouveau_reg.h"
-@@ -222,14 +221,6 @@ nouveau_backlight_init(struct drm_device *dev)
- struct nouveau_device *device = nv_device(drm->device);
- struct drm_connector *connector;
-
--#ifdef CONFIG_ACPI
-- if (acpi_video_backlight_support()) {
-- NV_INFO(drm, "ACPI backlight interface available, "
-- "not registering our own\n");
-- return 0;
-- }
--#endif
--
- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
- if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS &&
- connector->connector_type != DRM_MODE_CONNECTOR_eDP)
---
-1.9.0
-
diff --git a/nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch b/nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch
new file mode 100644
index 000000000..a6996faa1
--- /dev/null
+++ b/nv46-Change-mc-subdev-oclass-from-nv44-to-nv4c.patch
@@ -0,0 +1,33 @@
+From 16f4f5f0dc33698b841bce71cbc0dd991935b7e1 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Thu, 23 Jul 2015 17:20:12 +0200
+Subject: [PATCH] nv46: Change mc subdev oclass from nv44 to nv4c
+
+MSI interrupts appear to not work for nv46 based cards. Change the mc
+subdev oclass for these cards from nv44 to nv4c, the nv4c mc code is
+identical to the nv44 mc code except that it does not use msi
+(it does not define a msi_rearm callback).
+
+BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=90435
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+---
+ drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
+index c6301361d14f..b4ad791b4851 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/nv40.c
+@@ -265,7 +265,7 @@ nv40_identify(struct nvkm_device *device)
+ device->oclass[NVDEV_SUBDEV_CLK ] = &nv40_clk_oclass;
+ device->oclass[NVDEV_SUBDEV_THERM ] = &nv40_therm_oclass;
+ device->oclass[NVDEV_SUBDEV_DEVINIT] = nv1a_devinit_oclass;
+- device->oclass[NVDEV_SUBDEV_MC ] = nv44_mc_oclass;
++ device->oclass[NVDEV_SUBDEV_MC ] = nv4c_mc_oclass;
+ device->oclass[NVDEV_SUBDEV_BUS ] = nv31_bus_oclass;
+ device->oclass[NVDEV_SUBDEV_TIMER ] = &nv04_timer_oclass;
+ device->oclass[NVDEV_SUBDEV_FB ] = nv46_fb_oclass;
+--
+2.4.3
+
diff --git a/pinctrl-pinctrl-single-must-be-initialized-early.patch b/pinctrl-pinctrl-single-must-be-initialized-early.patch
new file mode 100644
index 000000000..96f268243
--- /dev/null
+++ b/pinctrl-pinctrl-single-must-be-initialized-early.patch
@@ -0,0 +1,34 @@
+From: Pantelis Antoniou <panto@antoniou-consulting.com>
+Date: Sat, 15 Sep 2012 12:00:41 +0300
+Subject: [PATCH] pinctrl: pinctrl-single must be initialized early.
+
+When using pinctrl-single to handle i2c initialization, it has
+to be done early. Whether this is the best way to do so, is an
+exercise left to the reader.
+---
+ drivers/pinctrl/pinctrl-single.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
+index 69e84427f913..f21cf4291476 100644
+--- a/drivers/pinctrl/pinctrl-single.c
++++ b/drivers/pinctrl/pinctrl-single.c
+@@ -2025,7 +2025,17 @@ static struct platform_driver pcs_driver = {
+ #endif
+ };
+
+-module_platform_driver(pcs_driver);
++static int __init pcs_init(void)
++{
++ return platform_driver_register(&pcs_driver);
++}
++postcore_initcall(pcs_init);
++
++static void __exit pcs_exit(void)
++{
++ platform_driver_unregister(&pcs_driver);
++}
++module_exit(pcs_exit);
+
+ MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
+ MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
diff --git a/revert-input-wacom-testing-result-shows-get_report-is-unnecessary.patch b/revert-input-wacom-testing-result-shows-get_report-is-unnecessary.patch
deleted file mode 100644
index f9f4a72a0..000000000
--- a/revert-input-wacom-testing-result-shows-get_report-is-unnecessary.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Bugzilla: N/A
-Upstream-status: Sent upstream
-
-This reverts commit 1b2faaf7e219fc2905d75afcd4c815e5d39eda80.
-
-The Intuos4 series presents a bug in which it hangs if it receives
-a set feature command while switching to the enhanced mode.
-This bug is triggered when plugging an Intuos 4 while having
-a gnome user session up and running.
-
-Signed-off-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx>
----
-
-Hi Aris,
-
-actually, you bisected the bug, so can I consider that I have your signed-off-by?
-
-Cheers,
-Benjamin
-
- drivers/input/tablet/wacom_sys.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
-index 7087b33..319a3ff 100644
---- a/drivers/input/tablet/wacom_sys.c
-+++ b/drivers/input/tablet/wacom_sys.c
-@@ -536,6 +536,9 @@ static int wacom_set_device_mode(struct usb_interface *intf, int report_id, int
-
- error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT,
- report_id, rep_data, length, 1);
-+ if (error >= 0)
-+ error = wacom_get_report(intf, WAC_HID_FEATURE_REPORT,
-+ report_id, rep_data, length, 1);
- } while ((error < 0 || rep_data[1] != mode) && limit++ < WAC_MSG_RETRIES);
-
- kfree(rep_data);
---
-1.9.0
-
diff --git a/s390-appldata-add-slab.h-for-kzalloc-kfree.patch b/s390-appldata-add-slab.h-for-kzalloc-kfree.patch
deleted file mode 100644
index 3716ce8b1..000000000
--- a/s390-appldata-add-slab.h-for-kzalloc-kfree.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 1eb5e8b7449ff017c2f358d97bd2fcd4eb87cc53 Mon Sep 17 00:00:00 2001
-From: Jeff Mahoney <jeffm@suse.com>
-Date: Sun, 27 Apr 2014 17:35:43 -0400
-Subject: s390/appldata: add slab.h for kzalloc/kfree
-
-This fixes:
-arch/s390/appldata/appldata_mem.c:135:2: error: implicit declaration of function 'kzalloc' [-Werror=implicit-function-declaration]
-arch/s390/appldata/appldata_mem.c:141:3: error: implicit declaration of function 'kfree' [-Werror=implicit-function-declaration]
-
-Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
-Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-
-diff --git a/arch/s390/appldata/appldata_mem.c b/arch/s390/appldata/appldata_mem.c
-index 42be537..edcf2a7 100644
---- a/arch/s390/appldata/appldata_mem.c
-+++ b/arch/s390/appldata/appldata_mem.c
-@@ -13,6 +13,7 @@
- #include <linux/kernel_stat.h>
- #include <linux/pagemap.h>
- #include <linux/swap.h>
-+#include <linux/slab.h>
- #include <asm/io.h>
-
- #include "appldata.h"
---
-cgit v0.10.1
-
diff --git a/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch b/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
deleted file mode 100644
index ce83ed21c..000000000
--- a/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-Bugzilla: 861573
-Upstream-status: Waiting for feedback from reporter
-
-From 2fa2078cdd4198b49c02cb03087158d398476463 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:40:59 +0200
-Subject: [PATCH 02/14] samsung-laptop: Add broken-acpi-video quirk for
- NC210/NC110
-
-Reported (and tested) here:
-https://bugzilla.redhat.com/show_bug.cgi?id=861573
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/samsung-laptop.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
-index d1f030053176..98f61f677627 100644
---- a/drivers/platform/x86/samsung-laptop.c
-+++ b/drivers/platform/x86/samsung-laptop.c
-@@ -1534,6 +1534,16 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
- },
- .driver_data = &samsung_broken_acpi_video,
- },
-+ {
-+ .callback = samsung_dmi_matched,
-+ .ident = "NC210",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "NC210/NC110"),
-+ DMI_MATCH(DMI_BOARD_NAME, "NC210/NC110"),
-+ },
-+ .driver_data = &samsung_broken_acpi_video,
-+ },
- { },
- };
- MODULE_DEVICE_TABLE(dmi, samsung_dmi_table);
---
-1.9.0
-
diff --git a/sb-hibernate.patch b/sb-hibernate.patch
deleted file mode 100644
index da7bb7428..000000000
--- a/sb-hibernate.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-Bugzilla: N/A
-Upstream-status: Fedora mustard
-
-From ffe1ee94d526900ce1e5191cdd38934477dd209a Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Fri, 26 Oct 2012 14:02:09 -0400
-Subject: [PATCH] hibernate: Disable in a signed modules environment
-
-There is currently no way to verify the resume image when returning
-from hibernate. This might compromise the signed modules trust model,
-so until we can work with signed hibernate images we disable it in
-a secure modules environment.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.com>
----
- kernel/power/hibernate.c | 16 +++++++++++++++-
- kernel/power/main.c | 7 ++++++-
- kernel/power/user.c | 1 +
- 3 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
-index b26f5f1..e65228b 100644
---- a/kernel/power/hibernate.c
-+++ b/kernel/power/hibernate.c
-@@ -28,6 +28,8 @@
- #include <linux/syscore_ops.h>
- #include <linux/ctype.h>
- #include <linux/genhd.h>
-+#include <linux/efi.h>
-+#include <linux/module.h>
-
- #include "power.h"
-
-@@ -632,6 +634,10 @@ int hibernate(void)
- {
- int error;
-
-+ if (secure_modules()) {
-+ return -EPERM;
-+ }
-+
- lock_system_sleep();
- /* The snapshot device should not be opened while we're running */
- if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
-@@ -723,7 +729,7 @@ static int software_resume(void)
- /*
- * If the user said "noresume".. bail out early.
- */
-- if (noresume)
-+ if (noresume || secure_modules())
- return 0;
-
- /*
-@@ -889,6 +895,11 @@ static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr,
- int i;
- char *start = buf;
-
-+ if (efi_enabled(EFI_SECURE_BOOT)) {
-+ buf += sprintf(buf, "[%s]\n", "disabled");
-+ return buf-start;
-+ }
-+
- for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) {
- if (!hibernation_modes[i])
- continue;
-@@ -923,6 +934,9 @@ static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr,
- char *p;
- int mode = HIBERNATION_INVALID;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- p = memchr(buf, '\n', n);
- len = p ? p - buf : n;
-
-diff --git a/kernel/power/main.c b/kernel/power/main.c
-index 1d1bf63..300f300 100644
---- a/kernel/power/main.c
-+++ b/kernel/power/main.c
-@@ -15,6 +15,7 @@
- #include <linux/workqueue.h>
- #include <linux/debugfs.h>
- #include <linux/seq_file.h>
-+#include <linux/efi.h>
-
- #include "power.h"
-
-@@ -301,7 +302,11 @@ static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
- }
- #endif
- #ifdef CONFIG_HIBERNATION
-- s += sprintf(s, "%s\n", "disk");
-+ if (!efi_enabled(EFI_SECURE_BOOT)) {
-+ s += sprintf(s, "%s\n", "disk");
-+ } else {
-+ s += sprintf(s, "\n");
-+ }
- #else
- if (s != buf)
- /* convert the last space to a newline */
-diff --git a/kernel/power/user.c b/kernel/power/user.c
-index 15cb72f..fa85ed5 100644
---- a/kernel/power/user.c
-+++ b/kernel/power/user.c
-@@ -25,6 +25,7 @@
- #include <linux/cpu.h>
- #include <linux/freezer.h>
- #include <linux/module.h>
-+#include <linux/efi.h>
-
- #include <asm/uaccess.h>
-
---
-1.8.3.1
-
diff --git a/scripts/check-configs.pl b/scripts/check-configs.pl
new file mode 100644
index 000000000..10282aa74
--- /dev/null
+++ b/scripts/check-configs.pl
@@ -0,0 +1,83 @@
+# By Paul Bolle October 2014.
+#
+# Contributed to the public domain by its author.
+
+use 5.016;
+use warnings;
+use autodie;
+
+use File::Find;
+
+my @Kconfigs;
+
+my $Kconfigre = qr/Kconfig.*/;
+my $configre = qr/^\s*(menu)?config\s+(?<config>(\w+))$/;
+my $CONFIG_re = qr/\bCONFIG_(?<CONFIG_>(\w+))/;
+
+sub match {
+ push( @Kconfigs, $File::Find::name ) if ($_ =~ $Kconfigre);
+}
+
+sub parse_kconfig {
+ my ($path) = @_;
+
+ my @ret;
+
+ open( my $kconfig, "<", $path );
+ my $slurp = do { local $/ = undef; <$kconfig> };
+ close( $kconfig );
+ my @lines = split ( /\n/, $slurp );
+ foreach my $line (@lines) {
+ if ($line =~ /$configre/) {
+ push( @ret, $+{config} );
+ }
+ }
+
+ @ret;
+}
+
+sub parse_shipped {
+ my ($path) = @_;
+
+ my @ret;
+
+ open( my $shipped, "<", $path );
+ my $slurp = do { local $/ = undef; <$shipped> };
+ close( $shipped );
+ my @lines = split ( /\n/, $slurp );
+ my $i = 1;
+ foreach my $line (@lines) {
+ if ($line =~ /$CONFIG_re/) {
+ push( @ret, [$i, $+{CONFIG_}] );
+ }
+ $i++;
+ }
+
+ @ret;
+}
+
+exit main ( @ARGV );
+
+sub main {
+ my %configs;
+
+ find( \&match, @_ );
+
+ foreach my $Kconfig (@Kconfigs) {
+ my (@tmp) = parse_kconfig( $Kconfig );
+ foreach my $config ( @tmp ) {
+ $configs{ $config }++;
+ }
+ }
+
+ foreach my $shipped (glob("config-*")) {
+ my (@tmp) = parse_shipped( $shipped );
+ foreach my $ref ( @tmp ) {
+ say( STDERR "$shipped:$ref->[0]: No Kconfig symbol matches 'CONFIG_$ref->[1]'" )
+ unless (grep( /$ref->[1]/, keys( %configs )));
+ }
+ }
+
+ 0;
+}
+
diff --git a/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch b/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
index 48db13328..1438d4e76 100644
--- a/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
+++ b/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
@@ -1,13 +1,25 @@
---- a/drivers/scsi/sd.c
-+++ a/drivers/scsi/sd.c
-@@ -2362,13 +2362,18 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
+From: "kernel-team@fedoraproject.org" <kernel-team@fedoraproject.org>
+Date: Fri, 10 Feb 2012 14:56:13 -0500
+Subject: [PATCH] scsi: sd_revalidate_disk prevent NULL ptr deref
+
+Bugzilla: 754518
+Upstream-status: Fedora mustard (might be worth dropping...)
+---
+ drivers/scsi/sd.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
+index a661d339adf7..d76e957e3ea4 100644
+--- a/drivers/scsi/sd.c
++++ b/drivers/scsi/sd.c
+@@ -2741,13 +2741,18 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
static int sd_revalidate_disk(struct gendisk *disk)
{
struct scsi_disk *sdkp = scsi_disk(disk);
- struct scsi_device *sdp = sdkp->device;
+ struct scsi_device *sdp;
unsigned char *buffer;
- unsigned flush = 0;
+ unsigned int max_xfer;
SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,
"sd_revalidate_disk\n"));
diff --git a/secure-modules.patch b/secure-modules.patch
deleted file mode 100644
index 478c62ff5..000000000
--- a/secure-modules.patch
+++ /dev/null
@@ -1,877 +0,0 @@
-Bugzilla: N/A
-Upstream-status: Fedora mustard. Replaced by securelevels, but that was nak'd
-
-From 0f81a4461431941c17ff26fd3d5e284ede4a368a Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 9 Aug 2013 17:58:15 -0400
-Subject: [PATCH 01/14] Add secure_modules() call
-
-Provide a single call to allow kernel code to determine whether the system
-has been configured to either disable module loading entirely or to load
-only modules signed with a trusted key.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- include/linux/module.h | 7 +++++++
- kernel/module.c | 10 ++++++++++
- 2 files changed, 17 insertions(+)
-
-diff --git a/include/linux/module.h b/include/linux/module.h
-index f520a767c86c..fc9b54eb779e 100644
---- a/include/linux/module.h
-+++ b/include/linux/module.h
-@@ -509,6 +509,8 @@ int unregister_module_notifier(struct notifier_block *nb);
-
- extern void print_modules(void);
-
-+extern bool secure_modules(void);
-+
- #else /* !CONFIG_MODULES... */
-
- /* Given an address, look for it in the exception tables. */
-@@ -619,6 +621,11 @@ static inline int unregister_module_notifier(struct notifier_block *nb)
- static inline void print_modules(void)
- {
- }
-+
-+static inline bool secure_modules(void)
-+{
-+ return false;
-+}
- #endif /* CONFIG_MODULES */
-
- #ifdef CONFIG_SYSFS
-diff --git a/kernel/module.c b/kernel/module.c
-index 11869408f79b..2b9204fe055f 100644
---- a/kernel/module.c
-+++ b/kernel/module.c
-@@ -3835,3 +3835,13 @@ void module_layout(struct module *mod,
- }
- EXPORT_SYMBOL(module_layout);
- #endif
-+
-+bool secure_modules(void)
-+{
-+#ifdef CONFIG_MODULE_SIG
-+ return (sig_enforce || modules_disabled);
-+#else
-+ return modules_disabled;
-+#endif
-+}
-+EXPORT_SYMBOL(secure_modules);
---
-1.8.5.3
-
-
-From 806c4ee0e6484b529b88b3d0ceb49f6edf96ae11 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Thu, 8 Mar 2012 10:10:38 -0500
-Subject: [PATCH 02/14] PCI: Lock down BAR access when module security is
- enabled
-
-Any hardware that can potentially generate DMA has to be locked down from
-userspace in order to avoid it being possible for an attacker to modify
-kernel code, allowing them to circumvent disabled module loading or module
-signing. Default to paranoid - in future we can potentially relax this for
-sufficiently IOMMU-isolated devices.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- drivers/pci/pci-sysfs.c | 10 ++++++++++
- drivers/pci/proc.c | 8 +++++++-
- drivers/pci/syscall.c | 3 ++-
- 3 files changed, 19 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
-index 4e0acefb7565..01b56d13d021 100644
---- a/drivers/pci/pci-sysfs.c
-+++ b/drivers/pci/pci-sysfs.c
-@@ -29,6 +29,7 @@
- #include <linux/slab.h>
- #include <linux/vgaarb.h>
- #include <linux/pm_runtime.h>
-+#include <linux/module.h>
- #include "pci.h"
-
- static int sysfs_initialized; /* = 0 */
-@@ -652,6 +653,9 @@ pci_write_config(struct file* filp, struct kobject *kobj,
- loff_t init_off = off;
- u8 *data = (u8*) buf;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (off > dev->cfg_size)
- return 0;
- if (off + count > dev->cfg_size) {
-@@ -958,6 +962,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
- resource_size_t start, end;
- int i;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- for (i = 0; i < PCI_ROM_RESOURCE; i++)
- if (res == &pdev->resource[i])
- break;
-@@ -1065,6 +1072,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj,
- struct bin_attribute *attr, char *buf,
- loff_t off, size_t count)
- {
-+ if (secure_modules())
-+ return -EPERM;
-+
- return pci_resource_io(filp, kobj, attr, buf, off, count, true);
- }
-
-diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
-index 46d1378f2e9e..294fe7b34af0 100644
---- a/drivers/pci/proc.c
-+++ b/drivers/pci/proc.c
-@@ -117,6 +117,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
- int size = dev->cfg_size;
- int cnt;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (pos >= size)
- return 0;
- if (nbytes >= size)
-@@ -196,6 +199,9 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd,
- #endif /* HAVE_PCI_MMAP */
- int ret = 0;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- switch (cmd) {
- case PCIIOC_CONTROLLER:
- ret = pci_domain_nr(dev->bus);
-@@ -234,7 +240,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma)
- struct pci_filp_private *fpriv = file->private_data;
- int i, ret;
-
-- if (!capable(CAP_SYS_RAWIO))
-+ if (!capable(CAP_SYS_RAWIO) || secure_modules())
- return -EPERM;
-
- /* Make sure the caller is mapping a real resource for this device */
-diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
-index 24750a1b39b6..fa57896b97dd 100644
---- a/drivers/pci/syscall.c
-+++ b/drivers/pci/syscall.c
-@@ -10,6 +10,7 @@
- #include <linux/errno.h>
- #include <linux/pci.h>
- #include <linux/syscalls.h>
-+#include <linux/module.h>
- #include <asm/uaccess.h>
- #include "pci.h"
-
-@@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
- u32 dword;
- int err = 0;
-
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!capable(CAP_SYS_ADMIN) || secure_modules())
- return -EPERM;
-
- dev = pci_get_bus_and_slot(bus, dfn);
---
-1.8.5.3
-
-
-From 16ee82e2add8684e374451e6ba34be3ee41e4ef1 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Thu, 8 Mar 2012 10:35:59 -0500
-Subject: [PATCH 03/14] x86: Lock down IO port access when module security is
- enabled
-
-IO port access would permit users to gain access to PCI configuration
-registers, which in turn (on a lot of hardware) give access to MMIO register
-space. This would potentially permit root to trigger arbitrary DMA, so lock
-it down by default.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- arch/x86/kernel/ioport.c | 5 +++--
- drivers/char/mem.c | 4 ++++
- 2 files changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
-index 4ddaf66ea35f..00b440307419 100644
---- a/arch/x86/kernel/ioport.c
-+++ b/arch/x86/kernel/ioport.c
-@@ -15,6 +15,7 @@
- #include <linux/thread_info.h>
- #include <linux/syscalls.h>
- #include <linux/bitmap.h>
-+#include <linux/module.h>
- #include <asm/syscalls.h>
-
- /*
-@@ -28,7 +29,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
-
- if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
- return -EINVAL;
-- if (turn_on && !capable(CAP_SYS_RAWIO))
-+ if (turn_on && (!capable(CAP_SYS_RAWIO) || secure_modules()))
- return -EPERM;
-
- /*
-@@ -103,7 +104,7 @@ SYSCALL_DEFINE1(iopl, unsigned int, level)
- return -EINVAL;
- /* Trying to gain more privileges? */
- if (level > old) {
-- if (!capable(CAP_SYS_RAWIO))
-+ if (!capable(CAP_SYS_RAWIO) || secure_modules())
- return -EPERM;
- }
- regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
-diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 917403fe10da..cdf839f9defe 100644
---- a/drivers/char/mem.c
-+++ b/drivers/char/mem.c
-@@ -27,6 +27,7 @@
- #include <linux/export.h>
- #include <linux/io.h>
- #include <linux/aio.h>
-+#include <linux/module.h>
-
- #include <asm/uaccess.h>
-
-@@ -568,6 +569,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
- unsigned long i = *ppos;
- const char __user *tmp = buf;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (!access_ok(VERIFY_READ, buf, count))
- return -EFAULT;
- while (count-- > 0 && i < 65536) {
---
-1.8.5.3
-
-
-From 2fd4b35393b19cde87e4770d3b85d12760e72f6a Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 9 Mar 2012 08:39:37 -0500
-Subject: [PATCH 04/14] ACPI: Limit access to custom_method
-
-custom_method effectively allows arbitrary access to system memory, making
-it possible for an attacker to circumvent restrictions on module loading.
-Disable it if any such restrictions have been enabled.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- drivers/acpi/custom_method.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c
-index c68e72414a67..4277938af700 100644
---- a/drivers/acpi/custom_method.c
-+++ b/drivers/acpi/custom_method.c
-@@ -29,6 +29,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
- struct acpi_table_header table;
- acpi_status status;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (!(*ppos)) {
- /* parse the table header to get the table length */
- if (count <= sizeof(struct acpi_table_header))
---
-1.8.5.3
-
-
-From 543d64276237adb782ec30a5dab67d0b21afc1d4 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 9 Mar 2012 08:46:50 -0500
-Subject: [PATCH 05/14] asus-wmi: Restrict debugfs interface when module
- loading is restricted
-
-We have no way of validating what all of the Asus WMI methods do on a
-given machine, and there's a risk that some will allow hardware state to
-be manipulated in such a way that arbitrary code can be executed in the
-kernel, circumventing module loading restrictions. Prevent that if any of
-these features are enabled.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- drivers/platform/x86/asus-wmi.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index c5e082fb82fa..03c57fc8de8a 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1595,6 +1595,9 @@ static int show_dsts(struct seq_file *m, void *data)
- int err;
- u32 retval = -1;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
-
- if (err < 0)
-@@ -1611,6 +1614,9 @@ static int show_devs(struct seq_file *m, void *data)
- int err;
- u32 retval = -1;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
- &retval);
-
-@@ -1635,6 +1641,9 @@ static int show_call(struct seq_file *m, void *data)
- union acpi_object *obj;
- acpi_status status;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID,
- 1, asus->debug.method_id,
- &input, &output);
---
-1.8.5.3
-
-
-From 6e2fec5547b597c43ca72e34729b8a402660a7c1 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 9 Mar 2012 09:28:15 -0500
-Subject: [PATCH 06/14] Restrict /dev/mem and /dev/kmem when module loading is
- restricted
-
-Allowing users to write to address space makes it possible for the kernel
-to be subverted, avoiding module loading restrictions. Prevent this when
-any restrictions have been imposed on loading modules.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- drivers/char/mem.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index cdf839f9defe..c63cf93b00eb 100644
---- a/drivers/char/mem.c
-+++ b/drivers/char/mem.c
-@@ -164,6 +164,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
- if (p != *ppos)
- return -EFBIG;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (!valid_phys_addr_range(p, count))
- return -EFAULT;
-
-@@ -502,6 +505,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
- char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
- int err = 0;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (p < (unsigned long) high_memory) {
- unsigned long to_write = min_t(unsigned long, count,
- (unsigned long)high_memory - p);
---
-1.8.5.3
-
-
-From 358cea0a54f726fa61839b411f3f54284d4588bf Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Mon, 25 Jun 2012 19:57:30 -0400
-Subject: [PATCH 07/14] acpi: Ignore acpi_rsdp kernel parameter when module
- loading is restricted
-
-This option allows userspace to pass the RSDP address to the kernel, which
-makes it possible for a user to circumvent any restrictions imposed on
-loading modules. Disable it in that case.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- drivers/acpi/osl.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
-index f7fd72ac69cf..ccdae1c8c386 100644
---- a/drivers/acpi/osl.c
-+++ b/drivers/acpi/osl.c
-@@ -44,6 +44,7 @@
- #include <linux/list.h>
- #include <linux/jiffies.h>
- #include <linux/semaphore.h>
-+#include <linux/module.h>
-
- #include <asm/io.h>
- #include <asm/uaccess.h>
-@@ -244,7 +245,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
- acpi_physical_address __init acpi_os_get_root_pointer(void)
- {
- #ifdef CONFIG_KEXEC
-- if (acpi_rsdp)
-+ if (acpi_rsdp && !secure_modules())
- return acpi_rsdp;
- #endif
-
---
-1.8.5.3
-
-
-From 89751b3ad4dea7cf5b806cd14126dd70657a9148 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 9 Aug 2013 03:33:56 -0400
-Subject: [PATCH 08/14] kexec: Disable at runtime if the kernel enforces module
- loading restrictions
-
-kexec permits the loading and execution of arbitrary code in ring 0, which
-is something that module signing enforcement is meant to prevent. It makes
-sense to disable kexec in this situation.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- kernel/kexec.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/kernel/kexec.c b/kernel/kexec.c
-index c8380ad203bc..e6eb239f567a 100644
---- a/kernel/kexec.c
-+++ b/kernel/kexec.c
-@@ -33,6 +33,7 @@
- #include <linux/swap.h>
- #include <linux/syscore_ops.h>
- #include <linux/compiler.h>
-+#include <linux/module.h>
-
- #include <asm/page.h>
- #include <asm/uaccess.h>
-@@ -948,6 +949,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
- return -EPERM;
-
- /*
-+ * kexec can be used to circumvent module loading restrictions, so
-+ * prevent loading in that case
-+ */
-+ if (secure_modules())
-+ return -EPERM;
-+
-+ /*
- * Verify we have a legal set of flags
- * This leaves us room for future extensions.
- */
---
-1.8.5.3
-
-
-From 31174421a7103571a1c3faf7ba27d4045e5fbc18 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Tue, 3 Sep 2013 11:23:29 -0400
-Subject: [PATCH 09/14] uswsusp: Disable when module loading is restricted
-
-uswsusp allows a user process to dump and then restore kernel state, which
-makes it possible to avoid module loading restrictions. Prevent this when
-any restrictions have been imposed on loading modules.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- kernel/power/user.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/kernel/power/user.c b/kernel/power/user.c
-index 98d357584cd6..efe99dee9510 100644
---- a/kernel/power/user.c
-+++ b/kernel/power/user.c
-@@ -24,6 +24,7 @@
- #include <linux/console.h>
- #include <linux/cpu.h>
- #include <linux/freezer.h>
-+#include <linux/module.h>
-
- #include <asm/uaccess.h>
-
-@@ -49,6 +50,9 @@ static int snapshot_open(struct inode *inode, struct file *filp)
- struct snapshot_data *data;
- int error;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- lock_system_sleep();
-
- if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
---
-1.8.5.3
-
-
-From ea5cf8801db979fa7d5f90ab3faf72eb22490f9b Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 8 Feb 2013 11:12:13 -0800
-Subject: [PATCH 10/14] x86: Restrict MSR access when module loading is
- restricted
-
-Writing to MSRs should not be allowed if module loading is restricted,
-since it could lead to execution of arbitrary code in kernel mode. Based
-on a patch by Kees Cook.
-
-Cc: Kees Cook <keescook@chromium.org>
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- arch/x86/kernel/msr.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
-index c9603ac80de5..8bef43fc3f40 100644
---- a/arch/x86/kernel/msr.c
-+++ b/arch/x86/kernel/msr.c
-@@ -103,6 +103,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
- int err = 0;
- ssize_t bytes = 0;
-
-+ if (secure_modules())
-+ return -EPERM;
-+
- if (count % 8)
- return -EINVAL; /* Invalid chunk size */
-
-@@ -150,6 +153,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
- err = -EBADF;
- break;
- }
-+ if (secure_modules()) {
-+ err = -EPERM;
-+ break;
-+ }
- if (copy_from_user(&regs, uregs, sizeof regs)) {
- err = -EFAULT;
- break;
---
-1.8.5.3
-
-
-From 2985684ff78972bde7ebf1e295b52afd9bea29e0 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <matthew.garrett@nebula.com>
-Date: Fri, 9 Aug 2013 18:36:30 -0400
-Subject: [PATCH 11/14] Add option to automatically enforce module signatures
- when in Secure Boot mode
-
-UEFI Secure Boot provides a mechanism for ensuring that the firmware will
-only load signed bootloaders and kernels. Certain use cases may also
-require that all kernel modules also be signed. Add a configuration option
-that enforces this automatically when enabled.
-
-Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
----
- Documentation/x86/zero-page.txt | 2 ++
- arch/x86/Kconfig | 10 ++++++++++
- arch/x86/boot/compressed/eboot.c | 36 +++++++++++++++++++++++++++++++++++
- arch/x86/include/uapi/asm/bootparam.h | 3 ++-
- arch/x86/kernel/setup.c | 6 ++++++
- include/linux/module.h | 6 ++++++
- kernel/module.c | 7 +++++++
- 7 files changed, 69 insertions(+), 1 deletion(-)
-
-diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt
-index 199f453cb4de..ec38acf00b40 100644
---- a/Documentation/x86/zero-page.txt
-+++ b/Documentation/x86/zero-page.txt
-@@ -30,6 +30,8 @@ Offset Proto Name Meaning
- 1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below)
- 1EA/001 ALL edd_mbr_sig_buf_entries Number of entries in edd_mbr_sig_buffer
- (below)
-+1EB/001 ALL kbd_status Numlock is enabled
-+1EC/001 ALL secure_boot Secure boot is enabled in the firmware
- 1EF/001 ALL sentinel Used to detect broken bootloaders
- 290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
- 2D0/A00 ALL e820_map E820 memory map table
-diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 5b8ec0f53b57..085d5eb36361 100644
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -1534,6 +1534,16 @@ config EFI_MIXED
-
- If unsure, say N.
-
-+config EFI_SECURE_BOOT_SIG_ENFORCE
-+ def_bool n
-+ prompt "Force module signing when UEFI Secure Boot is enabled"
-+ ---help---
-+ UEFI Secure Boot provides a mechanism for ensuring that the
-+ firmware will only load signed bootloaders and kernels. Certain
-+ use cases may also require that all kernel modules also be signed.
-+ Say Y here to automatically enable module signature enforcement
-+ when a system boots with UEFI Secure Boot enabled.
-+
- config SECCOMP
- def_bool y
- prompt "Enable seccomp to safely compute untrusted bytecode"
-diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index 1e6146137f8e..b00745ff398a 100644
---- a/arch/x86/boot/compressed/eboot.c
-+++ b/arch/x86/boot/compressed/eboot.c
-@@ -12,6 +12,7 @@
- #include <asm/efi.h>
- #include <asm/setup.h>
- #include <asm/desc.h>
-+#include <asm/bootparam_utils.h>
-
- #undef memcpy /* Use memcpy from misc.c */
-
-@@ -809,6 +810,37 @@ out:
- return status;
- }
-
-+static int get_secure_boot(void)
-+{
-+ u8 sb, setup;
-+ unsigned long datasize = sizeof(sb);
-+ efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
-+ efi_status_t status;
-+
-+ status = efi_call_phys5(sys_table->runtime->get_variable,
-+ L"SecureBoot", &var_guid, NULL, &datasize, &sb);
-+
-+ if (status != EFI_SUCCESS)
-+ return 0;
-+
-+ if (sb == 0)
-+ return 0;
-+
-+
-+ status = efi_call_phys5(sys_table->runtime->get_variable,
-+ L"SetupMode", &var_guid, NULL, &datasize,
-+ &setup);
-+
-+ if (status != EFI_SUCCESS)
-+ return 0;
-+
-+ if (setup == 1)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+
- /*
- * See if we have Graphics Output Protocol
- */
-@@ -1372,6 +1404,10 @@ struct boot_params *efi_main(struct efi_config *c,
- else
- setup_boot_services32(efi_early);
-
-+ sanitize_boot_params(boot_params);
-+
-+ boot_params->secure_boot = get_secure_boot();
-+
- setup_graphics(boot_params);
-
- setup_efi_pci(boot_params);
-diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h
-index 225b0988043a..90dbfb73e11f 100644
---- a/arch/x86/include/uapi/asm/bootparam.h
-+++ b/arch/x86/include/uapi/asm/bootparam.h
-@@ -133,7 +133,8 @@ struct boot_params {
- __u8 eddbuf_entries; /* 0x1e9 */
- __u8 edd_mbr_sig_buf_entries; /* 0x1ea */
- __u8 kbd_status; /* 0x1eb */
-- __u8 _pad5[3]; /* 0x1ec */
-+ __u8 secure_boot; /* 0x1ec */
-+ __u8 _pad5[2]; /* 0x1ed */
- /*
- * The sentinel is set to a nonzero value (0xff) in header.S.
- *
-diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 09c76d265550..5a61d732fd5c 100644
---- a/arch/x86/kernel/setup.c
-+++ b/arch/x86/kernel/setup.c
-@@ -1142,6 +1142,12 @@ void __init setup_arch(char **cmdline_p)
-
- io_delay_init();
-
-+#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
-+ if (boot_params.secure_boot) {
-+ enforce_signed_modules();
-+ }
-+#endif
-+
- /*
- * Parse the ACPI tables for possible boot-time SMP configuration.
- */
-diff --git a/include/linux/module.h b/include/linux/module.h
-index fc9b54eb779e..7377bc851461 100644
---- a/include/linux/module.h
-+++ b/include/linux/module.h
-@@ -188,6 +188,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add);
-
- struct notifier_block;
-
-+#ifdef CONFIG_MODULE_SIG
-+extern void enforce_signed_modules(void);
-+#else
-+static inline void enforce_signed_modules(void) {};
-+#endif
-+
- #ifdef CONFIG_MODULES
-
- extern int modules_disabled; /* for sysctl */
-diff --git a/kernel/module.c b/kernel/module.c
-index 2b9204fe055f..2b8cc2d57c16 100644
---- a/kernel/module.c
-+++ b/kernel/module.c
-@@ -3836,6 +3836,13 @@ void module_layout(struct module *mod,
- EXPORT_SYMBOL(module_layout);
- #endif
-
-+#ifdef CONFIG_MODULE_SIG
-+void enforce_signed_modules(void)
-+{
-+ sig_enforce = true;
-+}
-+#endif
-+
- bool secure_modules(void)
- {
- #ifdef CONFIG_MODULE_SIG
---
-1.8.5.3
-
-
-From b2e4ea728ccab2befbd5fe1bd834881a7dd8f34b Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Tue, 5 Feb 2013 19:25:05 -0500
-Subject: [PATCH 12/14] efi: Disable secure boot if shim is in insecure mode
-
-A user can manually tell the shim boot loader to disable validation of
-images it loads. When a user does this, it creates a UEFI variable called
-MokSBState that does not have the runtime attribute set. Given that the
-user explicitly disabled validation, we can honor that and not enable
-secure boot mode if that variable is set.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- arch/x86/boot/compressed/eboot.c | 20 +++++++++++++++++++-
- 1 file changed, 19 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index b00745ff398a..bf42cc5f083d 100644
---- a/arch/x86/boot/compressed/eboot.c
-+++ b/arch/x86/boot/compressed/eboot.c
-@@ -812,8 +812,9 @@ out:
-
- static int get_secure_boot(void)
- {
-- u8 sb, setup;
-+ u8 sb, setup, moksbstate;
- unsigned long datasize = sizeof(sb);
-+ u32 attr;
- efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
- efi_status_t status;
-
-@@ -837,6 +838,23 @@ static int get_secure_boot(void)
- if (setup == 1)
- return 0;
-
-+ /* See if a user has put shim into insecure_mode. If so, and the variable
-+ * doesn't have the runtime attribute set, we might as well honor that.
-+ */
-+ var_guid = EFI_SHIM_LOCK_GUID;
-+ status = efi_call_phys5(sys_table->runtime->get_variable,
-+ L"MokSBState", &var_guid, &attr, &datasize,
-+ &moksbstate);
-+
-+ /* If it fails, we don't care why. Default to secure */
-+ if (status != EFI_SUCCESS)
-+ return 1;
-+
-+ if (!(attr & EFI_VARIABLE_RUNTIME_ACCESS)) {
-+ if (moksbstate == 1)
-+ return 0;
-+ }
-+
- return 1;
- }
-
---
-1.8.5.3
-
-
-From fb418c682d01c447d30b5591a591fdbf33b1334e Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Tue, 27 Aug 2013 13:28:43 -0400
-Subject: [PATCH 13/14] efi: Make EFI_SECURE_BOOT_SIG_ENFORCE depend on EFI
-
-The functionality of the config option is dependent upon the platform being
-UEFI based. Reflect this in the config deps.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
----
- arch/x86/Kconfig | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 085d5eb36361..3e8d398a976d 100644
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -1535,7 +1535,8 @@ config EFI_MIXED
- If unsure, say N.
-
- config EFI_SECURE_BOOT_SIG_ENFORCE
-- def_bool n
-+ def_bool n
-+ depends on EFI
- prompt "Force module signing when UEFI Secure Boot is enabled"
- ---help---
- UEFI Secure Boot provides a mechanism for ensuring that the
---
-1.8.5.3
-
-
-From 87bf357dd4589cfca043ec4b641b912a088b1234 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@fedoraproject.org>
-Date: Tue, 27 Aug 2013 13:33:03 -0400
-Subject: [PATCH 14/14] efi: Add EFI_SECURE_BOOT bit
-
-UEFI machines can be booted in Secure Boot mode. Add a EFI_SECURE_BOOT bit
-for use with efi_enabled.
-
-Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
----
- arch/x86/kernel/setup.c | 2 ++
- include/linux/efi.h | 1 +
- 2 files changed, 3 insertions(+)
-
-diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 5a61d732fd5c..23fe9bf3c401 100644
---- a/arch/x86/kernel/setup.c
-+++ b/arch/x86/kernel/setup.c
-@@ -1144,7 +1144,9 @@ void __init setup_arch(char **cmdline_p)
-
- #ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
- if (boot_params.secure_boot) {
-+ set_bit(EFI_SECURE_BOOT, &efi.flags);
- enforce_signed_modules();
-+ pr_info("Secure boot enabled\n");
- }
- #endif
-
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 6c100ff0cae4..3a77a70fff27 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -899,6 +899,7 @@ extern int __init efi_setup_pcdp_console(char *);
- #define EFI_MEMMAP 4 /* Can we use EFI memory map? */
- #define EFI_64BIT 5 /* Is the firmware 64-bit? */
- #define EFI_ARCH_1 6 /* First arch-specific bit */
-+#define EFI_SECURE_BOOT 7 /* Are we in Secure Boot mode? */
-
- #ifdef CONFIG_EFI
- /*
---
-1.8.5.3
-
diff --git a/serial-460800.patch b/serial-460800.patch
deleted file mode 100644
index bdae70e31..000000000
--- a/serial-460800.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
-index 2209620..659c1bb 100644
---- a/drivers/tty/serial/8250/8250_core.c
-+++ b/drivers/tty/serial/8250/8250_core.c
-@@ -7,6 +7,9 @@
- *
- * Copyright (C) 2001 Russell King.
- *
-+ * 2005/09/16: Enabled higher baud rates for 16C95x.
-+ * (Mathias Adam <a2@adamis.de>)
-+ *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
-@@ -2227,6 +2230,14 @@ static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int
- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
- baud == (port->uartclk/8))
- quot = 0x8002;
-+ /*
-+ * For 16C950s UART_TCR is used in combination with divisor==1
-+ * to achieve baud rates up to baud_base*4.
-+ */
-+ else if ((port->type == PORT_16C950) &&
-+ baud > (port->uartclk/16))
-+ quot = 1;
-+
- else
- quot = uart_get_divisor(port, baud);
-
-@@ -2240,7 +2251,7 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
- container_of(port, struct uart_8250_port, port);
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, max_baud;
- int fifo_bug = 0;
-
- switch (termios->c_cflag & CSIZE) {
-@@ -2272,9 +2283,10 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
- /*
- * Ask the core to calculate the divisor for us.
- */
-+ max_baud = (up->port.type == PORT_16C950 ? port->uartclk/4 : port->uartclk/16);
- baud = uart_get_baud_rate(port, termios, old,
- port->uartclk / 16 / 0xffff,
-- port->uartclk / 16);
-+ max_baud);
- quot = serial8250_get_divisor(port, baud);
-
- /*
-@@ -2311,6 +2323,19 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
- spin_lock_irqsave(&up->port.lock, flags);
-
- /*
-+ * 16C950 supports additional prescaler ratios between 1:16 and 1:4
-+ * thus increasing max baud rate to uartclk/4.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ if (baud == port->uartclk/4)
-+ serial_icr_write(up, UART_TCR, 0x4);
-+ else if (baud == port->uartclk/8)
-+ serial_icr_write(up, UART_TCR, 0x8);
-+ else
-+ serial_icr_write(up, UART_TCR, 0);
-+ }
-+
-+ /*
- * Update the per-port timeout.
- */
- uart_update_timeout(port, termios->c_cflag, baud);
diff --git a/silence-fbcon-logo.patch b/silence-fbcon-logo.patch
index 45ab73331..e5549546d 100644
--- a/silence-fbcon-logo.patch
+++ b/silence-fbcon-logo.patch
@@ -1,8 +1,18 @@
+From: "kernel-team@fedoraproject.org" <kernel-team@fedoraproject.org>
+Date: Thu, 29 Jul 2010 16:46:31 -0700
+Subject: [PATCH] silence fbcon logo
+
+Bugzilla: N/A
+Upstream-status: Fedora mustard
+---
+ drivers/video/console/fbcon.c | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
-index 1657b96..4c5c2be 100644
+index b97210671a81..2d12ad82fe75 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
-@@ -631,13 +631,15 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
+@@ -634,13 +634,15 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
kfree(save);
}
@@ -25,7 +35,7 @@ index 1657b96..4c5c2be 100644
}
}
#endif /* MODULE */
-@@ -3489,6 +3491,14 @@ static int __init fb_console_init(void)
+@@ -3620,6 +3622,14 @@ static int __init fb_console_init(void)
return 0;
}
@@ -37,6 +47,6 @@ index 1657b96..4c5c2be 100644
+
+early_param("quiet", quiet_logo);
+
- module_init(fb_console_init);
+ fs_initcall(fb_console_init);
#ifdef MODULE
diff --git a/sources b/sources
index 44323382b..07d7ee3e6 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
-97ca1625bb40368dc41b9a7971549071 linux-3.15.tar.xz
-ef8f4db937f521a7e323ec589536ba25 perf-man-3.15.tar.gz
-53eb7e210c9330021e60ffe2c5081e19 patch-3.15.2.xz
+3d5ea06d767e2f35c999eeadafc76523 linux-4.2.tar.xz
+4c964bfba54d65b5b54cc898baddecad perf-man-4.2.tar.gz
diff --git a/thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch b/thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch
deleted file mode 100644
index 9f82b7d66..000000000
--- a/thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Bugzilla: N/A
-Upstream-status: Sent for 3.16
-
-From a02f11f85e2cb2e0aced78913ebcf060d6055203 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:40:58 +0200
-Subject: [PATCH 01/14] thinkpad_acpi: Add mappings for F9 - F12 hotkeys on
- X240 / T440 / T540
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The T440s user guide says that when Fn-lock is not active, the *40s' F9 - F12
-keys should be mapped to: control-panel, search, show-all-windows and Computer.
-
-These keys generate the sofar unused 28 - 31 hotkey scancodes.
-
-For the first 2 this nicely matches the icons on the keys, for the latter 2
-the icons are somewhat creative, which is why I ended up looking them up in
-the user manual.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/thinkpad_acpi.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
-index 15e61c16736e..d82f196e3cfe 100644
---- a/drivers/platform/x86/thinkpad_acpi.c
-+++ b/drivers/platform/x86/thinkpad_acpi.c
-@@ -3171,8 +3171,10 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
- KEY_MICMUTE, /* 0x1a: Mic mute (since ?400 or so) */
-
- /* (assignments unknown, please report if found) */
-- KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
- KEY_UNKNOWN,
-+
-+ /* Extra keys in use since the X240 / T440 / T540 */
-+ KEY_CONFIG, KEY_SEARCH, KEY_SCALE, KEY_COMPUTER,
- },
- };
-
---
-1.9.0
-
diff --git a/upstream-reverts.patch b/upstream-reverts.patch
deleted file mode 100644
index 607602cfc..000000000
--- a/upstream-reverts.patch
+++ /dev/null
@@ -1 +0,0 @@
-nil
diff --git a/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch b/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
new file mode 100644
index 000000000..da38d700f
--- /dev/null
+++ b/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-D.patch
@@ -0,0 +1,40 @@
+From: Mark Langsdorf <mlangsdo@redhat.com>
+Date: Wed, 25 Mar 2015 14:12:51 -0400
+Subject: [PATCH] usb: make xhci platform driver use 64 bit or 32 bit DMA
+
+The xhci platform driver needs to work on systems that either only
+support 64-bit DMA or only support 32-bit DMA. Attempt to set a
+coherent dma mask for 64-bit DMA, and attempt again with 32-bit
+DMA if that fails.
+
+Signed-off-by: Mark Langsdorf <mlangsdo@redhat.com>
+---
+ drivers/usb/host/xhci-plat.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
+index 0e11d61408ff..cc5ca2cac706 100644
+--- a/drivers/usb/host/xhci-plat.c
++++ b/drivers/usb/host/xhci-plat.c
+@@ -83,14 +83,13 @@ static int xhci_plat_probe(struct platform_device *pdev)
+ if (irq < 0)
+ return -ENODEV;
+
+- /* Initialize dma_mask and coherent_dma_mask to 32-bits */
+- ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
+- if (ret)
+- return ret;
+- if (!pdev->dev.dma_mask)
+- pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
+- else
+- dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
++ /* Try setting the coherent_dma_mask to 64 bits, then try 32 bits */
++ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
++ if (ret) {
++ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
++ if (ret)
++ return ret;
++ }
+
+ hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
+ if (!hcd)
diff --git a/vmwgfx-Rework-device-initialization.patch b/vmwgfx-Rework-device-initialization.patch
new file mode 100644
index 000000000..183ba9c28
--- /dev/null
+++ b/vmwgfx-Rework-device-initialization.patch
@@ -0,0 +1,890 @@
+From c1d9b32d8ee2e97e2867fa759eb84d436cca0311 Mon Sep 17 00:00:00 2001
+From: Thomas Hellstrom <thellstrom@vmware.com>
+Date: Thu, 25 Jun 2015 10:47:43 -0700
+Subject: [PATCH 1/2] vmwgfx: Rework device initialization
+
+This commit reworks device initialization so that we always enable the
+FIFO at driver load, deferring SVGA enable until either first modeset
+or fbdev enable.
+This should always leave the fifo properly enabled for render- and
+control nodes.
+In addition,
+*) We disable the use of VRAM when SVGA is not enabled.
+*) We simplify PM support so that we only throw out resources on hibernate,
+not on suspend, since the device keeps its state on suspend.
+
+Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
+Reviewed-by: Sinclair Yeh <syeh@vmware.com>
+---
+ drivers/gpu/drm/vmwgfx/vmwgfx_context.c | 8 +-
+ drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 337 ++++++++++++++++++--------------
+ drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 19 +-
+ drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 4 +
+ drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c | 12 +-
+ drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 1 +
+ drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 6 +-
+ drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 1 +
+ drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 4 +-
+ drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 12 +-
+ 10 files changed, 230 insertions(+), 174 deletions(-)
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
+index 5ac92874404d..a8e370a55e90 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
+@@ -140,7 +140,7 @@ static void vmw_hw_context_destroy(struct vmw_resource *res)
+ cmd->body.cid = cpu_to_le32(res->id);
+
+ vmw_fifo_commit(dev_priv, sizeof(*cmd));
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+ }
+
+ static int vmw_gb_context_init(struct vmw_private *dev_priv,
+@@ -220,7 +220,7 @@ static int vmw_context_init(struct vmw_private *dev_priv,
+ cmd->body.cid = cpu_to_le32(res->id);
+
+ vmw_fifo_commit(dev_priv, sizeof(*cmd));
+- (void) vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
+ vmw_resource_activate(res, vmw_hw_context_destroy);
+ return 0;
+
+@@ -281,7 +281,7 @@ static int vmw_gb_context_create(struct vmw_resource *res)
+ cmd->header.size = sizeof(cmd->body);
+ cmd->body.cid = res->id;
+ vmw_fifo_commit(dev_priv, sizeof(*cmd));
+- (void) vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
+
+ return 0;
+
+@@ -414,7 +414,7 @@ static int vmw_gb_context_destroy(struct vmw_resource *res)
+ if (dev_priv->query_cid == res->id)
+ dev_priv->query_cid_valid = false;
+ vmw_resource_release_id(res);
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+index 620bb5cf617c..a4766acd0ea2 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+@@ -339,24 +339,47 @@ static int vmw_dummy_query_bo_create(struct vmw_private *dev_priv)
+ return ret;
+ }
+
+-static int vmw_request_device(struct vmw_private *dev_priv)
++/**
++ * vmw_request_device_late - Perform late device setup
++ *
++ * @dev_priv: Pointer to device private.
++ *
++ * This function performs setup of otables and enables large command
++ * buffer submission. These tasks are split out to a separate function
++ * because it reverts vmw_release_device_early and is intended to be used
++ * by an error path in the hibernation code.
++ */
++static int vmw_request_device_late(struct vmw_private *dev_priv)
+ {
+ int ret;
+
+- ret = vmw_fifo_init(dev_priv, &dev_priv->fifo);
+- if (unlikely(ret != 0)) {
+- DRM_ERROR("Unable to initialize FIFO.\n");
+- return ret;
+- }
+- vmw_fence_fifo_up(dev_priv->fman);
+ if (dev_priv->has_mob) {
+ ret = vmw_otables_setup(dev_priv);
+ if (unlikely(ret != 0)) {
+ DRM_ERROR("Unable to initialize "
+ "guest Memory OBjects.\n");
+- goto out_no_mob;
++ return ret;
+ }
+ }
++
++ return 0;
++}
++
++static int vmw_request_device(struct vmw_private *dev_priv)
++{
++ int ret;
++
++ ret = vmw_fifo_init(dev_priv, &dev_priv->fifo);
++ if (unlikely(ret != 0)) {
++ DRM_ERROR("Unable to initialize FIFO.\n");
++ return ret;
++ }
++ vmw_fence_fifo_up(dev_priv->fman);
++
++ ret = vmw_request_device_late(dev_priv);
++ if (ret)
++ goto out_no_mob;
++
+ ret = vmw_dummy_query_bo_create(dev_priv);
+ if (unlikely(ret != 0))
+ goto out_no_query_bo;
+@@ -364,15 +387,25 @@ static int vmw_request_device(struct vmw_private *dev_priv)
+ return 0;
+
+ out_no_query_bo:
+- if (dev_priv->has_mob)
++ if (dev_priv->has_mob) {
++ (void) ttm_bo_evict_mm(&dev_priv->bdev, VMW_PL_MOB);
+ vmw_otables_takedown(dev_priv);
++ }
+ out_no_mob:
+ vmw_fence_fifo_down(dev_priv->fman);
+ vmw_fifo_release(dev_priv, &dev_priv->fifo);
+ return ret;
+ }
+
+-static void vmw_release_device(struct vmw_private *dev_priv)
++/**
++ * vmw_release_device_early - Early part of fifo takedown.
++ *
++ * @dev_priv: Pointer to device private struct.
++ *
++ * This is the first part of command submission takedown, to be called before
++ * buffer management is taken down.
++ */
++static void vmw_release_device_early(struct vmw_private *dev_priv)
+ {
+ /*
+ * Previous destructions should've released
+@@ -382,64 +415,24 @@ static void vmw_release_device(struct vmw_private *dev_priv)
+ BUG_ON(dev_priv->pinned_bo != NULL);
+
+ ttm_bo_unref(&dev_priv->dummy_query_bo);
+- if (dev_priv->has_mob)
++ if (dev_priv->has_mob) {
++ ttm_bo_evict_mm(&dev_priv->bdev, VMW_PL_MOB);
+ vmw_otables_takedown(dev_priv);
+- vmw_fence_fifo_down(dev_priv->fman);
+- vmw_fifo_release(dev_priv, &dev_priv->fifo);
+-}
+-
+-
+-/**
+- * Increase the 3d resource refcount.
+- * If the count was prevously zero, initialize the fifo, switching to svga
+- * mode. Note that the master holds a ref as well, and may request an
+- * explicit switch to svga mode if fb is not running, using @unhide_svga.
+- */
+-int vmw_3d_resource_inc(struct vmw_private *dev_priv,
+- bool unhide_svga)
+-{
+- int ret = 0;
+-
+- mutex_lock(&dev_priv->release_mutex);
+- if (unlikely(dev_priv->num_3d_resources++ == 0)) {
+- ret = vmw_request_device(dev_priv);
+- if (unlikely(ret != 0))
+- --dev_priv->num_3d_resources;
+- } else if (unhide_svga) {
+- vmw_write(dev_priv, SVGA_REG_ENABLE,
+- vmw_read(dev_priv, SVGA_REG_ENABLE) &
+- ~SVGA_REG_ENABLE_HIDE);
+ }
+-
+- mutex_unlock(&dev_priv->release_mutex);
+- return ret;
+ }
+
+ /**
+- * Decrease the 3d resource refcount.
+- * If the count reaches zero, disable the fifo, switching to vga mode.
+- * Note that the master holds a refcount as well, and may request an
+- * explicit switch to vga mode when it releases its refcount to account
+- * for the situation of an X server vt switch to VGA with 3d resources
+- * active.
++ * vmw_release_device_late - Late part of fifo takedown.
++ *
++ * @dev_priv: Pointer to device private struct.
++ *
++ * This is the last part of the command submission takedown, to be called when
++ * command submission is no longer needed. It may wait on pending fences.
+ */
+-void vmw_3d_resource_dec(struct vmw_private *dev_priv,
+- bool hide_svga)
++static void vmw_release_device_late(struct vmw_private *dev_priv)
+ {
+- int32_t n3d;
+-
+- mutex_lock(&dev_priv->release_mutex);
+- if (unlikely(--dev_priv->num_3d_resources == 0))
+- vmw_release_device(dev_priv);
+- else if (hide_svga)
+- vmw_write(dev_priv, SVGA_REG_ENABLE,
+- vmw_read(dev_priv, SVGA_REG_ENABLE) |
+- SVGA_REG_ENABLE_HIDE);
+-
+- n3d = (int32_t) dev_priv->num_3d_resources;
+- mutex_unlock(&dev_priv->release_mutex);
+-
+- BUG_ON(n3d < 0);
++ vmw_fence_fifo_down(dev_priv->fman);
++ vmw_fifo_release(dev_priv, &dev_priv->fifo);
+ }
+
+ /**
+@@ -603,6 +596,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
+ spin_lock_init(&dev_priv->hw_lock);
+ spin_lock_init(&dev_priv->waiter_lock);
+ spin_lock_init(&dev_priv->cap_lock);
++ spin_lock_init(&dev_priv->svga_lock);
+
+ for (i = vmw_res_context; i < vmw_res_max; ++i) {
+ idr_init(&dev_priv->res_idr[i]);
+@@ -714,17 +708,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
+ dev_priv->active_master = &dev_priv->fbdev_master;
+
+
+- ret = ttm_bo_device_init(&dev_priv->bdev,
+- dev_priv->bo_global_ref.ref.object,
+- &vmw_bo_driver,
+- dev->anon_inode->i_mapping,
+- VMWGFX_FILE_PAGE_OFFSET,
+- false);
+- if (unlikely(ret != 0)) {
+- DRM_ERROR("Failed initializing TTM buffer object driver.\n");
+- goto out_err1;
+- }
+-
+ dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start,
+ dev_priv->mmio_size);
+
+@@ -787,13 +770,28 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
+ goto out_no_fman;
+ }
+
++ ret = ttm_bo_device_init(&dev_priv->bdev,
++ dev_priv->bo_global_ref.ref.object,
++ &vmw_bo_driver,
++ dev->anon_inode->i_mapping,
++ VMWGFX_FILE_PAGE_OFFSET,
++ false);
++ if (unlikely(ret != 0)) {
++ DRM_ERROR("Failed initializing TTM buffer object driver.\n");
++ goto out_no_bdev;
++ }
+
++ /*
++ * Enable VRAM, but initially don't use it until SVGA is enabled and
++ * unhidden.
++ */
+ ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
+ (dev_priv->vram_size >> PAGE_SHIFT));
+ if (unlikely(ret != 0)) {
+ DRM_ERROR("Failed initializing memory manager for VRAM.\n");
+ goto out_no_vram;
+ }
++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = false;
+
+ dev_priv->has_gmr = true;
+ if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) ||
+@@ -814,18 +812,18 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
+ }
+ }
+
+- vmw_kms_save_vga(dev_priv);
+-
+- /* Start kms and overlay systems, needs fifo. */
+ ret = vmw_kms_init(dev_priv);
+ if (unlikely(ret != 0))
+ goto out_no_kms;
+ vmw_overlay_init(dev_priv);
+
++ ret = vmw_request_device(dev_priv);
++ if (ret)
++ goto out_no_fifo;
++
+ if (dev_priv->enable_fb) {
+- ret = vmw_3d_resource_inc(dev_priv, true);
+- if (unlikely(ret != 0))
+- goto out_no_fifo;
++ vmw_fifo_resource_inc(dev_priv);
++ vmw_svga_enable(dev_priv);
+ vmw_fb_init(dev_priv);
+ }
+
+@@ -838,13 +836,14 @@ out_no_fifo:
+ vmw_overlay_close(dev_priv);
+ vmw_kms_close(dev_priv);
+ out_no_kms:
+- vmw_kms_restore_vga(dev_priv);
+ if (dev_priv->has_mob)
+ (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
+ if (dev_priv->has_gmr)
+ (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
+ (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
+ out_no_vram:
++ (void)ttm_bo_device_release(&dev_priv->bdev);
++out_no_bdev:
+ vmw_fence_manager_takedown(dev_priv->fman);
+ out_no_fman:
+ if (dev_priv->capabilities & SVGA_CAP_IRQMASK)
+@@ -860,8 +859,6 @@ out_err4:
+ iounmap(dev_priv->mmio_virt);
+ out_err3:
+ arch_phys_wc_del(dev_priv->mmio_mtrr);
+- (void)ttm_bo_device_release(&dev_priv->bdev);
+-out_err1:
+ vmw_ttm_global_release(dev_priv);
+ out_err0:
+ for (i = vmw_res_context; i < vmw_res_max; ++i)
+@@ -883,18 +880,22 @@ static int vmw_driver_unload(struct drm_device *dev)
+ vfree(dev_priv->ctx.cmd_bounce);
+ if (dev_priv->enable_fb) {
+ vmw_fb_close(dev_priv);
+- vmw_kms_restore_vga(dev_priv);
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
++ vmw_svga_disable(dev_priv);
+ }
++
+ vmw_kms_close(dev_priv);
+ vmw_overlay_close(dev_priv);
+
+- if (dev_priv->has_mob)
+- (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
+ if (dev_priv->has_gmr)
+ (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
+ (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
+
++ vmw_release_device_early(dev_priv);
++ if (dev_priv->has_mob)
++ (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB);
++ (void) ttm_bo_device_release(&dev_priv->bdev);
++ vmw_release_device_late(dev_priv);
+ vmw_fence_manager_takedown(dev_priv->fman);
+ if (dev_priv->capabilities & SVGA_CAP_IRQMASK)
+ drm_irq_uninstall(dev_priv->dev);
+@@ -1148,27 +1149,13 @@ static int vmw_master_set(struct drm_device *dev,
+ struct vmw_master *vmaster = vmw_master(file_priv->master);
+ int ret = 0;
+
+- if (!dev_priv->enable_fb) {
+- ret = vmw_3d_resource_inc(dev_priv, true);
+- if (unlikely(ret != 0))
+- return ret;
+- vmw_kms_save_vga(dev_priv);
+- vmw_write(dev_priv, SVGA_REG_TRACES, 0);
+- }
+-
+ if (active) {
+ BUG_ON(active != &dev_priv->fbdev_master);
+ ret = ttm_vt_lock(&active->lock, false, vmw_fp->tfile);
+ if (unlikely(ret != 0))
+- goto out_no_active_lock;
++ return ret;
+
+ ttm_lock_set_kill(&active->lock, true, SIGTERM);
+- ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM);
+- if (unlikely(ret != 0)) {
+- DRM_ERROR("Unable to clean VRAM on "
+- "master drop.\n");
+- }
+-
+ dev_priv->active_master = NULL;
+ }
+
+@@ -1182,14 +1169,6 @@ static int vmw_master_set(struct drm_device *dev,
+ dev_priv->active_master = vmaster;
+
+ return 0;
+-
+-out_no_active_lock:
+- if (!dev_priv->enable_fb) {
+- vmw_kms_restore_vga(dev_priv);
+- vmw_3d_resource_dec(dev_priv, true);
+- vmw_write(dev_priv, SVGA_REG_TRACES, 1);
+- }
+- return ret;
+ }
+
+ static void vmw_master_drop(struct drm_device *dev,
+@@ -1214,16 +1193,9 @@ static void vmw_master_drop(struct drm_device *dev,
+ }
+
+ ttm_lock_set_kill(&vmaster->lock, false, SIGTERM);
+- vmw_execbuf_release_pinned_bo(dev_priv);
+
+- if (!dev_priv->enable_fb) {
+- ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM);
+- if (unlikely(ret != 0))
+- DRM_ERROR("Unable to clean VRAM on master drop.\n");
+- vmw_kms_restore_vga(dev_priv);
+- vmw_3d_resource_dec(dev_priv, true);
+- vmw_write(dev_priv, SVGA_REG_TRACES, 1);
+- }
++ if (!dev_priv->enable_fb)
++ vmw_svga_disable(dev_priv);
+
+ dev_priv->active_master = &dev_priv->fbdev_master;
+ ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM);
+@@ -1233,6 +1205,74 @@ static void vmw_master_drop(struct drm_device *dev,
+ vmw_fb_on(dev_priv);
+ }
+
++/**
++ * __vmw_svga_enable - Enable SVGA mode, FIFO and use of VRAM.
++ *
++ * @dev_priv: Pointer to device private struct.
++ * Needs the reservation sem to be held in non-exclusive mode.
++ */
++void __vmw_svga_enable(struct vmw_private *dev_priv)
++{
++ spin_lock(&dev_priv->svga_lock);
++ if (!dev_priv->bdev.man[TTM_PL_VRAM].use_type) {
++ vmw_write(dev_priv, SVGA_REG_ENABLE, SVGA_REG_ENABLE);
++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = true;
++ }
++ spin_unlock(&dev_priv->svga_lock);
++}
++
++/**
++ * vmw_svga_enable - Enable SVGA mode, FIFO and use of VRAM.
++ *
++ * @dev_priv: Pointer to device private struct.
++ */
++void vmw_svga_enable(struct vmw_private *dev_priv)
++{
++ ttm_read_lock(&dev_priv->reservation_sem, false);
++ __vmw_svga_enable(dev_priv);
++ ttm_read_unlock(&dev_priv->reservation_sem);
++}
++
++/**
++ * __vmw_svga_disable - Disable SVGA mode and use of VRAM.
++ *
++ * @dev_priv: Pointer to device private struct.
++ * Needs the reservation sem to be held in exclusive mode.
++ * Will not empty VRAM. VRAM must be emptied by caller.
++ */
++void __vmw_svga_disable(struct vmw_private *dev_priv)
++{
++ spin_lock(&dev_priv->svga_lock);
++ if (dev_priv->bdev.man[TTM_PL_VRAM].use_type) {
++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = false;
++ vmw_write(dev_priv, SVGA_REG_ENABLE,
++ SVGA_REG_ENABLE_ENABLE_HIDE);
++ }
++ spin_unlock(&dev_priv->svga_lock);
++}
++
++/**
++ * vmw_svga_disable - Disable SVGA_MODE, and use of VRAM. Keep the fifo
++ * running.
++ *
++ * @dev_priv: Pointer to device private struct.
++ * Will empty VRAM.
++ */
++void vmw_svga_disable(struct vmw_private *dev_priv)
++{
++ ttm_write_lock(&dev_priv->reservation_sem, false);
++ spin_lock(&dev_priv->svga_lock);
++ if (dev_priv->bdev.man[TTM_PL_VRAM].use_type) {
++ dev_priv->bdev.man[TTM_PL_VRAM].use_type = false;
++ vmw_write(dev_priv, SVGA_REG_ENABLE,
++ SVGA_REG_ENABLE_ENABLE_HIDE);
++ spin_unlock(&dev_priv->svga_lock);
++ if (ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM))
++ DRM_ERROR("Failed evicting VRAM buffers.\n");
++ } else
++ spin_unlock(&dev_priv->svga_lock);
++ ttm_write_unlock(&dev_priv->reservation_sem);
++}
+
+ static void vmw_remove(struct pci_dev *pdev)
+ {
+@@ -1250,21 +1290,21 @@ static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,
+
+ switch (val) {
+ case PM_HIBERNATION_PREPARE:
+- case PM_SUSPEND_PREPARE:
+ ttm_suspend_lock(&dev_priv->reservation_sem);
+
+- /**
++ /*
+ * This empties VRAM and unbinds all GMR bindings.
+ * Buffer contents is moved to swappable memory.
+ */
+ vmw_execbuf_release_pinned_bo(dev_priv);
+ vmw_resource_evict_all(dev_priv);
++ vmw_release_device_early(dev_priv);
+ ttm_bo_swapout_all(&dev_priv->bdev);
+-
++ vmw_fence_fifo_down(dev_priv->fman);
+ break;
+ case PM_POST_HIBERNATION:
+- case PM_POST_SUSPEND:
+ case PM_POST_RESTORE:
++ vmw_fence_fifo_up(dev_priv->fman);
+ ttm_suspend_unlock(&dev_priv->reservation_sem);
+
+ break;
+@@ -1276,20 +1316,13 @@ static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,
+ return 0;
+ }
+
+-/**
+- * These might not be needed with the virtual SVGA device.
+- */
+-
+ static int vmw_pci_suspend(struct pci_dev *pdev, pm_message_t state)
+ {
+ struct drm_device *dev = pci_get_drvdata(pdev);
+ struct vmw_private *dev_priv = vmw_priv(dev);
+
+- if (dev_priv->num_3d_resources != 0) {
+- DRM_INFO("Can't suspend or hibernate "
+- "while 3D resources are active.\n");
++ if (dev_priv->refuse_hibernation)
+ return -EBUSY;
+- }
+
+ pci_save_state(pdev);
+ pci_disable_device(pdev);
+@@ -1321,56 +1354,62 @@ static int vmw_pm_resume(struct device *kdev)
+ return vmw_pci_resume(pdev);
+ }
+
+-static int vmw_pm_prepare(struct device *kdev)
++static int vmw_pm_freeze(struct device *kdev)
+ {
+ struct pci_dev *pdev = to_pci_dev(kdev);
+ struct drm_device *dev = pci_get_drvdata(pdev);
+ struct vmw_private *dev_priv = vmw_priv(dev);
+
+- /**
+- * Release 3d reference held by fbdev and potentially
+- * stop fifo.
+- */
+ dev_priv->suspended = true;
+ if (dev_priv->enable_fb)
+- vmw_3d_resource_dec(dev_priv, true);
+-
+- if (dev_priv->num_3d_resources != 0) {
+-
+- DRM_INFO("Can't suspend or hibernate "
+- "while 3D resources are active.\n");
++ vmw_fifo_resource_dec(dev_priv);
+
++ if (atomic_read(&dev_priv->num_fifo_resources) != 0) {
++ DRM_ERROR("Can't hibernate while 3D resources are active.\n");
+ if (dev_priv->enable_fb)
+- vmw_3d_resource_inc(dev_priv, true);
++ vmw_fifo_resource_inc(dev_priv);
++ WARN_ON(vmw_request_device_late(dev_priv));
+ dev_priv->suspended = false;
+ return -EBUSY;
+ }
+
++ if (dev_priv->enable_fb)
++ __vmw_svga_disable(dev_priv);
++
++ vmw_release_device_late(dev_priv);
++
+ return 0;
+ }
+
+-static void vmw_pm_complete(struct device *kdev)
++static int vmw_pm_restore(struct device *kdev)
+ {
+ struct pci_dev *pdev = to_pci_dev(kdev);
+ struct drm_device *dev = pci_get_drvdata(pdev);
+ struct vmw_private *dev_priv = vmw_priv(dev);
++ int ret;
+
+ vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2);
+ (void) vmw_read(dev_priv, SVGA_REG_ID);
+
+- /**
+- * Reclaim 3d reference held by fbdev and potentially
+- * start fifo.
+- */
+ if (dev_priv->enable_fb)
+- vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
++
++ ret = vmw_request_device(dev_priv);
++ if (ret)
++ return ret;
++
++ if (dev_priv->enable_fb)
++ __vmw_svga_enable(dev_priv);
+
+ dev_priv->suspended = false;
++
++ return 0;
+ }
+
+ static const struct dev_pm_ops vmw_pm_ops = {
+- .prepare = vmw_pm_prepare,
+- .complete = vmw_pm_complete,
++ .freeze = vmw_pm_freeze,
++ .thaw = vmw_pm_restore,
++ .restore = vmw_pm_restore,
+ .suspend = vmw_pm_suspend,
+ .resume = vmw_pm_resume,
+ };
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+index d26a6daa9719..a5f221eaf076 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+@@ -484,6 +484,7 @@ struct vmw_private {
+
+ bool stealth;
+ bool enable_fb;
++ spinlock_t svga_lock;
+
+ /**
+ * Master management.
+@@ -493,9 +494,10 @@ struct vmw_private {
+ struct vmw_master fbdev_master;
+ struct notifier_block pm_nb;
+ bool suspended;
++ bool refuse_hibernation;
+
+ struct mutex release_mutex;
+- uint32_t num_3d_resources;
++ atomic_t num_fifo_resources;
+
+ /*
+ * Replace this with an rwsem as soon as we have down_xx_interruptible()
+@@ -587,8 +589,9 @@ static inline uint32_t vmw_read(struct vmw_private *dev_priv,
+ return val;
+ }
+
+-int vmw_3d_resource_inc(struct vmw_private *dev_priv, bool unhide_svga);
+-void vmw_3d_resource_dec(struct vmw_private *dev_priv, bool hide_svga);
++extern void vmw_svga_enable(struct vmw_private *dev_priv);
++extern void vmw_svga_disable(struct vmw_private *dev_priv);
++
+
+ /**
+ * GMR utilities - vmwgfx_gmr.c
+@@ -1116,4 +1119,14 @@ static inline struct ttm_mem_global *vmw_mem_glob(struct vmw_private *dev_priv)
+ {
+ return (struct ttm_mem_global *) dev_priv->mem_global_ref.object;
+ }
++
++static inline void vmw_fifo_resource_inc(struct vmw_private *dev_priv)
++{
++ atomic_inc(&dev_priv->num_fifo_resources);
++}
++
++static inline void vmw_fifo_resource_dec(struct vmw_private *dev_priv)
++{
++ atomic_dec(&dev_priv->num_fifo_resources);
++}
+ #endif
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
+index 0a474f391fad..0e062613a7db 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
+@@ -596,7 +596,10 @@ int vmw_fb_off(struct vmw_private *vmw_priv)
+
+ info = vmw_priv->fb_info;
+ par = info->par;
++ if (!par->bo_ptr)
++ return 0;
+
++ vmw_kms_save_vga(vmw_priv);
+ spin_lock_irqsave(&par->dirty.lock, flags);
+ par->dirty.active = false;
+ spin_unlock_irqrestore(&par->dirty.lock, flags);
+@@ -648,6 +651,7 @@ int vmw_fb_on(struct vmw_private *vmw_priv)
+ spin_lock_irqsave(&par->dirty.lock, flags);
+ par->dirty.active = true;
+ spin_unlock_irqrestore(&par->dirty.lock, flags);
++ vmw_kms_restore_vga(vmw_priv);
+
+ err_no_buffer:
+ vmw_fb_set_par(info);
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
+index 39f2b03888e7..cd5d9f3fe0e0 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
+@@ -98,7 +98,6 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
+ __le32 __iomem *fifo_mem = dev_priv->mmio_virt;
+ uint32_t max;
+ uint32_t min;
+- uint32_t dummy;
+
+ fifo->static_buffer_size = VMWGFX_FIFO_STATIC_SIZE;
+ fifo->static_buffer = vmalloc(fifo->static_buffer_size);
+@@ -112,10 +111,6 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
+ mutex_init(&fifo->fifo_mutex);
+ init_rwsem(&fifo->rwsem);
+
+- /*
+- * Allow mapping the first page read-only to user-space.
+- */
+-
+ DRM_INFO("width %d\n", vmw_read(dev_priv, SVGA_REG_WIDTH));
+ DRM_INFO("height %d\n", vmw_read(dev_priv, SVGA_REG_HEIGHT));
+ DRM_INFO("bpp %d\n", vmw_read(dev_priv, SVGA_REG_BITS_PER_PIXEL));
+@@ -123,7 +118,9 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
+ dev_priv->enable_state = vmw_read(dev_priv, SVGA_REG_ENABLE);
+ dev_priv->config_done_state = vmw_read(dev_priv, SVGA_REG_CONFIG_DONE);
+ dev_priv->traces_state = vmw_read(dev_priv, SVGA_REG_TRACES);
+- vmw_write(dev_priv, SVGA_REG_ENABLE, 1);
++
++ vmw_write(dev_priv, SVGA_REG_ENABLE, SVGA_REG_ENABLE_ENABLE_HIDE);
++ vmw_write(dev_priv, SVGA_REG_TRACES, 0);
+
+ min = 4;
+ if (dev_priv->capabilities & SVGA_CAP_EXTENDED_FIFO)
+@@ -155,7 +152,8 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
+ atomic_set(&dev_priv->marker_seq, dev_priv->last_read_seqno);
+ iowrite32(dev_priv->last_read_seqno, fifo_mem + SVGA_FIFO_FENCE);
+ vmw_marker_queue_init(&fifo->marker_queue);
+- return vmw_fifo_send_fence(dev_priv, &dummy);
++
++ return 0;
+ }
+
+ void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason)
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+index 5c289f748ab4..53579f278b63 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+@@ -280,6 +280,7 @@ static int vmw_ldu_crtc_set_config(struct drm_mode_set *set)
+ }
+
+ vmw_fb_off(dev_priv);
++ vmw_svga_enable(dev_priv);
+
+ crtc->primary->fb = fb;
+ encoder->crtc = crtc;
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
+index 04a64b8cd3cd..f06d60f41fa7 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
+@@ -574,7 +574,7 @@ void vmw_mob_unbind(struct vmw_private *dev_priv,
+ vmw_fence_single_bo(bo, NULL);
+ ttm_bo_unreserve(bo);
+ }
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+ }
+
+ /*
+@@ -627,7 +627,7 @@ int vmw_mob_bind(struct vmw_private *dev_priv,
+ mob->pt_level += VMW_MOBFMT_PTDEPTH_1 - SVGA3D_MOBFMT_PTDEPTH_1;
+ }
+
+- (void) vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
+
+ cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd));
+ if (unlikely(cmd == NULL)) {
+@@ -648,7 +648,7 @@ int vmw_mob_bind(struct vmw_private *dev_priv,
+ return 0;
+
+ out_no_cmd_space:
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+ if (pt_set_up)
+ ttm_bo_unref(&mob->pt_bo);
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+index 7dc591d04d9a..9e8eb364a6ac 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+@@ -332,6 +332,7 @@ static int vmw_sou_crtc_set_config(struct drm_mode_set *set)
+ }
+
+ vmw_fb_off(dev_priv);
++ vmw_svga_enable(dev_priv);
+
+ if (mode->hdisplay != crtc->mode.hdisplay ||
+ mode->vdisplay != crtc->mode.vdisplay) {
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+index 6a4584a43aa6..6110a433ebfe 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+@@ -165,7 +165,7 @@ static int vmw_gb_shader_create(struct vmw_resource *res)
+ cmd->body.type = shader->type;
+ cmd->body.sizeInBytes = shader->size;
+ vmw_fifo_commit(dev_priv, sizeof(*cmd));
+- (void) vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
+
+ return 0;
+
+@@ -275,7 +275,7 @@ static int vmw_gb_shader_destroy(struct vmw_resource *res)
+ vmw_fifo_commit(dev_priv, sizeof(*cmd));
+ mutex_unlock(&dev_priv->binding_mutex);
+ vmw_resource_release_id(res);
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+index 4ecdbf3e59da..4d0c98edeb6a 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+@@ -340,7 +340,7 @@ static void vmw_hw_surface_destroy(struct vmw_resource *res)
+ dev_priv->used_memory_size -= res->backup_size;
+ mutex_unlock(&dev_priv->cmdbuf_mutex);
+ }
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+ }
+
+ /**
+@@ -576,14 +576,14 @@ static int vmw_surface_init(struct vmw_private *dev_priv,
+
+ BUG_ON(res_free == NULL);
+ if (!dev_priv->has_mob)
+- (void) vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
+ ret = vmw_resource_init(dev_priv, res, true, res_free,
+ (dev_priv->has_mob) ? &vmw_gb_surface_func :
+ &vmw_legacy_surface_func);
+
+ if (unlikely(ret != 0)) {
+ if (!dev_priv->has_mob)
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+ res_free(res);
+ return ret;
+ }
+@@ -1028,7 +1028,7 @@ static int vmw_gb_surface_create(struct vmw_resource *res)
+ if (likely(res->id != -1))
+ return 0;
+
+- (void) vmw_3d_resource_inc(dev_priv, false);
++ vmw_fifo_resource_inc(dev_priv);
+ ret = vmw_resource_alloc_id(res);
+ if (unlikely(ret != 0)) {
+ DRM_ERROR("Failed to allocate a surface id.\n");
+@@ -1068,7 +1068,7 @@ static int vmw_gb_surface_create(struct vmw_resource *res)
+ out_no_fifo:
+ vmw_resource_release_id(res);
+ out_no_id:
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+ return ret;
+ }
+
+@@ -1213,7 +1213,7 @@ static int vmw_gb_surface_destroy(struct vmw_resource *res)
+ vmw_fifo_commit(dev_priv, sizeof(*cmd));
+ mutex_unlock(&dev_priv->binding_mutex);
+ vmw_resource_release_id(res);
+- vmw_3d_resource_dec(dev_priv, false);
++ vmw_fifo_resource_dec(dev_priv);
+
+ return 0;
+ }
+--
+2.4.3
+
diff --git a/nowatchdog-on-virt.patch b/watchdog-Disable-watchdog-on-virtual-machines.patch
index 87ab11a0f..01cbba943 100644
--- a/nowatchdog-on-virt.patch
+++ b/watchdog-Disable-watchdog-on-virtual-machines.patch
@@ -1,4 +1,6 @@
-Disable watchdog on virtual machines.
+From: Dave Jones <davej@redhat.com>
+Date: Tue, 24 Jun 2014 08:43:34 -0400
+Subject: [PATCH] watchdog: Disable watchdog on virtual machines.
For various reasons, VMs seem to trigger the soft lockup detector a lot,
in cases where it's just not possible for a lockup to occur.
@@ -9,23 +11,29 @@ the VM for a very long time (Could be the host was under heavy load).
Just disable the detector on VMs.
+Bugzilla: 971139
+Upstream-status: Fedora mustard for now
+
Signed-off-by: Dave Jones <davej@redhat.com>
+---
+ kernel/watchdog.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index 1241d8c..b2dc4e4 100644
+index a6ffa43f2993..b378b762844a 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
-@@ -24,6 +24,7 @@
- #include <linux/sysctl.h>
+@@ -20,6 +20,7 @@
#include <linux/smpboot.h>
#include <linux/sched/rt.h>
+ #include <linux/tick.h>
+#include <linux/dmi.h>
#include <asm/irq_regs.h>
#include <linux/kvm_para.h>
-@@ -96,6 +97,32 @@ static int __init nosoftlockup_setup(char *str)
- __setup("nosoftlockup", nosoftlockup_setup);
- /* */
+@@ -155,6 +156,32 @@ static int __init softlockup_all_cpu_backtrace_setup(char *str)
+ __setup("softlockup_all_cpu_backtrace=", softlockup_all_cpu_backtrace_setup);
+ #endif
+static int disable_watchdog(const struct dmi_system_id *d)
+{
@@ -46,7 +54,7 @@ index 1241d8c..b2dc4e4 100644
+ .callback = disable_watchdog,
+ .ident = "Bochs",
+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Bochs Bochs"),
++ DMI_MATCH(DMI_SYS_VENDOR, "Bochs"),
+ },
+ },
+ {}
@@ -56,7 +64,7 @@ index 1241d8c..b2dc4e4 100644
/*
* Hard-lockup warnings should be triggered after just a few seconds. Soft-
* lockups can have false positives under extreme conditions. So we generally
-@@ -551,6 +578,8 @@ int proc_dowatchdog(struct ctl_table *table, int write,
+@@ -928,6 +955,8 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
void __init lockup_detector_init(void)
{
diff --git a/weird-root-dentry-name-debug.patch b/weird-root-dentry-name-debug.patch
deleted file mode 100644
index e2fb2e116..000000000
--- a/weird-root-dentry-name-debug.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-debug patch for bz 787171/766277
-
-diff --git a/fs/dcache.c b/fs/dcache.c
-index bcbdb33..a6a5fdb 100644
---- a/fs/dcache.c
-+++ b/fs/dcache.c
-@@ -2530,8 +2530,10 @@ global_root:
- */
- if (IS_ROOT(dentry) &&
- (dentry->d_name.len != 1 || dentry->d_name.name[0] != '/')) {
-- WARN(1, "Root dentry has weird name <%.*s>\n",
-- (int) dentry->d_name.len, dentry->d_name.name);
-+ WARN(1, "Root dentry has weird name <%.*s> vfsmnt:%s fs:%s\n",
-+ (int) dentry->d_name.len, dentry->d_name.name,
-+ vfsmnt->mnt_root->d_name.name,
-+ vfsmnt->mnt_sb->s_type->name);
- }
- if (!slash)
- error = prepend(buffer, buflen, "/", 1);
diff --git a/x86-Lock-down-IO-port-access-when-module-security-is.patch b/x86-Lock-down-IO-port-access-when-module-security-is.patch
new file mode 100644
index 000000000..4c1211d43
--- /dev/null
+++ b/x86-Lock-down-IO-port-access-when-module-security-is.patch
@@ -0,0 +1,67 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Thu, 8 Mar 2012 10:35:59 -0500
+Subject: [PATCH] x86: Lock down IO port access when module security is enabled
+
+IO port access would permit users to gain access to PCI configuration
+registers, which in turn (on a lot of hardware) give access to MMIO register
+space. This would potentially permit root to trigger arbitrary DMA, so lock
+it down by default.
+
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ arch/x86/kernel/ioport.c | 5 +++--
+ drivers/char/mem.c | 4 ++++
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
+index 37dae792dbbe..1ecc03ca3c15 100644
+--- a/arch/x86/kernel/ioport.c
++++ b/arch/x86/kernel/ioport.c
+@@ -15,6 +15,7 @@
+ #include <linux/thread_info.h>
+ #include <linux/syscalls.h>
+ #include <linux/bitmap.h>
++#include <linux/module.h>
+ #include <asm/syscalls.h>
+
+ /*
+@@ -28,7 +29,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
+
+ if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
+ return -EINVAL;
+- if (turn_on && !capable(CAP_SYS_RAWIO))
++ if (turn_on && (!capable(CAP_SYS_RAWIO) || secure_modules()))
+ return -EPERM;
+
+ /*
+@@ -103,7 +104,7 @@ SYSCALL_DEFINE1(iopl, unsigned int, level)
+ return -EINVAL;
+ /* Trying to gain more privileges? */
+ if (level > old) {
+- if (!capable(CAP_SYS_RAWIO))
++ if (!capable(CAP_SYS_RAWIO) || secure_modules())
+ return -EPERM;
+ }
+ regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
+diff --git a/drivers/char/mem.c b/drivers/char/mem.c
+index 6b1721f978c2..53fe675f9bd7 100644
+--- a/drivers/char/mem.c
++++ b/drivers/char/mem.c
+@@ -27,6 +27,7 @@
+ #include <linux/export.h>
+ #include <linux/io.h>
+ #include <linux/uio.h>
++#include <linux/module.h>
+
+ #include <linux/uaccess.h>
+
+@@ -577,6 +578,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
+ unsigned long i = *ppos;
+ const char __user *tmp = buf;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (!access_ok(VERIFY_READ, buf, count))
+ return -EFAULT;
+ while (count-- > 0 && i < 65536) {
diff --git a/x86-Restrict-MSR-access-when-module-loading-is-restr.patch b/x86-Restrict-MSR-access-when-module-loading-is-restr.patch
new file mode 100644
index 000000000..9053f2aea
--- /dev/null
+++ b/x86-Restrict-MSR-access-when-module-loading-is-restr.patch
@@ -0,0 +1,39 @@
+From: Matthew Garrett <matthew.garrett@nebula.com>
+Date: Fri, 8 Feb 2013 11:12:13 -0800
+Subject: [PATCH] x86: Restrict MSR access when module loading is restricted
+
+Writing to MSRs should not be allowed if module loading is restricted,
+since it could lead to execution of arbitrary code in kernel mode. Based
+on a patch by Kees Cook.
+
+Cc: Kees Cook <keescook@chromium.org>
+Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
+---
+ arch/x86/kernel/msr.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
+index 113e70784854..26c2f83fc470 100644
+--- a/arch/x86/kernel/msr.c
++++ b/arch/x86/kernel/msr.c
+@@ -105,6 +105,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
+ int err = 0;
+ ssize_t bytes = 0;
+
++ if (secure_modules())
++ return -EPERM;
++
+ if (count % 8)
+ return -EINVAL; /* Invalid chunk size */
+
+@@ -152,6 +155,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
+ err = -EBADF;
+ break;
+ }
++ if (secure_modules()) {
++ err = -EPERM;
++ break;
++ }
+ if (copy_from_user(&regs, uregs, sizeof regs)) {
+ err = -EFAULT;
+ break;
diff --git a/x86_32-entry-Do-syscall-exit-work-on-badsys.patch b/x86_32-entry-Do-syscall-exit-work-on-badsys.patch
deleted file mode 100644
index c174e9453..000000000
--- a/x86_32-entry-Do-syscall-exit-work-on-badsys.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-Bugzilla: 1112073
-Upstream-status: Sent for 3.16 and CC'd to stable
-Delivered-To: jwboyer@gmail.com
-Received: by 10.76.6.212 with SMTP id d20csp139586oaa;
- Mon, 23 Jun 2014 14:28:15 -0700 (PDT)
-X-Received: by 10.68.222.196 with SMTP id qo4mr32453892pbc.14.1403558895116;
- Mon, 23 Jun 2014 14:28:15 -0700 (PDT)
-Return-Path: <stable-owner@vger.kernel.org>
-Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
- by mx.google.com with ESMTP id bm3si23587434pad.232.2014.06.23.14.27.47
- for <multiple recipients>;
- Mon, 23 Jun 2014 14:28:15 -0700 (PDT)
-Received-SPF: none (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67;
-Authentication-Results: mx.google.com;
- spf=neutral (google.com: stable-owner@vger.kernel.org does not designate permitted sender hosts) smtp.mail=stable-owner@vger.kernel.org
-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
- id S1752475AbaFWVWX (ORCPT <rfc822;tuffkidtt@gmail.com> + 73 others);
- Mon, 23 Jun 2014 17:22:23 -0400
-Received: from mail-pb0-f42.google.com ([209.85.160.42]:39692 "EHLO
- mail-pb0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
- with ESMTP id S1752518AbaFWVWW (ORCPT
- <rfc822;stable@vger.kernel.org>); Mon, 23 Jun 2014 17:22:22 -0400
-Received: by mail-pb0-f42.google.com with SMTP id ma3so6319797pbc.15
- for <stable@vger.kernel.org>; Mon, 23 Jun 2014 14:22:21 -0700 (PDT)
-X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=1e100.net; s=20130820;
- h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
- :references:mime-version:content-type:content-transfer-encoding;
- bh=7AW5eK5e3OhAcFYPrsffKoD56CbJdqfg9BcyF1JKfUE=;
- b=iLlWTJCuH9FlKTif4N6XtFZNvj8a/fbsjuP4kWWD/gmHHGEOWI6bh2Jm8X3vcN6GtV
- f7rqFO0SAMf197e66uME3pq8NzYFad4eRgJpBGON93P22+cPbqrsT9FZjMZqn2bJkEw4
- EDZZy2MFqm3Kx2m/5g76NLDV1tgafEnwbgL1vg6IxlbPi6J8inkXwKP3FdMoTcfRBO6p
- dIcI1cV7VDNf6zKaMj+XS/ZiSxqpArhwvZ6xnXRmLfgD+x/JsxEcg2pX03BXHTKO9QNm
- nixe+cuug0X0E5idHuiLJzV0Wf6IhYsvVz/FvjY16pggduecA2NgNU2e7txqb+IcTBZ/
- jBbA==
-X-Gm-Message-State: ALoCoQlblcwmTrVjpekrIOzidDrxwB18p5Rfd5SObiPQifpOQZmSFUKrxzV0kxCjcW/wVwxOzAG7
-X-Received: by 10.68.197.8 with SMTP id iq8mr32930210pbc.124.1403558541680;
- Mon, 23 Jun 2014 14:22:21 -0700 (PDT)
-Received: from localhost (50-76-60-73-ip-static.hfc.comcastbusiness.net. [50.76.60.73])
- by mx.google.com with ESMTPSA id fl6sm99195659pab.43.2014.06.23.14.22.19
- for <multiple recipients>
- (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
- Mon, 23 Jun 2014 14:22:20 -0700 (PDT)
-From: Andy Lutomirski <luto@amacapital.net>
-Cc: "H. Peter Anvin" <hpa@zytor.com>,
- Richard Weinberger <richard@nod.at>, X86 ML <x86@kernel.org>,
- Eric Paris <eparis@redhat.com>,
- Linux Kernel <linux-kernel@vger.kernel.org>,
- security@kernel.org, Steven Rostedt <rostedt@goodmis.org>,
- Borislav Petkov <bp@alien8.de>,
- =?UTF-8?q?Toralf=20F=C3=B6rster?= <toralf.foerster@gmx.de>,
- Andy Lutomirski <luto@amacapital.net>, stable@vger.kernel.org,
- Roland McGrath <roland@redhat.com>
-Subject: [PATCH] x86_32,entry: Do syscall exit work on badsys (CVE-2014-4508)
-Date: Mon, 23 Jun 2014 14:22:15 -0700
-Message-Id: <e09c499eade6fc321266dd6b54da7beb28d6991c.1403558229.git.luto@amacapital.net>
-X-Mailer: git-send-email 1.9.3
-In-Reply-To: <CA+5PVA70nFS8JZkL0-Q-1HjFHT5NA04275_M4WstjQMrpT+hrQ@mail.gmail.com>
-References: <CA+5PVA70nFS8JZkL0-Q-1HjFHT5NA04275_M4WstjQMrpT+hrQ@mail.gmail.com>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-To: unlisted-recipients:; (no To-header on input)
-Sender: stable-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <stable.vger.kernel.org>
-X-Mailing-List: stable@vger.kernel.org
-
-The bad syscall nr paths are their own incomprehensible route
-through the entry control flow. Rearrange them to work just like
-syscalls that return -ENOSYS.
-
-This fixes an OOPS in the audit code when fast-path auditing is
-enabled and sysenter gets a bad syscall nr (CVE-2014-4508).
-
-This has probably been broken since Linux 2.6.27:
-af0575bba0 i386 syscall audit fast-path
-
-Cc: stable@vger.kernel.org
-Cc: Roland McGrath <roland@redhat.com>
-Reported-by: Toralf Förster <toralf.foerster@gmx.de>
-Signed-off-by: Andy Lutomirski <luto@amacapital.net>
----
-
-I realize that the syscall audit fast path and badsys code, on 32-bit
-x86 no less, is possibly one of the least fun things in the kernel to
-review, but this is still a real security bug and should get fixed :(
-
-So I'm cc-ing a bunch of people and maybe someone will review it.
-
- arch/x86/kernel/entry_32.S | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
-index a2a4f46..f4258a5 100644
---- a/arch/x86/kernel/entry_32.S
-+++ b/arch/x86/kernel/entry_32.S
-@@ -431,9 +431,10 @@ sysenter_past_esp:
- jnz sysenter_audit
- sysenter_do_call:
- cmpl $(NR_syscalls), %eax
-- jae syscall_badsys
-+ jae sysenter_badsys
- call *sys_call_table(,%eax,4)
- movl %eax,PT_EAX(%esp)
-+sysenter_after_call:
- LOCKDEP_SYS_EXIT
- DISABLE_INTERRUPTS(CLBR_ANY)
- TRACE_IRQS_OFF
-@@ -688,7 +689,12 @@ END(syscall_fault)
-
- syscall_badsys:
- movl $-ENOSYS,PT_EAX(%esp)
-- jmp resume_userspace
-+ jmp syscall_exit
-+END(syscall_badsys)
-+
-+sysenter_badsys:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ jmp sysenter_after_call
- END(syscall_badsys)
- CFI_ENDPROC
- /*
---
-1.9.3
-
---
-To unsubscribe from this list: send the line "unsubscribe stable" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch b/xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
new file mode 100644
index 000000000..4c55bf2da
--- /dev/null
+++ b/xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
@@ -0,0 +1,48 @@
+From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Date: Fri, 27 Mar 2015 13:31:11 -0400
+Subject: [PATCH] xen/pciback: Don't disable PCI_COMMAND on PCI device reset.
+
+There is no need for this at all. Worst it means that if
+the guest tries to write to BARs it could lead (on certain
+platforms) to PCI SERR errors.
+
+Please note that with af6fc858a35b90e89ea7a7ee58e66628c55c776b
+"xen-pciback: limit guest control of command register"
+a guest is still allowed to enable those control bits (safely), but
+is not allowed to disable them and that therefore a well behaved
+frontend which enables things before using them will still
+function correctly.
+
+This is done via an write to the configuration register 0x4 which
+triggers on the backend side:
+command_write
+ \- pci_enable_device
+ \- pci_enable_device_flags
+ \- do_pci_enable_device
+ \- pcibios_enable_device
+ \-pci_enable_resourcess
+ [which enables the PCI_COMMAND_MEMORY|PCI_COMMAND_IO]
+
+However guests (and drivers) which don't do this could cause
+problems, including the security issues which XSA-120 sought
+to address.
+
+Reported-by: Jan Beulich <jbeulich@suse.com>
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+---
+ drivers/xen/xen-pciback/pciback_ops.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
+index c4a0666de6f5..26e651336787 100644
+--- a/drivers/xen/xen-pciback/pciback_ops.c
++++ b/drivers/xen/xen-pciback/pciback_ops.c
+@@ -119,8 +119,6 @@ void xen_pcibk_reset_device(struct pci_dev *dev)
+ if (pci_is_enabled(dev))
+ pci_disable_device(dev);
+
+- pci_write_config_word(dev, PCI_COMMAND, 0);
+-
+ dev->is_busmaster = 0;
+ } else {
+ pci_read_config_word(dev, PCI_COMMAND, &cmd);