diff options
Diffstat (limited to 'freed-ora/current')
57 files changed, 4107 insertions, 1207 deletions
diff --git a/freed-ora/current/f20/0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch b/freed-ora/current/f20/0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch new file mode 100644 index 000000000..de006062f --- /dev/null +++ b/freed-ora/current/f20/0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch @@ -0,0 +1,2201 @@ +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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_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 = <®_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 = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_vmmc3>; ++ non-removable; ++ status = "okay"; ++ }; ++ + usbphy: phy@01c13400 { + usb1_vbus-supply = <®_usb1_vbus>; + usb2_vbus-supply = <®_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 = <®_usb1_vbus>; + usb2_vbus-supply = <®_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/freed-ora/current/f20/0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch b/freed-ora/current/f20/0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch new file mode 100644 index 000000000..aab1c4e32 --- /dev/null +++ b/freed-ora/current/f20/0001-ideapad-laptop-Change-Lenovo-Yoga-2-series-rfkill-ha.patch @@ -0,0 +1,138 @@ +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/freed-ora/current/f20/Bluetooth-allocate-static-minor-for-vhci.patch b/freed-ora/current/f20/Bluetooth-allocate-static-minor-for-vhci.patch deleted file mode 100644 index 8acfb308f..000000000 --- a/freed-ora/current/f20/Bluetooth-allocate-static-minor-for-vhci.patch +++ /dev/null @@ -1,71 +0,0 @@ -Bugzilla: 1051748 -Upstream-status: Queued for 3.15 - -From b075dd40c95d11c2c8690f6c4d6232fc0d9e7f56 Mon Sep 17 00:00:00 2001 -From: Lucas De Marchi <lucas.demarchi@intel.com> -Date: Tue, 18 Feb 2014 05:19:26 +0000 -Subject: Bluetooth: allocate static minor for vhci - -Commit bfacbb9 (Bluetooth: Use devname:vhci module alias for virtual HCI -driver) added the module alias to hci_vhci module so it's possible to -create the /dev/vhci node. However creating an alias without -specifying the minor doesn't allow us to create the node ahead, -triggerring module auto-load when it's first accessed. - -Starting with depmod from kmod 16 we started to warn if there's a -devname alias without specifying the major and minor. - -Let's do the same done for uhid, kvm, fuse and others, specifying a -fixed minor. In systems with systemd as the init the following will -happen: on early boot systemd will call "kmod static-nodes" to read -/lib/modules/$(uname -r)/modules.devname and then create the nodes. When -first accessed these "dead" nodes will trigger the module loading. - -Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> -Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -Signed-off-by: Marcel Holtmann <marcel@holtmann.org> ---- -diff --git a/Documentation/devices.txt b/Documentation/devices.txt -index 10378cc..04356f5 100644 ---- a/Documentation/devices.txt -+++ b/Documentation/devices.txt -@@ -353,6 +353,7 @@ Your cooperation is appreciated. - 133 = /dev/exttrp External device trap - 134 = /dev/apm_bios Advanced Power Management BIOS - 135 = /dev/rtc Real Time Clock -+ 137 = /dev/vhci Bluetooth virtual HCI driver - 139 = /dev/openprom SPARC OpenBoot PROM - 140 = /dev/relay8 Berkshire Products Octal relay card - 141 = /dev/relay16 Berkshire Products ISO-16 relay card -diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c -index 1ef6990..add1c6a 100644 ---- a/drivers/bluetooth/hci_vhci.c -+++ b/drivers/bluetooth/hci_vhci.c -@@ -359,7 +359,7 @@ static const struct file_operations vhci_fops = { - static struct miscdevice vhci_miscdev= { - .name = "vhci", - .fops = &vhci_fops, -- .minor = MISC_DYNAMIC_MINOR, -+ .minor = VHCI_MINOR, - }; - - static int __init vhci_init(void) -@@ -385,3 +385,4 @@ MODULE_DESCRIPTION("Bluetooth virtual HCI driver ver " VERSION); - MODULE_VERSION(VERSION); - MODULE_LICENSE("GPL"); - MODULE_ALIAS("devname:vhci"); -+MODULE_ALIAS_MISCDEV(VHCI_MINOR); -diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h -index 3737f72..7bb6148 100644 ---- a/include/linux/miscdevice.h -+++ b/include/linux/miscdevice.h -@@ -23,6 +23,7 @@ - #define TEMP_MINOR 131 /* Temperature Sensor */ - #define RTC_MINOR 135 - #define EFI_RTC_MINOR 136 /* EFI Time services */ -+#define VHCI_MINOR 137 - #define SUN_OPENPROM_MINOR 139 - #define DMAPI_MINOR 140 /* DMAPI */ - #define NVRAM_MINOR 144 --- -cgit v0.9.2 diff --git a/freed-ora/current/f20/Input-elantech-add-support-for-newer-elantech-touchpads.patch b/freed-ora/current/f20/Input-elantech-add-support-for-newer-elantech-touchpads.patch deleted file mode 100644 index 448aeae54..000000000 --- a/freed-ora/current/f20/Input-elantech-add-support-for-newer-elantech-touchpads.patch +++ /dev/null @@ -1,32 +0,0 @@ -Bugzilla: 1051668 -Upstream-status: 3.15 - -From ae4bedf0679d99f0a9b80a7ea9b8dd205de05d06 Mon Sep 17 00:00:00 2001 -From: Jordan Rife <jrife0@gmail.com> -Date: Tue, 22 Apr 2014 17:44:51 -0700 -Subject: Input: elantech - add support for newer elantech touchpads - -Newer elantech touchpads are not recognized by the current driver, since it -fails to detect their firmware version number. This prevents more advanced -touchpad features from being usable such as two-finger scrolling. This -patch allows newer touchpads to be detected and be fully functional. Tested -on Sony Vaio SVF13N17PXB. - -Signed-off-by: Jordan Rife <jrife0@gmail.com> -Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> - -diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c -index ef1cf52..088d354 100644 ---- a/drivers/input/mouse/elantech.c -+++ b/drivers/input/mouse/elantech.c -@@ -1353,6 +1353,7 @@ static int elantech_set_properties(struct elantech_data *etd) - case 6: - case 7: - case 8: -+ case 9: - etd->hw_version = 4; - break; - default: --- -cgit v0.10.1 - diff --git a/freed-ora/current/f20/acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch b/freed-ora/current/f20/acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch new file mode 100644 index 000000000..668fa0956 --- /dev/null +++ b/freed-ora/current/f20/acer-wmi-Add-Aspire-5741-to-video_vendor_dmi_table.patch @@ -0,0 +1,40 @@ +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/freed-ora/current/f20/acer-wmi-Switch-to-acpi_video_unregister_backlight.patch b/freed-ora/current/f20/acer-wmi-Switch-to-acpi_video_unregister_backlight.patch new file mode 100644 index 000000000..310e8a299 --- /dev/null +++ b/freed-ora/current/f20/acer-wmi-Switch-to-acpi_video_unregister_backlight.patch @@ -0,0 +1,64 @@ +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/freed-ora/current/f20/acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch b/freed-ora/current/f20/acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch new file mode 100644 index 000000000..c956ad0c2 --- /dev/null +++ b/freed-ora/current/f20/acpi-video-Add-an-acpi_video_unregister_backlight-fu.patch @@ -0,0 +1,112 @@ +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/freed-ora/current/f20/acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch b/freed-ora/current/f20/acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch new file mode 100644 index 000000000..f3d36889f --- /dev/null +++ b/freed-ora/current/f20/acpi-video-Add-use-native-backlight-quirk-for-the-Th.patch @@ -0,0 +1,45 @@ +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/freed-ora/current/f20/acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch b/freed-ora/current/f20/acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch new file mode 100644 index 000000000..c8c1f7aa2 --- /dev/null +++ b/freed-ora/current/f20/acpi-video-Add-use_native_backlight-quirk-for-HP-Pro.patch @@ -0,0 +1,41 @@ +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/freed-ora/current/f20/acpi-video-Don-t-register-acpi_video_resume-notifier.patch b/freed-ora/current/f20/acpi-video-Don-t-register-acpi_video_resume-notifier.patch new file mode 100644 index 000000000..ac40462cd --- /dev/null +++ b/freed-ora/current/f20/acpi-video-Don-t-register-acpi_video_resume-notifier.patch @@ -0,0 +1,214 @@ +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/freed-ora/current/f20/acpi-video-Unregister-the-backlight-device-if-a-raw-.patch b/freed-ora/current/f20/acpi-video-Unregister-the-backlight-device-if-a-raw-.patch new file mode 100644 index 000000000..f922d4235 --- /dev/null +++ b/freed-ora/current/f20/acpi-video-Unregister-the-backlight-device-if-a-raw-.patch @@ -0,0 +1,130 @@ +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/freed-ora/current/f20/arm-beagle.patch b/freed-ora/current/f20/arm-beagle.patch index 4b303f8f3..5e2d8abdc 100644 --- a/freed-ora/current/f20/arm-beagle.patch +++ b/freed-ora/current/f20/arm-beagle.patch @@ -458,49 +458,3 @@ index f85cabc..5270d18 100644 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */ -- 1.9.0 -commit ef78f3869c37c480f1d58462a760a40dabc823f4 -Author: Robert Nelson <robertcnelson@gmail.com> -Date: Tue Apr 15 10:09:59 2014 -0500 - - ARM: dts: Add support for the BeagleBoard xM A/B - - BeagleBoard xM A/B has an inverted usb hub enable line vs the xM C - - Signed-off-by: Robert Nelson <robertcnelson@gmail.com> - [tony@atomide.com: updated for missing bracket] - Signed-off-by: Tony Lindgren <tony@atomide.com> - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 35c146f..0bdeba3 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -246,6 +246,7 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ - omap3-sbc-t3730.dtb \ - omap3-devkit8000.dtb \ - omap3-beagle-xm.dtb \ -+ omap3-beagle-xm-ab.dtb \ - omap3-evm.dtb \ - omap3-evm-37xx.dtb \ - omap3-ldp.dtb \ -diff --git a/arch/arm/boot/dts/omap3-beagle-xm-ab.dts b/arch/arm/boot/dts/omap3-beagle-xm-ab.dts -new file mode 100644 -index 0000000..7ac3bcf ---- /dev/null -+++ b/arch/arm/boot/dts/omap3-beagle-xm-ab.dts -@@ -0,0 +1,16 @@ -+/* -+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include "omap3-beagle-xm.dts" -+ -+/ { -+ /* HS USB Port 2 Power enable was inverted with the xM C */ -+ hsusb2_power: hsusb2_power_reg { -+ enable-active-high; -+ }; -+}; diff --git a/freed-ora/current/f20/arm-imx6-utilite.patch b/freed-ora/current/f20/arm-imx6-utilite.patch index 35f34c166..bb0747202 100644 --- a/freed-ora/current/f20/arm-imx6-utilite.patch +++ b/freed-ora/current/f20/arm-imx6-utilite.patch @@ -1,158 +1,54 @@ -commit 682d055e6ac5c3855f51649de6d68e9bb29c26a6 -Author: Valentin Raevsky <valentin@compulab.co.il> -Date: Tue Oct 29 14:11:43 2013 +0200 - - ARM: dts: Add initial support for cm-fx6. - - Add initial support for cm-fx6 module. - - cm-fx6 is a module based on mx6q SoC with the following features: - - Up to 4GB of DDR3 - - 1 LCD/DVI output port - - 1 HDMI output port - - 2 LVDS LCD ports - - Gigabit Ethernet - - Analog Audio - - CAN - - SATA - - NAND - - PCIE - - This patch allows to boot up the module, configures the serial console, - the Ethernet adapter and the heartbeat led. - - cm-fx6 is embedded inside the Utilite computer. - - Signed-off-by: Valentin Raevsky <valentin@compulab.co.il> - Signed-off-by: Igor Grinberg <grinberg@compulab.co.il> - Signed-off-by: Shawn Guo <shawn.guo@linaro.org> - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 8081479..5672e91 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -162,6 +162,7 @@ dtb-$(CONFIG_ARCH_MXC) += \ - imx6dl-sabresd.dtb \ - imx6dl-wandboard.dtb \ - imx6q-arm2.dtb \ -+ imx6q-cm-fx6.dtb \ - imx6q-cubox-i.dtb \ - imx6q-phytec-pbab01.dtb \ - imx6q-sabreauto.dtb \ diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts -new file mode 100644 -index 0000000..99b46f8 ---- /dev/null +index 99b46f8..8b6ddd1 100644 +--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts +++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts -@@ -0,0 +1,107 @@ -+/* -+ * Copyright 2013 CompuLab Ltd. -+ * -+ * Author: Valentin Raevsky <valentin@compulab.co.il> -+ * -+ * 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 -+ */ +@@ -97,11 +97,49 @@ + MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 + >; + }; + -+/dts-v1/; -+#include "imx6q.dtsi" -+ -+/ { -+ model = "CompuLab CM-FX6"; -+ compatible = "compulab,cm-fx6", "fsl,imx6q"; -+ -+ memory { -+ reg = <0x10000000 0x80000000>; -+ }; -+ -+ leds { -+ compatible = "gpio-leds"; -+ -+ heartbeat-led { -+ label = "Heartbeat"; -+ gpios = <&gpio2 31 0>; -+ linux,default-trigger = "heartbeat"; -+ }; -+ }; -+}; -+ -+&fec { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_enet>; -+ phy-mode = "rgmii"; -+ status = "okay"; -+}; -+ -+&gpmi { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_gpmi_nand>; -+ status = "okay"; -+}; -+ -+&iomuxc { -+ imx6q-cm-fx6 { -+ pinctrl_enet: enetgrp { -+ fsl,pins = < -+ MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0 -+ MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0 -+ MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0 -+ MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0 -+ MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0 -+ MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0 -+ MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0 -+ MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0 -+ MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0 -+ MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0 -+ MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0 -+ MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0 -+ MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0 -+ MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0 -+ MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0 -+ MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8 -+ >; -+ }; -+ -+ pinctrl_gpmi_nand: gpminandgrp { ++ pinctrl_usdhc1: usdhc1grp { + fsl,pins = < -+ MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1 -+ MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1 -+ MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1 -+ MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000 -+ MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1 -+ MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1 -+ MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1 -+ MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1 -+ MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1 -+ MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1 -+ MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1 -+ MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1 -+ MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1 -+ MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1 -+ MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1 -+ MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1 -+ MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1 ++ MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059 ++ MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059 ++ MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059 ++ MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059 ++ MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059 ++ MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059 + >; + }; + -+ pinctrl_uart4: uart4grp { ++ pinctrl_usdhc3: usdhc3grp { + fsl,pins = < -+ MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 -+ MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 ++ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059 ++ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059 ++ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059 ++ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059 ++ MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059 ++ MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059 + >; + }; -+ }; + }; + }; + ++&sata { ++ status = "okay"; +}; + -+&uart4 { + &uart4 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart4>; + status = "okay"; + }; ++ ++&usdhc1 { + pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_uart4>; ++ pinctrl-0 = <&pinctrl_usdhc1>; + status = "okay"; +}; + -+&sata { -+ status = "okay"; ++&usdhc3 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_usdhc3>; ++ status = "okay"; +}; diff --git a/freed-ora/current/f20/arm-omap-load-tfp410.patch b/freed-ora/current/f20/arm-omap-load-tfp410.patch deleted file mode 100644 index 3ef21a062..000000000 --- a/freed-ora/current/f20/arm-omap-load-tfp410.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c -index 60d3958..0e304ce 100644 ---- a/drivers/video/omap2/dss/core.c -+++ b/drivers/video/omap2/dss/core.c -@@ -298,6 +298,9 @@ static int __init omap_dss_init(void) - int r; - int i; - -+ /* hack to load encoder-tfp410 driver */ -+ request_module("encoder-tfp410"); -+ - r = platform_driver_probe(&omap_dss_driver, omap_dss_probe); - if (r) - return r; diff --git a/freed-ora/current/f20/arm-tegra-paz00-panel-dts.patch b/freed-ora/current/f20/arm-tegra-paz00-panel-dts.patch deleted file mode 100644 index e64f2ce1e..000000000 --- a/freed-ora/current/f20/arm-tegra-paz00-panel-dts.patch +++ /dev/null @@ -1,99 +0,0 @@ -From fb4a8356eb67514b10618d1e9e4059ced14c05f2 Mon Sep 17 00:00:00 2001 -From: Marc Dietrich <marvin24@gmx.de> -Date: Sat, 21 Dec 2013 21:38:13 +0100 -Subject: [PATCH] ARM: tegra: paz00: Add LVDS support to device tree - -Add backlight and panel nodes for the PAZ00 TFT LCD panel. - -Signed-off-by: Marc Dietrich <marvin24@gmx.de> ---- - arch/arm/boot/dts/tegra20-paz00.dts | 46 ++++++++++++++++++++++++++++++++++- - 1 files changed, 45 insertions(+), 1 deletions(-) - -diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts -index c7cd8e6..9a39a80 100644 ---- a/arch/arm/boot/dts/tegra20-paz00.dts -+++ b/arch/arm/boot/dts/tegra20-paz00.dts -@@ -17,6 +17,14 @@ - }; - - host1x@50000000 { -+ dc@54200000 { -+ rgb { -+ status = "okay"; -+ -+ nvidia,panel = <&panel>; -+ }; -+ }; -+ - hdmi@54280000 { - status = "okay"; - -@@ -257,7 +265,11 @@ - status = "okay"; - }; - -- i2c@7000c000 { -+ pwm: pwm@7000a000 { -+ status = "okay"; -+ }; -+ -+ lvds_ddc: i2c@7000c000 { - status = "okay"; - clock-frequency = <400000>; - -@@ -475,6 +487,18 @@ - non-removable; - }; - -+ backlight: backlight { -+ compatible = "pwm-backlight"; -+ -+ enable-gpios = <&gpio TEGRA_GPIO(U, 4) GPIO_ACTIVE_HIGH>; -+ pwms = <&pwm 0 5000000>; -+ -+ brightness-levels = <0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 255>; -+ default-brightness-level = <10>; -+ -+ backlight-boot-off; -+ }; -+ - clocks { - compatible = "simple-bus"; - #address-cells = <1>; -@@ -509,6 +533,16 @@ - }; - }; - -+ panel: panel { -+ compatible = "samsung,ltn101nt05", "simple-panel"; -+ -+ ddc-i2c-bus = <&lvds_ddc>; -+ power-supply = <&vdd_pnl_reg>; -+ enable-gpios = <&gpio TEGRA_GPIO(M, 6) GPIO_ACTIVE_HIGH>; -+ -+ backlight = <&backlight>; -+ }; -+ - regulators { - compatible = "simple-bus"; - #address-cells = <1>; -@@ -522,6 +556,16 @@ - regulator-max-microvolt = <5000000>; - regulator-always-on; - }; -+ -+ vdd_pnl_reg: regulator@1 { -+ compatible = "regulator-fixed"; -+ reg = <1>; -+ regulator-name = "+3VS,vdd_pnl"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ gpio = <&gpio TEGRA_GPIO(A, 4) GPIO_ACTIVE_HIGH>; -+ enable-active-high; -+ }; - }; - - sound { --- -1.7.1 diff --git a/freed-ora/current/f20/asus-wmi-Add-a-no-backlight-quirk.patch b/freed-ora/current/f20/asus-wmi-Add-a-no-backlight-quirk.patch new file mode 100644 index 000000000..3a99afef9 --- /dev/null +++ b/freed-ora/current/f20/asus-wmi-Add-a-no-backlight-quirk.patch @@ -0,0 +1,69 @@ +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/freed-ora/current/f20/backlight-Add-backlight-device-un-registration-notif.patch b/freed-ora/current/f20/backlight-Add-backlight-device-un-registration-notif.patch new file mode 100644 index 000000000..a411bb9cb --- /dev/null +++ b/freed-ora/current/f20/backlight-Add-backlight-device-un-registration-notif.patch @@ -0,0 +1,132 @@ +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/freed-ora/current/f20/config-arm-generic b/freed-ora/current/f20/config-arm-generic index cd56b2493..c1bc6534b 100644 --- a/freed-ora/current/f20/config-arm-generic +++ b/freed-ora/current/f20/config-arm-generic @@ -4,16 +4,19 @@ CONFIG_COMMON_CLK=y CONFIG_EARLY_PRINTK=y CONFIG_FB_SSD1307=m CONFIG_HW_PERF_EVENTS=y -CONFIG_MMC=y CONFIG_NFS_FS=y +CONFIG_CRASH=m + # CONFIG_PID_IN_CONTEXTIDR is not set # CONFIG_CPU_BIG_ENDIAN is not set # CONFIG_BIG_LITTLE is not set +# CONFIG_IWMMXT is not set CONFIG_PWM=y CONFIG_PWM_SYSFS=y +# CONFIG_PWM_FSL_FTM is not set CONFIG_RESET_CONTROLLER=y CONFIG_RESET_GPIO=y @@ -125,6 +128,7 @@ CONFIG_I2C_MUX=m CONFIG_I2C_MUX_GPIO=m CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m # Sensors CONFIG_SENSORS_IIO_HWMON=m @@ -184,15 +188,31 @@ CONFIG_CMA_AREAS=7 # CONFIG_INFINIBAND is not set # CONFIG_ISDN is not set +# CONFIG_PCMCIA is not set +# CONFIG_PARPORT is not set +# CONFIG_FIREWIRE is not set +# CONFIG_ATM_DRIVERS is not set +# CONFIG_ISDN is not set +# CONFIG_GAMEPORT is not set +# CONFIG_AGP is not set # netdrv -# CONFIG_NET_VENDOR_DEC is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_BROCADE is not set # CONFIG_NET_VENDOR_CHELSIO is not set +# CONFIG_NET_VENDOR_CISCO is not set +# CONFIG_NET_VENDOR_DEC is not set +# CONFIG_NET_VENDOR_EMULEX is not set # CONFIG_NET_VENDOR_EXAR is not set -# CONFIG_NET_VENDOR_INTEL is not set # CONFIG_NET_VENDOR_MELLANOX is not set -# CONFIG_NET_VENDOR_BROCADE is not set +# CONFIG_NET_VENDOR_QLOGIC is not set +# 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 @@ -203,10 +223,19 @@ CONFIG_CMA_AREAS=7 # CONFIG_SCSI_CXGB3_ISCSI is not set # CONFIG_SCSI_CXGB4_ISCSI is not set # CONFIG_SCSI_BFA_FC is not set +# CONFIG_FUSION is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_MPT2SAS is not set +# CONFIG_SCSI_MPT3SAS is not set # serial # CONFIG_SERIAL_SH_SCI is not set -CONFIG_CRASH=m +# drm +# CONFIG_DRM_VMWGFX is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set diff --git a/freed-ora/current/f20/config-arm64 b/freed-ora/current/f20/config-arm64 index 38a0debd2..ddd5bc4b9 100644 --- a/freed-ora/current/f20/config-arm64 +++ b/freed-ora/current/f20/config-arm64 @@ -1,6 +1,9 @@ CONFIG_64BIT=y CONFIG_ARM64=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y + # CONFIG_CPU_BIG_ENDIAN is not set # arm64 only SoCs @@ -70,6 +73,7 @@ CONFIG_VM_EVENT_COUNTERS=y # CONFIG_MDIO_BUS_MUX_GPIO is not set # CONFIG_MDIO_BUS_MUX_MMIOREG is not set + # busted build for various reasons # uses pci_* for some reason to allocate DMA buffers # CONFIG_DVB_B2C2_FLEXCOP_USB is not set @@ -80,3 +84,6 @@ CONFIG_VM_EVENT_COUNTERS=y # CONFIG_VGA_CONSOLE is not set CONFIG_POWER_RESET_XGENE=y CONFIG_COMMON_CLK_XGENE=y + +CONFIG_AHCI_XGENE=m +CONFIG_PHY_XGENE=m diff --git a/freed-ora/current/f20/config-armv7 b/freed-ora/current/f20/config-armv7 index d609bc65d..4aaa913a6 100644 --- a/freed-ora/current/f20/config-armv7 +++ b/freed-ora/current/f20/config-armv7 @@ -9,7 +9,7 @@ CONFIG_ARCH_OMAP3=y CONFIG_ARCH_OMAP4=y CONFIG_ARCH_PICOXCELL=y CONFIG_ARCH_ROCKCHIP=y -CONFIG_ARCH_SOCFPGA=y +# CONFIG_ARCH_SOCFPGA is not set CONFIG_ARCH_TEGRA=y CONFIG_ARCH_U8500=y # CONFIG_ARCH_VIRT is not set @@ -19,11 +19,15 @@ CONFIG_ARCH_ZYNQ=y # CONFIG_ARM_LPAE is not set # CONFIG_XEN is not set # 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 @@ -45,12 +49,20 @@ 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 @@ -58,27 +70,26 @@ CONFIG_SOC_OMAP5=y # CONFIG_SOC_DRA7XX is not set CONFIG_SOC_OMAP3430=y CONFIG_SOC_TI81XX=y -CONFIG_MACH_CRANEBOARD=y -CONFIG_MACH_DEVKIT8000=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_3630SDP=y -CONFIG_MACH_OMAP_GENERIC=y -CONFIG_MACH_OMAP_LDP=y -CONFIG_MACH_OMAP3_BEAGLE=y -# CONFIG_MACH_OMAP3EVM is not set -CONFIG_MACH_OMAP_3430SDP=y -CONFIG_MACH_OMAP3530_LV_SOM=y +# 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_OMAP3_PANDORA=y -CONFIG_MACH_OMAP3_TORPEDO=y -CONFIG_MACH_OVERO=y -CONFIG_MACH_TOUCHBOOK=y -CONFIG_MACH_CM_T35=y -CONFIG_MACH_CM_T3517=y -CONFIG_MACH_IGEP0030=y -CONFIG_MACH_SBC3530=y +# 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_SOC_HAS_REALTIME_COUNTER=y CONFIG_OMAP_RESET_CLOCKS=y @@ -86,6 +97,8 @@ 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 @@ -115,7 +128,8 @@ CONFIG_TWL4030_POWER=y CONFIG_TWL4030_WATCHDOG=m CONFIG_BATTERY_TWL4030_MADC=m CONFIG_OMAP_USB2=m -CONFIG_OMAP_USB3=m +CONFIG_OMAP_CONTROL_PHY=m +CONFIG_TI_PIPE3=m CONFIG_TWL4030_USB=m CONFIG_TWL6030_USB=m CONFIG_TWL6030_PWM=m @@ -128,12 +142,11 @@ CONFIG_REGULATOR_TWL4030=y CONFIG_BACKLIGHT_PANDORA=m CONFIG_OMAP_OCP2SCP=m CONFIG_USB_EHCI_HCD_OMAP=m -CONFIG_USB_OHCI_HCD_PLATFORM=m CONFIG_USB_OHCI_HCD_OMAP3=m CONFIG_USB_MUSB_AM35X=m CONFIG_USB_MUSB_OMAP2PLUS=m CONFIG_OMAP_CONTROL_USB=m -CONFIG_MMC_OMAP=y +CONFIG_MMC_OMAP=m CONFIG_MMC_OMAP_HS=y CONFIG_RTC_DRV_MAX8907=m # CONFIG_RTC_DRV_TWL92330 is not set @@ -141,6 +154,8 @@ CONFIG_RTC_DRV_TWL4030=y CONFIG_RTC_DRV_OMAP=y CONFIG_SENSORS_TWL4030_MADC=m CONFIG_TWL6030_GPADC=m +CONFIG_BATTERY_RX51=m +# CONFIG_IR_RX51 is not set # OMAP5 (possibly other devices too) CONFIG_MFD_PALMAS=y @@ -148,6 +163,7 @@ CONFIG_EXTCON_PALMAS=m CONFIG_GPIO_PALMAS=y CONFIG_PINCTRL_PALMAS=y CONFIG_REGULATOR_PALMAS=y +CONFIG_REGULATOR_PBIAS=m CONFIG_RTC_DRV_PALMAS=m CONFIG_WL_TI=y @@ -184,8 +200,8 @@ CONFIG_OMAP5_THERMAL=y CONFIG_POWER_AVS=y CONFIG_POWER_AVS_OMAP=y CONFIG_POWER_AVS_OMAP_CLASS3=y - -CONFIG_ARM_OMAP2PLUS_CPUFREQ=y +# CPUFREQ_CPU0 is used for scaling on DT OMAP +# CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set CONFIG_PWM_TIECAP=m CONFIG_PWM_TIEHRPWM=m @@ -194,6 +210,7 @@ CONFIG_PWM_TWL_LED=m CONFIG_CRYPTO_DEV_OMAP_SHAM=m CONFIG_CRYPTO_DEV_OMAP_AES=m +CONFIG_CRYPTO_DEV_OMAP_DES=m CONFIG_HW_RANDOM_OMAP=m CONFIG_HW_RANDOM_OMAP3_ROM=m @@ -206,7 +223,7 @@ CONFIG_OMAP2_VRFB=y # CONFIG_FB_DA8XX is not set CONFIG_OMAP2_DSS=m -CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y +# 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 @@ -235,12 +252,13 @@ CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m # Enable V4L2 drivers for OMAP2+ CONFIG_MEDIA_CONTROLLER=y -CONFIG_VIDEO_V4L2_SUBDEV_API=y CONFIG_V4L_PLATFORM_DRIVERS=y # CONFIG_VIDEO_OMAP2_VOUT is not set -# CONFIG_VIDEO_OMAP3 is not set -# CONFIG_VIDEO_VPFE_CAPTURE is not set +CONFIG_VIDEO_OMAP3=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 @@ -265,7 +283,7 @@ 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 is not set +CONFIG_SND_OMAP_SOC_RX51=m CONFIG_SND_OMAP_SOC_SDP4430=m CONFIG_SND_SOC_TLV320AIC23=m CONFIG_SND_SOC_TLV320AIC3X=m @@ -308,7 +326,7 @@ CONFIG_TI_DAVINCI_MDIO=m CONFIG_TI_CPSW=m CONFIG_TI_CPSW_PHY_SEL=y CONFIG_TI_CPTS=y -# Needed for BBone White +# Builtin needed for BBone White CONFIG_REGULATOR_TPS65217=y CONFIG_TI_EMIF=m CONFIG_DRM_TILCDC=m @@ -333,6 +351,7 @@ CONFIG_SOC_IMX50=y CONFIG_SOC_IMX53=y CONFIG_SOC_IMX6Q=y CONFIG_SOC_IMX6SL=y +# 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 @@ -340,7 +359,7 @@ CONFIG_ARM_IMX6Q_CPUFREQ=m CONFIG_IMX_THERMAL=m CONFIG_PATA_IMX=m CONFIG_PCI_IMX6=y -# CONFIG_USB_EHCI_MXC is not set +CONFIG_USB_EHCI_MXC=m CONFIG_USB_CHIPIDEA=m CONFIG_USB_CHIPIDEA_UDC=y CONFIG_USB_CHIPIDEA_HOST=y @@ -382,10 +401,10 @@ 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_EUKREA_TLV320=m CONFIG_USB_IMX21_HCD=m CONFIG_USB_MXS_PHY=m -CONFIG_MMC_DW_SOCFPGA=m CONFIG_MMC_SDHCI_ESDHC_IMX=m CONFIG_MMC_MXC=m CONFIG_SPI_MXS=m @@ -404,12 +423,13 @@ CONFIG_DRM_IMX_FB_HELPER=m CONFIG_DRM_IMX_HDMI=m CONFIG_DRM_IMX_IPUV3_CORE=m CONFIG_DRM_IMX_IPUV3=m -# CONFIG_DRM_IMX_LDB is not set +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 @@ -450,7 +470,6 @@ CONFIG_HW_RANDOM_PICOXCELL=m # ST Ericsson CONFIG_MACH_HREFV60=y CONFIG_MACH_SNOWBALL=y -CONFIG_MACH_UX500_DT=y CONFIG_ABX500_CORE=y CONFIG_ARM_U8500_CPUIDLE=y @@ -465,6 +484,7 @@ CONFIG_KEYBOARD_NOMADIK=m CONFIG_DB8500_CPUFREQ_COOLING=m CONFIG_DB8500_THERMAL=y CONFIG_UX500_WATCHDOG=m +CONFIG_AHCI_ST=m CONFIG_INPUT_AB8500_PONKEY=m CONFIG_REGULATOR_AB8500=y CONFIG_AB8500_USB=m @@ -483,6 +503,7 @@ CONFIG_AB8500_BM=y CONFIG_AB8500_GPADC=y CONFIG_SENSORS_AB8500=m CONFIG_STE_MODEM_RPROC=m +CONFIG_STIH415_RESET=y CONFIG_IIO_ST_GYRO_I2C_3AXIS=m CONFIG_IIO_ST_GYRO_SPI_3AXIS=m @@ -511,9 +532,8 @@ 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_I2C_MUX_PCA954x=m CONFIG_TEGRA_SYSTEM_DMA=y CONFIG_TEGRA_EMC_SCALING_ENABLE=y @@ -568,17 +588,16 @@ CONFIG_DRM_TEGRA_FBDEV=y 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 -CONFIG_GPIO_PCA953X=m - # OLPC XO CONFIG_SERIO_OLPC_APSP=m # Zynq-7xxx -# likely needs usb/mmc still +# likely needs usb still CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y CONFIG_SERIAL_XILINX_PS_UART=y @@ -592,6 +611,12 @@ CONFIG_GPIO_XILINX=y CONFIG_I2C_XILINX=m CONFIG_SPI_XILINX=m CONFIG_MMC_SDHCI_OF_ARASAN=m +CONFIG_I2C_CADENCE=m +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILINX_XADC=m +CONFIG_SND_SOC_ADI=m +CONFIG_SND_SOC_ADI_AXI_I2S=m +CONFIG_SND_SOC_ADI_AXI_SPDIF=m # Multi function devices CONFIG_MFD_88PM800=m @@ -629,8 +654,6 @@ CONFIG_REGULATOR_MAX8973=m # Defined config options we don't use yet # CONFIG_PINCTRL_IMX35 is not set -# CONFIG_BATTERY_RX51 is not set -# CONFIG_IR_RX51 is not set # CONFIG_MFD_SMSC is not set # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_LP8788 is not set @@ -652,12 +675,9 @@ CONFIG_REGULATOR_MAX8973=m # CONFIG_TOUCHSCREEN_EGALAX is not set # CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set -# CONFIG_VIRTUALIZATION 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_SOC_VF610 is not set # CONFIG_MMC_TMIO is not set -# CONFIG_SND_SOC_ADI is not set diff --git a/freed-ora/current/f20/config-armv7-generic b/freed-ora/current/f20/config-armv7-generic index 26e90fe82..1b6bea7ad 100644 --- a/freed-ora/current/f20/config-armv7-generic +++ b/freed-ora/current/f20/config-armv7-generic @@ -15,6 +15,7 @@ CONFIG_AEABI=y CONFIG_VFP=y CONFIG_VFPv3=y CONFIG_NEON=y +CONFIG_IWMMXT=y CONFIG_KERNEL_MODE_NEON=y CONFIG_ARM_UNWIND=y @@ -35,6 +36,7 @@ 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_MCPM is not set # CONFIG_OABI_COMPAT is not set @@ -64,6 +66,7 @@ CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y # 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 # errata # v5/v6 @@ -117,7 +120,6 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768 CONFIG_XZ_DEC_ARM=y -CONFIG_LOCAL_TIMERS=y CONFIG_UACCESS_WITH_MEMCPY=y CONFIG_CC_STACKPROTECTOR=y @@ -159,16 +161,23 @@ CONFIG_SATA_HIGHBANK=m CONFIG_ARM_HIGHBANK_CPUFREQ=m # CONFIG_ARM_HIGHBANK_CPUIDLE is not set -# Allwinner a1x +# Allwinner CONFIG_PINCTRL_SUNXI=y 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_AHCI_SUNXI=m +CONFIG_SPI_SUN4I=m +CONFIG_SPI_SUN6I=m +CONFIG_MMC_SUNXI=m +CONFIG_GPIO_PCA953X=m CONFIG_REGMAP=y CONFIG_REGMAP_I2C=m @@ -183,6 +192,8 @@ 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 @@ -190,7 +201,6 @@ CONFIG_USB_ULPI=y CONFIG_AX88796=m CONFIG_AX88796_93CX6=y CONFIG_USB_ISP1760_HCD=m -# CONFIG_USB_EHCI_HCD_ORION is not set # usb gadget CONFIG_USB_GADGET=m @@ -203,7 +213,6 @@ CONFIG_USB_MUSB_DSPS=m CONFIG_USB_GPIO_VBUS=m CONFIG_USB_G_ACM_MS=m CONFIG_USB_G_DBGP=m -CONFIG_USB_G_DBGP_PRINTK=y CONFIG_USB_G_DBGP_SERIAL=y CONFIG_USB_G_MULTI=m CONFIG_USB_G_MULTI_CDC=y @@ -261,6 +270,7 @@ CONFIG_MFD_TPS65912_SPI=y # CONFIG_MFD_ARIZONA_SPI is not set # CONFIG_MFD_WM831X_SPI is not set # CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_PM8921_CORE is not set # Pin stuff CONFIG_PINMUX=y @@ -272,6 +282,7 @@ CONFIG_GENERIC_PINCONF=y # CONFIG_PINCTRL_EXYNOS4 is not set # CONFIG_PINCTRL_CAPRI is not set # CONFIG_PINCTRL_MSM8X74 is not set +# CONFIG_PINCTRL_BCM281XX is not set # GPIO # CONFIG_GPIO_EM is not set @@ -282,6 +293,7 @@ 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_MDIO_BUS_MUX=m CONFIG_MDIO_BUS_MUX_GPIO=m @@ -299,19 +311,19 @@ CONFIG_W1_MASTER_GPIO=m CONFIG_SPI=y CONFIG_SPI_MASTER=y CONFIG_SPI_GPIO=m -CONFIG_SPI_BITBANG=m -CONFIG_SPI_PL022=m CONFIG_SPI_SPIDEV=m CONFIG_SPI_ALTERA=m +CONFIG_SPI_BITBANG=m 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_DESIGNWARE=m -CONFIG_SPI_TLE62X0=m # CONFIG_SPI_FSL_SPI is not set CONFIG_NFC_NCI_SPI=y @@ -368,6 +380,7 @@ CONFIG_MTD_NAND_TMIO=m CONFIG_MTD_SPINAND_MT29F=m CONFIG_MTD_SPINAND_ONDIEECC=y CONFIG_MTD_SST25L=m +CONFIG_MTD_ST_SPI_FSM=m CONFIG_EEPROM_AT25=m CONFIG_EEPROM_93XX46=m @@ -411,6 +424,42 @@ 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 # Displays @@ -429,6 +478,7 @@ CONFIG_RTC_DRV_RS5C348=m CONFIG_RTC_DRV_RX4581=m CONFIG_RTC_DRV_TPS65910=m CONFIG_RTC_DRV_TPS80031=m +# CONFIG_RTC_DRV_DS1347 is not set # Regulators CONFIG_REGULATOR=y @@ -505,6 +555,7 @@ 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 diff --git a/freed-ora/current/f20/config-armv7-lpae b/freed-ora/current/f20/config-armv7-lpae index 25fe122d5..bc9324fde 100644 --- a/freed-ora/current/f20/config-armv7-lpae +++ b/freed-ora/current/f20/config-armv7-lpae @@ -90,6 +90,8 @@ 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 @@ -111,6 +113,7 @@ CONFIG_KEYSTONE_USB_PHY=m CONFIG_USB_DWC3_KEYSTONE=m CONFIG_GPIO_DAVINCI=y CONFIG_I2C_DAVINCI=m +CONFIG_TI_AEMIF=m # CONFIG_DAVINCI_WATCHDOG is not set # CONFIG_SPI_DAVINCI is not set # CONFIG_SND_DAVINCI_SOC is not set @@ -133,3 +136,6 @@ CONFIG_S3C_LOWLEVEL_UART_PORT=1 # 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 diff --git a/freed-ora/current/f20/config-debug b/freed-ora/current/f20/config-debug index e22532600..6ad71f3f5 100644 --- a/freed-ora/current/f20/config-debug +++ b/freed-ora/current/f20/config-debug @@ -8,6 +8,7 @@ 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 CONFIG_PROVE_LOCKING=y CONFIG_DEBUG_SPINLOCK=y CONFIG_PROVE_RCU=y @@ -46,6 +47,7 @@ CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 CONFIG_X86_PTDUMP=y +CONFIG_EFI_PGT_DUMP=y CONFIG_CAN_DEBUG_DEVICES=y diff --git a/freed-ora/current/f20/config-generic b/freed-ora/current/f20/config-generic index 79180dafa..33a5f0b52 100644 --- a/freed-ora/current/f20/config-generic +++ b/freed-ora/current/f20/config-generic @@ -37,6 +37,7 @@ CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_COMPILE_TEST is not set CONFIG_FHANDLE=y +# CONFIG_USELIB is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_XACCT=y @@ -122,8 +123,8 @@ CONFIG_YENTA=m CONFIG_CARDBUS=y CONFIG_I82092=m CONFIG_PD6729=m - CONFIG_PCCARD=y + CONFIG_MMC=m CONFIG_SDIO_UART=m # CONFIG_MMC_TEST is not set @@ -216,6 +217,8 @@ CONFIG_EXTRA_FIRMWARE="" # CONFIG_SPI is not set +# CONFIG_SPMI is not set + # # Memory Technology Devices (MTD) # @@ -291,6 +294,7 @@ CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 # CONFIG_MTD_UBI_FASTMAP is not set # CONFIG_MTD_UBI_GLUEBI is not set +# CONFIG_MTD_UBI_BLOCK is not set # # Parallel port support @@ -316,6 +320,7 @@ CONFIG_BLK_DEV_NULL_BLK=m CONFIG_BLK_DEV_FD=m # CONFIG_PARIDE is not set CONFIG_ZRAM=m +# CONFIG_ZRAM_LZ4_COMPRESS is not set # CONFIG_ZRAM_DEBUG is not set CONFIG_BLK_CPQ_DA=m @@ -524,6 +529,11 @@ CONFIG_SCSI_LPFC=m # PCMCIA SCSI adapter support # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m + CONFIG_ATA=y CONFIG_ATA_BMDMA=y CONFIG_ATA_VERBOSE_ERROR=y @@ -603,6 +613,9 @@ CONFIG_PATA_VIA=m CONFIG_PATA_WINBOND=m CONFIG_PATA_ATP867X=m +CONFIG_ATA_OVER_ETH=m + +# CONFIG_MCB is not set # # Multi-device support (RAID and LVM) @@ -636,6 +649,7 @@ CONFIG_DM_THIN_PROVISIONING=m CONFIG_DM_CACHE=m CONFIG_DM_CACHE_MQ=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 @@ -673,10 +687,6 @@ CONFIG_FIREWIRE_NOSY=m # CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set # -# IEEE 1394 (FireWire) support -# - -# # I2O device support # # CONFIG_I2O is not set @@ -1064,6 +1074,7 @@ CONFIG_IP_SET_BITMAP_IP=m CONFIG_IP_SET_BITMAP_IPMAC=m CONFIG_IP_SET_BITMAP_PORT=m CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPMARK=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m @@ -1075,7 +1086,7 @@ CONFIG_IP_SET_HASH_NETIFACE=m CONFIG_IP_SET_LIST_SET=m # -# SCTP Configuration (EXPERIMENTAL) +# SCTP Configuration # CONFIG_IP_SCTP=m CONFIG_NET_SCTPPROBE=m @@ -1192,6 +1203,7 @@ CONFIG_BATMAN_ADV=m CONFIG_BATMAN_ADV_BLA=y CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y +CONFIG_BATMAN_ADV_MCAST=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m @@ -1300,6 +1312,8 @@ CONFIG_NET_VENDOR_ALTEON=y CONFIG_ACENIC=m # CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_ALTERA_TSE=m + CONFIG_NET_VENDOR_AMD=y CONFIG_PCNET32=m CONFIG_AMD8111_ETH=m @@ -1332,6 +1346,8 @@ CONFIG_CHELSIO_T4VF=m CONFIG_NET_VENDOR_CISCO=y CONFIG_ENIC=m +# CONFIG_CX_ECAT is not set + CONFIG_NET_VENDOR_DEC=y # # Tulip family network device support @@ -1359,6 +1375,7 @@ CONFIG_SUNDANCE=m CONFIG_NET_VENDOR_EMULEX=y CONFIG_BE2NET=m +CONFIG_BE2NET_VXLAN=y CONFIG_NET_VENDOR_EXAR=y CONFIG_S2IO=m @@ -1434,6 +1451,7 @@ CONFIG_QLA3XXX=m CONFIG_QLCNIC=m CONFIG_QLCNIC_SRIOV=y CONFIG_QLCNIC_DCB=y +CONFIG_QLCNIC_VXLAN=y CONFIG_QLGE=m CONFIG_NETXEN_NIC=m @@ -1453,6 +1471,7 @@ CONFIG_NET_VENDOR_RDC=y CONFIG_R6040=m # CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set CONFIG_NET_VENDOR_SILAN=y CONFIG_SC92031=m @@ -1461,6 +1480,8 @@ 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 CONFIG_EPIC100=m @@ -1512,6 +1533,7 @@ CONFIG_MDIO_BITBANG=m CONFIG_NATIONAL_PHY=m CONFIG_ICPLUS_PHY=m CONFIG_BCM63XX_PHY=m +CONFIG_BCM7XXX_PHY=m CONFIG_LSI_ET1011C_PHY=m CONFIG_LXT_PHY=m CONFIG_MARVELL_PHY=m @@ -1521,6 +1543,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_MII=m CONFIG_NET_CORE=y @@ -1535,6 +1559,7 @@ CONFIG_ES3210=m CONFIG_NET_PCI=y CONFIG_B44=m CONFIG_B44_PCI=y +CONFIG_BCMGENET=m CONFIG_BNX2=m CONFIG_BNX2X=m CONFIG_BNX2X_SRIOV=y @@ -1554,6 +1579,7 @@ CONFIG_JME=m # # CONFIG_IP1000 is not set # CONFIG_MLX4_EN is not set +# CONFIG_MLX4_EN_VXLAN is not set # CONFIG_SFC is not set # CONFIG_FDDI is not set @@ -1711,6 +1737,7 @@ CONFIG_LIBERTAS_MESH=y CONFIG_IWLWIFI=m CONFIG_IWLDVM=m CONFIG_IWLMVM=m +# CONFIG_IWLWIFI_BCAST_FILTERING is not set CONFIG_IWLWIFI_DEBUG=y CONFIG_IWLWIFI_DEBUGFS=y CONFIG_IWLWIFI_DEVICE_SVTOOL=y @@ -1732,6 +1759,10 @@ CONFIG_P54_PCI=m CONFIG_MWL8K=m # CONFIG_PRISM54 is not set # CONFIG_PCMCIA_WL3501 is not set +CONFIG_RSI_91X=m +CONFIG_RSI_DEBUGFS=y +CONFIG_RSI_SDIO=m +CONFIG_RSI_USB=m CONFIG_RT2X00=m CONFIG_RT2X00_LIB_DEBUGFS=y # CONFIG_RT2X00_DEBUG is not set @@ -1779,6 +1810,7 @@ CONFIG_RTL8192SE=m CONFIG_RTL8192CU=m CONFIG_RTL8192DE=m CONFIG_RTL8723AE=m +CONFIG_RTL8723BE=m CONFIG_RTL8188EE=m CONFIG_MWIFIEX=m @@ -1826,6 +1858,9 @@ CONFIG_BAYCOM_PAR=m CONFIG_BAYCOM_EPP=m CONFIG_YAM=m +# +# Near Field Communication (NFC) devices +# CONFIG_NFC=m CONFIG_NFC_DIGITAL=m CONFIG_NFC_NCI=m @@ -1833,18 +1868,16 @@ CONFIG_NFC_HCI=m CONFIG_NFC_SHDLC=y CONFIG_NFC_LLCP=y CONFIG_NFC_SIM=m + CONFIG_NFC_MRVL=m CONFIG_NFC_MRVL_USB=m - -# -# Near Field Communication (NFC) devices -# CONFIG_NFC_PORT100=m CONFIG_NFC_PN544=m CONFIG_NFC_PN544_I2C=m CONFIG_NFC_PN533=m CONFIG_NFC_MICROREAD=m CONFIG_NFC_MICROREAD_I2C=m +CONFIG_NFC_TRF7970A=m # # IrDA (infrared) support @@ -1888,6 +1921,7 @@ CONFIG_WINBOND_FIR=m # Bluetooth support # CONFIG_BT=m +# CONFIG_BT_6LOWPAN is not set CONFIG_BT_L2CAP=y CONFIG_BT_SCO=y CONFIG_BT_CMTP=m @@ -2405,6 +2439,7 @@ CONFIG_SENSORS_ABITUGURU=m CONFIG_SENSORS_ABITUGURU3=m CONFIG_SENSORS_AD7414=m CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADC128D818=m CONFIG_SENSORS_ADM1021=m CONFIG_SENSORS_ADM1025=m CONFIG_SENSORS_ADM1026=m @@ -2458,6 +2493,9 @@ CONFIG_SENSORS_LM92=m CONFIG_SENSORS_LM93=m CONFIG_SENSORS_LM95234=m CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_LTC2945=m +CONFIG_SENSORS_LTC4222=m +CONFIG_SENSORS_LTC4260=m CONFIG_SENSORS_MAX1619=m CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m @@ -2568,12 +2606,15 @@ CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y # CONFIG_GP2AP020A00F is not set # CONFIG_TSL2583 is not set # CONFIG_TSL2x7x is not set +# CONFIG_LTR501 is not set # 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_VIPERBOARD_ADC is not set +# CONFIG_VF610_ADC is not set +# CONFIG_XILINX_XADC is not set # CONFIG_INV_MPU6050_IIO is not set CONFIG_IIO_ST_GYRO_3AXIS=m CONFIG_IIO_ST_MAGN_3AXIS=m @@ -2585,6 +2626,7 @@ CONFIG_HID_SENSOR_INCLINOMETER_3D=m # CONFIG_AK8975 is not set # CONFIG_MAG3110 is not set # CONFIG_TMP006 is not set +# CONFIG_HID_SENSOR_PRESS is not set # CONFIG_IIO_ST_PRESS is not set # CONFIG_KXSD9 is not set # CONFIG_AD7266 is not set @@ -2618,6 +2660,7 @@ CONFIG_HID_SENSOR_INCLINOMETER_3D=m # CONFIG_ADIS16480 is not set # CONFIG_DHT11 is not set # CONFIG_MPL3115 is not set +# CONFIG_SI7005 is not set # staging IIO drivers # CONFIG_AD7291 is not set @@ -2677,7 +2720,6 @@ CONFIG_W1_CON=y CONFIG_W1_MASTER_DS2490=m CONFIG_W1_MASTER_DS2482=m CONFIG_W1_MASTER_DS1WM=m -# CONFIG_HDQ_MASTER_OMAP is not set CONFIG_W1_SLAVE_THERM=m CONFIG_W1_SLAVE_SMEM=m CONFIG_W1_SLAVE_DS2408=m @@ -2705,6 +2747,7 @@ CONFIG_IPMI_HANDLER=m CONFIG_IPMI_DEVICE_INTERFACE=m CONFIG_IPMI_WATCHDOG=m CONFIG_IPMI_SI=m +# CONFIG_IPMI_SI_PROBE_DEFAULTS is not set CONFIG_IPMI_POWEROFF=m # @@ -2750,6 +2793,7 @@ CONFIG_WM831X_WATCHDOG=m CONFIG_W83697UG_WDT=m # CONFIG_MEN_A21_WDT is not set # CONFIG_GPIO_WATCHDOG is not set +# CONFIG_XILINX_WATCHDOG is not set CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=m @@ -2820,7 +2864,7 @@ CONFIG_R3964=m # CONFIG_SONYPI is not set # -# Ftape, the floppy tape device driver +# AGP Support # CONFIG_AGP=y CONFIG_AGP_ALI=y @@ -2873,6 +2917,7 @@ CONFIG_DRM_VMWGFX=m CONFIG_DRM_VMWGFX_FBCON=y CONFIG_DRM_QXL=m CONFIG_DRM_BOCHS=m +CONFIG_DRM_PTN3460=m # # PCMCIA character devices @@ -2978,7 +3023,6 @@ CONFIG_VIDEO_ZORAN_DC30=m CONFIG_VIDEO_ZORAN_LML33=m CONFIG_VIDEO_ZORAN_LML33R10=m CONFIG_VIDEO_ZORAN_ZR36060=m -# CONFIG_V4L_ISA_PARPORT_DRIVERS is not set # CONFIG_V4L_PLATFORM_DRIVERS is not set CONFIG_VIDEO_FB_IVTV=m CONFIG_VIDEO_SAA7164=m @@ -3129,8 +3173,10 @@ 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 CONFIG_IR_LIRC_CODEC=m +# CONFIG_IR_IMG is not set CONFIG_IR_IMON=m CONFIG_IR_MCEUSB=m CONFIG_IR_ITE_CIR=m @@ -3304,14 +3350,10 @@ CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 CONFIG_SND_DRIVERS=y # -# ISA devices -# -CONFIG_SND_AD1889=m - -# # PCI devices # CONFIG_SND_PCI=y +CONFIG_SND_AD1889=m CONFIG_SND_ALI5451=m CONFIG_SND_ALS300=m CONFIG_SND_ALS4000=m @@ -3479,9 +3521,6 @@ CONFIG_USB_XHCI_HCD=y # USB Device Class drivers # -# -# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem -# CONFIG_USB_ACM=m CONFIG_USB_PRINTER=m CONFIG_USB_WDM=m @@ -3504,7 +3543,7 @@ CONFIG_USB_STORAGE_REALTEK=m CONFIG_REALTEK_AUTOPM=y CONFIG_USB_STORAGE_ENE_UB6250=m # CONFIG_USB_LIBUSUAL is not set -# CONFIG_USB_UAS is not set +CONFIG_USB_UAS=m # @@ -3572,6 +3611,7 @@ CONFIG_HID_SENSOR_HUB=m CONFIG_HID_SENSOR_GYRO_3D=m CONFIG_HID_SENSOR_MAGNETOMETER_3D=m CONFIG_HID_SENSOR_ALS=m +# CONFIG_HID_SENSOR_PROX is not set CONFIG_HID_SENSOR_ACCEL_3D=m CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m @@ -3600,6 +3640,7 @@ CONFIG_HID_TIVO=m CONFIG_HID_GENERIC=y CONFIG_HID_AUREAL=m CONFIG_HID_APPLEIR=m +# CONFIG_HID_CP2112 is not set # @@ -3827,9 +3868,6 @@ CONFIG_USB_PHY=y # CONFIG_GENERIC_PHY is not set # CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set # CONFIG_PHY_EXYNOS_DP_VIDEO is not set -# CONFIG_OMAP_USB2 is not set -# CONFIG_OMAP_USB3 is not set -# CONFIG_OMAP_CONTROL_USB is not set # CONFIG_AM335X_PHY_USB is not set # CONFIG_SAMSUNG_USBPHY is not set # CONFIG_SAMSUNG_USB2PHY is not set @@ -3956,6 +3994,10 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_DA9063 is not set # CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_RTSX_USB is not set +# CONFIG_MFD_TPS65218 is not set + # # File systems @@ -4121,7 +4163,8 @@ CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=y CONFIG_SUNRPC=m CONFIG_SUNRPC_GSS=m -CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_SUNRPC_XPRT_RDMA_CLIENT=m +# CONFIG_SUNRPC_XPRT_RDMA_SERVER is not set CONFIG_SUNRPC_DEBUG=y CONFIG_RPCSEC_GSS_KRB5=m CONFIG_CIFS=m @@ -4481,7 +4524,6 @@ CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set -CONFIG_ATA_OVER_ETH=m CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_CLASS_DEVICE=m # CONFIG_BACKLIGHT_GENERIC is not set @@ -4528,7 +4570,7 @@ CONFIG_MEMCG_SWAP_ENABLED=y CONFIG_MEMCG_KMEM=y # CONFIG_CGROUP_HUGETLB is not set CONFIG_CGROUP_PERF=y -CONFIG_CGROUP_NET_PRIO=m +CONFIG_CGROUP_NET_PRIO=y # CONFIG_CGROUP_NET_CLASSID is not set CONFIG_BLK_CGROUP=y @@ -4561,7 +4603,6 @@ CONFIG_INOTIFY_USER=y # # Bus devices # -# CONFIG_OMAP_OCP2SCP is not set CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y @@ -4594,7 +4635,6 @@ CONFIG_CPU_FREQ_STAT=m CONFIG_CPU_FREQ_STAT_DETAILS=y -CONFIG_NET_VENDOR_SMC=y # CONFIG_IBMTR is not set # CONFIG_SKISA is not set # CONFIG_PROTEON is not set @@ -4693,6 +4733,7 @@ CONFIG_DW_DMAC_PCI=m # CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set # CONFIG_TIMB_DMA is not set # CONFIG_DMATEST is not set +# CONFIG_FSL_EDMA is not set CONFIG_ASYNC_TX_DMA=y CONFIG_UNUSED_SYMBOLS=y @@ -4896,7 +4937,6 @@ CONFIG_STAGING_MEDIA=y # CONFIG_VIDEO_GO7007 is not set # CONFIG_I2C_BCM2048 is not set # CONFIG_VIDEO_TCM825X is not set -# CONFIG_VIDEO_OMAP4 is not set # CONFIG_USB_MSI3101 is not set # CONFIG_DT3155 is not set # CONFIG_W35UND is not set @@ -4926,6 +4966,10 @@ CONFIG_RTL8192E=m # 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 @@ -4946,6 +4990,8 @@ CONFIG_R8712U=m # Larry Finger maintains this (rhbz 699618) # 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_INTEL_MEI is not set # CONFIG_ZCACHE is not set @@ -4969,6 +5015,10 @@ CONFIG_ALTERA_STAPL=m # 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 # END OF STAGING # @@ -4976,11 +5026,6 @@ CONFIG_ALTERA_STAPL=m # # CONFIG_STE_MODEM_RPROC is not set -CONFIG_LIBFC=m -CONFIG_LIBFCOE=m -CONFIG_FCOE=m -CONFIG_FCOE_FNIC=m - CONFIG_NOP_USB_XCEIV=m # CONFIG_IMA is not set @@ -5086,6 +5131,7 @@ CONFIG_GPIO_VIPERBOARD=m # CONFIG_GPIO_PL061 is not set # CONFIG_GPIO_BCM_KONA is not set # CONFIG_GPIO_SCH311X is not set +# CONFIG_GPIO_DWAPB is not set # FIXME: Why? CONFIG_EVENT_POWER_TRACING_DEPRECATED=y diff --git a/freed-ora/current/f20/config-nodebug b/freed-ora/current/f20/config-nodebug index ee4842bfc..c6b4b7902 100644 --- a/freed-ora/current/f20/config-nodebug +++ b/freed-ora/current/f20/config-nodebug @@ -8,6 +8,7 @@ CONFIG_SND_PCM_XRUN_DEBUG=y # 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 # CONFIG_PROVE_LOCKING is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_PROVE_RCU is not set @@ -46,6 +47,7 @@ CONFIG_CPUMASK_OFFSTACK=y CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 # CONFIG_X86_PTDUMP is not set +# CONFIG_EFI_PGT_DUMP is not set # CONFIG_CAN_DEBUG_DEVICES is not set diff --git a/freed-ora/current/f20/config-powerpc32-generic b/freed-ora/current/f20/config-powerpc32-generic index 61e3236b1..10e02fb7b 100644 --- a/freed-ora/current/f20/config-powerpc32-generic +++ b/freed-ora/current/f20/config-powerpc32-generic @@ -138,7 +138,6 @@ CONFIG_VIRTUALIZATION=y # PPC gets sad with debug alloc (bz 448598) # CONFIG_DEBUG_PAGEALLOC is not set -CONFIG_SND_ISA=y CONFIG_CRYPTO_DEV_TALITOS=m # CONFIG_FSL_EMB_PERFMON is not set diff --git a/freed-ora/current/f20/config-powerpc64 b/freed-ora/current/f20/config-powerpc64 index 4b8ba84aa..7f4133593 100644 --- a/freed-ora/current/f20/config-powerpc64 +++ b/freed-ora/current/f20/config-powerpc64 @@ -14,7 +14,9 @@ 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 @@ -154,6 +156,7 @@ CONFIG_KVM_XICS=y #-- active memory sharing CONFIG_PPC_SMLPAR=y CONFIG_CMM=y +CONFIG_HV_PERF_CTRS=y #-- DLPAR memory remove CONFIG_SPARSEMEM_VMEMMAP=y diff --git a/freed-ora/current/f20/config-powerpc64p7 b/freed-ora/current/f20/config-powerpc64p7 index 4fe09eee2..d8ce7e0b1 100644 --- a/freed-ora/current/f20/config-powerpc64p7 +++ b/freed-ora/current/f20/config-powerpc64p7 @@ -11,6 +11,8 @@ 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 @@ -145,6 +147,7 @@ CONFIG_KVM_XICS=y #-- active memory sharing CONFIG_PPC_SMLPAR=y CONFIG_CMM=y +CONFIG_HV_PERF_CTRS=y #-- DLPAR memory remove CONFIG_SPARSEMEM_VMEMMAP=y diff --git a/freed-ora/current/f20/config-x86-32-generic b/freed-ora/current/f20/config-x86-32-generic index 21fe6fe75..6adcfb524 100644 --- a/freed-ora/current/f20/config-x86-32-generic +++ b/freed-ora/current/f20/config-x86-32-generic @@ -115,9 +115,6 @@ CONFIG_PC8736x_GPIO=m CONFIG_CS5535_GPIO=m CONFIG_GPIO_SCH=m -CONFIG_SND_ISA=y -CONFIG_SND_ES18XX=m - CONFIG_HW_RANDOM_GEODE=m CONFIG_TC1100_WMI=m @@ -232,5 +229,6 @@ CONFIG_BACKLIGHT_PWM=m # 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_COMMON_CLK_SI570 is not set # CONFIG_COMMON_CLK_QCOM is not set diff --git a/freed-ora/current/f20/config-x86-generic b/freed-ora/current/f20/config-x86-generic index f6b3fa8c5..92441b0a7 100644 --- a/freed-ora/current/f20/config-x86-generic +++ b/freed-ora/current/f20/config-x86-generic @@ -34,6 +34,7 @@ CONFIG_X86_PM_TIMER=y CONFIG_EFI=y CONFIG_EFI_STUB=y +# CONFIG_EFI_MIXED is not set CONFIG_EFI_VARS=y CONFIG_EFIVAR_FS=y CONFIG_EFI_VARS_PSTORE=y @@ -185,9 +186,6 @@ CONFIG_EDAC_LEGACY_SYSFS=y CONFIG_SCHED_MC=y -CONFIG_SND_ISA=y -CONFIG_SND_ES18XX=m - CONFIG_TCG_INFINEON=m CONFIG_HW_RANDOM_INTEL=m @@ -219,6 +217,7 @@ CONFIG_TOPSTAR_LAPTOP=m CONFIG_ACPI_WMI=m CONFIG_ACER_WMI=m CONFIG_ACERHDF=m +CONFIG_ALIENWARE_WMI=m CONFIG_ASUS_WMI=m CONFIG_ASUS_NB_WMI=m CONFIG_HP_WIRELESS=m @@ -439,6 +438,7 @@ CONFIG_RCU_FANOUT_LEAF=16 CONFIG_INTEL_MEI=m CONFIG_INTEL_MEI_ME=m +CONFIG_INTEL_MEI_TXE=m CONFIG_NFC_MEI_PHY=m CONFIG_NFC_PN544_MEI=m @@ -448,6 +448,7 @@ CONFIG_NFC_MICROREAD_MEI=m # CONFIG_DEBUG_NMI_SELFTEST is not set CONFIG_X86_INTEL_LPSS=y +CONFIG_PWM_LPSS=m CONFIG_PINCTRL=y CONFIG_PINCTRL_BAYTRAIL=y diff --git a/freed-ora/current/f20/deblob-3.14 b/freed-ora/current/f20/deblob-3.15 index e9733251d..850811f82 100755 --- a/freed-ora/current/f20/deblob-3.14 +++ b/freed-ora/current/f20/deblob-3.15 @@ -48,7 +48,7 @@ # For each kver release, start extra with an empty string, then count # from 1 if changes are needed that require rebuilding the tarball. -kver=3.14 extra= +kver=3.15 extra= case $1 in --force) @@ -810,12 +810,6 @@ clean_blob drivers/media/usb/dvb-usb/gp8psk.c clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_GP8PSK' clean_mk CONFIG_DVB_USB_GP8PSK drivers/media/usb/dvb-usb/Makefile -announce DVB_USB_IT913X - "it913x driver" -clean_blob drivers/media/usb/dvb-usb-v2/it913x.c -clean_file Documentation/dvb/it9137.txt -clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_IT913X' -clean_mk CONFIG_DVB_USB_IT913X drivers/media/usb/dvb-usb-v2/Makefile - announce DVB_USB_LME2510 - "LME DM04/QQBOX DVB-S USB2.0 support" reject_firmware drivers/media/usb/dvb-usb-v2/lmedm04.c clean_blob drivers/media/usb/dvb-usb-v2/lmedm04.c @@ -2073,11 +2067,6 @@ clean_mk CONFIG_MISDN_SPEEDFAX drivers/isdn/hardware/mISDN/Makefile # Serial # ########## -announce DGAP - "Digi EPCA PCI products" -clean_blob drivers/staging/dgap/downld.c -clean_kconfig drivers/staging/dgap/Kconfig 'DGAP' -clean_mk CONFIG_DGAP drivers/staging/dgap/Makefile - announce SERIAL_8250_CS - "8250/16550 PCMCIA device support" # These are not software; they're Free, but GPLed without in-tree sources. drop_fw_file firmware/cis/MT5634ZLX.cis.ihex firmware/cis/MT5634ZLX.cis diff --git a/freed-ora/current/f20/deblob-check b/freed-ora/current/f20/deblob-check index 3fcd05cde..9e7457d85 100755 --- a/freed-ora/current/f20/deblob-check +++ b/freed-ora/current/f20/deblob-check @@ -1,6 +1,6 @@ #! /bin/sh -# deblob-check version 2014-06-07 +# deblob-check version 2014-06-08 # Inspired in gNewSense's find-firmware script. # Written by Alexandre Oliva <lxoliva@fsfla.org> @@ -3584,6 +3584,14 @@ set_except () { # New in 3.14.6 blobname 'radeon[/]\(%s\|BONAIRE\|HAWAII\|TAHITI\|PITCAIRN\|VERDE\|OLAND\|HAINAN\)_mc2\.bin' 'drivers/gpu/drm/radeon/\(cik\|si\)\.c' + + # New in 3.15 + defsnc '\(static[ ]\)\?const[ ]struct[ ]nvc0_graph_init[\n]nvc0_graph_init_\(main\|sm\)_0\[\][ ]=' drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c + defsnc 'static[ ]const[ ]u32[ ]godavari_golden_registers\[\][ ]=' drivers/gpu/drm/radeon/cik.c + blobname 'brcm[/]brcmfmac4354-sdio\.bin' drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c + blobname '%s%s\.ucode' drivers/net/wireless/iwlwifi/iwl-drv.c + blobname 'ti-connectivity[/]wl18xx-fw-3\.bin' drivers/net/wireless/ti/wl18xx/main.c + blobname 'ql2700_fw\.bin' drivers/scsi/qla2xxx/qla_os.c ;; */*freedo*.patch | */*logo*.patch) diff --git a/freed-ora/current/f20/disable-libdw-unwind-on-non-x86.patch b/freed-ora/current/f20/disable-libdw-unwind-on-non-x86.patch new file mode 100644 index 000000000..445fc1942 --- /dev/null +++ b/freed-ora/current/f20/disable-libdw-unwind-on-non-x86.patch @@ -0,0 +1,15 @@ +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/freed-ora/current/f20/drm-fix-qxl-mode-flags-backport.patch b/freed-ora/current/f20/drm-fix-qxl-mode-flags-backport.patch deleted file mode 100644 index e8885ff6a..000000000 --- a/freed-ora/current/f20/drm-fix-qxl-mode-flags-backport.patch +++ /dev/null @@ -1,119 +0,0 @@ -Bugzilla: 1060327 -Upstream-status: Queued for 3.16 - -diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c ---- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c.dma 2014-03-31 13:40:15.000000000 +1000 -+++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c 2014-05-01 10:27:07.410210002 +1000 -@@ -120,8 +120,8 @@ static void drm_mode_validate_flag(struc - * RETURNS: - * Number of modes found on @connector. - */ --int drm_helper_probe_single_connector_modes(struct drm_connector *connector, -- uint32_t maxX, uint32_t maxY) -+static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connector *connector, -+ uint32_t maxX, uint32_t maxY, bool merge_type_bits) - { - struct drm_device *dev = connector->dev; - struct drm_display_mode *mode; -@@ -173,7 +173,7 @@ int drm_helper_probe_single_connector_mo - if (count == 0) - goto prune; - -- drm_mode_connector_list_update(connector); -+ drm_mode_connector_list_update(connector, merge_type_bits); - - if (maxX && maxY) - drm_mode_validate_size(dev, &connector->modes, maxX, -@@ -213,8 +213,21 @@ prune: - - return count; - } -+ -+int drm_helper_probe_single_connector_modes(struct drm_connector *connector, -+ uint32_t maxX, uint32_t maxY) -+{ -+ return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, true); -+} - EXPORT_SYMBOL(drm_helper_probe_single_connector_modes); - -+int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector, -+ uint32_t maxX, uint32_t maxY) -+{ -+ return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, false); -+} -+EXPORT_SYMBOL(drm_helper_probe_single_connector_modes_nomerge); -+ - /** - * drm_helper_encoder_in_use - check if a given encoder is in use - * @encoder: encoder to check -diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c ---- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c.dma 2014-03-31 13:40:15.000000000 +1000 -+++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c 2014-05-01 10:27:59.015207267 +1000 -@@ -1025,7 +1025,7 @@ EXPORT_SYMBOL(drm_mode_sort); - * list and only adds different modes. All modes unverified after this point - * will be removed by the prune invalid modes. - */ --void drm_mode_connector_list_update(struct drm_connector *connector) -+void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits) - { - struct drm_display_mode *mode; - struct drm_display_mode *pmode, *pt; -@@ -1041,7 +1041,10 @@ void drm_mode_connector_list_update(stru - /* if equal delete the probed mode */ - mode->status = pmode->status; - /* Merge type bits together */ -- mode->type |= pmode->type; -+ if (merge_type_bits) -+ mode->type |= pmode->type; -+ else -+ mode->type = pmode->type; - list_del(&pmode->head); - drm_mode_destroy(connector->dev, pmode); - break; -diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c ---- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c.dma 2014-03-31 13:40:15.000000000 +1000 -+++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c 2014-05-01 10:27:07.411210001 +1000 -@@ -841,7 +841,7 @@ static const struct drm_connector_funcs - .save = qxl_conn_save, - .restore = qxl_conn_restore, - .detect = qxl_conn_detect, -- .fill_modes = drm_helper_probe_single_connector_modes, -+ .fill_modes = drm_helper_probe_single_connector_modes_nomerge, - .set_property = qxl_conn_set_property, - .destroy = qxl_conn_destroy, - }; -diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c ---- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c.dma 2014-03-31 13:40:15.000000000 +1000 -+++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c 2014-05-01 10:27:07.411210001 +1000 -@@ -2003,7 +2003,7 @@ int vmw_du_connector_fill_modes(struct d - if (du->pref_mode) - list_move(&du->pref_mode->head, &connector->probed_modes); - -- drm_mode_connector_list_update(connector); -+ drm_mode_connector_list_update(connector, true); - - return 1; - } -diff -up linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h.dma linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h ---- linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h.dma 2014-03-31 13:40:15.000000000 +1000 -+++ linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h 2014-05-01 10:27:07.412210001 +1000 -@@ -1033,7 +1033,7 @@ extern int drm_mode_hsync(const struct d - extern int drm_mode_vrefresh(const struct drm_display_mode *mode); - extern void drm_mode_set_crtcinfo(struct drm_display_mode *p, - int adjust_flags); --extern void drm_mode_connector_list_update(struct drm_connector *connector); -+extern void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits); - extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, - struct edid *edid); - extern int drm_object_property_set_value(struct drm_mode_object *obj, -diff -up linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h.dma linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h ---- linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h.dma 2014-03-31 13:40:15.000000000 +1000 -+++ linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h 2014-05-01 10:27:07.412210001 +1000 -@@ -126,6 +126,7 @@ struct drm_connector_helper_funcs { - }; - - extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY); -+extern int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector, uint32_t maxX, uint32_t maxY); - extern void drm_helper_disable_unused_functions(struct drm_device *dev); - extern int drm_crtc_helper_set_config(struct drm_mode_set *set); - extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, diff --git a/freed-ora/current/f20/e1000e-Fix-SHRA-register-access-for-82579.patch b/freed-ora/current/f20/e1000e-Fix-SHRA-register-access-for-82579.patch deleted file mode 100644 index f997f1a4d..000000000 --- a/freed-ora/current/f20/e1000e-Fix-SHRA-register-access-for-82579.patch +++ /dev/null @@ -1,59 +0,0 @@ -Bugzilla: 1064516 -Upstream-status: 3.15 - -From 96dee024ca4799d6d21588951240035c21ba1c67 Mon Sep 17 00:00:00 2001 -From: David Ertman <davidx.m.ertman@intel.com> -Date: Wed, 5 Mar 2014 07:50:46 +0000 -Subject: [PATCH] e1000e: Fix SHRA register access for 82579 - -Previous commit c3a0dce35af0 fixed an overrun for the RAR on i218 devices. -This commit also attempted to homogenize the RAR/SHRA access for all parts -accessed by the e1000e driver. This change introduced an error for -assigning MAC addresses to guest OS's for 82579 devices. - -Only RAR[0] is accessible to the driver for 82579 parts, and additional -addresses must be placed into the SHRA[L|H] registers. The rar_entry_count -was changed in the previous commit to an inaccurate value that accounted -for all RAR and SHRA registers, not just the ones usable by the driver. - -This patch fixes the count to the correct value and adjusts the -e1000_rar_set_pch2lan() function to user the correct index. - -Cc: John Greene <jogreene@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> ---- - drivers/net/ethernet/intel/e1000e/ich8lan.c | 2 +- - drivers/net/ethernet/intel/e1000e/ich8lan.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c -index 18984519a18d..9866f264f55e 100644 ---- a/drivers/net/ethernet/intel/e1000e/ich8lan.c -+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c -@@ -1675,7 +1675,7 @@ static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index) - /* RAR[1-6] are owned by manageability. Skip those and program the - * next address into the SHRA register array. - */ -- if (index < (u32)(hw->mac.rar_entry_count - 6)) { -+ if (index < (u32)(hw->mac.rar_entry_count)) { - s32 ret_val; - - ret_val = e1000_acquire_swflag_ich8lan(hw); -diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h -index 553f05ec0278..bead50f9187b 100644 ---- a/drivers/net/ethernet/intel/e1000e/ich8lan.h -+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h -@@ -101,7 +101,7 @@ - #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL - - #define E1000_ICH_RAR_ENTRIES 7 --#define E1000_PCH2_RAR_ENTRIES 11 /* RAR[0-6], SHRA[0-3] */ -+#define E1000_PCH2_RAR_ENTRIES 5 /* RAR[0], SHRA[0-3] */ - #define E1000_PCH_LPT_RAR_ENTRIES 12 /* RAR[0], SHRA[0-10] */ - - #define PHY_PAGE_SHIFT 5 --- -1.9.3 - diff --git a/freed-ora/current/f20/eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch b/freed-ora/current/f20/eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch new file mode 100644 index 000000000..4cb493325 --- /dev/null +++ b/freed-ora/current/f20/eeepc-wmi-Add-no-backlight-quirk-for-Asus-H87I-PLUS-.patch @@ -0,0 +1,50 @@ +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/freed-ora/current/f20/fanotify-fix-EOVERFLOW-on-64-bit.patch b/freed-ora/current/f20/fanotify-fix-EOVERFLOW-on-64-bit.patch deleted file mode 100644 index 11ba4e1cd..000000000 --- a/freed-ora/current/f20/fanotify-fix-EOVERFLOW-on-64-bit.patch +++ /dev/null @@ -1,32 +0,0 @@ -Bugzilla: 696821 -Upstream-status: Sent http://marc.info/?l=linux-kernel&m=139835974112096&w=2 - -On 64-bit systems, O_LARGEFILE is automatically added to flags inside -the open() syscall (also openat(), blkdev_open(), etc). -Userspace therefore defines O_LARGEFILE to be 0 - you can use it, -but it's a no-op. Everything should be O_LARGEFILE by default. - -But: when fanotify does create_fd() it uses dentry_open(), which skips -all that. And userspace can't set O_LARGEFILE in fanotify_init() because -it's defined to 0. So if fanotify gets an event regarding a large file, -the read() will just fail with -EOVERFLOW. - -This patch adds O_LARGEFILE to fanotify_init()'s event_f_flags on 64-bit -systems, using the same test as open()/openat()/etc. - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=696821 - -Acked-by: Eric Paris <eparis@redhat.com> -Signed-off-by: Will Woods <wwoods@redhat.com> - ---- linux-3.14.1-200.fc20.x86_64/fs/notify/fanotify/fanotify_user.c.orig 2014-04-23 18:15:29.347644932 -0400 -+++ linux-3.14.1-200.fc20.x86_64/fs/notify/fanotify/fanotify_user.c 2014-04-23 18:17:44.249438484 -0400 -@@ -742,6 +742,8 @@ - oevent->path.mnt = NULL; - oevent->path.dentry = NULL; - -+ if (force_o_largefile()) -+ event_f_flags |= O_LARGEFILE; - group->fanotify_data.f_flags = event_f_flags; - #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS - oevent->response = 0; diff --git a/freed-ora/current/f20/ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch b/freed-ora/current/f20/ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch new file mode 100644 index 000000000..29df8d781 --- /dev/null +++ b/freed-ora/current/f20/ideapad-laptop-Blacklist-rfkill-control-on-the-Lenov.patch @@ -0,0 +1,73 @@ +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/freed-ora/current/f20/jme-fix-dma-unmap-error.patch b/freed-ora/current/f20/jme-fix-dma-unmap-error.patch deleted file mode 100644 index 208447289..000000000 --- a/freed-ora/current/f20/jme-fix-dma-unmap-error.patch +++ /dev/null @@ -1,124 +0,0 @@ -diff -up ./drivers/net/ethernet/jme.c.orig ./drivers/net/ethernet/jme.c ---- ./drivers/net/ethernet/jme.c.orig 2014-03-30 23:40:15.000000000 -0400 -+++ ./drivers/net/ethernet/jme.c 2014-05-08 12:16:52.701746091 -0400 -@@ -1988,7 +1988,7 @@ jme_alloc_txdesc(struct jme_adapter *jme - return idx; - } - --static void -+static int - jme_fill_tx_map(struct pci_dev *pdev, - struct txdesc *txdesc, - struct jme_buffer_info *txbi, -@@ -2005,6 +2005,9 @@ jme_fill_tx_map(struct pci_dev *pdev, - len, - PCI_DMA_TODEVICE); - -+ if (unlikely(pci_dma_mapping_error(pdev, dmaaddr))) -+ return -EINVAL; -+ - pci_dma_sync_single_for_device(pdev, - dmaaddr, - len, -@@ -2021,9 +2024,30 @@ jme_fill_tx_map(struct pci_dev *pdev, - - txbi->mapping = dmaaddr; - txbi->len = len; -+ return 0; - } - --static void -+static void jme_drop_tx_map(struct jme_adapter *jme, int startidx, int endidx) -+{ -+ struct jme_ring *txring = &(jme->txring[0]); -+ struct jme_buffer_info *txbi = txring->bufinf, *ctxbi; -+ int mask = jme->tx_ring_mask; -+ int j; -+ -+ for (j = startidx ; j < endidx ; ++j) { -+ ctxbi = txbi + ((startidx + j + 2) & (mask)); -+ pci_unmap_page(jme->pdev, -+ ctxbi->mapping, -+ ctxbi->len, -+ PCI_DMA_TODEVICE); -+ -+ ctxbi->mapping = 0; -+ ctxbi->len = 0; -+ } -+ -+} -+ -+static int - jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx) - { - struct jme_ring *txring = &(jme->txring[0]); -@@ -2034,25 +2058,37 @@ jme_map_tx_skb(struct jme_adapter *jme, - int mask = jme->tx_ring_mask; - const struct skb_frag_struct *frag; - u32 len; -+ int ret = 0; - - for (i = 0 ; i < nr_frags ; ++i) { - frag = &skb_shinfo(skb)->frags[i]; - ctxdesc = txdesc + ((idx + i + 2) & (mask)); - ctxbi = txbi + ((idx + i + 2) & (mask)); - -- jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, -+ ret = jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, - skb_frag_page(frag), - frag->page_offset, skb_frag_size(frag), hidma); -+ if (ret) { -+ jme_drop_tx_map(jme, idx, idx+i); -+ goto out; -+ } -+ - } - - len = skb_is_nonlinear(skb) ? skb_headlen(skb) : skb->len; - ctxdesc = txdesc + ((idx + 1) & (mask)); - ctxbi = txbi + ((idx + 1) & (mask)); -- jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, virt_to_page(skb->data), -+ ret = jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, virt_to_page(skb->data), - offset_in_page(skb->data), len, hidma); -+ if (ret) -+ jme_drop_tx_map(jme, idx, idx+i); -+ -+out: -+ return ret; - - } - -+ - static int - jme_expand_header(struct jme_adapter *jme, struct sk_buff *skb) - { -@@ -2144,6 +2180,7 @@ jme_fill_tx_desc(struct jme_adapter *jme - struct txdesc *txdesc; - struct jme_buffer_info *txbi; - u8 flags; -+ int ret = 0; - - txdesc = (struct txdesc *)txring->desc + idx; - txbi = txring->bufinf + idx; -@@ -2168,7 +2205,10 @@ jme_fill_tx_desc(struct jme_adapter *jme - if (jme_tx_tso(skb, &txdesc->desc1.mss, &flags)) - jme_tx_csum(jme, skb, &flags); - jme_tx_vlan(skb, &txdesc->desc1.vlan, &flags); -- jme_map_tx_skb(jme, skb, idx); -+ ret = jme_map_tx_skb(jme, skb, idx); -+ if (ret) -+ return ret; -+ - txdesc->desc1.flags = flags; - /* - * Set tx buffer info after telling NIC to send -@@ -2240,7 +2280,8 @@ jme_start_xmit(struct sk_buff *skb, stru - return NETDEV_TX_BUSY; - } - -- jme_fill_tx_desc(jme, skb, idx); -+ if (jme_fill_tx_desc(jme, skb, idx)) -+ return NETDEV_TX_BUSY; - - jwrite32(jme, JME_TXCS, jme->reg_txcs | - TXCS_SELECT_QUEUE0 | diff --git a/freed-ora/current/f20/kernel.spec b/freed-ora/current/f20/kernel.spec index c4ced279c..e1450338a 100644 --- a/freed-ora/current/f20/kernel.spec +++ b/freed-ora/current/f20/kernel.spec @@ -68,7 +68,7 @@ Summary: The Linux kernel # 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 14 +%define base_sublevel 15 # librev starts empty, then 1, etc, as the linux-libre tarball # changes. This is only used to determine which tarball to use. @@ -78,9 +78,9 @@ Summary: The Linux kernel %define basegnu -gnu%{?librev} # To be inserted between "patch" and "-2.6.". -%define stablelibre -3.14%{?stablegnux} -#define rcrevlibre -3.14%{?rcrevgnux} -#define gitrevlibre -3.14%{?gitrevgnux} +#define stablelibre -3.15%{?stablegnux} +#define rcrevlibre -3.15%{?rcrevgnux} +#define gitrevlibre -3.15%{?gitrevgnux} %if 0%{?stablelibre:1} %define stablegnu -gnu%{?librev} @@ -112,7 +112,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 9 +%define stable_update 2 # Is it a -stable RC? %define stable_rc 0 # Set rpm version accordingly @@ -719,7 +719,6 @@ 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 @@ -739,22 +738,15 @@ Patch15000: nowatchdog-on-virt.patch # ARM -# lpae - -# ARM omap -Patch21010: arm-omap-load-tfp410.patch -Patch21011: arm-beagle.patch - # ARM tegra Patch21020: arm-tegra-usb-no-reset-linux33.patch -# Add panel support for tegra paz00 -# Backported from linux-next scheduled for 3.15 -Patch21021: arm-tegra-paz00-panel-dts.patch - # ARM i.MX6 -# http://www.spinics.net/lists/devicetree/msg08276.html -Patch21025: arm-imx6-utilite.patch +Patch21021: arm-beagle.patch +Patch21022: arm-imx6-utilite.patch + +# ARM sunxi (AllWinner) +Patch21025: 0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch #rhbz 754518 Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch @@ -769,11 +761,8 @@ Patch22000: weird-root-dentry-name-debug.patch Patch25047: drm-radeon-Disable-writeback-by-default-on-ppc.patch -#rhbz 1051748 -Patch25035: Bluetooth-allocate-static-minor-for-vhci.patch - -#rhbz 1074710 -Patch25061: mm-page_alloc.c-change-mm-debug-routines-back-to-EXP.patch +#rhbz 1025603 +Patch25063: disable-libdw-unwind-on-non-x86.patch #rhbz 1048314 Patch25062: 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch @@ -784,32 +773,31 @@ Patch25064: 0001-HID-rmi-do-not-handle-touchscreens-through-hid-rmi.patch #rhbz 1090161 Patch25072: HID-rmi-do-not-fetch-more-than-16-bytes-in-a-query.patch -#rhbz 1013466 -Patch25065: selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch - -#rhbz 696821 -Patch25068: fanotify-fix-EOVERFLOW-on-64-bit.patch - #rhbz 983342 1093120 -Patch25070: 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch - -#rhbz 1060327 -Patch25071: drm-fix-qxl-mode-flags-backport.patch - -#rhbz 861573 -Patch25079: 0003-samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch - -#rhbz 1082266 -Patch25087: jme-fix-dma-unmap-error.patch - -#rhbz 1051668 -Patch25092: Input-elantech-add-support-for-newer-elantech-touchpads.patch +Patch25069: 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch + +Patch25071: s390-appldata-add-slab.h-for-kzalloc-kfree.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 1094066 Patch25096: drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch #rhbz 1064516 -Patch25097: e1000e-Fix-SHRA-register-access-for-82579.patch Patch25098: e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch #rhbz 1099761 @@ -834,6 +822,12 @@ Patch25108: aio-fix-aio-request-leak-when-events-are-reaped-by-u.patch Patch25109: revert-input-wacom-testing-result-shows-get_report-is-unnecessary.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 + # END OF PATCH DEFINITIONS %endif @@ -1447,11 +1441,10 @@ ApplyPatch 0001-lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch # # ARM # -ApplyPatch arm-omap-load-tfp410.patch -ApplyPatch arm-beagle.patch ApplyPatch arm-tegra-usb-no-reset-linux33.patch -ApplyPatch arm-tegra-paz00-panel-dts.patch +ApplyPatch 0001-ARM-sunxi-Add-driver-for-SD-MMC-hosts-found-on-Allwi.patch ApplyPatch arm-imx6-utilite.patch +ApplyPatch arm-beagle.patch # # bugfixes to drivers and filesystems @@ -1557,9 +1550,6 @@ ApplyPatch ath9k_rx_dma_stop_check.patch ApplyPatch drm-radeon-Disable-writeback-by-default-on-ppc.patch -#rhbz 1051748 -ApplyPatch Bluetooth-allocate-static-minor-for-vhci.patch - #rhbz 1048314 ApplyPatch 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch #rhbz 1089583 @@ -1567,35 +1557,34 @@ 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 -#rhbz 1074710 -ApplyPatch mm-page_alloc.c-change-mm-debug-routines-back-to-EXP.patch - -#rhbz 1013466 -ApplyPatch selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch - -#rhbz 696821 -ApplyPatch fanotify-fix-EOVERFLOW-on-64-bit.patch +#rhbz 1025603 +ApplyPatch disable-libdw-unwind-on-non-x86.patch #rhbz 983342 1093120 ApplyPatch 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch -#rhbz 1060327 -ApplyPatch drm-fix-qxl-mode-flags-backport.patch - -#rhbz 861573 -ApplyPatch 0003-samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch - -#rhbz 1082266 -ApplyPatch jme-fix-dma-unmap-error.patch - -#rhbz 1051668 -ApplyPatch Input-elantech-add-support-for-newer-elantech-touchpads.patch +ApplyPatch s390-appldata-add-slab.h-for-kzalloc-kfree.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 1094066 ApplyPatch drm-i915-set-backlight-duty-cycle-after-backlight-enable-for-gen4.patch #rhbz 1064516 -ApplyPatch e1000e-Fix-SHRA-register-access-for-82579.patch ApplyPatch e1000e-Failure-to-write-SHRA-turns-on-PROMISC-mode.patch #rhbz 1099761 @@ -1620,6 +1609,12 @@ ApplyPatch aio-fix-aio-request-leak-when-events-are-reaped-by-u.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 + # END OF PATCH APPLICATIONS %endif @@ -2442,6 +2437,18 @@ fi # ||----w | # || || %changelog +* Tue Jul 1 2014 Alexandre Oliva <lxoliva@fsfla.org> -libre +- GNU Linux-libre 3.15.2-gnu. + +* Mon Jun 30 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.15.2-200 +- Backport netfilter panic fix (rhbz 1015989) + +* Mon Jun 30 2014 Justin M. Forbes <jforbes@fedoraproject.org> +- Linux v3.15.2 + +* Fri Jun 27 2014 Hans de Goede <hdegoede@redhat.com> +- Add patch to fix wifi on lenove yoga 2 series (rhbz#1021036) + * Thu Jun 26 2014 Alexandre Oliva <lxoliva@fsfla.org> -libre - GNU Linux-libre 3.14.9-gnu. diff --git a/freed-ora/current/f20/linux-libre-3.14-gnu.tar.xz.sign b/freed-ora/current/f20/linux-libre-3.14-gnu.tar.xz.sign deleted file mode 100644 index 7499c37f9..000000000 --- a/freed-ora/current/f20/linux-libre-3.14-gnu.tar.xz.sign +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.22 (GNU/Linux) - -iEYEABECAAYFAlM5dFIACgkQvLfPh359R6e5qgCghIlU62Kr6Jxwdpr4w9YfR+8i -aD0An2EtmKjeQkxaYiFOXLgK7pYAlr7g -=FkDl ------END PGP SIGNATURE----- diff --git a/freed-ora/current/f20/linux-libre-3.14-gnu.xdelta.xz b/freed-ora/current/f20/linux-libre-3.14-gnu.xdelta.xz Binary files differdeleted file mode 100644 index c57a823e8..000000000 --- a/freed-ora/current/f20/linux-libre-3.14-gnu.xdelta.xz +++ /dev/null diff --git a/freed-ora/current/f20/linux-libre-3.14-gnu.xdelta.xz.sign b/freed-ora/current/f20/linux-libre-3.14-gnu.xdelta.xz.sign deleted file mode 100644 index 2801e4c95..000000000 --- a/freed-ora/current/f20/linux-libre-3.14-gnu.xdelta.xz.sign +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.22 (GNU/Linux) - -iEYEABECAAYFAlM5dFMACgkQvLfPh359R6cAIACggR0WxLgMLk6p7xK1lL03zASK -5bwAni1I4K/qzY7qkTIh/Kab8bNan4EB -=u3zJ ------END PGP SIGNATURE----- diff --git a/freed-ora/current/f20/linux-libre-3.15-gnu.tar.xz.sign b/freed-ora/current/f20/linux-libre-3.15-gnu.tar.xz.sign new file mode 100644 index 000000000..e9480a945 --- /dev/null +++ b/freed-ora/current/f20/linux-libre-3.15-gnu.tar.xz.sign @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.22 (GNU/Linux) + +iEYEABECAAYFAlOUzMkACgkQvLfPh359R6c4EACfaiJCVV77vCaaxhja+lKaC/we +MRQAnj/ZeKQQonle/OgGPtJ7v4PEVY9R +=RYoE +-----END PGP SIGNATURE----- diff --git a/freed-ora/current/f20/linux-libre-3.15-gnu.xdelta.xz b/freed-ora/current/f20/linux-libre-3.15-gnu.xdelta.xz Binary files differnew file mode 100644 index 000000000..c2d5b6c29 --- /dev/null +++ b/freed-ora/current/f20/linux-libre-3.15-gnu.xdelta.xz diff --git a/freed-ora/current/f20/linux-libre-3.15-gnu.xdelta.xz.sign b/freed-ora/current/f20/linux-libre-3.15-gnu.xdelta.xz.sign new file mode 100644 index 000000000..f598dd132 --- /dev/null +++ b/freed-ora/current/f20/linux-libre-3.15-gnu.xdelta.xz.sign @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.22 (GNU/Linux) + +iEYEABECAAYFAlOUzNAACgkQvLfPh359R6epsQCdHFTp+Qltdu/uHyG993ek4Reu +iZEAn1D9DkIy+Po4eRQUuAco8PItuOmY +=p8I5 +-----END PGP SIGNATURE----- diff --git a/freed-ora/current/f20/makefile-after_link.patch b/freed-ora/current/f20/makefile-after_link.patch index 82a366351..ac7c5e159 100644 --- a/freed-ora/current/f20/makefile-after_link.patch +++ b/freed-ora/current/f20/makefile-after_link.patch @@ -1,4 +1,7 @@ -From b707aea6a4947c3806ced2c23e889943a0f36876 Mon Sep 17 00:00:00 2001 +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 @@ -7,9 +10,18 @@ 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. Signed-off-by: Roland McGrath <roland@redhat.com> +--- + arch/arm64/kernel/vdso/Makefile | 3 ++- + arch/powerpc/kernel/vdso32/Makefile | 3 ++- + arch/powerpc/kernel/vdso64/Makefile | 3 ++- + arch/s390/kernel/vdso32/Makefile | 3 ++- + arch/s390/kernel/vdso64/Makefile | 3 ++- + arch/x86/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 d8064af..04dcfe1 100644 +index 6d20b7d162d8..863a01bde0bf 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile @@ -48,7 +48,8 @@ $(obj-vdso): %.o: %.S @@ -18,12 +30,12 @@ index d8064af..04dcfe1 100644 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)) ++ $(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 -index 53e6c9b..e427844 100644 +index 53e6c9b979ec..e427844e9bb0 100644 --- a/arch/powerpc/kernel/vdso32/Makefile +++ b/arch/powerpc/kernel/vdso32/Makefile @@ -43,7 +43,8 @@ $(obj-vdso32): %.o: %.S @@ -37,7 +49,7 @@ index 53e6c9b..e427844 100644 cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $< diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile -index effca94..713891a 100644 +index effca9404b17..713891a92d23 100644 --- a/arch/powerpc/kernel/vdso64/Makefile +++ b/arch/powerpc/kernel/vdso64/Makefile @@ -36,7 +36,8 @@ $(obj-vdso64): %.o: %.S @@ -51,7 +63,7 @@ index effca94..713891a 100644 cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile -index 8ad2b34..e153572 100644 +index 8ad2b34ad151..e153572ab351 100644 --- a/arch/s390/kernel/vdso32/Makefile +++ b/arch/s390/kernel/vdso32/Makefile @@ -43,7 +43,8 @@ $(obj-vdso32): %.o: %.S @@ -65,7 +77,7 @@ index 8ad2b34..e153572 100644 cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $< diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile -index 2a8ddfd..452ca53 100644 +index 2a8ddfd12a5b..452ca53561fe 100644 --- a/arch/s390/kernel/vdso64/Makefile +++ b/arch/s390/kernel/vdso64/Makefile @@ -43,7 +43,8 @@ $(obj-vdso64): %.o: %.S @@ -79,10 +91,10 @@ index 2a8ddfd..452ca53 100644 cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile -index fd14be1..1f3eb19 100644 +index 9206ac7961a5..3d7f533f6757 100644 --- a/arch/x86/vdso/Makefile +++ b/arch/x86/vdso/Makefile -@@ -178,8 +178,9 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE +@@ -181,8 +181,9 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE quiet_cmd_vdso = VDSO $@ cmd_vdso = $(CC) -nostdlib -o $@ \ $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ @@ -92,10 +104,10 @@ index fd14be1..1f3eb19 100644 + $(if $(AFTER_LINK),; $(AFTER_LINK)) && \ + sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' - VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) - GCOV_PROFILE := n + VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) \ + $(LTO_CFLAGS) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh -index 0149949..e307cda 100644 +index 2dcb37736d84..25e170e92ef1 100644 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -65,6 +65,10 @@ vmlinux_link() @@ -109,3 +121,6 @@ index 0149949..e307cda 100644 } +-- +1.8.5.3 + diff --git a/freed-ora/current/f20/mm-page_alloc.c-change-mm-debug-routines-back-to-EXP.patch b/freed-ora/current/f20/mm-page_alloc.c-change-mm-debug-routines-back-to-EXP.patch deleted file mode 100644 index c0144bad2..000000000 --- a/freed-ora/current/f20/mm-page_alloc.c-change-mm-debug-routines-back-to-EXP.patch +++ /dev/null @@ -1,61 +0,0 @@ -Bugzilla: 1074710 -Upstream-status: 3.15 - -From ed12d845b5f528cc0846023862b9c448a36122ec Mon Sep 17 00:00:00 2001 -From: John Hubbard <jhubbard@nvidia.com> -Date: Mon, 7 Apr 2014 15:37:59 -0700 -Subject: [PATCH] mm/page_alloc.c: change mm debug routines back to - EXPORT_SYMBOL - -A new dump_page() routine was recently added, and marked -EXPORT_SYMBOL_GPL. dump_page() was also added to the VM_BUG_ON_PAGE() -macro, and so the end result is that non-GPL code can no longer call -get_page() and a few other routines. - -This only happens if the kernel was compiled with CONFIG_DEBUG_VM. - -Change dump_page() to be EXPORT_SYMBOL. - -Longer explanation: - -Prior to commit 309381feaee5 ("mm: dump page when hitting a VM_BUG_ON -using VM_BUG_ON_PAGE") , it was possible to build MIT-licensed (non-GPL) -drivers on Fedora. Fedora is semi-unique, in that it sets -CONFIG_VM_DEBUG. - -Because Fedora sets CONFIG_VM_DEBUG, they end up pulling in dump_page(), -via VM_BUG_ON_PAGE, via get_page(). As one of the authors of NVIDIA's -new, open source, "UVM-Lite" kernel module, I originally choose to use -the kernel's get_page() routine from within nvidia_uvm_page_cache.c, -because get_page() has always seemed to be very clearly intended for use -by non-GPL, driver code. - -So I'm hoping that making get_page() widely accessible again will not be -too controversial. We did check with Fedora first, and they responded -(https://bugzilla.redhat.com/show_bug.cgi?id=1074710#c3) that we should -try to get upstream changed, before asking Fedora to change. Their -reasoning seems beneficial to Linux: leaving CONFIG_DEBUG_VM set allows -Fedora to help catch mm bugs. - -Signed-off-by: John Hubbard <jhubbard@nvidia.com> -Cc: Sasha Levin <sasha.levin@oracle.com> -Cc: Josh Boyer <jwboyer@redhat.com> -Signed-off-by: Andrew Morton <akpm@linux-foundation.org> -Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- - mm/page_alloc.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 48427a7cfb45..5dba2933c9c0 100644 ---- a/mm/page_alloc.c -+++ b/mm/page_alloc.c -@@ -6568,4 +6568,4 @@ void dump_page(struct page *page, const char *reason) - { - dump_page_badflags(page, reason, 0); - } --EXPORT_SYMBOL_GPL(dump_page); -+EXPORT_SYMBOL(dump_page); --- -1.9.0 - diff --git a/freed-ora/current/f20/netfilter-nf_nat-fix-oops-on-netns-removal.patch b/freed-ora/current/f20/netfilter-nf_nat-fix-oops-on-netns-removal.patch new file mode 100644 index 000000000..4cd521895 --- /dev/null +++ b/freed-ora/current/f20/netfilter-nf_nat-fix-oops-on-netns-removal.patch @@ -0,0 +1,98 @@ +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/freed-ora/current/f20/nouveau-Don-t-check-acpi_video_backlight_support-bef.patch b/freed-ora/current/f20/nouveau-Don-t-check-acpi_video_backlight_support-bef.patch new file mode 100644 index 000000000..b6ed45c39 --- /dev/null +++ b/freed-ora/current/f20/nouveau-Don-t-check-acpi_video_backlight_support-bef.patch @@ -0,0 +1,79 @@ +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/freed-ora/current/f20/patch-3.14-gnu-3.14.9-gnu.xz.sign b/freed-ora/current/f20/patch-3.14-gnu-3.14.9-gnu.xz.sign deleted file mode 100644 index bd22327f8..000000000 --- a/freed-ora/current/f20/patch-3.14-gnu-3.14.9-gnu.xz.sign +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.22 (GNU/Linux) - -iEYEABECAAYFAlOsuzAACgkQvLfPh359R6e4UgCdEkaojeRi701uKnGBpBZzNMin -QcAAnAzNYz6YwuX5jmeEjFUdpAxCd5Wf -=MNy9 ------END PGP SIGNATURE----- diff --git a/freed-ora/current/f20/s390-appldata-add-slab.h-for-kzalloc-kfree.patch b/freed-ora/current/f20/s390-appldata-add-slab.h-for-kzalloc-kfree.patch new file mode 100644 index 000000000..3716ce8b1 --- /dev/null +++ b/freed-ora/current/f20/s390-appldata-add-slab.h-for-kzalloc-kfree.patch @@ -0,0 +1,28 @@ +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/freed-ora/current/f20/0003-samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch b/freed-ora/current/f20/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch index d76aa2166..ce83ed21c 100644 --- a/freed-ora/current/f20/0003-samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch +++ b/freed-ora/current/f20/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch @@ -1,20 +1,22 @@ -From f46debb4f324d6ab66782de6ad3b884fbf223ec4 Mon Sep 17 00:00:00 2001 +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: Thu, 1 May 2014 14:20:06 +0200 -Subject: [PATCH 3/4] samsung-laptop: Add broken-acpi-video quirk for +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 -Cc: stable@vger.kernel.org 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 d1f03005..98f61f6 100644 +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[] = { diff --git a/freed-ora/current/f20/secure-modules.patch b/freed-ora/current/f20/secure-modules.patch index 86bf9dc6f..478c62ff5 100644 --- a/freed-ora/current/f20/secure-modules.patch +++ b/freed-ora/current/f20/secure-modules.patch @@ -1,7 +1,7 @@ Bugzilla: N/A Upstream-status: Fedora mustard. Replaced by securelevels, but that was nak'd -From f212a4d8b8638a3e15e4cd76874d4fab60726752 Mon Sep 17 00:00:00 2001 +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 @@ -17,10 +17,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 2 files changed, 17 insertions(+) diff --git a/include/linux/module.h b/include/linux/module.h -index 15cd6b1..30702eb 100644 +index f520a767c86c..fc9b54eb779e 100644 --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -512,6 +512,8 @@ int unregister_module_notifier(struct notifier_block * nb); +@@ -509,6 +509,8 @@ int unregister_module_notifier(struct notifier_block *nb); extern void print_modules(void); @@ -29,7 +29,7 @@ index 15cd6b1..30702eb 100644 #else /* !CONFIG_MODULES... */ /* Given an address, look for it in the exception tables. */ -@@ -622,6 +624,11 @@ static inline int unregister_module_notifier(struct notifier_block * nb) +@@ -619,6 +621,11 @@ static inline int unregister_module_notifier(struct notifier_block *nb) static inline void print_modules(void) { } @@ -42,10 +42,10 @@ index 15cd6b1..30702eb 100644 #ifdef CONFIG_SYSFS diff --git a/kernel/module.c b/kernel/module.c -index f5a3b1e..644c33e 100644 +index 11869408f79b..2b9204fe055f 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -3831,3 +3831,13 @@ void module_layout(struct module *mod, +@@ -3835,3 +3835,13 @@ void module_layout(struct module *mod, } EXPORT_SYMBOL(module_layout); #endif @@ -60,10 +60,10 @@ index f5a3b1e..644c33e 100644 +} +EXPORT_SYMBOL(secure_modules); -- -1.8.4.2 +1.8.5.3 -From 394a8259d0b457495dddda8704821ec9e56ea44a Mon Sep 17 00:00:00 2001 +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 @@ -83,7 +83,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index c91e6c1..447742e 100644 +index 4e0acefb7565..01b56d13d021 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -29,6 +29,7 @@ @@ -94,7 +94,7 @@ index c91e6c1..447742e 100644 #include "pci.h" static int sysfs_initialized; /* = 0 */ -@@ -668,6 +669,9 @@ pci_write_config(struct file* filp, struct kobject *kobj, +@@ -652,6 +653,9 @@ pci_write_config(struct file* filp, struct kobject *kobj, loff_t init_off = off; u8 *data = (u8*) buf; @@ -104,7 +104,7 @@ index c91e6c1..447742e 100644 if (off > dev->cfg_size) return 0; if (off + count > dev->cfg_size) { -@@ -974,6 +978,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, +@@ -958,6 +962,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, resource_size_t start, end; int i; @@ -114,7 +114,7 @@ index c91e6c1..447742e 100644 for (i = 0; i < PCI_ROM_RESOURCE; i++) if (res == &pdev->resource[i]) break; -@@ -1081,6 +1088,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj, +@@ -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) { @@ -125,7 +125,7 @@ index c91e6c1..447742e 100644 } diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c -index 46d1378..294fe7b 100644 +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 @@ -158,7 +158,7 @@ index 46d1378..294fe7b 100644 /* 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 24750a1..fa57896 100644 +index 24750a1b39b6..fa57896b97dd 100644 --- a/drivers/pci/syscall.c +++ b/drivers/pci/syscall.c @@ -10,6 +10,7 @@ @@ -179,10 +179,10 @@ index 24750a1..fa57896 100644 dev = pci_get_bus_and_slot(bus, dfn); -- -1.8.4.2 +1.8.5.3 -From 69532e626cece8a43c2528246e0421488b468102 Mon Sep 17 00:00:00 2001 +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 @@ -200,7 +200,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c -index 4ddaf66..00b4403 100644 +index 4ddaf66ea35f..00b440307419 100644 --- a/arch/x86/kernel/ioport.c +++ b/arch/x86/kernel/ioport.c @@ -15,6 +15,7 @@ @@ -230,10 +230,10 @@ index 4ddaf66..00b4403 100644 } regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12); diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index f895a8c..1af8664 100644 +index 917403fe10da..cdf839f9defe 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c -@@ -28,6 +28,7 @@ +@@ -27,6 +27,7 @@ #include <linux/export.h> #include <linux/io.h> #include <linux/aio.h> @@ -241,7 +241,7 @@ index f895a8c..1af8664 100644 #include <asm/uaccess.h> -@@ -563,6 +564,9 @@ static ssize_t write_port(struct file *file, const char __user *buf, +@@ -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; @@ -252,10 +252,10 @@ index f895a8c..1af8664 100644 return -EFAULT; while (count-- > 0 && i < 65536) { -- -1.8.4.2 +1.8.5.3 -From 8771ff55273e964d707b174dd0dbe433783c0254 Mon Sep 17 00:00:00 2001 +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 @@ -270,7 +270,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 3 insertions(+) diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c -index 12b62f2..50647b3 100644 +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, @@ -284,10 +284,10 @@ index 12b62f2..50647b3 100644 /* parse the table header to get the table length */ if (count <= sizeof(struct acpi_table_header)) -- -1.8.4.2 +1.8.5.3 -From 7d3e3db90e1b4cf33ba4a46624ae4a68f787e5fc Mon Sep 17 00:00:00 2001 +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 @@ -305,10 +305,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 9 insertions(+) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c -index 19c313b..db18ef66 100644 +index c5e082fb82fa..03c57fc8de8a 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c -@@ -1618,6 +1618,9 @@ static int show_dsts(struct seq_file *m, void *data) +@@ -1595,6 +1595,9 @@ static int show_dsts(struct seq_file *m, void *data) int err; u32 retval = -1; @@ -318,7 +318,7 @@ index 19c313b..db18ef66 100644 err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval); if (err < 0) -@@ -1634,6 +1637,9 @@ static int show_devs(struct seq_file *m, void *data) +@@ -1611,6 +1614,9 @@ static int show_devs(struct seq_file *m, void *data) int err; u32 retval = -1; @@ -328,7 +328,7 @@ index 19c313b..db18ef66 100644 err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param, &retval); -@@ -1658,6 +1664,9 @@ static int show_call(struct seq_file *m, void *data) +@@ -1635,6 +1641,9 @@ static int show_call(struct seq_file *m, void *data) union acpi_object *obj; acpi_status status; @@ -339,10 +339,10 @@ index 19c313b..db18ef66 100644 1, asus->debug.method_id, &input, &output); -- -1.8.4.2 +1.8.5.3 -From 98ebe083d75333e269730fe374cca42ac7f08a07 Mon Sep 17 00:00:00 2001 +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 @@ -358,12 +358,12 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 6 insertions(+) diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index 1af8664..61406c8 100644 +index cdf839f9defe..c63cf93b00eb 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c -@@ -159,6 +159,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf, - unsigned long copied; - void *ptr; +@@ -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; @@ -371,7 +371,7 @@ index 1af8664..61406c8 100644 if (!valid_phys_addr_range(p, count)) return -EFAULT; -@@ -497,6 +500,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf, +@@ -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; @@ -382,10 +382,10 @@ index 1af8664..61406c8 100644 unsigned long to_write = min_t(unsigned long, count, (unsigned long)high_memory - p); -- -1.8.4.2 +1.8.5.3 -From 71353d491c70b303a07b4e79c896e729a4f74978 Mon Sep 17 00:00:00 2001 +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 @@ -401,10 +401,10 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com> 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c -index 54a20ff..d21d269 100644 +index f7fd72ac69cf..ccdae1c8c386 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c -@@ -45,6 +45,7 @@ +@@ -44,6 +44,7 @@ #include <linux/list.h> #include <linux/jiffies.h> #include <linux/semaphore.h> @@ -412,7 +412,7 @@ index 54a20ff..d21d269 100644 #include <asm/io.h> #include <asm/uaccess.h> -@@ -248,7 +249,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp); +@@ -244,7 +245,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp); acpi_physical_address __init acpi_os_get_root_pointer(void) { #ifdef CONFIG_KEXEC @@ -422,10 +422,10 @@ index 54a20ff..d21d269 100644 #endif -- -1.8.4.2 +1.8.5.3 -From e0a6b0dd91460123d71784d531b9df26449940ae Mon Sep 17 00:00:00 2001 +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 @@ -441,18 +441,18 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 8 insertions(+) diff --git a/kernel/kexec.c b/kernel/kexec.c -index 9c97016..8ad0d38 100644 +index c8380ad203bc..e6eb239f567a 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c -@@ -32,6 +32,7 @@ - #include <linux/vmalloc.h> +@@ -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> -@@ -946,6 +947,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, +@@ -948,6 +949,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, return -EPERM; /* @@ -467,10 +467,10 @@ index 9c97016..8ad0d38 100644 * This leaves us room for future extensions. */ -- -1.8.4.2 +1.8.5.3 -From c340630e68e5ed4d731d60d05ef9e2ae27080b66 Mon Sep 17 00:00:00 2001 +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 @@ -485,7 +485,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 4 insertions(+) diff --git a/kernel/power/user.c b/kernel/power/user.c -index 98d3575..efe99de 100644 +index 98d357584cd6..efe99dee9510 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -24,6 +24,7 @@ @@ -507,10 +507,10 @@ index 98d3575..efe99de 100644 if (!atomic_add_unless(&snapshot_device_available, -1, 0)) { -- -1.8.4.2 +1.8.5.3 -From 273deda4ddec360ce67ac256b8cbdabdc5e8c51d Mon Sep 17 00:00:00 2001 +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 @@ -527,7 +527,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 7 insertions(+) diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c -index 05266b5..e2bd647 100644 +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, @@ -552,10 +552,10 @@ index 05266b5..e2bd647 100644 err = -EFAULT; break; -- -1.8.4.2 +1.8.5.3 -From 089166c0d42f1b82988aad4f23607deb6ee531e7 Mon Sep 17 00:00:00 2001 +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 @@ -578,7 +578,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 7 files changed, 69 insertions(+), 1 deletion(-) diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt -index 199f453..ec38acf 100644 +index 199f453cb4de..ec38acf00b40 100644 --- a/Documentation/x86/zero-page.txt +++ b/Documentation/x86/zero-page.txt @@ -30,6 +30,8 @@ Offset Proto Name Meaning @@ -591,12 +591,12 @@ index 199f453..ec38acf 100644 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 5216e28..2a147a3 100644 +index 5b8ec0f53b57..085d5eb36361 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -1582,6 +1582,16 @@ config EFI_STUB +@@ -1534,6 +1534,16 @@ config EFI_MIXED - See Documentation/efi-stub.txt for more information. + If unsure, say N. +config EFI_SECURE_BOOT_SIG_ENFORCE + def_bool n @@ -612,7 +612,7 @@ index 5216e28..2a147a3 100644 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 a7677ba..4e172e9 100644 +index 1e6146137f8e..b00745ff398a 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -12,6 +12,7 @@ @@ -623,10 +623,10 @@ index a7677ba..4e172e9 100644 #undef memcpy /* Use memcpy from misc.c */ -@@ -741,6 +742,37 @@ free_mem_map: +@@ -809,6 +810,37 @@ out: + return status; } - +static int get_secure_boot(void) +{ + u8 sb, setup; @@ -659,11 +659,11 @@ index a7677ba..4e172e9 100644 + + /* - * On success we return a pointer to a boot_params structure, and NULL - * on failure. -@@ -760,6 +792,10 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table, - if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) - goto fail; + * 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); + @@ -673,7 +673,7 @@ index a7677ba..4e172e9 100644 setup_efi_pci(boot_params); diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h -index 225b098..90dbfb7 100644 +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 { @@ -687,10 +687,10 @@ index 225b098..90dbfb7 100644 * 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 182b3f9..ab6cc9e 100644 +index 09c76d265550..5a61d732fd5c 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c -@@ -1129,6 +1129,12 @@ void __init setup_arch(char **cmdline_p) +@@ -1142,6 +1142,12 @@ void __init setup_arch(char **cmdline_p) io_delay_init(); @@ -704,10 +704,10 @@ index 182b3f9..ab6cc9e 100644 * Parse the ACPI tables for possible boot-time SMP configuration. */ diff --git a/include/linux/module.h b/include/linux/module.h -index 30702eb..3eb0f52 100644 +index fc9b54eb779e..7377bc851461 100644 --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -190,6 +190,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add); +@@ -188,6 +188,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add); struct notifier_block; @@ -721,10 +721,10 @@ index 30702eb..3eb0f52 100644 extern int modules_disabled; /* for sysctl */ diff --git a/kernel/module.c b/kernel/module.c -index 644c33e..92b73b1 100644 +index 2b9204fe055f..2b8cc2d57c16 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -3832,6 +3832,13 @@ void module_layout(struct module *mod, +@@ -3836,6 +3836,13 @@ void module_layout(struct module *mod, EXPORT_SYMBOL(module_layout); #endif @@ -739,10 +739,10 @@ index 644c33e..92b73b1 100644 { #ifdef CONFIG_MODULE_SIG -- -1.8.4.2 +1.8.5.3 -From e9ad6bd405fa01b7dd52d8c75b9dc91ae52e131d Mon Sep 17 00:00:00 2001 +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 @@ -759,10 +759,10 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com> 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c -index 4e172e9..4905f4d 100644 +index b00745ff398a..bf42cc5f083d 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c -@@ -744,8 +744,9 @@ free_mem_map: +@@ -812,8 +812,9 @@ out: static int get_secure_boot(void) { @@ -773,7 +773,7 @@ index 4e172e9..4905f4d 100644 efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID; efi_status_t status; -@@ -769,6 +770,23 @@ static int get_secure_boot(void) +@@ -837,6 +838,23 @@ static int get_secure_boot(void) if (setup == 1) return 0; @@ -798,10 +798,10 @@ index 4e172e9..4905f4d 100644 } -- -1.8.4.2 +1.8.5.3 -From f9f355d5e58c1503bb7c03d92c9e89267e0f46ad Mon Sep 17 00:00:00 2001 +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 @@ -815,11 +815,11 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 2a147a3..9e644d5 100644 +index 085d5eb36361..3e8d398a976d 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -1583,7 +1583,8 @@ config EFI_STUB - See Documentation/efi-stub.txt for more information. +@@ -1535,7 +1535,8 @@ config EFI_MIXED + If unsure, say N. config EFI_SECURE_BOOT_SIG_ENFORCE - def_bool n @@ -829,10 +829,10 @@ index 2a147a3..9e644d5 100644 ---help--- UEFI Secure Boot provides a mechanism for ensuring that the -- -1.8.4.2 +1.8.5.3 -From a30576a9db583213474b74360c5869e8882e6ed7 Mon Sep 17 00:00:00 2001 +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 @@ -847,31 +847,31 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> 2 files changed, 3 insertions(+) diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index ab6cc9e..99933cd 100644 +index 5a61d732fd5c..23fe9bf3c401 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c -@@ -1131,7 +1131,9 @@ void __init setup_arch(char **cmdline_p) +@@ -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, &x86_efi_facility); ++ 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 0a819e7..0c1d367 100644 +index 6c100ff0cae4..3a77a70fff27 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -657,6 +657,7 @@ extern int __init efi_setup_pcdp_console(char *); +@@ -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 - # ifdef CONFIG_X86 + /* -- -1.8.4.2 +1.8.5.3 diff --git a/freed-ora/current/f20/selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch b/freed-ora/current/f20/selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch deleted file mode 100644 index 5d9a4ff4a..000000000 --- a/freed-ora/current/f20/selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch +++ /dev/null @@ -1,94 +0,0 @@ -Bugzilla: 1013466 -Upstream-status: 3.15 (commit 98883bfd9d603a2760f6d53eccfaa3ae2c053e72) - -It turns out that doing the SELinux MAC checks for mmap() before the -DAC checks was causing users and the SELinux policy folks headaches -as users were seeing a lot of SELinux AVC denials for the -memprotect:mmap_zero permission that would have also been denied by -the normal DAC capability checks (CAP_SYS_RAWIO). - -Example: - - # cat mmap_test.c - #include <stdlib.h> - #include <stdio.h> - #include <errno.h> - #include <sys/mman.h> - - int main(int argc, char *argv[]) - { - int rc; - void *mem; - - mem = mmap(0x0, 4096, - PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); - if (mem == MAP_FAILED) - return errno; - printf("mem = %p\n", mem); - munmap(mem, 4096); - - return 0; - } - # gcc -g -O0 -o mmap_test mmap_test.c - # ./mmap_test - mem = (nil) - # ausearch -m AVC | grep mmap_zero - type=AVC msg=audit(...): avc: denied { mmap_zero } - for pid=1025 comm="mmap_test" - scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 - tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 - tclass=memprotect - -This patch corrects things so that when the above example is run by a -user without CAP_SYS_RAWIO the SELinux AVC is no longer generated as -the DAC capability check fails before the SELinux permission check. - -Signed-off-by: Paul Moore <pmoore@redhat.com> ---- - security/selinux/hooks.c | 20 ++++++++------------ - 1 file changed, 8 insertions(+), 12 deletions(-) - -diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c -index 57b0b49..e3664ae 100644 ---- a/security/selinux/hooks.c -+++ b/security/selinux/hooks.c -@@ -3205,24 +3205,20 @@ error: - - static int selinux_mmap_addr(unsigned long addr) - { -- int rc = 0; -- u32 sid = current_sid(); -+ int rc; -+ -+ /* do DAC check on address space usage */ -+ rc = cap_mmap_addr(addr); -+ if (rc) -+ return rc; - -- /* -- * notice that we are intentionally putting the SELinux check before -- * the secondary cap_file_mmap check. This is such a likely attempt -- * at bad behaviour/exploit that we always want to get the AVC, even -- * if DAC would have also denied the operation. -- */ - if (addr < CONFIG_LSM_MMAP_MIN_ADDR) { -+ u32 sid = current_sid(); - rc = avc_has_perm(sid, sid, SECCLASS_MEMPROTECT, - MEMPROTECT__MMAP_ZERO, NULL); -- if (rc) -- return rc; - } - -- /* do DAC check on address space usage */ -- return cap_mmap_addr(addr); -+ return rc; - } - - static int selinux_mmap_file(struct file *file, unsigned long reqprot, - -_______________________________________________ -Selinux mailing list -Selinux@tycho.nsa.gov -To unsubscribe, send email to Selinux-leave@tycho.nsa.gov. -To get help, send an email containing "help" to Selinux-request@tycho.nsa.gov. diff --git a/freed-ora/current/f20/sources b/freed-ora/current/f20/sources index dfff76dce..1d3f5691a 100644 --- a/freed-ora/current/f20/sources +++ b/freed-ora/current/f20/sources @@ -1,2 +1,2 @@ -c108ec52eeb2a9b9ddbb8d12496ff25f linux-libre-3.14-gnu.tar.xz -d24f388f14cc0829fcc35b792d0392a5 patch-3.14-gnu-3.14.9-gnu.xz +3e6ef6e8e5153050cbc0ecd305cb2cb9 linux-libre-3.15-gnu.tar.xz +53eb7e210c9330021e60ffe2c5081e19 patch-3.15.2.xz diff --git a/freed-ora/current/f20/thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch b/freed-ora/current/f20/thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch new file mode 100644 index 000000000..9f82b7d66 --- /dev/null +++ b/freed-ora/current/f20/thinkpad_acpi-Add-mappings-for-F9-F12-hotkeys-on-X24.patch @@ -0,0 +1,45 @@ +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 + |