diff --git a/include/kernel-version.mk b/include/kernel-version.mk
index 8ccd5f0d776fb782810951105c7fac302f4c54f1..6cae8d8555a9c7751481e439f8bd7a1ba8ff5a93 100644
--- a/include/kernel-version.mk
+++ b/include/kernel-version.mk
@@ -8,11 +8,11 @@ endif
 
 LINUX_VERSION-4.9 = .206
 LINUX_VERSION-4.14 = .159
-LINUX_VERSION-4.19 = .90
+LINUX_VERSION-4.19 = .91
 
 LINUX_KERNEL_HASH-4.9.206 = 1df27899a9bc4dd874f3830ab9e7b638f0026dffd67a2e230444e5d2805ccad6
 LINUX_KERNEL_HASH-4.14.159 = e8d42d3a1b85d180141e9bc11c4a0e87f8a413c0e989b0f24c1b7c40f8a826f2
-LINUX_KERNEL_HASH-4.19.90 = 29d86c0a6daf169ec0b4b42a12f8d55dc894c52bd901f876f52a05906a5cf7fd
+LINUX_KERNEL_HASH-4.19.91 = f403c3dee12ded0af1889c78871abf7a531a978ba423f1ca772de702a92c3447
 
 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
 sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
diff --git a/target/linux/brcm2708/patches-4.19/950-0044-MMC-added-alternative-MMC-driver.patch b/target/linux/brcm2708/patches-4.19/950-0044-MMC-added-alternative-MMC-driver.patch
index 25f587b2d7081ed072cb7c7172d9ea5359b25b5d..3caebb8943f060972295d829b50fc43409030886 100644
--- a/target/linux/brcm2708/patches-4.19/950-0044-MMC-added-alternative-MMC-driver.patch
+++ b/target/linux/brcm2708/patches-4.19/950-0044-MMC-added-alternative-MMC-driver.patch
@@ -125,7 +125,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
  static inline int mmc_blk_part_switch(struct mmc_card *card,
  				      unsigned int part_type);
  
-@@ -2913,6 +2920,7 @@ static int mmc_blk_probe(struct mmc_card
+@@ -2876,6 +2883,7 @@ static int mmc_blk_probe(struct mmc_card
  {
  	struct mmc_blk_data *md, *part_md;
  	char cap_str[10];
@@ -133,7 +133,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
  
  	/*
  	 * Check that the card supports the command class(es) we need.
-@@ -2920,7 +2928,16 @@ static int mmc_blk_probe(struct mmc_card
+@@ -2883,7 +2891,16 @@ static int mmc_blk_probe(struct mmc_card
  	if (!(card->csd.cmdclass & CCC_BLOCK_READ))
  		return -ENODEV;
  
@@ -151,7 +151,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
  
  	card->complete_wq = alloc_workqueue("mmc_complete",
  					WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
-@@ -2935,9 +2952,14 @@ static int mmc_blk_probe(struct mmc_card
+@@ -2898,9 +2915,14 @@ static int mmc_blk_probe(struct mmc_card
  
  	string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2,
  			cap_str, sizeof(cap_str));
diff --git a/target/linux/brcm2708/patches-4.19/950-0131-firmware-raspberrypi-Notify-firmware-of-a-reboot.patch b/target/linux/brcm2708/patches-4.19/950-0131-firmware-raspberrypi-Notify-firmware-of-a-reboot.patch
index ffe679fcf21ce85c64585aa85527aa345e98108e..f74f75e76931bb906c6c75d000fe013c72ce85dd 100644
--- a/target/linux/brcm2708/patches-4.19/950-0131-firmware-raspberrypi-Notify-firmware-of-a-reboot.patch
+++ b/target/linux/brcm2708/patches-4.19/950-0131-firmware-raspberrypi-Notify-firmware-of-a-reboot.patch
@@ -13,10 +13,10 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
 
 --- a/drivers/firmware/raspberrypi.c
 +++ b/drivers/firmware/raspberrypi.c
-@@ -14,6 +14,7 @@
- #include <linux/module.h>
+@@ -15,6 +15,7 @@
  #include <linux/of_platform.h>
  #include <linux/platform_device.h>
+ #include <linux/slab.h>
 +#include <linux/reboot.h>
  #include <linux/slab.h>
  #include <soc/bcm2835/raspberrypi-firmware.h>
diff --git a/target/linux/generic/hack-4.19/721-phy_packets.patch b/target/linux/generic/hack-4.19/721-phy_packets.patch
index 39bb364d08f72017dccb463762c6046ea842c8ce..e9c09302e3be503e584b6f353d2675d4d1d9d736 100644
--- a/target/linux/generic/hack-4.19/721-phy_packets.patch
+++ b/target/linux/generic/hack-4.19/721-phy_packets.patch
@@ -43,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  	const struct header_ops *header_ops;
  
  	unsigned int		flags;
-@@ -1919,6 +1926,10 @@ struct net_device {
+@@ -1924,6 +1931,10 @@ struct net_device {
  	struct mpls_dev __rcu	*mpls_ptr;
  #endif
  
diff --git a/target/linux/generic/pending-4.19/643-net-bridge-support-hardware-flow-table-offload.patch b/target/linux/generic/pending-4.19/643-net-bridge-support-hardware-flow-table-offload.patch
index 7d9c8abe9cafa9f1802068d356ce566a05de8b8b..8b09fabf12223f7d04bbd1be01705cf174979494 100644
--- a/target/linux/generic/pending-4.19/643-net-bridge-support-hardware-flow-table-offload.patch
+++ b/target/linux/generic/pending-4.19/643-net-bridge-support-hardware-flow-table-offload.patch
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
  #include <linux/uaccess.h>
  #include "br_private.h"
-@@ -370,6 +374,28 @@ static const struct ethtool_ops br_ethto
+@@ -376,6 +380,28 @@ static const struct ethtool_ops br_ethto
  	.get_link	= ethtool_op_get_link,
  };
  
@@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static const struct net_device_ops br_netdev_ops = {
  	.ndo_open		 = br_dev_open,
  	.ndo_stop		 = br_dev_stop,
-@@ -397,6 +423,9 @@ static const struct net_device_ops br_ne
+@@ -403,6 +429,9 @@ static const struct net_device_ops br_ne
  	.ndo_bridge_setlink	 = br_setlink,
  	.ndo_bridge_dellink	 = br_dellink,
  	.ndo_features_check	 = passthru_features_check,
diff --git a/target/linux/generic/pending-4.19/680-NET-skip-GRO-for-foreign-MAC-addresses.patch b/target/linux/generic/pending-4.19/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
index 5ce652ba501794d8f3243d19a5252ab470dc3cb1..1e52d2f2a7041405efb3dd67181031cf402796eb 100644
--- a/target/linux/generic/pending-4.19/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
+++ b/target/linux/generic/pending-4.19/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/include/linux/netdevice.h
 +++ b/include/linux/netdevice.h
-@@ -1882,6 +1882,8 @@ struct net_device {
+@@ -1887,6 +1887,8 @@ struct net_device {
  	struct netdev_hw_addr_list	mc;
  	struct netdev_hw_addr_list	dev_addrs;
  
@@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
  				      &changeupper_info.info);
  }
-@@ -7732,6 +7779,7 @@ int dev_set_mac_address(struct net_devic
+@@ -7733,6 +7780,7 @@ int dev_set_mac_address(struct net_devic
  	if (err)
  		return err;
  	dev->addr_assign_type = NET_ADDR_SET;
diff --git a/target/linux/ipq806x/patches-4.19/0063-3-tsens-fix-kernel-4_19.patch b/target/linux/ipq806x/patches-4.19/0063-3-tsens-fix-kernel-4_19.patch
index 19afe8c2129deb1c4c3798494981eaf3cac1d320..a870692906b6f4da9fd87d854e07aaffb1269383 100644
--- a/target/linux/ipq806x/patches-4.19/0063-3-tsens-fix-kernel-4_19.patch
+++ b/target/linux/ipq806x/patches-4.19/0063-3-tsens-fix-kernel-4_19.patch
@@ -1,6 +1,6 @@
 --- a/drivers/thermal/qcom/tsens-common.c
 +++ b/drivers/thermal/qcom/tsens-common.c
-@@ -128,6 +128,7 @@
+@@ -128,6 +128,7 @@ int __init init_common(struct tsens_devi
  {
  	void __iomem *base;
  	struct resource *res;
diff --git a/target/linux/ipq806x/patches-4.19/0067-generic-Mangle-bootloader-s-kernel-arguments.patch b/target/linux/ipq806x/patches-4.19/0067-generic-Mangle-bootloader-s-kernel-arguments.patch
index 947eb08d7519966e9245e49df63bf13c6ec32174..b7b9c991e095cd802a43c5ac6620cdc6ad52d1b7 100644
--- a/target/linux/ipq806x/patches-4.19/0067-generic-Mangle-bootloader-s-kernel-arguments.patch
+++ b/target/linux/ipq806x/patches-4.19/0067-generic-Mangle-bootloader-s-kernel-arguments.patch
@@ -22,7 +22,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1925,6 +1925,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
+@@ -1926,6 +1926,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
  	  The command-line arguments provided by the boot loader will be
  	  appended to the the device tree bootargs property.
  
@@ -168,7 +168,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
  static int kernel_init(void *);
  
  extern void init_IRQ(void);
-@@ -594,6 +598,18 @@ asmlinkage __visible void __init start_k
+@@ -593,6 +597,18 @@ asmlinkage __visible void __init start_k
  	pr_notice("Kernel command line: %s\n", boot_command_line);
  	/* parameters may set static keys */
  	jump_label_init();
diff --git a/target/linux/ipq806x/patches-4.19/0071-6-PCI-qcom-Force-GEN1-support.patch b/target/linux/ipq806x/patches-4.19/0071-6-PCI-qcom-Force-GEN1-support.patch
index 90b232f8b7e86ae3eddc1d1f41e4e7c26cfe3dec..c1461e68c270666e10c3357fbbe84bfb36e185ca 100644
--- a/target/linux/ipq806x/patches-4.19/0071-6-PCI-qcom-Force-GEN1-support.patch
+++ b/target/linux/ipq806x/patches-4.19/0071-6-PCI-qcom-Force-GEN1-support.patch
@@ -38,7 +38,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
  
  
  	/* Set the Max TLP size to 2K, instead of using default of 4K */
-@@ -1369,6 +1377,8 @@ static int qcom_pcie_probe(struct platfo
+@@ -1367,6 +1375,8 @@ static int qcom_pcie_probe(struct platfo
  	struct dw_pcie *pci;
  	struct qcom_pcie *pcie;
  	int ret;
@@ -47,13 +47,13 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
  
  	pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
  	if (!pcie)
-@@ -1391,6 +1401,9 @@ static int qcom_pcie_probe(struct platfo
- 	if (IS_ERR(pcie->reset))
- 		return PTR_ERR(pcie->reset);
+@@ -1397,6 +1407,9 @@ static int qcom_pcie_probe(struct platfo
+ 		goto err_pm_runtime_put;
+ 	}
  
 +	of_property_read_u32(np, "force_gen1", &force_gen1);
 +	pcie->force_gen1 = force_gen1;
 +
  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "parf");
  	pcie->parf = devm_ioremap_resource(dev, res);
- 	if (IS_ERR(pcie->parf))
+ 	if (IS_ERR(pcie->parf)) {
diff --git a/target/linux/ipq806x/patches-4.19/0071-7-pcie-Set-PCIE-MRRS-and-MPS-to-256B.patch b/target/linux/ipq806x/patches-4.19/0071-7-pcie-Set-PCIE-MRRS-and-MPS-to-256B.patch
index 78120d3e38ce132b4305f443097cc8684c5db9b7..e7b5b6f9afbee6028d59fcaa6c16ee7f7475bfc1 100644
--- a/target/linux/ipq806x/patches-4.19/0071-7-pcie-Set-PCIE-MRRS-and-MPS-to-256B.patch
+++ b/target/linux/ipq806x/patches-4.19/0071-7-pcie-Set-PCIE-MRRS-and-MPS-to-256B.patch
@@ -31,8 +31,8 @@ Signed-off-by: Gokul Sriram Palanisamy <gpalan@codeaurora.org>
  #define QCOM_PCIE_2_1_0_MAX_SUPPLY	3
  struct qcom_pcie_resources_2_1_0 {
  	struct clk *iface_clk;
-@@ -1453,6 +1461,35 @@ static int qcom_pcie_probe(struct platfo
- 	return 0;
+@@ -1475,6 +1483,35 @@ err_pm_runtime_put:
+ 	return ret;
  }
  
 +static void qcom_pcie_fixup_final(struct pci_dev *dev)
diff --git a/target/linux/ipq806x/patches-4.19/0072-add-ipq806x-with-no-clocks.patch b/target/linux/ipq806x/patches-4.19/0072-add-ipq806x-with-no-clocks.patch
index ecd9672d1b791c090ef5ee42d0415250e515d7ca..76c7cfd5687ef78c041f4779c47149ea6e549a5b 100644
--- a/target/linux/ipq806x/patches-4.19/0072-add-ipq806x-with-no-clocks.patch
+++ b/target/linux/ipq806x/patches-4.19/0072-add-ipq806x-with-no-clocks.patch
@@ -1,6 +1,6 @@
 --- a/drivers/firmware/qcom_scm.c
 +++ b/drivers/firmware/qcom_scm.c
-@@ -606,6 +606,9 @@ static const struct of_device_id qcom_sc
+@@ -609,6 +609,9 @@ static const struct of_device_id qcom_sc
  	{ .compatible = "qcom,scm-ipq4019",
  	  .data = NULL, /* no clocks */
  	},
diff --git a/target/linux/ipq806x/patches-4.19/080-ARM-dts-qcom-add-gpio-ranges-property.patch b/target/linux/ipq806x/patches-4.19/080-ARM-dts-qcom-add-gpio-ranges-property.patch
index 500930cfe9036dfc7998dc89925e925a23c2ee80..04cb9b3bb750aa504d422b9a8e101ebe34c4cc4c 100644
--- a/target/linux/ipq806x/patches-4.19/080-ARM-dts-qcom-add-gpio-ranges-property.patch
+++ b/target/linux/ipq806x/patches-4.19/080-ARM-dts-qcom-add-gpio-ranges-property.patch
@@ -60,7 +60,7 @@ will be executed twice with the same parameters for the same pinctrl.
 
 --- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
 +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
-@@ -653,6 +653,7 @@
+@@ -625,6 +625,7 @@
  			reg = <0x800000 0x4000>;
  
  			gpio-controller;