From 6b4c9cf5ff22e6b568b73456a6c14e0e9f8bce6c Mon Sep 17 00:00:00 2001 From: David P Date: Fri, 7 Dec 2018 11:24:19 -0300 Subject: upgpkg: libre/linux-libre-lts 4.14.86_gnu-1 Signed-off-by: David P --- ...RM-atags-add-support-for-Marvell-s-u-boot.patch | 6 +- ...dt-retrieve-MAC-addresses-from-Marvell-bo.patch | 8 +- .../0003-SMILE-Plug-device-tree-file.patch | 10 +- .../0004-fix-mvsdio-eMMC-timing.patch | 10 +- ...x-Allow-mac-address-to-be-set-as-a-parame.patch | 11 +- .../0006-set-default-cubietruck-led-triggers.patch | 6 +- ...odroid-set-higher-minimum-buck2-regulator.patch | 10 +- .../0008-ARM-dove-enable-ethernet-on-D3Plug.patch | 6 +- .../0009-power-add-power-sequence-library.patch | 790 --------------------- ...c2-disable-power_down-on-rockchip-devices.patch | 44 ++ ...d-power-sequence-handling-for-USB-devices.patch | 164 ----- ...imx6qdl-Enable-usb-node-children-with-reg.patch | 49 -- ...6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch | 80 --- ...-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch | 74 -- ...eclare-asm-symbols-as-character-arrays-in.patch | 61 -- libre/linux-libre-lts/PKGBUILD | 57 +- libre/linux-libre-lts/config.armv7h | 11 +- 17 files changed, 106 insertions(+), 1291 deletions(-) delete mode 100644 libre/linux-libre-lts/0009-power-add-power-sequence-library.patch create mode 100644 libre/linux-libre-lts/0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch delete mode 100644 libre/linux-libre-lts/0010-usb-core-add-power-sequence-handling-for-USB-devices.patch delete mode 100644 libre/linux-libre-lts/0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch delete mode 100644 libre/linux-libre-lts/0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch delete mode 100644 libre/linux-libre-lts/0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch delete mode 100644 libre/linux-libre-lts/0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch (limited to 'libre/linux-libre-lts') diff --git a/libre/linux-libre-lts/0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch b/libre/linux-libre-lts/0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch index 7aaecf303..35b77d3ec 100644 --- a/libre/linux-libre-lts/0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch +++ b/libre/linux-libre-lts/0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch @@ -1,7 +1,7 @@ -From ba0f7bad7435de617093d47ac4f0895a71dcee00 Mon Sep 17 00:00:00 2001 +From 311f37a47e903b459dabc396494ac1621fb2d78b Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 2 Dec 2012 19:59:28 +0100 -Subject: [PATCH 01/14] ARM: atags: add support for Marvell's u-boot +Subject: [PATCH 1/9] ARM: atags: add support for Marvell's u-boot Marvell uses a specific atag in its u-boot which includes among other information the MAC addresses for up to 4 network interfaces. @@ -47,5 +47,5 @@ index 6b335a9ff8c8..614150b53643 100644 }; -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch b/libre/linux-libre-lts/0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch index 67aaf723e..9ab38253d 100644 --- a/libre/linux-libre-lts/0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch +++ b/libre/linux-libre-lts/0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch @@ -1,8 +1,8 @@ -From 89b2c1805d92a98ccc424ecad060cb08ba8e6211 Mon Sep 17 00:00:00 2001 +From 978d7f01eacdb7af7d87dc4c6811b9ff7f19f5cd Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 2 Dec 2012 19:56:58 +0100 -Subject: [PATCH 02/14] ARM: atags/fdt: retrieve MAC addresses from Marvell - boot loader +Subject: [PATCH 2/9] ARM: atags/fdt: retrieve MAC addresses from Marvell boot + loader The atags are parsed and if a Marvell atag is found, up to 4 MAC addresses are extracted there and assigned to node aliases eth0..3 @@ -43,5 +43,5 @@ index 41fa7316c52b..807ed160a4b9 100644 } -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0003-SMILE-Plug-device-tree-file.patch b/libre/linux-libre-lts/0003-SMILE-Plug-device-tree-file.patch index e1416218a..02eca7c31 100644 --- a/libre/linux-libre-lts/0003-SMILE-Plug-device-tree-file.patch +++ b/libre/linux-libre-lts/0003-SMILE-Plug-device-tree-file.patch @@ -1,7 +1,7 @@ -From d441e0ca2b03d5cc7e5034efc6b15b56698b353f Mon Sep 17 00:00:00 2001 +From 96a2824045c5dff3c3ccb5e01813f5ec6372bde0 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Fri, 5 Sep 2014 15:41:19 -0600 -Subject: [PATCH 03/14] SMILE Plug device tree file +Subject: [PATCH 3/9] SMILE Plug device tree file This adds a dts file for the SMILE Plug, which only differs from the Mirabox dts with the LED definitions. @@ -14,10 +14,10 @@ Signed-off-by: Kevin Mihelich create mode 100644 arch/arm/boot/dts/armada-370-smileplug.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 7e2424957809..431a7ca68751 100644 +index b5bd3de87c33..547603bafae1 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -1100,6 +1100,7 @@ dtb-$(CONFIG_MACH_ARMADA_370) += \ +@@ -1138,6 +1138,7 @@ dtb-$(CONFIG_MACH_ARMADA_370) += \ armada-370-db.dtb \ armada-370-dlink-dns327l.dtb \ armada-370-mirabox.dtb \ @@ -205,5 +205,5 @@ index 000000000000..d01308ab848b + }; +}; -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0004-fix-mvsdio-eMMC-timing.patch b/libre/linux-libre-lts/0004-fix-mvsdio-eMMC-timing.patch index 965b849b8..19ef6c0ac 100644 --- a/libre/linux-libre-lts/0004-fix-mvsdio-eMMC-timing.patch +++ b/libre/linux-libre-lts/0004-fix-mvsdio-eMMC-timing.patch @@ -1,7 +1,7 @@ -From 23883cf4470afeb33dc9c171978df76f5470f4f0 Mon Sep 17 00:00:00 2001 +From 43be8213a90dae909f838dedbc5e8a1e82b9572d Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Fri, 5 Sep 2014 15:43:56 -0600 -Subject: [PATCH 04/14] fix mvsdio eMMC timing +Subject: [PATCH 4/9] fix mvsdio eMMC timing These changes from Globalscale change the MMC timing to allow the eMMC versions of the Mirabox and SMILE Plug to work. @@ -12,7 +12,7 @@ Signed-off-by: Kevin Mihelich 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c -index 210247b3d11a..1a1802dc9ef4 100644 +index e22bbff89c8d..6b30c850ce07 100644 --- a/drivers/mmc/host/mvsdio.c +++ b/drivers/mmc/host/mvsdio.c @@ -93,7 +93,7 @@ static int mvsd_setup_data(struct mvsd_host *host, struct mmc_data *data) @@ -24,7 +24,7 @@ index 210247b3d11a..1a1802dc9ef4 100644 tmout_index = MVSD_HOST_CTRL_TMOUT_MAX; dev_dbg(host->dev, "data %s at 0x%08x: blocks=%d blksz=%d tmout=%u (%d)\n", -@@ -614,6 +614,8 @@ static void mvsd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) +@@ -616,6 +616,8 @@ static void mvsd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) u32 m = DIV_ROUND_UP(host->base_clock, ios->clock) - 1; if (m > MVSD_BASE_DIV_MAX) m = MVSD_BASE_DIV_MAX; @@ -34,5 +34,5 @@ index 210247b3d11a..1a1802dc9ef4 100644 host->clock = ios->clock; host->ns_per_clk = 1000000000 / (host->base_clock / (m+1)); -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0005-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch b/libre/linux-libre-lts/0005-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch index e90048ad6..18e2a7875 100644 --- a/libre/linux-libre-lts/0005-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch +++ b/libre/linux-libre-lts/0005-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch @@ -1,15 +1,14 @@ -From b8082b65dc78228d48e693c7bdf9dbe75a2043ff Mon Sep 17 00:00:00 2001 +From 6e0372c8fec9db69e88a19c3a70a4c3a730fd743 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 18 Feb 2014 01:43:50 -0300 -Subject: [PATCH 05/14] net/smsc95xx: Allow mac address to be set as a - parameter +Subject: [PATCH 5/9] net/smsc95xx: Allow mac address to be set as a parameter --- drivers/net/usb/smsc95xx.c | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c -index 309b88acd3d0..7bc9feb891a1 100644 +index 262e7a3c23cb..c2b3c5b6e1f3 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -60,6 +60,7 @@ @@ -31,7 +30,7 @@ index 309b88acd3d0..7bc9feb891a1 100644 static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data, int in_pm) { -@@ -910,8 +915,59 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) +@@ -913,8 +918,59 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); } @@ -92,5 +91,5 @@ index 309b88acd3d0..7bc9feb891a1 100644 /* maybe the boot loader passed the MAC address in devicetree */ -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0006-set-default-cubietruck-led-triggers.patch b/libre/linux-libre-lts/0006-set-default-cubietruck-led-triggers.patch index a5a9bcc44..4bed39a6b 100644 --- a/libre/linux-libre-lts/0006-set-default-cubietruck-led-triggers.patch +++ b/libre/linux-libre-lts/0006-set-default-cubietruck-led-triggers.patch @@ -1,7 +1,7 @@ -From 0cf9ae3f97075a40cd14e09c91de0468459c45d3 Mon Sep 17 00:00:00 2001 +From b22d8cc1d2763b4abbc6587dff148be3be683ac0 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sat, 14 Feb 2015 12:32:27 +0100 -Subject: [PATCH 06/14] set default cubietruck led triggers +Subject: [PATCH 6/9] set default cubietruck led triggers Signed-off-by: Kevin Mihelich --- @@ -29,5 +29,5 @@ index 5649161de1d7..2be64a886555 100644 }; -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch b/libre/linux-libre-lts/0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch index e29c41c6c..5b5d345e7 100644 --- a/libre/linux-libre-lts/0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch +++ b/libre/linux-libre-lts/0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch @@ -1,7 +1,7 @@ -From 8d59092709da9dc0f852411cb1bad579decd457c Mon Sep 17 00:00:00 2001 +From eaea91920f1836c32a5cdb09eb7054af16b88a27 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Thu, 11 Aug 2016 00:42:37 -0600 -Subject: [PATCH 07/14] exynos4412-odroid: set higher minimum buck2 regulator +Subject: [PATCH 7/9] exynos4412-odroid: set higher minimum buck2 regulator voltage Set a higher minimum voltage to help reboot issue. @@ -13,10 +13,10 @@ Signed-off-by: Kevin Mihelich 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi -index d7ad07fd48f9..53c31c01713b 100644 +index a09e46c9dbc0..d8117a820812 100644 --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi -@@ -418,7 +418,7 @@ +@@ -423,7 +423,7 @@ buck2_reg: BUCK2 { regulator-name = "vdd_arm"; @@ -26,5 +26,5 @@ index d7ad07fd48f9..53c31c01713b 100644 regulator-always-on; regulator-boot-on; -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0008-ARM-dove-enable-ethernet-on-D3Plug.patch b/libre/linux-libre-lts/0008-ARM-dove-enable-ethernet-on-D3Plug.patch index 8e85907d0..6e2d97eab 100644 --- a/libre/linux-libre-lts/0008-ARM-dove-enable-ethernet-on-D3Plug.patch +++ b/libre/linux-libre-lts/0008-ARM-dove-enable-ethernet-on-D3Plug.patch @@ -1,7 +1,7 @@ -From c26422909f777d60214288dfdb538fa8cf510c5f Mon Sep 17 00:00:00 2001 +From a3aab9208da801924ba6211998b31571ed564fcd Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sun, 7 May 2017 13:32:25 -0600 -Subject: [PATCH 08/14] ARM: dove: enable ethernet on D3Plug +Subject: [PATCH 8/9] ARM: dove: enable ethernet on D3Plug Signed-off-by: Kevin Mihelich --- @@ -27,5 +27,5 @@ index 826026c28f90..a4c9963e1261 100644 /* Samsung M8G2F eMMC */ &sdio0 { -- -2.18.0 +2.19.0 diff --git a/libre/linux-libre-lts/0009-power-add-power-sequence-library.patch b/libre/linux-libre-lts/0009-power-add-power-sequence-library.patch deleted file mode 100644 index e2dbaf12b..000000000 --- a/libre/linux-libre-lts/0009-power-add-power-sequence-library.patch +++ /dev/null @@ -1,790 +0,0 @@ -From ce6183d0a8a9aea1a1d9acc9a85a05d73e741023 Mon Sep 17 00:00:00 2001 -From: Peter Chen -Date: Wed, 21 Jun 2017 14:42:03 +0800 -Subject: [PATCH 09/14] power: add power sequence library - -We have an well-known problem that the device needs to do some power -sequence before it can be recognized by related host, the typical -example like hard-wired mmc devices and usb devices. - -This power sequence is hard to be described at device tree and handled by -related host driver, so we have created a common power sequence -library to cover this requirement. The core code has supplied -some common helpers for host driver, and individual power sequence -libraries handle kinds of power sequence for devices. The pwrseq -librares always need to allocate extra instance for compatible -string match. - -pwrseq_generic is intended for general purpose of power sequence, which -handles gpios and clocks currently, and can cover other controls in -future. The host driver just needs to call of_pwrseq_on/of_pwrseq_off -if only one power sequence is needed, else call of_pwrseq_on_list -/of_pwrseq_off_list instead (eg, USB hub driver). - -For new power sequence library, it needs to add its compatible string -and allocation function at pwrseq_match_table_list, then the pwrseq -core will match it with DT's, and choose this library at runtime. - -Signed-off-by: Peter Chen -Tested-by: Maciej S. Szmigiero -Tested-by Joshua Clayton -Reviewed-by: Matthias Kaehlcke -Tested-by: Matthias Kaehlcke ---- - Documentation/power/power-sequence/design.rst | 54 ++++ - MAINTAINERS | 9 + - drivers/power/Kconfig | 1 + - drivers/power/Makefile | 1 + - drivers/power/pwrseq/Kconfig | 20 ++ - drivers/power/pwrseq/Makefile | 2 + - drivers/power/pwrseq/core.c | 293 ++++++++++++++++++ - drivers/power/pwrseq/pwrseq_generic.c | 210 +++++++++++++ - include/linux/power/pwrseq.h | 84 +++++ - 9 files changed, 674 insertions(+) - create mode 100644 Documentation/power/power-sequence/design.rst - create mode 100644 drivers/power/pwrseq/Kconfig - create mode 100644 drivers/power/pwrseq/Makefile - create mode 100644 drivers/power/pwrseq/core.c - create mode 100644 drivers/power/pwrseq/pwrseq_generic.c - create mode 100644 include/linux/power/pwrseq.h - -diff --git a/Documentation/power/power-sequence/design.rst b/Documentation/power/power-sequence/design.rst -new file mode 100644 -index 000000000000..554608e5f3b6 ---- /dev/null -+++ b/Documentation/power/power-sequence/design.rst -@@ -0,0 +1,54 @@ -+==================================== -+Power Sequence Library -+==================================== -+ -+:Date: Feb, 2017 -+:Author: Peter Chen -+ -+ -+Introduction -+============ -+ -+We have an well-known problem that the device needs to do a power -+sequence before it can be recognized by related host, the typical -+examples are hard-wired mmc devices and usb devices. The host controller -+can't know what kinds of this device is in its bus if the power -+sequence has not done, since the related devices driver's probe calling -+is determined by runtime according to eunumeration results. Besides, -+the devices may have custom power sequence, so the power sequence library -+which is independent with the devices is needed. -+ -+Design -+============ -+ -+The power sequence library includes the core file and customer power -+sequence library. The core file exports interfaces are called by -+host controller driver for power sequence and customer power sequence -+library files to register its power sequence instance to global -+power sequence list. The custom power sequence library creates power -+sequence instance and implement custom power sequence. -+ -+Since the power sequence describes hardware design, the description is -+located at board description file, eg, device tree dts file. And -+a specific power sequence belongs to device, so its description -+is under the device node, please refer to: -+Documentation/devicetree/bindings/power/pwrseq/pwrseq-generic.txt -+ -+Custom power sequence library allocates one power sequence instance at -+bootup periods using postcore_initcall, this static allocated instance is -+used to compare with device-tree (DT) node to see if this library can be -+used for the node or not. When the result is matched, the core API will -+try to get resourses (->get, implemented at each library) for power -+sequence, if all resources are got, it will try to allocate another -+instance for next possible request from host driver. -+ -+Then, the host controller driver can carry out power sequence on for this -+DT node, the library will do corresponding operations, like open clocks, -+toggle gpio, etc. The power sequence off routine will close and free the -+resources, and is called when the parent is removed. And the power -+sequence suspend and resume routine can be called at host driver's -+suspend and resume routine if needed. -+ -+The exported interfaces -+.. kernel-doc:: drivers/power/pwrseq/core.c -+ :export: -diff --git a/MAINTAINERS b/MAINTAINERS -index 9c125f705f78..31042fc6c400 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -11247,6 +11247,15 @@ F: drivers/firmware/psci*.c - F: include/linux/psci.h - F: include/uapi/linux/psci.h - -+POWER SEQUENCE LIBRARY -+M: Peter Chen -+T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git -+L: linux-pm@vger.kernel.org -+S: Maintained -+F: Documentation/devicetree/bindings/power/pwrseq/ -+F: drivers/power/pwrseq/ -+F: include/linux/power/pwrseq.h -+ - POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS - M: Sebastian Reichel - L: linux-pm@vger.kernel.org -diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig -index 63454b5cac27..c1bb0465f956 100644 ---- a/drivers/power/Kconfig -+++ b/drivers/power/Kconfig -@@ -1,3 +1,4 @@ - source "drivers/power/avs/Kconfig" - source "drivers/power/reset/Kconfig" - source "drivers/power/supply/Kconfig" -+source "drivers/power/pwrseq/Kconfig" -diff --git a/drivers/power/Makefile b/drivers/power/Makefile -index ff35c712d824..7db80354b691 100644 ---- a/drivers/power/Makefile -+++ b/drivers/power/Makefile -@@ -1,3 +1,4 @@ - obj-$(CONFIG_POWER_AVS) += avs/ - obj-$(CONFIG_POWER_RESET) += reset/ - obj-$(CONFIG_POWER_SUPPLY) += supply/ -+obj-$(CONFIG_POWER_SEQUENCE) += pwrseq/ -diff --git a/drivers/power/pwrseq/Kconfig b/drivers/power/pwrseq/Kconfig -new file mode 100644 -index 000000000000..c6b356926cca ---- /dev/null -+++ b/drivers/power/pwrseq/Kconfig -@@ -0,0 +1,20 @@ -+# -+# Power Sequence library -+# -+ -+menuconfig POWER_SEQUENCE -+ bool "Power sequence control" -+ help -+ It is used for drivers which needs to do power sequence -+ (eg, turn on clock, toggle reset gpio) before the related -+ devices can be found by hardware, eg, USB bus. -+ -+if POWER_SEQUENCE -+ -+config PWRSEQ_GENERIC -+ bool "Generic power sequence control" -+ depends on OF -+ help -+ This is the generic power sequence control library, and is -+ supposed to support common power sequence usage. -+endif -diff --git a/drivers/power/pwrseq/Makefile b/drivers/power/pwrseq/Makefile -new file mode 100644 -index 000000000000..ad82389028c2 ---- /dev/null -+++ b/drivers/power/pwrseq/Makefile -@@ -0,0 +1,2 @@ -+obj-$(CONFIG_POWER_SEQUENCE) += core.o -+obj-$(CONFIG_PWRSEQ_GENERIC) += pwrseq_generic.o -diff --git a/drivers/power/pwrseq/core.c b/drivers/power/pwrseq/core.c -new file mode 100644 -index 000000000000..6b78a6691683 ---- /dev/null -+++ b/drivers/power/pwrseq/core.c -@@ -0,0 +1,293 @@ -+/* -+ * core.c power sequence core file -+ * -+ * Copyright (C) 2016 Freescale Semiconductor, Inc. -+ * Author: Peter Chen -+ * -+ * This program is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 of -+ * the License as published by the Free Software Foundation. -+ * -+ * 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. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+/* -+ * Static power sequence match table -+ * - Add compatible (the same with dts node) and related allocation function. -+ * - Update related binding doc. -+ */ -+static const struct of_device_id pwrseq_match_table_list[] = { -+ { .compatible = "usb424,2513", .data = &pwrseq_generic_alloc_instance}, -+ { .compatible = "usb424,2514", .data = &pwrseq_generic_alloc_instance}, -+ { /* sentinel */ } -+}; -+ -+static int pwrseq_get(struct device_node *np, struct pwrseq *p) -+{ -+ if (p && p->get) -+ return p->get(np, p); -+ -+ return -ENOTSUPP; -+} -+ -+static int pwrseq_on(struct pwrseq *p) -+{ -+ if (p && p->on) -+ return p->on(p); -+ -+ return -ENOTSUPP; -+} -+ -+static void pwrseq_off(struct pwrseq *p) -+{ -+ if (p && p->off) -+ p->off(p); -+} -+ -+static void pwrseq_put(struct pwrseq *p) -+{ -+ if (p && p->put) -+ p->put(p); -+} -+ -+/** -+ * of_pwrseq_on - Carry out power sequence on for device node -+ * -+ * @np: the device node would like to power on -+ * -+ * Carry out a single device power on. If multiple devices -+ * need to be handled, use of_pwrseq_on_list() instead. -+ * -+ * Return a pointer to the power sequence instance on success, or NULL if -+ * not exist, or an error code on failure. -+ */ -+struct pwrseq *of_pwrseq_on(struct device_node *np) -+{ -+ struct pwrseq *pwrseq; -+ int ret; -+ const struct of_device_id *of_id; -+ struct pwrseq *(*alloc_instance)(void); -+ -+ of_id = of_match_node(pwrseq_match_table_list, np); -+ if (!of_id) -+ return NULL; -+ -+ alloc_instance = of_id->data; -+ /* Allocate pwrseq instance */ -+ pwrseq = alloc_instance(); -+ if (IS_ERR(pwrseq)) -+ return pwrseq; -+ -+ ret = pwrseq_get(np, pwrseq); -+ if (ret) -+ goto pwr_put; -+ -+ ret = pwrseq_on(pwrseq); -+ if (ret) -+ goto pwr_put; -+ -+ return pwrseq; -+ -+pwr_put: -+ pwrseq_put(pwrseq); -+ return ERR_PTR(ret); -+} -+EXPORT_SYMBOL_GPL(of_pwrseq_on); -+ -+/** -+ * of_pwrseq_off - Carry out power sequence off for this pwrseq instance -+ * -+ * @pwrseq: the pwrseq instance which related device would like to be off -+ * -+ * This API is used to power off single device, it is the opposite -+ * operation for of_pwrseq_on. -+ */ -+void of_pwrseq_off(struct pwrseq *pwrseq) -+{ -+ pwrseq_off(pwrseq); -+ pwrseq_put(pwrseq); -+} -+EXPORT_SYMBOL_GPL(of_pwrseq_off); -+ -+/** -+ * of_pwrseq_on_list - Carry out power sequence on for list -+ * -+ * @np: the device node would like to power on -+ * @head: the list head for pwrseq list on this bus -+ * -+ * This API is used to power on multiple devices at single bus. -+ * If there are several devices on bus (eg, USB bus), uses this -+ * this API. Otherwise, use of_pwrseq_on instead. After the device -+ * is powered on successfully, it will be added to pwrseq list for -+ * this bus. The caller needs to use mutex_lock for concurrent. -+ * -+ * Return 0 on success, or -ENOENT if not exist, or an error value on failure. -+ */ -+int of_pwrseq_on_list(struct device_node *np, struct list_head *head) -+{ -+ struct pwrseq *pwrseq; -+ struct pwrseq_list_per_dev *pwrseq_list_node; -+ -+ pwrseq_list_node = kzalloc(sizeof(*pwrseq_list_node), GFP_KERNEL); -+ if (!pwrseq_list_node) -+ return -ENOMEM; -+ -+ pwrseq = of_pwrseq_on(np); -+ if (!pwrseq) -+ return -ENOENT; -+ -+ if (IS_ERR(pwrseq)) { -+ kfree(pwrseq_list_node); -+ return PTR_ERR(pwrseq); -+ } -+ -+ pwrseq_list_node->pwrseq = pwrseq; -+ list_add(&pwrseq_list_node->list, head); -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(of_pwrseq_on_list); -+ -+/** -+ * of_pwrseq_off_list - Carry out power sequence off for the list -+ * -+ * @head: the list head for pwrseq instance list on this bus -+ * -+ * This API is used to power off all devices on this bus, it is -+ * the opposite operation for of_pwrseq_on_list. -+ * The caller needs to use mutex_lock for concurrent. -+ */ -+void of_pwrseq_off_list(struct list_head *head) -+{ -+ struct pwrseq *pwrseq; -+ struct pwrseq_list_per_dev *pwrseq_list_node, *tmp_node; -+ -+ list_for_each_entry_safe(pwrseq_list_node, tmp_node, head, list) { -+ pwrseq = pwrseq_list_node->pwrseq; -+ of_pwrseq_off(pwrseq); -+ list_del(&pwrseq_list_node->list); -+ kfree(pwrseq_list_node); -+ } -+} -+EXPORT_SYMBOL_GPL(of_pwrseq_off_list); -+ -+/** -+ * pwrseq_suspend - Carry out power sequence suspend for this pwrseq instance -+ * -+ * @pwrseq: the pwrseq instance -+ * -+ * This API is used to do suspend operation on pwrseq instance. -+ * -+ * Return 0 on success, or an error value otherwise. -+ */ -+int pwrseq_suspend(struct pwrseq *p) -+{ -+ int ret = 0; -+ -+ if (p && p->suspend) -+ ret = p->suspend(p); -+ else -+ return ret; -+ -+ if (!ret) -+ p->suspended = true; -+ else -+ pr_err("%s failed\n", __func__); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(pwrseq_suspend); -+ -+/** -+ * pwrseq_resume - Carry out power sequence resume for this pwrseq instance -+ * -+ * @pwrseq: the pwrseq instance -+ * -+ * This API is used to do resume operation on pwrseq instance. -+ * -+ * Return 0 on success, or an error value otherwise. -+ */ -+int pwrseq_resume(struct pwrseq *p) -+{ -+ int ret = 0; -+ -+ if (p && p->resume) -+ ret = p->resume(p); -+ else -+ return ret; -+ -+ if (!ret) -+ p->suspended = false; -+ else -+ pr_err("%s failed\n", __func__); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(pwrseq_resume); -+ -+/** -+ * pwrseq_suspend_list - Carry out power sequence suspend for list -+ * -+ * @head: the list head for pwrseq instance list on this bus -+ * -+ * This API is used to do suspend on all power sequence instances on this bus. -+ * The caller needs to use mutex_lock for concurrent. -+ */ -+int pwrseq_suspend_list(struct list_head *head) -+{ -+ struct pwrseq *pwrseq; -+ struct pwrseq_list_per_dev *pwrseq_list_node; -+ int ret = 0; -+ -+ list_for_each_entry(pwrseq_list_node, head, list) { -+ ret = pwrseq_suspend(pwrseq_list_node->pwrseq); -+ if (ret) -+ break; -+ } -+ -+ if (ret) { -+ list_for_each_entry(pwrseq_list_node, head, list) { -+ pwrseq = pwrseq_list_node->pwrseq; -+ if (pwrseq->suspended) -+ pwrseq_resume(pwrseq); -+ } -+ } -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(pwrseq_suspend_list); -+ -+/** -+ * pwrseq_resume_list - Carry out power sequence resume for the list -+ * -+ * @head: the list head for pwrseq instance list on this bus -+ * -+ * This API is used to do resume on all power sequence instances on this bus. -+ * The caller needs to use mutex_lock for concurrent. -+ */ -+int pwrseq_resume_list(struct list_head *head) -+{ -+ struct pwrseq_list_per_dev *pwrseq_list_node; -+ int ret = 0; -+ -+ list_for_each_entry(pwrseq_list_node, head, list) { -+ ret = pwrseq_resume(pwrseq_list_node->pwrseq); -+ if (ret) -+ break; -+ } -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(pwrseq_resume_list); -diff --git a/drivers/power/pwrseq/pwrseq_generic.c b/drivers/power/pwrseq/pwrseq_generic.c -new file mode 100644 -index 000000000000..b7bbd6c5b47d ---- /dev/null -+++ b/drivers/power/pwrseq/pwrseq_generic.c -@@ -0,0 +1,210 @@ -+/* -+ * pwrseq_generic.c Generic power sequence handling -+ * -+ * Copyright (C) 2016 Freescale Semiconductor, Inc. -+ * Author: Peter Chen -+ * -+ * This program is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 of -+ * the License as published by the Free Software Foundation. -+ * -+ * 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. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+struct pwrseq_generic { -+ struct pwrseq pwrseq; -+ struct gpio_desc *gpiod_reset; -+ struct clk *clks[PWRSEQ_MAX_CLKS]; -+ u32 duration_us; -+ bool suspended; -+}; -+ -+#define to_generic_pwrseq(p) container_of(p, struct pwrseq_generic, pwrseq) -+ -+static int pwrseq_generic_suspend(struct pwrseq *pwrseq) -+{ -+ struct pwrseq_generic *pwrseq_gen = to_generic_pwrseq(pwrseq); -+ int clk; -+ -+ for (clk = PWRSEQ_MAX_CLKS - 1; clk >= 0; clk--) -+ clk_disable_unprepare(pwrseq_gen->clks[clk]); -+ -+ pwrseq_gen->suspended = true; -+ return 0; -+} -+ -+static int pwrseq_generic_resume(struct pwrseq *pwrseq) -+{ -+ struct pwrseq_generic *pwrseq_gen = to_generic_pwrseq(pwrseq); -+ int clk, ret = 0; -+ -+ for (clk = 0; clk < PWRSEQ_MAX_CLKS && pwrseq_gen->clks[clk]; clk++) { -+ ret = clk_prepare_enable(pwrseq_gen->clks[clk]); -+ if (ret) { -+ pr_err("Can't enable clock, ret=%d\n", ret); -+ goto err_disable_clks; -+ } -+ } -+ -+ pwrseq_gen->suspended = false; -+ return ret; -+ -+err_disable_clks: -+ while (--clk >= 0) -+ clk_disable_unprepare(pwrseq_gen->clks[clk]); -+ -+ return ret; -+} -+ -+static void pwrseq_generic_put(struct pwrseq *pwrseq) -+{ -+ struct pwrseq_generic *pwrseq_gen = to_generic_pwrseq(pwrseq); -+ int clk; -+ -+ if (pwrseq_gen->gpiod_reset) -+ gpiod_put(pwrseq_gen->gpiod_reset); -+ -+ for (clk = 0; clk < PWRSEQ_MAX_CLKS; clk++) -+ clk_put(pwrseq_gen->clks[clk]); -+ -+ kfree(pwrseq_gen); -+} -+ -+static void pwrseq_generic_off(struct pwrseq *pwrseq) -+{ -+ struct pwrseq_generic *pwrseq_gen = to_generic_pwrseq(pwrseq); -+ int clk; -+ -+ if (pwrseq_gen->suspended) -+ return; -+ -+ for (clk = PWRSEQ_MAX_CLKS - 1; clk >= 0; clk--) -+ clk_disable_unprepare(pwrseq_gen->clks[clk]); -+} -+ -+static int pwrseq_generic_on(struct pwrseq *pwrseq) -+{ -+ struct pwrseq_generic *pwrseq_gen = to_generic_pwrseq(pwrseq); -+ int clk, ret = 0; -+ struct gpio_desc *gpiod_reset = pwrseq_gen->gpiod_reset; -+ -+ for (clk = 0; clk < PWRSEQ_MAX_CLKS && pwrseq_gen->clks[clk]; clk++) { -+ ret = clk_prepare_enable(pwrseq_gen->clks[clk]); -+ if (ret) { -+ pr_err("Can't enable clock, ret=%d\n", ret); -+ goto err_disable_clks; -+ } -+ } -+ -+ if (gpiod_reset) { -+ u32 duration_us = pwrseq_gen->duration_us; -+ -+ if (duration_us <= 10) -+ udelay(10); -+ else -+ usleep_range(duration_us, duration_us + 100); -+ gpiod_set_value(gpiod_reset, 0); -+ } -+ -+ return ret; -+ -+err_disable_clks: -+ while (--clk >= 0) -+ clk_disable_unprepare(pwrseq_gen->clks[clk]); -+ -+ return ret; -+} -+ -+static int pwrseq_generic_get(struct device_node *np, struct pwrseq *pwrseq) -+{ -+ struct pwrseq_generic *pwrseq_gen = to_generic_pwrseq(pwrseq); -+ enum of_gpio_flags flags; -+ int reset_gpio, clk, ret = 0; -+ -+ for (clk = 0; clk < PWRSEQ_MAX_CLKS; clk++) { -+ pwrseq_gen->clks[clk] = of_clk_get(np, clk); -+ if (IS_ERR(pwrseq_gen->clks[clk])) { -+ ret = PTR_ERR(pwrseq_gen->clks[clk]); -+ if (ret != -ENOENT) -+ goto err_put_clks; -+ pwrseq_gen->clks[clk] = NULL; -+ break; -+ } -+ } -+ -+ reset_gpio = of_get_named_gpio_flags(np, "reset-gpios", 0, &flags); -+ if (gpio_is_valid(reset_gpio)) { -+ unsigned long gpio_flags; -+ -+ if (flags & OF_GPIO_ACTIVE_LOW) -+ gpio_flags = GPIOF_ACTIVE_LOW | GPIOF_OUT_INIT_LOW; -+ else -+ gpio_flags = GPIOF_OUT_INIT_HIGH; -+ -+ ret = gpio_request_one(reset_gpio, gpio_flags, -+ "pwrseq-reset-gpios"); -+ if (ret) -+ goto err_put_clks; -+ -+ pwrseq_gen->gpiod_reset = gpio_to_desc(reset_gpio); -+ of_property_read_u32(np, "reset-duration-us", -+ &pwrseq_gen->duration_us); -+ } else if (reset_gpio == -ENOENT) { -+ ; /* no such gpio */ -+ } else { -+ ret = reset_gpio; -+ pr_err("Failed to get reset gpio on %s, err = %d\n", -+ np->full_name, reset_gpio); -+ goto err_put_clks; -+ } -+ -+ return 0; -+ -+err_put_clks: -+ while (--clk >= 0) -+ clk_put(pwrseq_gen->clks[clk]); -+ return ret; -+} -+ -+/** -+ * pwrseq_generic_alloc_instance - power sequence instance allocation -+ * -+ * This function is used to allocate one generic power sequence instance, -+ * it is called when the system boots up and after one power sequence -+ * instance is got successfully. -+ * -+ * Return zero on success or an error code otherwise. -+ */ -+struct pwrseq *pwrseq_generic_alloc_instance(void) -+{ -+ struct pwrseq_generic *pwrseq_gen; -+ -+ pwrseq_gen = kzalloc(sizeof(*pwrseq_gen), GFP_KERNEL); -+ if (!pwrseq_gen) -+ return ERR_PTR(-ENOMEM); -+ -+ pwrseq_gen->pwrseq.get = pwrseq_generic_get; -+ pwrseq_gen->pwrseq.on = pwrseq_generic_on; -+ pwrseq_gen->pwrseq.off = pwrseq_generic_off; -+ pwrseq_gen->pwrseq.put = pwrseq_generic_put; -+ pwrseq_gen->pwrseq.suspend = pwrseq_generic_suspend; -+ pwrseq_gen->pwrseq.resume = pwrseq_generic_resume; -+ -+ return &pwrseq_gen->pwrseq; -+} -diff --git a/include/linux/power/pwrseq.h b/include/linux/power/pwrseq.h -new file mode 100644 -index 000000000000..c5b278f5f2ae ---- /dev/null -+++ b/include/linux/power/pwrseq.h -@@ -0,0 +1,84 @@ -+#ifndef __LINUX_PWRSEQ_H -+#define __LINUX_PWRSEQ_H -+ -+#include -+ -+#define PWRSEQ_MAX_CLKS 3 -+ -+/** -+ * struct pwrseq - the power sequence structure -+ * @pwrseq_of_match_table: the OF device id table this pwrseq library supports -+ * @node: the list pointer to be added to pwrseq list -+ * @get: the API is used to get pwrseq instance from the device node -+ * @on: do power on for this pwrseq instance -+ * @off: do power off for this pwrseq instance -+ * @put: release the resources on this pwrseq instance -+ * @suspend: do suspend operation on this pwrseq instance -+ * @resume: do resume operation on this pwrseq instance -+ */ -+struct pwrseq { -+ const struct of_device_id *pwrseq_of_match_table; -+ struct list_head node; -+ int (*get)(struct device_node *np, struct pwrseq *p); -+ int (*on)(struct pwrseq *p); -+ void (*off)(struct pwrseq *p); -+ void (*put)(struct pwrseq *p); -+ int (*suspend)(struct pwrseq *p); -+ int (*resume)(struct pwrseq *p); -+ bool suspended; -+}; -+ -+/* used for power sequence instance list in one driver */ -+struct pwrseq_list_per_dev { -+ struct pwrseq *pwrseq; -+ struct list_head list; -+}; -+ -+#if IS_ENABLED(CONFIG_POWER_SEQUENCE) -+struct pwrseq *of_pwrseq_on(struct device_node *np); -+void of_pwrseq_off(struct pwrseq *pwrseq); -+int of_pwrseq_on_list(struct device_node *np, struct list_head *head); -+void of_pwrseq_off_list(struct list_head *head); -+int pwrseq_suspend(struct pwrseq *p); -+int pwrseq_resume(struct pwrseq *p); -+int pwrseq_suspend_list(struct list_head *head); -+int pwrseq_resume_list(struct list_head *head); -+#else -+static inline struct pwrseq *of_pwrseq_on(struct device_node *np) -+{ -+ return NULL; -+} -+static void of_pwrseq_off(struct pwrseq *pwrseq) {} -+static int of_pwrseq_on_list(struct device_node *np, struct list_head *head) -+{ -+ return 0; -+} -+static void of_pwrseq_off_list(struct list_head *head) {} -+static int pwrseq_suspend(struct pwrseq *p) -+{ -+ return 0; -+} -+static int pwrseq_resume(struct pwrseq *p) -+{ -+ return 0; -+} -+static int pwrseq_suspend_list(struct list_head *head) -+{ -+ return 0; -+} -+static int pwrseq_resume_list(struct list_head *head) -+{ -+ return 0; -+} -+#endif /* CONFIG_POWER_SEQUENCE */ -+ -+#if IS_ENABLED(CONFIG_PWRSEQ_GENERIC) -+extern struct pwrseq *pwrseq_generic_alloc_instance(void); -+#else -+static inline struct pwrseq *pwrseq_generic_alloc_instance(void) -+{ -+ return ERR_PTR(-ENOTSUPP); -+} -+#endif /* CONFIG_PWRSEQ_GENERIC */ -+ -+#endif /* __LINUX_PWRSEQ_H */ --- -2.18.0 - diff --git a/libre/linux-libre-lts/0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch b/libre/linux-libre-lts/0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch new file mode 100644 index 000000000..a91facd17 --- /dev/null +++ b/libre/linux-libre-lts/0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch @@ -0,0 +1,44 @@ +From 3379ffad8f5b3db47578cc4eadc3c0f22f7547f1 Mon Sep 17 00:00:00 2001 +From: Hal Emmerich +Date: Thu, 19 Jul 2018 21:48:08 -0500 +Subject: [PATCH 9/9] usb: dwc2: disable power_down on rockchip devices + + The bug would let the usb controller enter partial power down, + which was formally known as hibernate, upon boot if nothing was plugged + in to the port. Partial power down couldn't be exited properly, so any + usb devices plugged in after boot would not be usable. + + Before the name change, params.hibernation was false by default, so + _dwc2_hcd_suspend() would skip entering hibernation. With the + rename, _dwc2_hcd_suspend() was changed to use params.power_down + to decide whether or not to enter partial power down. + + Since params.power_down is non-zero by default, it needs to be set + to 0 for rockchip devices to restore functionality. + + This bug was reported in the linux-usb thread: + REGRESSION: usb: dwc2: USB device not seen after boot + + The commit that caused this regression is: + 6d23ee9caa6790aea047f9aca7f3c03cb8d96eb6 + +Signed-off-by: Hal Emmerich +--- + drivers/usb/dwc2/params.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c +index bf7052e037d6..09292dc977e4 100644 +--- a/drivers/usb/dwc2/params.c ++++ b/drivers/usb/dwc2/params.c +@@ -81,6 +81,7 @@ static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg) + p->host_perio_tx_fifo_size = 256; + p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << + GAHBCFG_HBSTLEN_SHIFT; ++ p->power_down = 0; + } + + static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg) +-- +2.19.0 + diff --git a/libre/linux-libre-lts/0010-usb-core-add-power-sequence-handling-for-USB-devices.patch b/libre/linux-libre-lts/0010-usb-core-add-power-sequence-handling-for-USB-devices.patch deleted file mode 100644 index 5737cac20..000000000 --- a/libre/linux-libre-lts/0010-usb-core-add-power-sequence-handling-for-USB-devices.patch +++ /dev/null @@ -1,164 +0,0 @@ -From 5b874f0a1f92812bc797c01fa558f0ab4ed338ae Mon Sep 17 00:00:00 2001 -From: Peter Chen -Date: Wed, 21 Jun 2017 14:42:05 +0800 -Subject: [PATCH 10/14] usb: core: add power sequence handling for USB devices - -Some hard-wired USB devices need to do power sequence to let the -device work normally, the typical power sequence like: enable USB -PHY clock, toggle reset pin, etc. But current Linux USB driver -lacks of such code to do it, it may cause some hard-wired USB devices -works abnormal or can't be recognized by controller at all. - -In this patch, it calls power sequence library APIs to finish -the power sequence events. It will do power on sequence at hub's -probe for all devices under this hub (includes root hub). -At hub_disconnect, it will do power off sequence which is at powered -on list. - -Signed-off-by: Peter Chen -Tested-by Joshua Clayton -Tested-by: Maciej S. Szmigiero -Reviewed-by: Vaibhav Hiremath -Acked-by: Alan Stern ---- - drivers/usb/Kconfig | 1 + - drivers/usb/core/hub.c | 49 ++++++++++++++++++++++++++++++++++++++---- - drivers/usb/core/hub.h | 1 + - 3 files changed, 47 insertions(+), 4 deletions(-) - -diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig -index 987fc5ba6321..bd09fc8ff763 100644 ---- a/drivers/usb/Kconfig -+++ b/drivers/usb/Kconfig -@@ -45,6 +45,7 @@ config USB - tristate "Support for Host-side USB" - depends on USB_ARCH_HAS_HCD - select USB_COMMON -+ select POWER_SEQUENCE - select NLS # for UTF-8 strings - ---help--- - Universal Serial Bus (USB) is a specification for a serial bus -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index e3bf65e213cd..f6a739bbe754 100644 ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -1654,6 +1655,7 @@ static void hub_disconnect(struct usb_interface *intf) - hub->error = 0; - hub_quiesce(hub, HUB_DISCONNECT); - -+ of_pwrseq_off_list(&hub->pwrseq_list); - mutex_lock(&usb_port_peer_mutex); - - /* Avoid races with recursively_mark_NOTATTACHED() */ -@@ -1700,11 +1702,41 @@ static bool hub_descriptor_is_sane(struct usb_host_interface *desc) - return true; - } - -+#ifdef CONFIG_OF -+static int hub_of_pwrseq_on(struct usb_hub *hub) -+{ -+ struct device *parent; -+ struct usb_device *hdev = hub->hdev; -+ struct device_node *np; -+ int ret; -+ -+ if (hdev->parent) -+ parent = &hdev->dev; -+ else -+ parent = bus_to_hcd(hdev->bus)->self.sysdev; -+ -+ for_each_child_of_node(parent->of_node, np) { -+ ret = of_pwrseq_on_list(np, &hub->pwrseq_list); -+ /* Maybe no power sequence library is chosen */ -+ if (ret && ret != -ENOENT) -+ return ret; -+ } -+ -+ return 0; -+} -+#else -+static int hub_of_pwrseq_on(struct usb_hub *hub) -+{ -+ return 0; -+} -+#endif -+ - static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) - { - struct usb_host_interface *desc; - struct usb_device *hdev; - struct usb_hub *hub; -+ int ret = -ENODEV; - - desc = intf->cur_altsetting; - hdev = interface_to_usbdev(intf); -@@ -1795,6 +1827,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) - INIT_DELAYED_WORK(&hub->leds, led_work); - INIT_DELAYED_WORK(&hub->init_work, NULL); - INIT_WORK(&hub->events, hub_event); -+ INIT_LIST_HEAD(&hub->pwrseq_list); - usb_get_intf(intf); - usb_get_dev(hdev); - -@@ -1808,11 +1841,14 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) - if (id->driver_info & HUB_QUIRK_CHECK_PORT_AUTOSUSPEND) - hub->quirk_check_port_auto_suspend = 1; - -- if (hub_configure(hub, &desc->endpoint[0].desc) >= 0) -- return 0; -+ if (hub_configure(hub, &desc->endpoint[0].desc) >= 0) { -+ ret = hub_of_pwrseq_on(hub); -+ if (!ret) -+ return 0; -+ } - - hub_disconnect(intf); -- return -ENODEV; -+ return ret; - } - - static int -@@ -3633,14 +3669,19 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg) - - /* stop hub_wq and related activity */ - hub_quiesce(hub, HUB_SUSPEND); -- return 0; -+ return pwrseq_suspend_list(&hub->pwrseq_list); - } - - static int hub_resume(struct usb_interface *intf) - { - struct usb_hub *hub = usb_get_intfdata(intf); -+ int ret; - - dev_dbg(&intf->dev, "%s\n", __func__); -+ ret = pwrseq_resume_list(&hub->pwrseq_list); -+ if (ret) -+ return ret; -+ - hub_activate(hub, HUB_RESUME); - return 0; - } -diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h -index 4dc769ee9c74..b5d5c4818f90 100644 ---- a/drivers/usb/core/hub.h -+++ b/drivers/usb/core/hub.h -@@ -70,6 +70,7 @@ struct usb_hub { - struct delayed_work init_work; - struct work_struct events; - struct usb_port **ports; -+ struct list_head pwrseq_list; /* powered pwrseq node list */ - }; - - /** --- -2.18.0 - diff --git a/libre/linux-libre-lts/0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch b/libre/linux-libre-lts/0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch deleted file mode 100644 index 7c5261680..000000000 --- a/libre/linux-libre-lts/0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch +++ /dev/null @@ -1,49 +0,0 @@ -From dd0ec5ddeff7c8435888e7250eb47954740e7e5d Mon Sep 17 00:00:00 2001 -From: Joshua Clayton -Date: Wed, 21 Jun 2017 14:42:06 +0800 -Subject: [PATCH 11/14] ARM: dts: imx6qdl: Enable usb node children with - -Give usb nodes #address and #size attributes, so that a child node -representing a permanently connected device such as an onboard hub may -be addressed with a attribute - -Signed-off-by: Joshua Clayton -Signed-off-by: Peter Chen ---- - arch/arm/boot/dts/imx6qdl.dtsi | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi -index c003e62bf290..7ffd2f1f769e 100644 ---- a/arch/arm/boot/dts/imx6qdl.dtsi -+++ b/arch/arm/boot/dts/imx6qdl.dtsi -@@ -983,6 +983,8 @@ - - usbh1: usb@2184200 { - compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; -+ #address-cells = <1>; -+ #size-cells = <0>; - reg = <0x02184200 0x200>; - interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clks IMX6QDL_CLK_USBOH3>; -@@ -997,6 +999,8 @@ - - usbh2: usb@2184400 { - compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; -+ #address-cells = <1>; -+ #size-cells = <0>; - reg = <0x02184400 0x200>; - interrupts = <0 41 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clks IMX6QDL_CLK_USBOH3>; -@@ -1010,6 +1014,8 @@ - - usbh3: usb@2184600 { - compatible = "fsl,imx6q-usb", "fsl,imx27-usb"; -+ #address-cells = <1>; -+ #size-cells = <0>; - reg = <0x02184600 0x200>; - interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clks IMX6QDL_CLK_USBOH3>; --- -2.18.0 - diff --git a/libre/linux-libre-lts/0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch b/libre/linux-libre-lts/0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch deleted file mode 100644 index 606b49708..000000000 --- a/libre/linux-libre-lts/0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 01dea63eabb838525a193c32526791f6880c2b79 Mon Sep 17 00:00:00 2001 -From: Peter Chen -Date: Wed, 21 Jun 2017 14:42:07 +0800 -Subject: [PATCH 12/14] ARM: dts: imx6qdl-udoo.dtsi: fix onboard USB HUB - property - -The current dts describes USB HUB's property at USB controller's -entry, it is improper. The USB HUB should be the child node -under USB controller, and power sequence properties are under -it. Besides, using gpio pinctrl setting for USB2415's reset pin. - -Signed-off-by: Peter Chen -Signed-off-by: Joshua Clayton -Tested-by: Maciej S. Szmigiero ---- - arch/arm/boot/dts/imx6qdl-udoo.dtsi | 26 ++++++++++++-------------- - 1 file changed, 12 insertions(+), 14 deletions(-) - -diff --git a/arch/arm/boot/dts/imx6qdl-udoo.dtsi b/arch/arm/boot/dts/imx6qdl-udoo.dtsi -index 906387915dc5..d3cc0b666e0d 100644 ---- a/arch/arm/boot/dts/imx6qdl-udoo.dtsi -+++ b/arch/arm/boot/dts/imx6qdl-udoo.dtsi -@@ -9,6 +9,8 @@ - * - */ - -+#include -+ - / { - aliases { - backlight = &backlight; -@@ -65,17 +67,6 @@ - #address-cells = <1>; - #size-cells = <0>; - -- reg_usb_h1_vbus: regulator@0 { -- compatible = "regulator-fixed"; -- reg = <0>; -- regulator-name = "usb_h1_vbus"; -- regulator-min-microvolt = <5000000>; -- regulator-max-microvolt = <5000000>; -- enable-active-high; -- startup-delay-us = <2>; /* USB2415 requires a POR of 1 us minimum */ -- gpio = <&gpio7 12 0>; -- }; -- - reg_panel: regulator@1 { - compatible = "regulator-fixed"; - reg = <1>; -@@ -201,7 +192,7 @@ - - pinctrl_usbh: usbhgrp { - fsl,pins = < -- MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000 -+ MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x1b0b0 - MX6QDL_PAD_NANDF_CS2__CCM_CLKO2 0x130b0 - >; - }; -@@ -272,9 +263,16 @@ - &usbh1 { - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_usbh>; -- vbus-supply = <®_usb_h1_vbus>; -- clocks = <&clks IMX6QDL_CLK_CKO>; - status = "okay"; -+ -+ usb2415: hub@1 { -+ compatible = "usb424,2514"; -+ reg = <1>; -+ -+ clocks = <&clks IMX6QDL_CLK_CKO>; -+ reset-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>; -+ reset-duration-us = <3000>; -+ }; - }; - - &usdhc3 { --- -2.18.0 - diff --git a/libre/linux-libre-lts/0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch b/libre/linux-libre-lts/0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch deleted file mode 100644 index 0eaf2c470..000000000 --- a/libre/linux-libre-lts/0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 29a513109fa45d1039d7f52aacb3fc4a188e60d4 Mon Sep 17 00:00:00 2001 -From: Joshua Clayton -Date: Wed, 21 Jun 2017 14:42:08 +0800 -Subject: [PATCH 13/14] ARM: dts: imx6q-evi: Fix onboard hub reset line - -Previously the onboard hub was made to work by treating its -reset gpio as a regulator enable. -Get rid of that kludge now that pwseq has added reset gpio support -Move pin muxing the hub reset pin into the usbh1 group - -Signed-off-by: Joshua Clayton -Signed-off-by: Peter Chen ---- - arch/arm/boot/dts/imx6q-evi.dts | 25 +++++++------------------ - 1 file changed, 7 insertions(+), 18 deletions(-) - -diff --git a/arch/arm/boot/dts/imx6q-evi.dts b/arch/arm/boot/dts/imx6q-evi.dts -index fcd257bc5ac3..d32fa81bba95 100644 ---- a/arch/arm/boot/dts/imx6q-evi.dts -+++ b/arch/arm/boot/dts/imx6q-evi.dts -@@ -54,18 +54,6 @@ - reg = <0x10000000 0x40000000>; - }; - -- reg_usbh1_vbus: regulator-usbhubreset { -- compatible = "regulator-fixed"; -- regulator-name = "usbh1_vbus"; -- regulator-min-microvolt = <5000000>; -- regulator-max-microvolt = <5000000>; -- enable-active-high; -- startup-delay-us = <2>; -- pinctrl-names = "default"; -- pinctrl-0 = <&pinctrl_usbh1_hubreset>; -- gpio = <&gpio7 12 GPIO_ACTIVE_HIGH>; -- }; -- - reg_usb_otg_vbus: regulator-usbotgvbus { - compatible = "regulator-fixed"; - regulator-name = "usb_otg_vbus"; -@@ -213,12 +201,18 @@ - }; - - &usbh1 { -- vbus-supply = <®_usbh1_vbus>; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_usbh1>; - dr_mode = "host"; - disable-over-current; - status = "okay"; -+ -+ usb2415host: hub@1 { -+ compatible = "usb424,2513"; -+ reg = <1>; -+ reset-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>; -+ reset-duration-us = <3000>; -+ }; - }; - - &usbotg { -@@ -481,11 +475,6 @@ - MX6QDL_PAD_GPIO_3__USB_H1_OC 0x1b0b0 - /* usbh1_b OC */ - MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0 -- >; -- }; -- -- pinctrl_usbh1_hubreset: usbh1hubresetgrp { -- fsl,pins = < - MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x1b0b0 - >; - }; --- -2.18.0 - diff --git a/libre/linux-libre-lts/0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch b/libre/linux-libre-lts/0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch deleted file mode 100644 index 8dbde1ca0..000000000 --- a/libre/linux-libre-lts/0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch +++ /dev/null @@ -1,61 +0,0 @@ -From ac139b06e1b309c605c65cea2d547cbba4ae5370 Mon Sep 17 00:00:00 2001 -From: Ethan Tuttle -Date: Tue, 19 Jun 2018 21:31:08 -0700 -Subject: [PATCH 14/14] ARM: mvebu: declare asm symbols as character arrays in - pmsu.c - -With CONFIG_FORTIFY_SOURCE, memcpy uses the declared size of operands to -detect buffer overflows. If src or dest is declared as a char, attempts to -copy more than byte will result in a fortify_panic(). - -Address this problem in mvebu_setup_boot_addr_wa() by declaring -mvebu_boot_wa_start and mvebu_boot_wa_end as character arrays. Also remove -a couple addressof operators to avoid "arithmetic on pointer to an -incomplete type" compiler error. - -See commit 54a7d50b9205 ("x86: mark kprobe templates as character arrays, -not single characters") for a similar fix. - -Fixes "detected buffer overflow in memcpy" error during init on some mvebu -systems (armada-370-xp, armada-375): - -(fortify_panic) from (mvebu_setup_boot_addr_wa+0xb0/0xb4) -(mvebu_setup_boot_addr_wa) from (mvebu_v7_cpu_pm_init+0x154/0x204) -(mvebu_v7_cpu_pm_init) from (do_one_initcall+0x7c/0x1a8) -(do_one_initcall) from (kernel_init_freeable+0x1bc/0x254) -(kernel_init_freeable) from (kernel_init+0x8/0x114) -(kernel_init) from (ret_from_fork+0x14/0x2c) - -Signed-off-by: Ethan Tuttle -Tested-by: Ethan Tuttle ---- - arch/arm/mach-mvebu/pmsu.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c -index 27a78c80e5b1..73d5d72dfc3e 100644 ---- a/arch/arm/mach-mvebu/pmsu.c -+++ b/arch/arm/mach-mvebu/pmsu.c -@@ -116,8 +116,8 @@ void mvebu_pmsu_set_cpu_boot_addr(int hw_cpu, void *boot_addr) - PMSU_BOOT_ADDR_REDIRECT_OFFSET(hw_cpu)); - } - --extern unsigned char mvebu_boot_wa_start; --extern unsigned char mvebu_boot_wa_end; -+extern unsigned char mvebu_boot_wa_start[]; -+extern unsigned char mvebu_boot_wa_end[]; - - /* - * This function sets up the boot address workaround needed for SMP -@@ -130,7 +130,7 @@ int mvebu_setup_boot_addr_wa(unsigned int crypto_eng_target, - phys_addr_t resume_addr_reg) - { - void __iomem *sram_virt_base; -- u32 code_len = &mvebu_boot_wa_end - &mvebu_boot_wa_start; -+ u32 code_len = mvebu_boot_wa_end - mvebu_boot_wa_start; - - mvebu_mbus_del_window(BOOTROM_BASE, BOOTROM_SIZE); - mvebu_mbus_add_window_by_id(crypto_eng_target, crypto_eng_attribute, --- -2.18.0 - diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 64562ac99..9f91d3344 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -11,7 +11,7 @@ pkgbase=linux-libre-lts _srcbasever=4.14-gnu -_srcver=4.14.70-gnu +_srcver=4.14.86-gnu _replacesarchkernel=('linux%') # '%' gets replaced with _kernelname _replacesoldkernels=() # '%' gets replaced with _kernelname @@ -21,7 +21,7 @@ _srcname=linux-${_srcbasever%-*} _archpkgver=${_srcver%-*} pkgver=${_srcver//-/_} pkgrel=1 -rcnrel=armv7-x9 +rcnrel=armv7-x11 arch=('x86_64' 'i686' 'armv7h') url="https://linux-libre.fsfla.org/" license=('GPL2') @@ -49,12 +49,7 @@ source=( '0006-set-default-cubietruck-led-triggers.patch' '0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch' '0008-ARM-dove-enable-ethernet-on-D3Plug.patch' - '0009-power-add-power-sequence-library.patch' - '0010-usb-core-add-power-sequence-handling-for-USB-devices.patch' - '0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch' - '0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch' - '0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch' - '0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch' + '0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch' # other patches '0001-usb-serial-gadget-no-TTY-hangup-on-USB-disconnect-WI.patch' '0002-fix-Atmel-maXTouch-touchscreen-support.patch' @@ -67,7 +62,7 @@ validpgpkeys=( ) sha512sums=('0d4b0b8ec1ffc39c59295adf56f6a2cccf77cad56d8a8bf8072624bbb52ba3e684147ebed91d1528d2685423dd784c5fca0f3650f874f2b93cfc6b7689b9a87f' 'SKIP' - 'cf8f7876da3464bb477096dc8152884d2a021bd6f46c555554505cb81ae4fe6707a4a274f6920a870563fada6d611c02cf4e94d7a9887df4008b86f7f723ee46' + 'b434f73c5942674b0aa392ab77a894936fdcb0b69758b03f5ce0b7b1da2c3d27dd6a6bd711abfff83c16397f453201bf222bf0e4870fced14e41f9d41dbe5a46' 'SKIP' '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3' 'SKIP' @@ -77,26 +72,21 @@ sha512sums=('0d4b0b8ec1ffc39c59295adf56f6a2cccf77cad56d8a8bf8072624bbb52ba3e6841 'SKIP' 'bfc139818a618bd53c7321910c524229556a235b9400bf57d8d77d29fcb6e31bc56d71fc6ea5d10cbc5564f763f48a14e67dd924ea637f7dc3265e9cc756bb03' '7126904b54a8622a488a0d2f667b3ff36761d8c43f943b058875f19c4b673a2c5c6afc80f4d3a7bfa88497d117d11a68d80ee8d482bb503c7886a7c549aa1cd2' - '23c4664b5ba260b10ea148be239dd132e0fa60bef745cb80968506ad326bc0768895f64cf012815686790b09e648f969993d9d1d821c51dd7ec2d9af0bac332c' + '8ad2ec9421cdcd16cdb4a658782c02d18be20aaa1787f192a7492f07622c4f5ac35f07df698beae687af4b701c0a87db7ae5d269dddad7a46b04198bb31cbf6e' '7ad5be75ee422dda3b80edd2eb614d8a9181e2c8228cd68b3881e2fb95953bf2dea6cbe7900ce1013c9de89b2802574b7b24869fc5d7a95d3cc3112c4d27063a' '4a8b324aee4cccf3a512ad04ce1a272d14e5b05c8de90feb82075f55ea3845948d817e1b0c6f298f5816834ddd3e5ce0a0e2619866289f3c1ab8fd2f35f04f44' '2dc6b0ba8f7dbf19d2446c5c5f1823587de89f4e28e9595937dd51a87755099656f2acec50e3e2546ea633ad1bfd1c722e0c2b91eef1d609103d8abdc0a7cbaf' - '9f1c971a28bc4e0d99fb2639412d6e76c237e80a15690ab0ebbcacca3db47b5de1622655bb93d8b391edc52168c636175ca2c314119af4fcb944c47e2aa4ca06' + '76aafa199e944156157cbce2330be21f2b924ba2935f177f209f8215d06e6838e78b0f63a305c0b6e5547cfb99439c68a9137c0ea674d1ac0b13ab88fdd381e2' 'SKIP' - 'c6e758931e599199db07276a51b204a4030e0da80f08df60783278cf3d4d3ee6c0c280cc1788ca024cdf2043a39dd527e2205dd678368097b68240a7e80b931c' - '3e0852e188549e60fa35b70e82740d5124936688d5f5ff0314c4e555ad9cc4c7688c56b5949baa8fd67ede22a579019919b09091b59eafac60409fdf18105af5' - 'f80538cfb1af660a3dc2a8bf31ada1132d24d81064b347419d221417ad8e0e949431ef277b22fee771b6f9d43abf47d3e6a92ce4f5928a6cc4f25f0b628ba02a' - 'e09ef9f021515474d41a3cb3d11b88a133db012b322a604cc6597b675d9b98c96dbd5cc447426f053bcb00598d640f9ba0651d1496762cf39ee3f698b03b0416' - 'f0573b49e4184ddcac6e273c46a63439dfcea7ca0b7a232bf35fb22979bf593fdb18f6dbe243505a22dd94b465c22f2a92cab13d159d76aa330f9a4cf3f17971' - '56f20c4f0683e9a2d0936fe0669449485043431d8b77fcbdec30bad88349db8ed7d1286af5f3ad4732561533e716b0df6faa094d7a5b9a84acfea756d3139ac0' - 'a5f73c34912393bdf49cde6dd4e99d16f6a95a267e9384a5bc33633d89a0669a3dac49fdf3efb43aa0e477d520fcb577d826f3a2907f11d1d7584ca9e2d90faa' - '155b2b44d320a2605473c95ffb6664ba34ba806f8e53f951f2471adb45f0f6e18f04e409b31620c4fa096090916a4f1af69a3d7e467395a2845d4c0657927891' - '9b6f5fbc5738e1d83caad3328d2cc9bfc7e60a1a09a9eaaffb739952e13f630c029bb3472f7b4385fa52bd6953fd7e7492a44258d5b4baf30f81c99c71965b9a' - 'd32f7808c35cb58d7218c4cfe42d0967ee0975346827580b3fd34c1a45a975560b276cec909954d27a6feff23f4364b8a802501a03f46ac8e6b61f16910cb784' - 'b6b39a2fdc5963611806d387866edab43eb52c591b05d92e0ed887657d43383ddfc2e088b7063bd6586ff872203fdbf0348fecc2c1f673134a8cc5112a1d4179' - '79da6491df96d8bc13edc2bd071b8859a7f915a72244992869e3be44c3118fd3421d9fff4fe6c858895ad8c19dcc02d8d3b458dc6f3efbae3120693708af31b4' - '1d0626f6e95ffe71dbbf281167d312a8acfc300930b39e80ef7771a2b65091e974e2ec703d463d8fc16d36472f5f5deb28b77d854c0e96685d31e42040d18f6d' - 'a4d72cdcddc3f43f27e0d415e1d8ce45bc552ee07d29b566cd8128715daf8267f549968434ca6a949b39aed8bbd6b8790f65f7f4641d8008d1b856d8f1a8ee94' + '60aa432465eb3ac10f565799d3dfecea21aaf08e83909c1161d9359e932626edbd1353e712d616c3d785c65a0f699e9c45df35bd9e86365c25399c6b2d45b9e4' + '86809feb5ae2759b449ec0cb7a6b3fb457874ed82a72dfda00607e8819c804a0714b5d6a17cbbba44996a36872224af42d1b85f1b3932f43bccb419041d25dc7' + '746acff348d62b3ed4e62cd9976ddf0af47f87bd3cffda90cbb00a6b57d589ccb681fcd9541ee5bdd179d95dad71d57c77cb1a60faee1c6cef518e4055c3456f' + 'c945e871fa456b521ced77cae9081bcdc47d836ecdabe6766e373681fe11fda3e5a7a3c16f70c586be64a1eb5c9136c43b0a44df897298940fd8703b50b0a543' + '054e98a2d1ea83cece1fe55ae087b282f25593022f252c74612d4aeb2a547f84ea626e3d982098ca798271af55f3b733ac2aea2fc0d9cad031802d2901dfe4ca' + '4433f9e780a72347313916c8a9cbcbce3a8c40e1b299e887dc748d257879fb5fab8f1683936339f73a4d4b4ef668b1ed6cc0d9a19ed4bd99039a1613ac08610e' + 'd1361d23ae79599e3fa94cba206bd40764f9eee0c584e639af13828dabb7f0dfa361792c098b5afae0bb350407b2dc47a1d67580daeade7a4f3e3e55e42c8470' + 'c1653f91067d31801a23450175e47968add147477caf20aec6092831739641312f4ad995af43c7e55545007279016b5f62a0720d31e4591b4421a65b8bd5b398' + 'a123747792417d3760ca40d7f913c2cdd194da2ea5778352eedebc80097b7b8dce4428a8fe8bd75cab92972f599c25bcf18a740856fc2990351234b0d7ebf9f5' '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af' 'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168' '485f37aca7793cee2361e126bc619e5bfd1737bff484b06bbba76cd326f3845c4d96c17bb9a56623a653b7b7062a698975d6a7f019f5c1a3eb9faf9b352d73f2' @@ -120,7 +110,7 @@ prepare() { patch -p1 -i ../patch-${_srcbasever}-${_srcver} fi chmod +x tools/objtool/sync-check.sh # GNU patch doesn't support git-style file mode - + if [ "${CARCH}" = "armv7h" ]; then # RCN patch (CM3 firmware deblobbed and AUFS/WireGuard removed) # Note: For stability reasons, AUFS has been removed in the RCN patch. @@ -137,14 +127,9 @@ prepare() { patch -p1 -i ../0006-set-default-cubietruck-led-triggers.patch patch -p1 -i ../0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch patch -p1 -i ../0008-ARM-dove-enable-ethernet-on-D3Plug.patch - patch -p1 -i ../0009-power-add-power-sequence-library.patch - patch -p1 -i ../0010-usb-core-add-power-sequence-handling-for-USB-devices.patch - patch -p1 -i ../0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch - patch -p1 -i ../0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch - patch -p1 -i ../0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch - patch -p1 -i ../0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch + patch -p1 -i ../0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch fi - + # add freedo as boot logo install -m644 -t drivers/video/logo \ ../logo_linux_{clut224.ppm,vga16.ppm,mono.pbm} @@ -159,7 +144,7 @@ prepare() { # https://bugs.archlinux.org/task/56711 patch -Np1 -i ../0003-Revert-drm-i915-edp-Allow-alternate-fixed-mode-for-e.patch - + # maintain the TTY over USB disconnects # http://www.coreboot.org/EHCI_Gadget_Debug patch -p1 -i ../0001-usb-serial-gadget-no-TTY-hangup-on-USB-disconnect-WI.patch @@ -234,6 +219,10 @@ _package() { cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" fi + # systemd expects to find the kernel here to allow hibernation + # https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344 + ln -sr "${pkgdir}/boot/vmlinuz-${pkgbase}" "${pkgdir}/usr/lib/modules/${_kernver}/vmlinuz" + # make room for external modules local _extramodules="extramodules-${_basekernel}${_kernelname:--lts}" ln -s "../${_extramodules}" "${pkgdir}/usr/lib/modules/${_kernver}/extramodules" diff --git a/libre/linux-libre-lts/config.armv7h b/libre/linux-libre-lts/config.armv7h index 45413b962..eac833d65 100644 --- a/libre/linux-libre-lts/config.armv7h +++ b/libre/linux-libre-lts/config.armv7h @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 4.14.55-gnu-1-lts Kernel Configuration +# Linux/arm 4.14.86-gnu-1-lts Kernel Configuration # CONFIG_ARM=y CONFIG_ARM_HAS_SG_CHAIN=y @@ -650,6 +650,8 @@ CONFIG_SWP_EMULATE=y # CONFIG_CPU_BIG_ENDIAN is not set # CONFIG_CPU_ICACHE_DISABLE is not set # CONFIG_CPU_BPREDICT_DISABLE is not set +CONFIG_CPU_SPECTRE=y +CONFIG_HARDEN_BRANCH_PREDICTOR=y CONFIG_KUSER_HELPERS=y CONFIG_VDSO=y CONFIG_OUTER_CACHE=y @@ -1388,6 +1390,9 @@ CONFIG_NF_CONNTRACK_IPV6=m # CONFIG_NF_SOCKET_IPV6 is not set CONFIG_NF_TABLES_IPV6=m CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_REDIR_IPV6=m CONFIG_NFT_REJECT_IPV6=m CONFIG_NFT_DUP_IPV6=m # CONFIG_NFT_FIB_IPV6 is not set @@ -1395,10 +1400,7 @@ CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m CONFIG_NF_NAT_IPV6=m -CONFIG_NFT_CHAIN_NAT_IPV6=m CONFIG_NF_NAT_MASQUERADE_IPV6=m -CONFIG_NFT_MASQ_IPV6=m -CONFIG_NFT_REDIR_IPV6=m CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -1759,7 +1761,6 @@ CONFIG_BT_HCIUART=m CONFIG_BT_HCIUART_H4=y CONFIG_BT_HCIUART_BCSP=y # CONFIG_BT_HCIUART_ATH3K is not set -CONFIG_BT_HCIUART_3WIRE=y # CONFIG_BT_HCIUART_INTEL is not set # CONFIG_BT_HCIUART_QCA is not set # CONFIG_BT_HCIUART_AG6XX is not set -- cgit v1.2.3