summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid P <megver83@parabola.nu>2018-12-07 11:24:19 -0300
committerDavid P <megver83@parabola.nu>2018-12-07 11:24:19 -0300
commit6b4c9cf5ff22e6b568b73456a6c14e0e9f8bce6c (patch)
treed36cac9f6a10585b6fcf2f0fa8fe4e85f2c42800
parent0a85087af73faaf5040b79b69b90ded522ec1913 (diff)
upgpkg: libre/linux-libre-lts 4.14.86_gnu-1
Signed-off-by: David P <megver83@parabola.nu>
-rw-r--r--libre/linux-libre-lts/0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch6
-rw-r--r--libre/linux-libre-lts/0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch8
-rw-r--r--libre/linux-libre-lts/0003-SMILE-Plug-device-tree-file.patch10
-rw-r--r--libre/linux-libre-lts/0004-fix-mvsdio-eMMC-timing.patch10
-rw-r--r--libre/linux-libre-lts/0005-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch11
-rw-r--r--libre/linux-libre-lts/0006-set-default-cubietruck-led-triggers.patch6
-rw-r--r--libre/linux-libre-lts/0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch10
-rw-r--r--libre/linux-libre-lts/0008-ARM-dove-enable-ethernet-on-D3Plug.patch6
-rw-r--r--libre/linux-libre-lts/0009-power-add-power-sequence-library.patch790
-rw-r--r--libre/linux-libre-lts/0009-usb-dwc2-disable-power_down-on-rockchip-devices.patch44
-rw-r--r--libre/linux-libre-lts/0010-usb-core-add-power-sequence-handling-for-USB-devices.patch164
-rw-r--r--libre/linux-libre-lts/0011-ARM-dts-imx6qdl-Enable-usb-node-children-with-reg.patch49
-rw-r--r--libre/linux-libre-lts/0012-ARM-dts-imx6qdl-udoo.dtsi-fix-onboard-USB-HUB-proper.patch80
-rw-r--r--libre/linux-libre-lts/0013-ARM-dts-imx6q-evi-Fix-onboard-hub-reset-line.patch74
-rw-r--r--libre/linux-libre-lts/0014-ARM-mvebu-declare-asm-symbols-as-character-arrays-in.patch61
-rw-r--r--libre/linux-libre-lts/PKGBUILD57
-rw-r--r--libre/linux-libre-lts/config.armv7h11
17 files changed, 106 insertions, 1291 deletions
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 <w@xxxxxx>
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 <w@xxxxxx>
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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
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 <popcornmix@gmail.com>
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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
---
@@ -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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
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 <kevin@archlinuxarm.org>
---
@@ -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 <peter.chen@nxp.com>
-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 <peter.chen@nxp.com>
-Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
-Tested-by Joshua Clayton <stillcompiling@gmail.com>
-Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
-Tested-by: Matthias Kaehlcke <mka@chromium.org>
----
- 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 <peter.chen@nxp.com>
-+
-+
-+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 <Peter.Chen@nxp.com>
-+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 <sre@kernel.org>
- 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 <peter.chen@nxp.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 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 <linux/list.h>
-+#include <linux/mutex.h>
-+#include <linux/of.h>
-+#include <linux/slab.h>
-+#include <linux/power/pwrseq.h>
-+
-+/*
-+ * 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 <peter.chen@nxp.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 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 <linux/clk.h>
-+#include <linux/delay.h>
-+#include <linux/gpio.h>
-+#include <linux/gpio/consumer.h>
-+#include <linux/of.h>
-+#include <linux/of_gpio.h>
-+#include <linux/slab.h>
-+
-+#include <linux/power/pwrseq.h>
-+
-+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 <linux/of.h>
-+
-+#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 <hal@halemmerich.com>
+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 <hal@halemmerich.com>
+---
+ 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 <peter.chen@nxp.com>
-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 <peter.chen@nxp.com>
-Tested-by Joshua Clayton <stillcompiling@gmail.com>
-Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
-Reviewed-by: Vaibhav Hiremath <hvaibhav.linux@gmail.com>
-Acked-by: Alan Stern <stern@rowland.harvard.edu>
----
- 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 <linux/mutex.h>
- #include <linux/random.h>
- #include <linux/pm_qos.h>
-+#include <linux/power/pwrseq.h>
-
- #include <linux/uaccess.h>
- #include <asm/byteorder.h>
-@@ -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 <stillcompiling@gmail.com>
-Date: Wed, 21 Jun 2017 14:42:06 +0800
-Subject: [PATCH 11/14] ARM: dts: imx6qdl: Enable usb node children with <reg>
-
-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 <reg> attribute
-
-Signed-off-by: Joshua Clayton <stillcompiling@gmail.com>
-Signed-off-by: Peter Chen <peter.chen@nxp.com>
----
- 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 <peter.chen@nxp.com>
-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 <peter.chen@nxp.com>
-Signed-off-by: Joshua Clayton <stillcompiling@gmail.com>
-Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
----
- 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 <dt-bindings/gpio/gpio.h>
-+
- / {
- 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 = <&reg_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 <stillcompiling@gmail.com>
-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 <stillcompiling@gmail.com>
-Signed-off-by: Peter Chen <peter.chen@nxp.com>
----
- 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 = <&reg_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 <ethan@ethantuttle.com>
-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 <ethan@ethantuttle.com>
-Tested-by: Ethan Tuttle <ethan@ethantuttle.com>
----
- 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