aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-5.4
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/pending-5.4')
-rw-r--r--target/linux/generic/pending-5.4/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch2
-rw-r--r--target/linux/generic/pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch110
-rw-r--r--target/linux/generic/pending-5.4/110-ehci_hcd_ignore_oc.patch2
-rw-r--r--target/linux/generic/pending-5.4/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch2
-rw-r--r--target/linux/generic/pending-5.4/130-add-linux-spidev-compatible-si3210.patch8
-rw-r--r--target/linux/generic/pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch20
-rw-r--r--target/linux/generic/pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch64
-rw-r--r--target/linux/generic/pending-5.4/150-bridge_allow_receiption_on_disabled_port.patch8
-rw-r--r--target/linux/generic/pending-5.4/180-net-phy-at803x-add-support-for-AT8032.patch16
-rw-r--r--target/linux/generic/pending-5.4/201-extra_optimization.patch23
-rw-r--r--target/linux/generic/pending-5.4/203-kallsyms_uncompressed.patch18
-rw-r--r--target/linux/generic/pending-5.4/205-backtrace_module_info.patch12
-rw-r--r--target/linux/generic/pending-5.4/220-optimize_inlining.patch225
-rw-r--r--target/linux/generic/pending-5.4/240-remove-unsane-filenames-from-deps_initramfs-list.patch7
-rw-r--r--target/linux/generic/pending-5.4/261-enable_wilink_platform_without_drivers.patch2
-rw-r--r--target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch4
-rw-r--r--target/linux/generic/pending-5.4/302-mips_no_branch_likely.patch2
-rw-r--r--target/linux/generic/pending-5.4/304-mips_disable_fpu.patch137
-rw-r--r--target/linux/generic/pending-5.4/305-mips_module_reloc.patch10
-rw-r--r--target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch2
-rw-r--r--target/linux/generic/pending-5.4/310-arm_module_unresolved_weak_sym.patch2
-rw-r--r--target/linux/generic/pending-5.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch41
-rw-r--r--target/linux/generic/pending-5.4/332-arc-add-OWRTDTB-section.patch8
-rw-r--r--target/linux/generic/pending-5.4/333-arc-enable-unaligned-access-in-kernel-mode.patch2
-rw-r--r--target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch82
-rw-r--r--target/linux/generic/pending-5.4/342-powerpc-Enable-kernel-XZ-compression-option-on-PPC_8.patch10
-rw-r--r--target/linux/generic/pending-5.4/400-mtd-add-rootfs-split-support.patch12
-rw-r--r--target/linux/generic/pending-5.4/401-mtd-add-support-for-different-partition-parser-types.patch6
-rw-r--r--target/linux/generic/pending-5.4/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch4
-rw-r--r--target/linux/generic/pending-5.4/403-mtd-hook-mtdsplit-to-Kbuild.patch14
-rw-r--r--target/linux/generic/pending-5.4/404-mtd-add-more-helper-functions.patch4
-rw-r--r--target/linux/generic/pending-5.4/411-mtd-partial_eraseblock_write.patch8
-rw-r--r--target/linux/generic/pending-5.4/412-mtd-partial_eraseblock_unlock.patch2
-rw-r--r--target/linux/generic/pending-5.4/419-mtd-redboot-add-of_match_table-with-DT-binding.patch23
-rw-r--r--target/linux/generic/pending-5.4/420-mtd-redboot_space.patch6
-rw-r--r--target/linux/generic/pending-5.4/430-mtd-add-myloader-partition-parser.patch19
-rw-r--r--target/linux/generic/pending-5.4/431-mtd-bcm47xxpart-check-for-bad-blocks-when-calculatin.patch4
-rw-r--r--target/linux/generic/pending-5.4/432-mtd-bcm47xxpart-detect-T_Meter-partition.patch8
-rw-r--r--target/linux/generic/pending-5.4/440-block2mtd_init.patch8
-rw-r--r--target/linux/generic/pending-5.4/441-block2mtd_probe.patch8
-rw-r--r--target/linux/generic/pending-5.4/450-mtd-spi-nor-allow-NOR-driver-to-write-fewer-bytes-th.patch18
-rw-r--r--target/linux/generic/pending-5.4/460-mtd-cfi_cmdset_0002-no-erase_suspend.patch2
-rw-r--r--target/linux/generic/pending-5.4/461-mtd-cfi_cmdset_0002-add-buffer-write-cmd-timeout.patch2
-rw-r--r--target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch6
-rw-r--r--target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch24
-rw-r--r--target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch57
-rw-r--r--target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch34
-rw-r--r--target/linux/generic/pending-5.4/476-mtd-spi-nor-add-eon-en25q128.patch6
-rw-r--r--target/linux/generic/pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch18
-rw-r--r--target/linux/generic/pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch10
-rw-r--r--target/linux/generic/pending-5.4/479-mtd-spi-nor-add-xtx-xt25f128b.patch2
-rw-r--r--target/linux/generic/pending-5.4/480-mtd-set-rootfs-to-be-root-dev.patch8
-rw-r--r--target/linux/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch4
-rw-r--r--target/linux/generic/pending-5.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch4
-rw-r--r--target/linux/generic/pending-5.4/492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch4
-rw-r--r--target/linux/generic/pending-5.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch4
-rw-r--r--target/linux/generic/pending-5.4/494-mtd-ubi-add-EOF-marker-support.patch6
-rw-r--r--target/linux/generic/pending-5.4/495-mtd-core-add-get_mtd_device_by_node.patch4
-rw-r--r--target/linux/generic/pending-5.4/497-mtd-mtdconcat-add-dt-driver-for-concat-devices.patch10
-rw-r--r--target/linux/generic/pending-5.4/530-jffs2_make_lzma_available.patch8
-rw-r--r--target/linux/generic/pending-5.4/532-jffs2_eofdetect.patch2
-rw-r--r--target/linux/generic/pending-5.4/553-ubifs-Add-option-to-create-UBI-FS-version-4-on-empty.patch17
-rw-r--r--target/linux/generic/pending-5.4/600-netfilter_conntrack_flush.patch4
-rw-r--r--target/linux/generic/pending-5.4/610-netfilter_match_bypass_default_checks.patch12
-rw-r--r--target/linux/generic/pending-5.4/611-netfilter_match_bypass_default_table.patch6
-rw-r--r--target/linux/generic/pending-5.4/612-netfilter_match_reduce_memory_access.patch2
-rw-r--r--target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch38
-rw-r--r--target/linux/generic/pending-5.4/616-net_optimize_xfrm_calls.patch2
-rw-r--r--target/linux/generic/pending-5.4/620-net_sched-codel-do-not-defer-queue-length-update.patch8
-rw-r--r--target/linux/generic/pending-5.4/630-packet_socket_type.patch26
-rw-r--r--target/linux/generic/pending-5.4/640-netfilter-nf_flow_table-add-hardware-offload-support.patch68
-rw-r--r--target/linux/generic/pending-5.4/641-netfilter-nf_flow_table-support-hw-offload-through-v.patch10
-rw-r--r--target/linux/generic/pending-5.4/642-net-8021q-support-hardware-flow-table-offload.patch13
-rw-r--r--target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch4
-rw-r--r--target/linux/generic/pending-5.4/644-net-pppoe-support-hardware-flow-table-offload.patch10
-rw-r--r--target/linux/generic/pending-5.4/645-netfilter-nf_flow_table-rework-hardware-offload-time.patch16
-rw-r--r--target/linux/generic/pending-5.4/646-netfilter-nf_flow_table-rework-private-driver-data.patch2
-rw-r--r--target/linux/generic/pending-5.4/655-increase_skb_pad.patch2
-rw-r--r--target/linux/generic/pending-5.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch49
-rw-r--r--target/linux/generic/pending-5.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch80
-rw-r--r--target/linux/generic/pending-5.4/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch4
-rw-r--r--target/linux/generic/pending-5.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch31
-rw-r--r--target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch12
-rw-r--r--target/linux/generic/pending-5.4/703-phy-add-detach-callback-to-struct-phy_driver.patch14
-rw-r--r--target/linux/generic/pending-5.4/735-net-phy-at803x-fix-at8033-sgmii-mode.patch10
-rw-r--r--target/linux/generic/pending-5.4/739-net-avoid-tx-fault-with-Nokia-GPON-module.patch14
-rw-r--r--target/linux/generic/pending-5.4/740-net-sfp-remove-incomplete-100BASE-FX-and-100BASE-LX-.patch4
-rw-r--r--target/linux/generic/pending-5.4/741-net-sfp-derive-interface-mode-from-ethtool-link-mode.patch12
-rw-r--r--target/linux/generic/pending-5.4/742-net-sfp-add-more-extended-compliance-codes.patch12
-rw-r--r--target/linux/generic/pending-5.4/743-net-sfp-add-module-start-stop-upstream-notifications.patch10
-rw-r--r--target/linux/generic/pending-5.4/744-net-sfp-move-phy_start-phy_stop-to-phylink.patch8
-rw-r--r--target/linux/generic/pending-5.4/745-net-mdio-i2c-add-support-for-Clause-45-accesses.patch4
-rw-r--r--target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch8
-rw-r--r--target/linux/generic/pending-5.4/747-net-phylink-support-Clause-45-PHYs-on-SFP-modules.patch20
-rw-r--r--target/linux/generic/pending-5.4/748-net-phylink-split-link_an_mode-configured-and-curren.patch111
-rw-r--r--target/linux/generic/pending-5.4/749-net-phylink-split-phylink_sfp_module_insert.patch40
-rw-r--r--target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch43
-rw-r--r--target/linux/generic/pending-5.4/751-net-phylink-make-Broadcom-BCM84881-based-SFPs-work.patch27
-rw-r--r--target/linux/generic/pending-5.4/752-net-phy-add-Broadcom-BCM84881-PHY-driver.patch76
-rw-r--r--target/linux/generic/pending-5.4/753-net-sfp-add-support-for-Clause-45-PHYs.patch8
-rw-r--r--target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch2
-rw-r--r--target/linux/generic/pending-5.4/755-net-sfp-fix-hwmon.patch4
-rw-r--r--target/linux/generic/pending-5.4/756-net-sfp-use-a-definition-for-the-fault-recovery-atte.patch8
-rw-r--r--target/linux/generic/pending-5.4/757-net-sfp-rename-sm_retries.patch10
-rw-r--r--target/linux/generic/pending-5.4/758-net-sfp-error-handling-for-phy-probe.patch10
-rw-r--r--target/linux/generic/pending-5.4/759-net-sfp-re-attempt-probing-for-phy.patch14
-rw-r--r--target/linux/generic/pending-5.4/810-pci_disable_common_quirks.patch10
-rw-r--r--target/linux/generic/pending-5.4/811-pci_disable_usb_common_quirks.patch12
-rw-r--r--target/linux/generic/pending-5.4/834-ledtrig-libata.patch16
-rw-r--r--target/linux/generic/pending-5.4/920-mangle_bootargs.patch12
110 files changed, 708 insertions, 1405 deletions
diff --git a/target/linux/generic/pending-5.4/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch b/target/linux/generic/pending-5.4/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch
index be9ceebc3a..33eb34c913 100644
--- a/target/linux/generic/pending-5.4/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch
+++ b/target/linux/generic/pending-5.4/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch
@@ -15,7 +15,7 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
--- a/drivers/w1/masters/w1-gpio.c
+++ b/drivers/w1/masters/w1-gpio.c
-@@ -79,7 +79,7 @@ static int w1_gpio_probe(struct platform
+@@ -76,7 +76,7 @@ static int w1_gpio_probe(struct platform
enum gpiod_flags gflags = GPIOD_OUT_LOW_OPEN_DRAIN;
int err;
diff --git a/target/linux/generic/pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch b/target/linux/generic/pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch
deleted file mode 100644
index 6b74c7da1d..0000000000
--- a/target/linux/generic/pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From 852a88f35f4b7e5ebb717fed3c3a3330d5ad4336 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
-Date: Wed, 10 Apr 2019 16:43:27 +0200
-Subject: [PATCH v2] MIPS: perf: ath79: Fix perfcount IRQ assignment
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Currently it's not possible to use perf on ath79 due to genirq flags
-mismatch happening on static virtual IRQ 13 which is used for
-performance counters hardware IRQ 5.
-
-On TP-Link Archer C7v5:
-
- CPU0
- 2: 0 MIPS 2 ath9k
- 4: 318 MIPS 4 19000000.eth
- 7: 55034 MIPS 7 timer
- 8: 1236 MISC 3 ttyS0
- 12: 0 INTC 1 ehci_hcd:usb1
- 13: 0 gpio-ath79 2 keys
- 14: 0 gpio-ath79 5 keys
- 15: 31 AR724X PCI 1 ath10k_pci
-
- $ perf top
- genirq: Flags mismatch irq 13. 00014c83 (mips_perf_pmu) vs. 00002003 (keys)
-
-On TP-Link Archer C7v4:
-
- CPU0
- 4: 0 MIPS 4 19000000.eth
- 5: 7135 MIPS 5 1a000000.eth
- 7: 98379 MIPS 7 timer
- 8: 30 MISC 3 ttyS0
- 12: 90028 INTC 0 ath9k
- 13: 5520 INTC 1 ehci_hcd:usb1
- 14: 4623 INTC 2 ehci_hcd:usb2
- 15: 32844 AR724X PCI 1 ath10k_pci
- 16: 0 gpio-ath79 16 keys
- 23: 0 gpio-ath79 23 keys
-
- $ perf top
- genirq: Flags mismatch irq 13. 00014c80 (mips_perf_pmu) vs. 00000080 (ehci_hcd:usb1)
-
-This problem is happening, because currently statically assigned virtual
-IRQ 13 for performance counters is not claimed during the initialization
-of MIPS PMU during the bootup, so the IRQ subsystem doesn't know, that
-this interrupt isn't available for further use.
-
-So this patch fixes the issue by simply booking hardware IRQ 5 for MIPS PMU.
-
-Tested-by: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
-Signed-off-by: Petr Å tetiar <ynezz@true.cz>
----
-
-Changes since v1:
-
- I've incorporated two comments which I've received on IRC from blogic and
- I've also reworded the commit message to match the changes in v2 of this
- patch.
-
- * use actual hardware perfcount IRQ 5 instead of the virtual IRQ 13
- * dropped the CONFIG_PERF_EVENTS ifdef around irq_create_mapping
-
- arch/mips/ath79/setup.c | 6 ------
- drivers/irqchip/irq-ath79-misc.c | 11 +++++++++++
- 2 files changed, 11 insertions(+), 6 deletions(-)
-
---- a/arch/mips/ath79/setup.c
-+++ b/arch/mips/ath79/setup.c
-@@ -211,12 +211,6 @@ const char *get_system_type(void)
- return ath79_sys_type;
- }
-
--int get_c0_perfcount_int(void)
--{
-- return ATH79_MISC_IRQ(5);
--}
--EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
--
- unsigned int get_c0_compare_int(void)
- {
- return CP0_LEGACY_COMPARE_IRQ;
---- a/drivers/irqchip/irq-ath79-misc.c
-+++ b/drivers/irqchip/irq-ath79-misc.c
-@@ -22,6 +22,15 @@
- #define AR71XX_RESET_REG_MISC_INT_ENABLE 4
-
- #define ATH79_MISC_IRQ_COUNT 32
-+#define ATH79_MISC_PERF_IRQ 5
-+
-+static int ath79_perfcount_irq;
-+
-+int get_c0_perfcount_int(void)
-+{
-+ return ath79_perfcount_irq;
-+}
-+EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
-
- static void ath79_misc_irq_handler(struct irq_desc *desc)
- {
-@@ -113,6 +122,8 @@ static void __init ath79_misc_intc_domai
- {
- void __iomem *base = domain->host_data;
-
-+ ath79_perfcount_irq = irq_create_mapping(domain, ATH79_MISC_PERF_IRQ);
-+
- /* Disable and clear all interrupts */
- __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE);
- __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS);
diff --git a/target/linux/generic/pending-5.4/110-ehci_hcd_ignore_oc.patch b/target/linux/generic/pending-5.4/110-ehci_hcd_ignore_oc.patch
index cad00b5527..3e48a3b597 100644
--- a/target/linux/generic/pending-5.4/110-ehci_hcd_ignore_oc.patch
+++ b/target/linux/generic/pending-5.4/110-ehci_hcd_ignore_oc.patch
@@ -48,7 +48,7 @@ Signed-off-by: Florian Fainelli <florian@openwrt.org>
/*
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
-@@ -208,6 +208,8 @@ static int ehci_platform_probe(struct pl
+@@ -206,6 +206,8 @@ static int ehci_platform_probe(struct pl
hcd->has_tt = 1;
if (pdata->reset_on_resume)
priv->reset_on_resume = true;
diff --git a/target/linux/generic/pending-5.4/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch b/target/linux/generic/pending-5.4/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch
index ec541a865c..c7aa37ec81 100644
--- a/target/linux/generic/pending-5.4/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch
+++ b/target/linux/generic/pending-5.4/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch
@@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
-@@ -6400,7 +6400,7 @@ static void __ref alloc_node_mem_map(str
+@@ -6851,7 +6851,7 @@ static void __ref alloc_node_mem_map(str
mem_map = NODE_DATA(0)->node_mem_map;
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
diff --git a/target/linux/generic/pending-5.4/130-add-linux-spidev-compatible-si3210.patch b/target/linux/generic/pending-5.4/130-add-linux-spidev-compatible-si3210.patch
index 3a42182c97..152d48d4cd 100644
--- a/target/linux/generic/pending-5.4/130-add-linux-spidev-compatible-si3210.patch
+++ b/target/linux/generic/pending-5.4/130-add-linux-spidev-compatible-si3210.patch
@@ -8,10 +8,10 @@ Signed-off-by: Giuseppe Lippolis <giu.lippolis@gmail.com>
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c
-@@ -672,6 +672,7 @@ static const struct of_device_id spidev_
- { .compatible = "lineartechnology,ltc2488" },
- { .compatible = "ge,achc" },
- { .compatible = "semtech,sx1301" },
+@@ -668,6 +668,7 @@ static const struct of_device_id spidev_
+ { .compatible = "lwn,bk4" },
+ { .compatible = "dh,dhcom-board" },
+ { .compatible = "menlo,m53cpld" },
+ { .compatible = "siliconlabs,si3210" },
{},
};
diff --git a/target/linux/generic/pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch b/target/linux/generic/pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch
deleted file mode 100644
index bd5ed6f888..0000000000
--- a/target/linux/generic/pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Subject: spi: use gpio_set_value_cansleep for setting chipselect GPIO
-
-Sleeping is safe inside spi_transfer_one_message, and some GPIO chips
-need to sleep for setting values
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/drivers/spi/spi.c
-+++ b/drivers/spi/spi.c
-@@ -733,7 +733,7 @@ static void spi_set_cs(struct spi_device
- enable = !enable;
-
- if (gpio_is_valid(spi->cs_gpio)) {
-- gpio_set_value(spi->cs_gpio, !enable);
-+ gpio_set_value_cansleep(spi->cs_gpio, !enable);
- /* Some SPI masters need both GPIO CS & slave_select */
- if ((spi->controller->flags & SPI_MASTER_GPIO_SS) &&
- spi->controller->set_cs)
diff --git a/target/linux/generic/pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch b/target/linux/generic/pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch
deleted file mode 100644
index ed94f937c9..0000000000
--- a/target/linux/generic/pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 0f76408d8c1cb0979f4286dd23912e6e59784b35 Mon Sep 17 00:00:00 2001
-From: DENG Qingfang <dqfext@gmail.com>
-Date: Thu, 19 Sep 2019 11:42:55 +0200
-Subject: [PATCH] spi: spi-gpio: fix crash when num-chipselects is 0
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If an spi-gpio was specified with num-chipselects = <0> in dts, kernel will crash:
-
-Unable to handle kernel paging request at virtual address 32697073
-pgd = (ptrval)
-[32697073] *pgd=00000000
-Internal error: Oops: 5 [# 1] SMP ARM
-Modules linked in:
-CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.19.72 #0
-Hardware name: Generic DT based system
-PC is at validate_desc+0x28/0x80
-LR is at gpiod_direction_output+0x14/0x128
-...
-[<c0544db4>] (validate_desc) from [<c0545228>] (gpiod_direction_output+0x14/0x128)
-[<c0545228>] (gpiod_direction_output) from [<c05fa714>] (spi_gpio_setup+0x58/0x64)
-[<c05fa714>] (spi_gpio_setup) from [<c05f7258>] (spi_setup+0x12c/0x148)
-[<c05f7258>] (spi_setup) from [<c05f7330>] (spi_add_device+0xbc/0x12c)
-[<c05f7330>] (spi_add_device) from [<c05f7f74>] (spi_register_controller+0x838/0x924)
-[<c05f7f74>] (spi_register_controller) from [<c05fa494>] (spi_bitbang_start+0x108/0x120)
-[<c05fa494>] (spi_bitbang_start) from [<c05faa34>] (spi_gpio_probe+0x314/0x338)
-[<c05faa34>] (spi_gpio_probe) from [<c05a844c>] (platform_drv_probe+0x34/0x70)
-
-The cause is spi_gpio_setup() did not check if the spi-gpio has chipselect pins
-before setting their direction and results in derefing an invalid pointer.
-
-The bug is spotted in kernel 4.19.72 on OpenWrt, and does not occur in 4.14.
-
-There is a similar fix upstream 249e2632dcd0509b8f8f296f5aabf4d48dfd6da8.
-
-Ref: https://patchwork.kernel.org/patch/11150619/
-Cc: Linus Walleij <linus.walleij@linaro.org>
-Cc: stable@vger.kernel.org
-Signed-off-by: DENG Qingfang <dqfext@gmail.com>
-Signed-off-by: Petr Å tetiar <ynezz@true.cz>
----
- drivers/spi/spi-gpio.c | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
---- a/drivers/spi/spi-gpio.c
-+++ b/drivers/spi/spi-gpio.c
-@@ -242,10 +242,12 @@ static int spi_gpio_setup(struct spi_dev
- * The CS GPIOs have already been
- * initialized from the descriptor lookup.
- */
-- cs = spi_gpio->cs_gpios[spi->chip_select];
-- if (!spi->controller_state && cs)
-- status = gpiod_direction_output(cs,
-- !(spi->mode & SPI_CS_HIGH));
-+ if (spi_gpio->has_cs) {
-+ cs = spi_gpio->cs_gpios[spi->chip_select];
-+ if (!spi->controller_state && cs)
-+ status = gpiod_direction_output(cs,
-+ !(spi->mode & SPI_CS_HIGH));
-+ }
-
- if (!status)
- status = spi_bitbang_setup(spi);
diff --git a/target/linux/generic/pending-5.4/150-bridge_allow_receiption_on_disabled_port.patch b/target/linux/generic/pending-5.4/150-bridge_allow_receiption_on_disabled_port.patch
index 583c34a448..c63268ece9 100644
--- a/target/linux/generic/pending-5.4/150-bridge_allow_receiption_on_disabled_port.patch
+++ b/target/linux/generic/pending-5.4/150-bridge_allow_receiption_on_disabled_port.patch
@@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
-@@ -193,6 +193,9 @@ static void __br_handle_local_finish(str
+@@ -190,6 +190,9 @@ static void __br_handle_local_finish(str
/* note: already called with rcu_read_lock */
static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
{
@@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
__br_handle_local_finish(skb);
/* return 1 to signal the okfn() was called so it's ok to use the skb */
-@@ -289,6 +292,17 @@ rx_handler_result_t br_handle_frame(stru
+@@ -340,6 +343,17 @@ rx_handler_result_t br_handle_frame(stru
forward:
switch (p->state) {
@@ -41,5 +41,5 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ break;
+
case BR_STATE_FORWARDING:
- rhook = rcu_dereference(br_should_route_hook);
- if (rhook) {
+ case BR_STATE_LEARNING:
+ if (ether_addr_equal(p->br->dev->dev_addr, dest))
diff --git a/target/linux/generic/pending-5.4/180-net-phy-at803x-add-support-for-AT8032.patch b/target/linux/generic/pending-5.4/180-net-phy-at803x-add-support-for-AT8032.patch
index e496301e4e..9b88282442 100644
--- a/target/linux/generic/pending-5.4/180-net-phy-at803x-add-support-for-AT8032.patch
+++ b/target/linux/generic/pending-5.4/180-net-phy-at803x-add-support-for-AT8032.patch
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
-@@ -62,8 +62,10 @@
+@@ -64,8 +64,10 @@
#define ATH8030_PHY_ID 0x004dd076
#define ATH8031_PHY_ID 0x004dd074
@@ -19,16 +19,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
MODULE_DESCRIPTION("Atheros 803x PHY driver");
MODULE_AUTHOR("Matus Ujhelyi");
-@@ -308,7 +310,7 @@ static void at803x_link_change_notify(st
- struct at803x_priv *priv = phydev->priv;
-
+@@ -314,7 +316,7 @@ static int at803x_config_intr(struct phy
+ static void at803x_link_change_notify(struct phy_device *phydev)
+ {
/*
- * Conduct a hardware reset for AT8030 every time a link loss is
+ * Conduct a hardware reset for AT8030/2 every time a link loss is
* signalled. This is necessary to circumvent a hardware bug that
* occurs when the cable is unplugged while TX packets are pending
* in the FIFO. In such cases, the FIFO enters an error mode it
-@@ -414,6 +416,24 @@ static struct phy_driver at803x_driver[]
+@@ -471,6 +473,24 @@ static struct phy_driver at803x_driver[]
.aneg_done = at803x_aneg_done,
.ack_interrupt = &at803x_ack_interrupt,
.config_intr = &at803x_config_intr,
@@ -44,8 +44,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ .get_wol = at803x_get_wol,
+ .suspend = at803x_suspend,
+ .resume = at803x_resume,
-+ .features = PHY_BASIC_FEATURES,
-+ .flags = PHY_HAS_INTERRUPT,
++ /* PHY_BASIC_FEATURES */
++ .read_status = at803x_read_status,
+ .config_aneg = genphy_config_aneg,
+ .read_status = genphy_read_status,
+ .ack_interrupt = at803x_ack_interrupt,
@@ -53,7 +53,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
} };
module_phy_driver(at803x_driver);
-@@ -421,6 +441,7 @@ module_phy_driver(at803x_driver);
+@@ -478,6 +498,7 @@ module_phy_driver(at803x_driver);
static struct mdio_device_id __maybe_unused atheros_tbl[] = {
{ ATH8030_PHY_ID, AT803X_PHY_ID_MASK },
{ ATH8031_PHY_ID, AT803X_PHY_ID_MASK },
diff --git a/target/linux/generic/pending-5.4/201-extra_optimization.patch b/target/linux/generic/pending-5.4/201-extra_optimization.patch
index cafccd42c9..79a01ed532 100644
--- a/target/linux/generic/pending-5.4/201-extra_optimization.patch
+++ b/target/linux/generic/pending-5.4/201-extra_optimization.patch
@@ -14,19 +14,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/Makefile
+++ b/Makefile
-@@ -657,12 +657,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni
+@@ -702,11 +702,11 @@ KBUILD_CFLAGS += $(call cc-disable-warni
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
- ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
--KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
-+KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) $(EXTRA_OPTIMIZATION)
- else
- ifdef CONFIG_PROFILE_ALL_BRANCHES
--KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
-+KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,) $(EXTRA_OPTIMIZATION)
- else
--KBUILD_CFLAGS += -O2
-+KBUILD_CFLAGS += -O2 -fno-reorder-blocks -fno-tree-ch $(EXTRA_OPTIMIZATION)
- endif
+ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
+-KBUILD_CFLAGS += -O2
++KBUILD_CFLAGS += -O2 $(EXTRA_OPTIMIZATION)
+ else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
+-KBUILD_CFLAGS += -O3
++KBUILD_CFLAGS += -O3 $(EXTRA_OPTIMIZATION)
+ else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
+-KBUILD_CFLAGS += -Os
++KBUILD_CFLAGS += -Os -fno-reorder-blocks -fno-tree-ch $(EXTRA_OPTIMIZATION)
endif
+ ifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
diff --git a/target/linux/generic/pending-5.4/203-kallsyms_uncompressed.patch b/target/linux/generic/pending-5.4/203-kallsyms_uncompressed.patch
index 9230279fca..28fde77cda 100644
--- a/target/linux/generic/pending-5.4/203-kallsyms_uncompressed.patch
+++ b/target/linux/generic/pending-5.4/203-kallsyms_uncompressed.patch
@@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1149,6 +1149,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
+@@ -1315,6 +1315,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
the unaligned access emulation.
see arch/parisc/kernel/unaligned.c for reference
@@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
-@@ -74,6 +74,11 @@ static unsigned int kallsyms_expand_symb
+@@ -75,6 +75,11 @@ static unsigned int kallsyms_expand_symb
* For every byte on the compressed symbol data, copy the table
* entry for that byte.
*/
@@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
while (len) {
tptr = &kallsyms_token_table[kallsyms_token_index[*data]];
data++;
-@@ -106,6 +111,9 @@ tail:
+@@ -107,6 +112,9 @@ tail:
*/
static char kallsyms_get_symbol_type(unsigned int off)
{
@@ -57,7 +57,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
* and return the first char from this token.
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
-@@ -61,6 +61,7 @@ static struct addr_range percpu_range =
+@@ -59,6 +59,7 @@ static struct addr_range percpu_range =
static struct sym_entry *table;
static unsigned int table_size, table_cnt;
static int all_symbols = 0;
@@ -65,7 +65,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int absolute_percpu = 0;
static int base_relative = 0;
-@@ -442,6 +443,9 @@ static void write_src(void)
+@@ -440,6 +441,9 @@ static void write_src(void)
free(markers);
@@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
output_label("kallsyms_token_table");
off = 0;
for (i = 0; i < 256; i++) {
-@@ -502,6 +506,9 @@ static void *find_token(unsigned char *s
+@@ -500,6 +504,9 @@ static void *find_token(unsigned char *s
{
int i;
@@ -85,7 +85,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
for (i = 0; i < len - 1; i++) {
if (str[i] == token[0] && str[i+1] == token[1])
return &str[i];
-@@ -574,6 +581,9 @@ static void optimize_result(void)
+@@ -572,6 +579,9 @@ static void optimize_result(void)
{
int i, best;
@@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* using the '\0' symbol last allows compress_symbols to use standard
* fast string functions */
for (i = 255; i >= 0; i--) {
-@@ -756,6 +766,8 @@ int main(int argc, char **argv)
+@@ -751,6 +761,8 @@ int main(int argc, char **argv)
absolute_percpu = 1;
else if (strcmp(argv[i], "--base-relative") == 0)
base_relative = 1;
@@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
}
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
-@@ -133,6 +133,10 @@ kallsyms()
+@@ -152,6 +152,10 @@ kallsyms()
kallsymopt="${kallsymopt} --base-relative"
fi
diff --git a/target/linux/generic/pending-5.4/205-backtrace_module_info.patch b/target/linux/generic/pending-5.4/205-backtrace_module_info.patch
index 5671173d45..857db9a930 100644
--- a/target/linux/generic/pending-5.4/205-backtrace_module_info.patch
+++ b/target/linux/generic/pending-5.4/205-backtrace_module_info.patch
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
-@@ -681,8 +681,10 @@ char *symbol_string(char *buf, char *end
+@@ -907,8 +907,10 @@ char *symbol_string(char *buf, char *end
struct printf_spec spec, const char *fmt)
{
unsigned long value;
@@ -23,16 +23,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#endif
if (fmt[1] == 'R')
-@@ -696,11 +698,16 @@ char *symbol_string(char *buf, char *end
- sprint_symbol(sym, value);
- else
- sprint_symbol_no_offset(sym, value);
--
-- return string(buf, end, sym, spec);
+@@ -925,8 +927,14 @@ char *symbol_string(char *buf, char *end
+
+ return string_nocheck(buf, end, sym, spec);
#else
- return special_hex_number(buf, end, value, sizeof(void *));
+ len = snprintf(sym, sizeof(sym), "0x%lx", value);
-+
+ mod = __module_address(value);
+ if (mod)
+ snprintf(sym + len, sizeof(sym) - len, " [%s@%p+0x%x]",
diff --git a/target/linux/generic/pending-5.4/220-optimize_inlining.patch b/target/linux/generic/pending-5.4/220-optimize_inlining.patch
deleted file mode 100644
index ae032709d2..0000000000
--- a/target/linux/generic/pending-5.4/220-optimize_inlining.patch
+++ /dev/null
@@ -1,225 +0,0 @@
---- a/arch/arm/kernel/atags.h
-+++ b/arch/arm/kernel/atags.h
-@@ -5,7 +5,7 @@ void convert_to_tag_list(struct tag *tag
- const struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer,
- unsigned int machine_nr);
- #else
--static inline const struct machine_desc *
-+static inline const struct machine_desc * __init __noreturn
- setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr)
- {
- early_print("no ATAGS support: can't continue\n");
---- a/arch/arm64/include/asm/cpufeature.h
-+++ b/arch/arm64/include/asm/cpufeature.h
-@@ -366,7 +366,7 @@ static inline bool cpu_have_feature(unsi
- }
-
- /* System capability check for constant caps */
--static inline bool __cpus_have_const_cap(int num)
-+static __always_inline bool __cpus_have_const_cap(int num)
- {
- if (num >= ARM64_NCAPS)
- return false;
-@@ -380,7 +380,7 @@ static inline bool cpus_have_cap(unsigne
- return test_bit(num, cpu_hwcaps);
- }
-
--static inline bool cpus_have_const_cap(int num)
-+static __always_inline bool cpus_have_const_cap(int num)
- {
- if (static_branch_likely(&arm64_const_caps_ready))
- return __cpus_have_const_cap(num);
---- a/arch/mips/include/asm/bitops.h
-+++ b/arch/mips/include/asm/bitops.h
-@@ -463,7 +463,7 @@ static inline void __clear_bit_unlock(un
- * Return the bit position (0..63) of the most significant 1 bit in a word
- * Returns -1 if no 1 bit exists
- */
--static inline unsigned long __fls(unsigned long word)
-+static __always_inline unsigned long __fls(unsigned long word)
- {
- int num;
-
-@@ -529,7 +529,7 @@ static inline unsigned long __fls(unsign
- * Returns 0..SZLONG-1
- * Undefined if no bit exists, so code should check against 0 first.
- */
--static inline unsigned long __ffs(unsigned long word)
-+static __always_inline unsigned long __ffs(unsigned long word)
- {
- return __fls(word & -word);
- }
---- a/arch/mips/kernel/cpu-bugs64.c
-+++ b/arch/mips/kernel/cpu-bugs64.c
-@@ -42,8 +42,8 @@ static inline void align_mod(const int a
- : GCC_IMM_ASM() (align), GCC_IMM_ASM() (mod));
- }
-
--static inline void mult_sh_align_mod(long *v1, long *v2, long *w,
-- const int align, const int mod)
-+static __always_inline void mult_sh_align_mod(long *v1, long *v2, long *w,
-+ const int align, const int mod)
- {
- unsigned long flags;
- int m1, m2;
---- a/arch/powerpc/kernel/prom_init.c
-+++ b/arch/powerpc/kernel/prom_init.c
-@@ -498,14 +498,14 @@ static int __init prom_next_node(phandle
- }
- }
-
--static inline int prom_getprop(phandle node, const char *pname,
-- void *value, size_t valuelen)
-+static inline int __init prom_getprop(phandle node, const char *pname,
-+ void *value, size_t valuelen)
- {
- return call_prom("getprop", 4, 1, node, ADDR(pname),
- (u32)(unsigned long) value, (u32) valuelen);
- }
-
--static inline int prom_getproplen(phandle node, const char *pname)
-+static inline int __init prom_getproplen(phandle node, const char *pname)
- {
- return call_prom("getproplen", 2, 1, node, ADDR(pname));
- }
---- a/arch/powerpc/mm/tlb-radix.c
-+++ b/arch/powerpc/mm/tlb-radix.c
-@@ -90,8 +90,8 @@ void radix__tlbiel_all(unsigned int acti
- asm volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory");
- }
-
--static inline void __tlbiel_pid(unsigned long pid, int set,
-- unsigned long ric)
-+static __always_inline void __tlbiel_pid(unsigned long pid, int set,
-+ unsigned long ric)
- {
- unsigned long rb,rs,prs,r;
-
-@@ -106,7 +106,7 @@ static inline void __tlbiel_pid(unsigned
- trace_tlbie(0, 1, rb, rs, ric, prs, r);
- }
-
--static inline void __tlbie_pid(unsigned long pid, unsigned long ric)
-+static __always_inline void __tlbie_pid(unsigned long pid, unsigned long ric)
- {
- unsigned long rb,rs,prs,r;
-
-@@ -136,7 +136,7 @@ static inline void __tlbiel_lpid(unsigne
- trace_tlbie(lpid, 1, rb, rs, ric, prs, r);
- }
-
--static inline void __tlbie_lpid(unsigned long lpid, unsigned long ric)
-+static __always_inline void __tlbie_lpid(unsigned long lpid, unsigned long ric)
- {
- unsigned long rb,rs,prs,r;
-
-@@ -300,7 +300,7 @@ static inline void fixup_tlbie_lpid(unsi
- /*
- * We use 128 set in radix mode and 256 set in hpt mode.
- */
--static inline void _tlbiel_pid(unsigned long pid, unsigned long ric)
-+static __always_inline void _tlbiel_pid(unsigned long pid, unsigned long ric)
- {
- int set;
-
-@@ -983,7 +983,7 @@ void radix__tlb_flush(struct mmu_gather
- tlb->need_flush_all = 0;
- }
-
--static inline void __radix__flush_tlb_range_psize(struct mm_struct *mm,
-+static __always_inline void __radix__flush_tlb_range_psize(struct mm_struct *mm,
- unsigned long start, unsigned long end,
- int psize, bool also_pwc)
- {
---- a/arch/s390/include/asm/cpacf.h
-+++ b/arch/s390/include/asm/cpacf.h
-@@ -202,7 +202,7 @@ static inline int __cpacf_check_opcode(u
- }
- }
-
--static inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
-+static __always_inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
- {
- if (__cpacf_check_opcode(opcode)) {
- __cpacf_query(opcode, mask);
---- a/arch/x86/Kconfig.debug
-+++ b/arch/x86/Kconfig.debug
-@@ -276,20 +276,6 @@ config CPA_DEBUG
- ---help---
- Do change_page_attr() self-tests every 30 seconds.
-
--config OPTIMIZE_INLINING
-- bool "Allow gcc to uninline functions marked 'inline'"
-- ---help---
-- This option determines if the kernel forces gcc to inline the functions
-- developers have marked 'inline'. Doing so takes away freedom from gcc to
-- do what it thinks is best, which is desirable for the gcc 3.x series of
-- compilers. The gcc 4.x series have a rewritten inlining algorithm and
-- enabling this option will generate a smaller kernel there. Hopefully
-- this algorithm is so good that allowing gcc 4.x and above to make the
-- decision will become the default in the future. Until then this option
-- is there to test gcc for this.
--
-- If unsure, say N.
--
- config DEBUG_ENTRY
- bool "Debug low-level entry code"
- depends on DEBUG_KERNEL
---- a/drivers/mtd/nand/raw/vf610_nfc.c
-+++ b/drivers/mtd/nand/raw/vf610_nfc.c
-@@ -373,7 +373,7 @@ static int vf610_nfc_cmd(struct nand_chi
- {
- const struct nand_op_instr *instr;
- struct vf610_nfc *nfc = chip_to_nfc(chip);
-- int op_id = -1, trfr_sz = 0, offset;
-+ int op_id = -1, trfr_sz = 0, offset = 0;
- u32 col = 0, row = 0, cmd1 = 0, cmd2 = 0, code = 0;
- bool force8bit = false;
-
---- a/lib/Kconfig.debug
-+++ b/lib/Kconfig.debug
-@@ -309,6 +309,20 @@ config HEADERS_CHECK
- exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in
- your build tree), to make sure they're suitable.
-
-+config OPTIMIZE_INLINING
-+ bool "Allow compiler to uninline functions marked 'inline'"
-+ help
-+ This option determines if the kernel forces gcc to inline the functions
-+ developers have marked 'inline'. Doing so takes away freedom from gcc to
-+ do what it thinks is best, which is desirable for the gcc 3.x series of
-+ compilers. The gcc 4.x series have a rewritten inlining algorithm and
-+ enabling this option will generate a smaller kernel there. Hopefully
-+ this algorithm is so good that allowing gcc 4.x and above to make the
-+ decision will become the default in the future. Until then this option
-+ is there to test gcc for this.
-+
-+ If unsure, say N.
-+
- config DEBUG_SECTION_MISMATCH
- bool "Enable full Section mismatch analysis"
- help
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -306,9 +306,6 @@ config ZONE_DMA32
- config AUDIT_ARCH
- def_bool y if X86_64
-
--config ARCH_SUPPORTS_OPTIMIZED_INLINING
-- def_bool y
--
- config ARCH_SUPPORTS_DEBUG_PAGEALLOC
- def_bool y
-
---- a/include/linux/compiler_types.h
-+++ b/include/linux/compiler_types.h
-@@ -268,8 +268,7 @@ struct ftrace_likely_data {
- * of extern inline functions at link time.
- * A lot of inline functions can cause havoc with function tracing.
- */
--#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
-- !defined(CONFIG_OPTIMIZE_INLINING)
-+#if !defined(CONFIG_OPTIMIZE_INLINING)
- #define inline \
- inline __attribute__((always_inline, unused)) notrace __gnu_inline
- #else
diff --git a/target/linux/generic/pending-5.4/240-remove-unsane-filenames-from-deps_initramfs-list.patch b/target/linux/generic/pending-5.4/240-remove-unsane-filenames-from-deps_initramfs-list.patch
index c0dfe49c9b..7d890d3e8b 100644
--- a/target/linux/generic/pending-5.4/240-remove-unsane-filenames-from-deps_initramfs-list.patch
+++ b/target/linux/generic/pending-5.4/240-remove-unsane-filenames-from-deps_initramfs-list.patch
@@ -18,7 +18,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/usr/Makefile
+++ b/usr/Makefile
-@@ -42,20 +42,22 @@ ifneq ($(wildcard $(obj)/$(datafile_d_y)
+@@ -42,21 +42,23 @@ ifneq ($(wildcard $(obj)/$(datafile_d_y)
include $(obj)/$(datafile_d_y)
endif
@@ -36,11 +36,12 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-$(deps_initramfs): klibcdirs
+$(deps_initramfs_sane): klibcdirs
# We rebuild initramfs_data.cpio if:
- # 1) Any included file is newer then initramfs_data.cpio
+ # 1) Any included file is newer than initramfs_data.cpio
# 2) There are changes in which files are included (added or deleted)
# 3) If gen_init_cpio are newer than initramfs_data.cpio
- # 4) arguments to gen_initramfs.sh changes
+ # 4) Arguments to gen_initramfs.sh changes
-$(obj)/$(datafile_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
+$(obj)/$(datafile_y): $(obj)/gen_init_cpio $(deps_initramfs_sane) klibcdirs
$(Q)$(initramfs) -l $(ramfs-input) > $(obj)/$(datafile_d_y)
$(call if_changed,initfs)
+
diff --git a/target/linux/generic/pending-5.4/261-enable_wilink_platform_without_drivers.patch b/target/linux/generic/pending-5.4/261-enable_wilink_platform_without_drivers.patch
index 9955ab3c0b..c4cf2cceb7 100644
--- a/target/linux/generic/pending-5.4/261-enable_wilink_platform_without_drivers.patch
+++ b/target/linux/generic/pending-5.4/261-enable_wilink_platform_without_drivers.patch
@@ -9,7 +9,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
--- a/drivers/net/wireless/ti/Kconfig
+++ b/drivers/net/wireless/ti/Kconfig
-@@ -19,7 +19,7 @@ source "drivers/net/wireless/ti/wlcore/K
+@@ -20,7 +20,7 @@ source "drivers/net/wireless/ti/wlcore/K
config WILINK_PLATFORM_DATA
bool "TI WiLink platform data"
diff --git a/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch b/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch
index e19cec1400..f6fdabe608 100644
--- a/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch
+++ b/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch
@@ -9,7 +9,7 @@ Acked-by: Rob Landley <rob@landley.net>
---
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1063,9 +1063,6 @@ config FW_ARC
+@@ -1066,9 +1066,6 @@ config FW_ARC
config ARCH_MAY_HAVE_PC_FDC
bool
@@ -19,7 +19,7 @@ Acked-by: Rob Landley <rob@landley.net>
config CEVT_BCM1480
bool
-@@ -2969,6 +2966,18 @@ choice
+@@ -3040,6 +3037,18 @@ choice
bool "Extend builtin kernel arguments with bootloader arguments"
endchoice
diff --git a/target/linux/generic/pending-5.4/302-mips_no_branch_likely.patch b/target/linux/generic/pending-5.4/302-mips_no_branch_likely.patch
index 6192c417d3..bf1b489111 100644
--- a/target/linux/generic/pending-5.4/302-mips_no_branch_likely.patch
+++ b/target/linux/generic/pending-5.4/302-mips_no_branch_likely.patch
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
-@@ -91,7 +91,7 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
+@@ -92,7 +92,7 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
# machines may also. Since BFD is incredibly buggy with respect to
# crossformat linking we rely on the elf2ecoff tool for format conversion.
#
diff --git a/target/linux/generic/pending-5.4/304-mips_disable_fpu.patch b/target/linux/generic/pending-5.4/304-mips_disable_fpu.patch
deleted file mode 100644
index 332bb71e22..0000000000
--- a/target/linux/generic/pending-5.4/304-mips_disable_fpu.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From: Manuel Lauss <manuel.lauss@gmail.com>
-Subject: [RFC PATCH v4 2/2] MIPS: make FPU emulator optional
-
-This small patch makes the MIPS FPU emulator optional. The kernel
-kills float-users on systems without a hardware FPU by sending a SIGILL.
-
-Disabling the emulator shrinks vmlinux by about 54kBytes (32bit,
-optimizing for size).
-
-Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
----
-v4: rediffed because of patch 1/2, should now work with micromips as well
-v3: updated patch description with size savings.
-v2: incorporated changes suggested by Jonas Gorski
- force the fpu emulator on for micromips: relocating the parts
- of the mmips code in the emulator to other areas would be a
- much larger change; I went the cheap route instead with this.
-
- arch/mips/Kbuild | 2 +-
- arch/mips/Kconfig | 14 ++++++++++++++
- arch/mips/include/asm/fpu.h | 5 +++--
- arch/mips/include/asm/fpu_emulator.h | 15 +++++++++++++++
- 4 files changed, 33 insertions(+), 3 deletions(-)
-
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -2893,6 +2893,20 @@ config MIPS_O32_FP64_SUPPORT
-
- If unsure, say N.
-
-+config MIPS_FPU_EMULATOR
-+ bool "MIPS FPU Emulator"
-+ default y
-+ help
-+ This option lets you disable the built-in MIPS FPU (Coprocessor 1)
-+ emulator, which handles floating-point instructions on processors
-+ without a hardware FPU. It is generally a good idea to keep the
-+ emulator built-in, unless you are perfectly sure you have a
-+ complete soft-float environment. With the emulator disabled, all
-+ users of float operations will be killed with an illegal instr-
-+ uction exception.
-+
-+ Say Y, please.
-+
- config USE_OF
- bool
- select OF
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -323,7 +323,7 @@ OBJCOPYFLAGS += --remove-section=.regin
- head-y := arch/mips/kernel/head.o
-
- libs-y += arch/mips/lib/
--libs-y += arch/mips/math-emu/
-+libs-$(CONFIG_MIPS_FPU_EMULATOR) += arch/mips/math-emu/
-
- # See arch/mips/Kbuild for content of core part of the kernel
- core-y += arch/mips/
---- a/arch/mips/include/asm/fpu.h
-+++ b/arch/mips/include/asm/fpu.h
-@@ -230,8 +230,10 @@ static inline int init_fpu(void)
- /* Restore FRE */
- write_c0_config5(config5);
- enable_fpu_hazard();
-- } else
-+ } else if (IS_ENABLED(CONFIG_MIPS_FPU_EMULATOR))
- fpu_emulator_init_fpu();
-+ else
-+ ret = SIGILL;
-
- return ret;
- }
---- a/arch/mips/include/asm/fpu_emulator.h
-+++ b/arch/mips/include/asm/fpu_emulator.h
-@@ -30,6 +30,7 @@
- #include <asm/local.h>
- #include <asm/processor.h>
-
-+#ifdef CONFIG_MIPS_FPU_EMULATOR
- #ifdef CONFIG_DEBUG_FS
-
- struct mips_fpu_emulator_stats {
-@@ -179,6 +180,16 @@ do { \
- extern int fpu_emulator_cop1Handler(struct pt_regs *xcp,
- struct mips_fpu_struct *ctx, int has_fpu,
- void __user **fault_addr);
-+#else /* no CONFIG_MIPS_FPU_EMULATOR */
-+static inline int fpu_emulator_cop1Handler(struct pt_regs *xcp,
-+ struct mips_fpu_struct *ctx, int has_fpu,
-+ void __user **fault_addr)
-+{
-+ *fault_addr = NULL;
-+ return SIGILL; /* we don't speak MIPS FPU */
-+}
-+#endif /* CONFIG_MIPS_FPU_EMULATOR */
-+
- void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
- struct task_struct *tsk);
- int process_fpemu_return(int sig, void __user *fault_addr,
---- a/arch/mips/include/asm/dsemul.h
-+++ b/arch/mips/include/asm/dsemul.h
-@@ -41,6 +41,7 @@ struct task_struct;
- extern int mips_dsemul(struct pt_regs *regs, mips_instruction ir,
- unsigned long branch_pc, unsigned long cont_pc);
-
-+#ifdef CONFIG_MIPS_FPU_EMULATOR
- /**
- * do_dsemulret() - Return from a delay slot 'emulation' frame
- * @xcp: User thread register context.
-@@ -88,5 +89,27 @@ extern bool dsemul_thread_rollback(struc
- * before @mm is freed in order to avoid memory leaks.
- */
- extern void dsemul_mm_cleanup(struct mm_struct *mm);
-+#else
-+static inline bool do_dsemulret(struct pt_regs *xcp)
-+{
-+ return false;
-+}
-+
-+static inline bool dsemul_thread_cleanup(struct task_struct *tsk)
-+{
-+ return false;
-+}
-+
-+static inline bool dsemul_thread_rollback(struct pt_regs *regs)
-+{
-+ return false;
-+}
-+
-+static inline void dsemul_mm_cleanup(struct mm_struct *mm)
-+{
-+
-+}
-+
-+#endif
-
- #endif /* __MIPS_ASM_DSEMUL_H__ */
diff --git a/target/linux/generic/pending-5.4/305-mips_module_reloc.patch b/target/linux/generic/pending-5.4/305-mips_module_reloc.patch
index a8e4e78c91..40a219f5d2 100644
--- a/target/linux/generic/pending-5.4/305-mips_module_reloc.patch
+++ b/target/linux/generic/pending-5.4/305-mips_module_reloc.patch
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
-@@ -94,8 +94,18 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
+@@ -95,8 +95,18 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
cflags-y += -G 0 -mno-abicalls -fno-pic -pipe -mno-branch-likely
cflags-y += -msoft-float
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
@@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
typedef uint8_t Elf64_Byte; /* Type for a 8-bit quantity. */
--- a/arch/mips/kernel/module.c
+++ b/arch/mips/kernel/module.c
-@@ -44,14 +44,221 @@ struct mips_hi16 {
+@@ -32,14 +32,221 @@ struct mips_hi16 {
static LIST_HEAD(dbe_list);
static DEFINE_SPINLOCK(dbe_lock);
@@ -269,7 +269,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int apply_r_mips_none(struct module *me, u32 *location,
u32 base, Elf_Addr v, bool rela)
-@@ -67,9 +274,40 @@ static int apply_r_mips_32(struct module
+@@ -55,9 +262,40 @@ static int apply_r_mips_32(struct module
return 0;
}
@@ -310,7 +310,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (v % 4) {
pr_err("module %s: dangerous R_MIPS_26 relocation\n",
me->name);
-@@ -77,13 +315,17 @@ static int apply_r_mips_26(struct module
+@@ -65,13 +303,17 @@ static int apply_r_mips_26(struct module
}
if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
@@ -332,7 +332,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return 0;
}
-@@ -459,9 +701,36 @@ int module_finalize(const Elf_Ehdr *hdr,
+@@ -447,9 +689,36 @@ int module_finalize(const Elf_Ehdr *hdr,
list_add(&me->arch.dbe_list, &dbe_list);
spin_unlock_irq(&dbe_lock);
}
diff --git a/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch b/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch
index e73cfd61b3..4e6b7b5cd3 100644
--- a/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch
+++ b/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch
@@ -77,7 +77,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- strnlen_user.o uncached.o
+ strnlen_user.o uncached.o memcmp.o
- obj-y += iomap.o iomap_copy.o
+ obj-y += iomap_copy.o
obj-$(CONFIG_PCI) += iomap-pci.o
--- /dev/null
+++ b/arch/mips/lib/memcmp.c
diff --git a/target/linux/generic/pending-5.4/310-arm_module_unresolved_weak_sym.patch b/target/linux/generic/pending-5.4/310-arm_module_unresolved_weak_sym.patch
index bc9f0a4c4d..24807f78d3 100644
--- a/target/linux/generic/pending-5.4/310-arm_module_unresolved_weak_sym.patch
+++ b/target/linux/generic/pending-5.4/310-arm_module_unresolved_weak_sym.patch
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/arch/arm/kernel/module.c
+++ b/arch/arm/kernel/module.c
-@@ -95,6 +95,10 @@ apply_relocate(Elf32_Shdr *sechdrs, cons
+@@ -99,6 +99,10 @@ apply_relocate(Elf32_Shdr *sechdrs, cons
return -ENOEXEC;
}
diff --git a/target/linux/generic/pending-5.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch b/target/linux/generic/pending-5.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch
index 44d85b5b86..a182684c16 100644
--- a/target/linux/generic/pending-5.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch
+++ b/target/linux/generic/pending-5.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch
@@ -11,9 +11,9 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
--- a/arch/mips/kernel/machine_kexec.c
+++ b/arch/mips/kernel/machine_kexec.c
-@@ -10,14 +10,11 @@
- #include <linux/mm.h>
+@@ -9,14 +9,11 @@
#include <linux/delay.h>
+ #include <linux/libfdt.h>
+#include <asm/bootinfo.h>
#include <asm/cacheflush.h>
@@ -27,11 +27,11 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
+#include <linux/uaccess.h>
+#include "machine_kexec.h"
- int (*_machine_kexec_prepare)(struct kimage *) = NULL;
+ static unsigned long reboot_code_buffer;
+
+@@ -30,6 +27,101 @@ void (*_crash_smp_send_stop)(void) = NUL
void (*_machine_kexec_shutdown)(void) = NULL;
-@@ -28,6 +25,101 @@ atomic_t kexec_ready_to_reboot = ATOMIC_
- void (*_crash_smp_send_stop)(void) = NULL;
- #endif
+ void (*_machine_crash_shutdown)(struct pt_regs *regs) = NULL;
+static void machine_kexec_print_args(void)
+{
@@ -131,9 +131,9 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
static void kexec_image_info(const struct kimage *kimage)
{
unsigned long i;
-@@ -52,6 +144,18 @@ int
- machine_kexec_prepare(struct kimage *kimage)
- {
+@@ -99,6 +191,18 @@ machine_kexec_prepare(struct kimage *kim
+ #endif
+
kexec_image_info(kimage);
+ /*
+ * Whenever arguments passed from kexec-tools, Init the arguments as
@@ -150,7 +150,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
if (_machine_kexec_prepare)
return _machine_kexec_prepare(kimage);
-@@ -89,10 +193,12 @@ machine_kexec(struct kimage *image)
+@@ -212,10 +316,12 @@ machine_kexec(struct kimage *image)
unsigned long *ptr;
reboot_code_buffer =
@@ -164,7 +164,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
if (image->type == KEXEC_TYPE_DEFAULT) {
kexec_indirection_page =
-@@ -100,9 +206,19 @@ machine_kexec(struct kimage *image)
+@@ -223,9 +329,19 @@ machine_kexec(struct kimage *image)
} else {
kexec_indirection_page = (unsigned long)&image->head;
}
@@ -186,18 +186,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
/*
* The generic kexec code builds a page list with physical
-@@ -124,15 +240,16 @@ machine_kexec(struct kimage *image)
- /*
- * we do not want to be bothered.
- */
-+ pr_info("Before irq_disable.\n");
- local_irq_disable();
-
-- printk("Will call new kernel at %08lx\n", image->start);
-- printk("Bye ...\n");
-+ pr_info("Will call new kernel at %08lx\n", image->start);
-+ pr_info("Bye ...\n");
- __flush_cache_all();
+@@ -256,7 +372,7 @@ machine_kexec(struct kimage *image)
#ifdef CONFIG_SMP
/* All secondary cpus now may jump to kexec_wait cycle */
relocated_kexec_smp_wait = reboot_code_buffer +
@@ -231,7 +220,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
+#endif
--- a/arch/mips/kernel/relocate_kernel.S
+++ b/arch/mips/kernel/relocate_kernel.S
-@@ -12,8 +12,9 @@
+@@ -10,8 +10,9 @@
#include <asm/mipsregs.h>
#include <asm/stackframe.h>
#include <asm/addrspace.h>
@@ -242,7 +231,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
PTR_L a0, arg0
PTR_L a1, arg1
PTR_L a2, arg2
-@@ -98,7 +99,7 @@ done:
+@@ -96,7 +97,7 @@ done:
#endif
/* jump to kexec_start_address */
j s1
@@ -251,7 +240,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
#ifdef CONFIG_SMP
/*
-@@ -184,9 +185,15 @@ kexec_indirection_page:
+@@ -182,9 +183,15 @@ kexec_indirection_page:
PTR 0
.size kexec_indirection_page, PTRSIZE
diff --git a/target/linux/generic/pending-5.4/332-arc-add-OWRTDTB-section.patch b/target/linux/generic/pending-5.4/332-arc-add-OWRTDTB-section.patch
index ec89547726..2c48eb7f13 100644
--- a/target/linux/generic/pending-5.4/332-arc-add-OWRTDTB-section.patch
+++ b/target/linux/generic/pending-5.4/332-arc-add-OWRTDTB-section.patch
@@ -23,7 +23,7 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
--- a/arch/arc/kernel/head.S
+++ b/arch/arc/kernel/head.S
-@@ -59,6 +59,16 @@
+@@ -61,6 +61,16 @@
#endif
.endm
@@ -42,7 +42,7 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
;----------------------------------------------------------------
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
-@@ -526,7 +526,7 @@ void __init handle_uboot_args(void)
+@@ -529,7 +529,7 @@ void __init handle_uboot_args(void)
ignore_uboot_args:
if (use_embedded_dtb) {
@@ -51,7 +51,7 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
if (!machine_desc)
panic("Embedded DT invalid\n");
}
-@@ -542,6 +542,8 @@ ignore_uboot_args:
+@@ -545,6 +545,8 @@ ignore_uboot_args:
}
}
@@ -62,7 +62,7 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
handle_uboot_args();
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
-@@ -30,6 +30,19 @@ SECTIONS
+@@ -27,6 +27,19 @@ SECTIONS
. = CONFIG_LINUX_LINK_BASE;
diff --git a/target/linux/generic/pending-5.4/333-arc-enable-unaligned-access-in-kernel-mode.patch b/target/linux/generic/pending-5.4/333-arc-enable-unaligned-access-in-kernel-mode.patch
index 4e0265aef5..1848a84cc4 100644
--- a/target/linux/generic/pending-5.4/333-arc-enable-unaligned-access-in-kernel-mode.patch
+++ b/target/linux/generic/pending-5.4/333-arc-enable-unaligned-access-in-kernel-mode.patch
@@ -13,7 +13,7 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
--- a/arch/arc/kernel/unaligned.c
+++ b/arch/arc/kernel/unaligned.c
-@@ -206,7 +206,7 @@ int misaligned_fixup(unsigned long addre
+@@ -202,7 +202,7 @@ int misaligned_fixup(unsigned long addre
char buf[TASK_COMM_LEN];
/* handle user mode only and only if enabled by sysadmin */
diff --git a/target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch b/target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch
deleted file mode 100644
index 07a6da453f..0000000000
--- a/target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 203f17906ff45705fbdaa0430dbbc71142c2640f Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Sat, 8 Dec 2018 21:45:53 +0100
-Subject: [PATCH 1/3] MIPS: Compile post DMA flush only when needed
-
-dma_sync_phys() is only called for some CPUs when a mapping is removed.
-Add ARCH_HAS_SYNC_DMA_FOR_CPU only for the CPUs listed in
-cpu_needs_post_dma_flush() which need this extra call and do not compile
-this code in for other CPUs. We need this for R10000, R12000, BMIPS5000
-CPUs and CPUs supporting MAAR which was introduced in MIPS32r5.
-
-This will hopefully improve the performance of the not affected devices.
-
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
----
- arch/mips/Kconfig | 6 +++++-
- arch/mips/mm/dma-noncoherent.c | 2 ++
- 2 files changed, 7 insertions(+), 1 deletion(-)
-
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -1117,7 +1117,6 @@ config DMA_PERDEV_COHERENT
- config DMA_NONCOHERENT
- bool
- select ARCH_HAS_SYNC_DMA_FOR_DEVICE
-- select ARCH_HAS_SYNC_DMA_FOR_CPU
- select NEED_DMA_MAP_STATE
- select DMA_NONCOHERENT_MMAP
- select DMA_NONCOHERENT_CACHE_SYNC
-@@ -1898,9 +1897,11 @@ config SYS_HAS_CPU_MIPS32_R3_5
-
- config SYS_HAS_CPU_MIPS32_R5
- bool
-+ select ARCH_HAS_SYNC_DMA_FOR_CPU
-
- config SYS_HAS_CPU_MIPS32_R6
- bool
-+ select ARCH_HAS_SYNC_DMA_FOR_CPU
-
- config SYS_HAS_CPU_MIPS64_R1
- bool
-@@ -1910,6 +1911,7 @@ config SYS_HAS_CPU_MIPS64_R2
-
- config SYS_HAS_CPU_MIPS64_R6
- bool
-+ select ARCH_HAS_SYNC_DMA_FOR_CPU
-
- config SYS_HAS_CPU_R3000
- bool
-@@ -1946,6 +1948,7 @@ config SYS_HAS_CPU_R8000
-
- config SYS_HAS_CPU_R10000
- bool
-+ select ARCH_HAS_SYNC_DMA_FOR_CPU
-
- config SYS_HAS_CPU_RM7000
- bool
-@@ -1974,6 +1977,7 @@ config SYS_HAS_CPU_BMIPS4380
- config SYS_HAS_CPU_BMIPS5000
- bool
- select SYS_HAS_CPU_BMIPS
-+ select ARCH_HAS_SYNC_DMA_FOR_CPU
-
- config SYS_HAS_CPU_XLR
- bool
---- a/arch/mips/mm/dma-noncoherent.c
-+++ b/arch/mips/mm/dma-noncoherent.c
-@@ -191,12 +191,14 @@ void arch_sync_dma_for_device(struct dev
- dma_sync_phys(paddr, size, dir);
- }
-
-+#ifdef CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU
- void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
- size_t size, enum dma_data_direction dir)
- {
- if (cpu_needs_post_dma_flush(dev))
- dma_sync_phys(paddr, size, dir);
- }
-+#endif
-
- void arch_dma_cache_sync(struct device *dev, void *vaddr, size_t size,
- enum dma_data_direction direction)
diff --git a/target/linux/generic/pending-5.4/342-powerpc-Enable-kernel-XZ-compression-option-on-PPC_8.patch b/target/linux/generic/pending-5.4/342-powerpc-Enable-kernel-XZ-compression-option-on-PPC_8.patch
index 035a84b1e4..26b8a8ce17 100644
--- a/target/linux/generic/pending-5.4/342-powerpc-Enable-kernel-XZ-compression-option-on-PPC_8.patch
+++ b/target/linux/generic/pending-5.4/342-powerpc-Enable-kernel-XZ-compression-option-on-PPC_8.patch
@@ -14,12 +14,12 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
-@@ -197,7 +197,7 @@ config PPC
- select HAVE_IOREMAP_PROT
- select HAVE_IRQ_EXIT_ON_IRQ_STACK
+@@ -204,7 +204,7 @@ config PPC
select HAVE_KERNEL_GZIP
-- select HAVE_KERNEL_XZ if PPC_BOOK3S
-+ select HAVE_KERNEL_XZ if PPC_BOOK3S || PPC_85xx
+ select HAVE_KERNEL_LZMA if DEFAULT_UIMAGE
+ select HAVE_KERNEL_LZO if DEFAULT_UIMAGE
+- select HAVE_KERNEL_XZ if PPC_BOOK3S || 44x
++ select HAVE_KERNEL_XZ if PPC_BOOK3S || 44x || PPC_85xx
select HAVE_KPROBES
select HAVE_KPROBES_ON_FTRACE
select HAVE_KRETPROBES
diff --git a/target/linux/generic/pending-5.4/400-mtd-add-rootfs-split-support.patch b/target/linux/generic/pending-5.4/400-mtd-add-rootfs-split-support.patch
index bc783deb40..83a4ed39a3 100644
--- a/target/linux/generic/pending-5.4/400-mtd-add-rootfs-split-support.patch
+++ b/target/linux/generic/pending-5.4/400-mtd-add-rootfs-split-support.patch
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
-@@ -11,6 +11,23 @@ menuconfig MTD
+@@ -12,6 +12,23 @@ menuconfig MTD
if MTD
@@ -37,7 +37,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
depends on m
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -29,10 +29,12 @@
+@@ -15,10 +15,12 @@
#include <linux/kmod.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
@@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* Our partition linked list */
static LIST_HEAD(mtd_partitions);
-@@ -52,6 +54,8 @@ struct mtd_part {
+@@ -38,6 +40,8 @@ struct mtd_part {
struct list_head list;
};
@@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* Given a pointer to the MTD object in the mtd_part structure, we can retrieve
* the pointer to that structure.
-@@ -626,6 +630,7 @@ int mtd_add_partition(struct mtd_info *p
+@@ -612,6 +616,7 @@ int mtd_add_partition(struct mtd_info *p
if (ret)
goto err_remove_part;
@@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
mtd_add_partition_attrs(new);
return 0;
-@@ -712,6 +717,29 @@ int mtd_del_partition(struct mtd_info *m
+@@ -698,6 +703,29 @@ int mtd_del_partition(struct mtd_info *m
}
EXPORT_SYMBOL_GPL(mtd_del_partition);
@@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* This function, given a master MTD object and a partition table, creates
* and registers slave MTD objects which are bound to the master according to
-@@ -752,6 +780,7 @@ int add_mtd_partitions(struct mtd_info *
+@@ -738,6 +766,7 @@ int add_mtd_partitions(struct mtd_info *
goto err_del_partitions;
}
diff --git a/target/linux/generic/pending-5.4/401-mtd-add-support-for-different-partition-parser-types.patch b/target/linux/generic/pending-5.4/401-mtd-add-support-for-different-partition-parser-types.patch
index a59659cda6..f471c62376 100644
--- a/target/linux/generic/pending-5.4/401-mtd-add-support-for-different-partition-parser-types.patch
+++ b/target/linux/generic/pending-5.4/401-mtd-add-support-for-different-partition-parser-types.patch
@@ -9,7 +9,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -55,6 +55,10 @@ struct mtd_part {
+@@ -41,6 +41,10 @@ struct mtd_part {
};
static void mtd_partition_split(struct mtd_info *master, struct mtd_part *part);
@@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
/*
* Given a pointer to the MTD object in the mtd_part structure, we can retrieve
-@@ -717,6 +721,36 @@ int mtd_del_partition(struct mtd_info *m
+@@ -703,6 +707,36 @@ int mtd_del_partition(struct mtd_info *m
}
EXPORT_SYMBOL_GPL(mtd_del_partition);
@@ -57,7 +57,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
#ifdef CONFIG_MTD_SPLIT_FIRMWARE_NAME
#define SPLIT_FIRMWARE_NAME CONFIG_MTD_SPLIT_FIRMWARE_NAME
#else
-@@ -1066,6 +1100,61 @@ void mtd_part_parser_cleanup(struct mtd_
+@@ -1052,6 +1086,61 @@ void mtd_part_parser_cleanup(struct mtd_
}
}
diff --git a/target/linux/generic/pending-5.4/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch b/target/linux/generic/pending-5.4/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
index 58d2e44574..afe3ec7756 100644
--- a/target/linux/generic/pending-5.4/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
+++ b/target/linux/generic/pending-5.4/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
@@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -759,6 +759,7 @@ run_parsers_by_type(struct mtd_part *sla
+@@ -745,6 +745,7 @@ run_parsers_by_type(struct mtd_part *sla
static void split_firmware(struct mtd_info *master, struct mtd_part *part)
{
@@ -18,7 +18,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
}
static void mtd_partition_split(struct mtd_info *master, struct mtd_part *part)
-@@ -768,6 +769,12 @@ static void mtd_partition_split(struct m
+@@ -754,6 +755,12 @@ static void mtd_partition_split(struct m
if (rootfs_found)
return;
diff --git a/target/linux/generic/pending-5.4/403-mtd-hook-mtdsplit-to-Kbuild.patch b/target/linux/generic/pending-5.4/403-mtd-hook-mtdsplit-to-Kbuild.patch
index 60cf043e9b..5d868fffa8 100644
--- a/target/linux/generic/pending-5.4/403-mtd-hook-mtdsplit-to-Kbuild.patch
+++ b/target/linux/generic/pending-5.4/403-mtd-hook-mtdsplit-to-Kbuild.patch
@@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
-@@ -26,6 +26,8 @@ config MTD_SPLIT_FIRMWARE_NAME
+@@ -27,6 +27,8 @@ config MTD_SPLIT_FIRMWARE_NAME
depends on MTD_SPLIT_FIRMWARE
default "firmware"
@@ -21,12 +21,12 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
config MTD_TESTS
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
-@@ -7,6 +7,8 @@
- obj-$(CONFIG_MTD) += mtd.o
- mtd-y := mtdcore.o mtdsuper.o mtdconcat.o mtdpart.o mtdchar.o
+@@ -9,6 +9,8 @@ mtd-y := mtdcore.o mtdsuper.o mtdconc
+
+ obj-y += parsers/
+obj-$(CONFIG_MTD_SPLIT) += mtdsplit/
+
- obj-$(CONFIG_MTD_OF_PARTS) += ofpart.o
- obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
- obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o
+ # 'Users' - code which presents functionality to userspace.
+ obj-$(CONFIG_MTD_BLKDEVS) += mtd_blkdevs.o
+ obj-$(CONFIG_MTD_BLOCK) += mtdblock.o
diff --git a/target/linux/generic/pending-5.4/404-mtd-add-more-helper-functions.patch b/target/linux/generic/pending-5.4/404-mtd-add-more-helper-functions.patch
index e404ec1fb2..454a37fc22 100644
--- a/target/linux/generic/pending-5.4/404-mtd-add-more-helper-functions.patch
+++ b/target/linux/generic/pending-5.4/404-mtd-add-more-helper-functions.patch
@@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -1179,6 +1179,24 @@ int mtd_is_partition(const struct mtd_in
+@@ -1165,6 +1165,24 @@ int mtd_is_partition(const struct mtd_in
}
EXPORT_SYMBOL_GPL(mtd_is_partition);
@@ -38,7 +38,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
{
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
-@@ -507,6 +507,24 @@ static inline void mtd_align_erase_req(s
+@@ -504,6 +504,24 @@ static inline void mtd_align_erase_req(s
req->len += mtd->erasesize - mod;
}
diff --git a/target/linux/generic/pending-5.4/411-mtd-partial_eraseblock_write.patch b/target/linux/generic/pending-5.4/411-mtd-partial_eraseblock_write.patch
index bf9822fda8..f2a187df30 100644
--- a/target/linux/generic/pending-5.4/411-mtd-partial_eraseblock_write.patch
+++ b/target/linux/generic/pending-5.4/411-mtd-partial_eraseblock_write.patch
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -36,6 +36,8 @@
+@@ -22,6 +22,8 @@
#include "mtdcore.h"
#include "mtdsplit/mtdsplit.h"
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* Our partition linked list */
static LIST_HEAD(mtd_partitions);
static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -220,6 +222,53 @@ static int part_erase(struct mtd_info *m
+@@ -206,6 +208,53 @@ static int part_erase(struct mtd_info *m
{
struct mtd_part *part = mtd_to_part(mtd);
int ret;
@@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
instr->addr += part->offset;
ret = part->parent->_erase(part->parent, instr);
-@@ -227,6 +276,24 @@ static int part_erase(struct mtd_info *m
+@@ -213,6 +262,24 @@ static int part_erase(struct mtd_info *m
instr->fail_addr -= part->offset;
instr->addr -= part->offset;
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return ret;
}
-@@ -539,19 +606,22 @@ static struct mtd_part *allocate_partiti
+@@ -525,19 +592,22 @@ static struct mtd_part *allocate_partiti
remainder = do_div(tmp, wr_alignment);
if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) {
/* Doesn't start on a boundary of major erase size */
diff --git a/target/linux/generic/pending-5.4/412-mtd-partial_eraseblock_unlock.patch b/target/linux/generic/pending-5.4/412-mtd-partial_eraseblock_unlock.patch
index a54603a0f8..348fb9a842 100644
--- a/target/linux/generic/pending-5.4/412-mtd-partial_eraseblock_unlock.patch
+++ b/target/linux/generic/pending-5.4/412-mtd-partial_eraseblock_unlock.patch
@@ -20,7 +20,7 @@ Signed-off-by: Tim Harvey <tharvey@gateworks.com>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -306,7 +306,16 @@ static int part_lock(struct mtd_info *mt
+@@ -292,7 +292,16 @@ static int part_lock(struct mtd_info *mt
static int part_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
{
struct mtd_part *part = mtd_to_part(mtd);
diff --git a/target/linux/generic/pending-5.4/419-mtd-redboot-add-of_match_table-with-DT-binding.patch b/target/linux/generic/pending-5.4/419-mtd-redboot-add-of_match_table-with-DT-binding.patch
index fbf9a0553c..8358a307cd 100644
--- a/target/linux/generic/pending-5.4/419-mtd-redboot-add-of_match_table-with-DT-binding.patch
+++ b/target/linux/generic/pending-5.4/419-mtd-redboot-add-of_match_table-with-DT-binding.patch
@@ -10,22 +10,13 @@ flash device in DT.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -289,9 +289,16 @@ static int parse_redboot_partitions(stru
- return ret;
- }
+--- a/drivers/mtd/parsers/redboot.c
++++ b/drivers/mtd/parsers/redboot.c
+@@ -300,6 +300,7 @@ static int parse_redboot_partitions(stru
-+static const struct of_device_id redboot_parser_of_match_table[] = {
+ static const struct of_device_id mtd_parser_redboot_of_match_table[] = {
+ { .compatible = "redboot-fis" },
+ { .compatible = "ecoscentric,redboot-fis-partitions" },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, redboot_parser_of_match_table);
-+
- static struct mtd_part_parser redboot_parser = {
- .parse_fn = parse_redboot_partitions,
- .name = "RedBoot",
-+ .of_match_table = redboot_parser_of_match_table,
+ {},
};
- module_mtd_part_parser(redboot_parser);
-
+ MODULE_DEVICE_TABLE(of, mtd_parser_redboot_of_match_table);
diff --git a/target/linux/generic/pending-5.4/420-mtd-redboot_space.patch b/target/linux/generic/pending-5.4/420-mtd-redboot_space.patch
index 85fbe0512d..a2cf838989 100644
--- a/target/linux/generic/pending-5.4/420-mtd-redboot_space.patch
+++ b/target/linux/generic/pending-5.4/420-mtd-redboot_space.patch
@@ -9,9 +9,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/mtd/redboot.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -265,14 +265,21 @@ static int parse_redboot_partitions(stru
+--- a/drivers/mtd/parsers/redboot.c
++++ b/drivers/mtd/parsers/redboot.c
+@@ -274,14 +274,21 @@ static int parse_redboot_partitions(stru
#endif
names += strlen(names)+1;
diff --git a/target/linux/generic/pending-5.4/430-mtd-add-myloader-partition-parser.patch b/target/linux/generic/pending-5.4/430-mtd-add-myloader-partition-parser.patch
index bd49893dd8..f66da83924 100644
--- a/target/linux/generic/pending-5.4/430-mtd-add-myloader-partition-parser.patch
+++ b/target/linux/generic/pending-5.4/430-mtd-add-myloader-partition-parser.patch
@@ -12,7 +12,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
-@@ -177,6 +177,22 @@ menu "Partition parsers"
+@@ -46,6 +46,22 @@ menu "Partition parsers"
source "drivers/mtd/parsers/Kconfig"
endmenu
@@ -35,13 +35,10 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
comment "User Modules And Translation Layers"
#
---- a/drivers/mtd/Makefile
-+++ b/drivers/mtd/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
- obj-$(CONFIG_MTD_AR7_PARTS) += ar7part.o
- obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63xxpart.o
- obj-$(CONFIG_MTD_BCM47XX_PARTS) += bcm47xxpart.o
-+obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
- obj-y += parsers/
-
- # 'Users' - code which presents functionality to userspace.
+--- a/drivers/mtd/parsers/Makefile
++++ b/drivers/mtd/parsers/Makefile
+@@ -9,3 +9,4 @@ obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
+ obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o
+ obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o
+ obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
++obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
diff --git a/target/linux/generic/pending-5.4/431-mtd-bcm47xxpart-check-for-bad-blocks-when-calculatin.patch b/target/linux/generic/pending-5.4/431-mtd-bcm47xxpart-check-for-bad-blocks-when-calculatin.patch
index d54c284c34..2ea59cd872 100644
--- a/target/linux/generic/pending-5.4/431-mtd-bcm47xxpart-check-for-bad-blocks-when-calculatin.patch
+++ b/target/linux/generic/pending-5.4/431-mtd-bcm47xxpart-check-for-bad-blocks-when-calculatin.patch
@@ -6,7 +6,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
--- a/drivers/mtd/parsers/parser_trx.c
+++ b/drivers/mtd/parsers/parser_trx.c
-@@ -29,6 +29,33 @@ struct trx_header {
+@@ -25,6 +25,33 @@ struct trx_header {
uint32_t offset[3];
} __packed;
@@ -40,7 +40,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
static const char *parser_trx_data_part_name(struct mtd_info *master,
size_t offset)
{
-@@ -83,21 +110,21 @@ static int parser_trx_parse(struct mtd_i
+@@ -79,21 +106,21 @@ static int parser_trx_parse(struct mtd_i
if (trx.offset[2]) {
part = &parts[curr_part++];
part->name = "loader";
diff --git a/target/linux/generic/pending-5.4/432-mtd-bcm47xxpart-detect-T_Meter-partition.patch b/target/linux/generic/pending-5.4/432-mtd-bcm47xxpart-detect-T_Meter-partition.patch
index a6d0828b99..852654d924 100644
--- a/target/linux/generic/pending-5.4/432-mtd-bcm47xxpart-detect-T_Meter-partition.patch
+++ b/target/linux/generic/pending-5.4/432-mtd-bcm47xxpart-detect-T_Meter-partition.patch
@@ -9,9 +9,9 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
drivers/mtd/bcm47xxpart.c | 10 ++++++++++
1 file changed, 10 insertions(+)
---- a/drivers/mtd/bcm47xxpart.c
-+++ b/drivers/mtd/bcm47xxpart.c
-@@ -39,6 +39,7 @@
+--- a/drivers/mtd/parsers/bcm47xxpart.c
++++ b/drivers/mtd/parsers/bcm47xxpart.c
+@@ -35,6 +35,7 @@
#define NVRAM_HEADER 0x48534C46 /* FLSH */
#define POT_MAGIC1 0x54544f50 /* POTT */
#define POT_MAGIC2 0x504f /* OP */
@@ -19,7 +19,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
#define ML_MAGIC1 0x39685a42
#define ML_MAGIC2 0x26594131
#define TRX_MAGIC 0x30524448
-@@ -182,6 +183,15 @@ static int bcm47xxpart_parse(struct mtd_
+@@ -178,6 +179,15 @@ static int bcm47xxpart_parse(struct mtd_
MTD_WRITEABLE);
continue;
}
diff --git a/target/linux/generic/pending-5.4/440-block2mtd_init.patch b/target/linux/generic/pending-5.4/440-block2mtd_init.patch
index b8ec11f3dd..d88c226233 100644
--- a/target/linux/generic/pending-5.4/440-block2mtd_init.patch
+++ b/target/linux/generic/pending-5.4/440-block2mtd_init.patch
@@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return dev;
err_destroy_mutex:
-@@ -379,7 +387,7 @@ static int block2mtd_setup2(const char *
+@@ -381,7 +389,7 @@ static int block2mtd_setup2(const char *
/* 80 for device, 12 for erase size, 80 for name, 8 for timeout */
char buf[80 + 12 + 80 + 8];
char *str = buf;
@@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
char *name;
size_t erase_size = PAGE_SIZE;
unsigned long timeout = MTD_DEFAULT_TIMEOUT;
-@@ -393,7 +401,7 @@ static int block2mtd_setup2(const char *
+@@ -395,7 +403,7 @@ static int block2mtd_setup2(const char *
strcpy(str, val);
kill_final_newline(str);
@@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
token[i] = strsep(&str, ",");
if (str) {
-@@ -419,8 +427,10 @@ static int block2mtd_setup2(const char *
+@@ -421,8 +429,10 @@ static int block2mtd_setup2(const char *
return 0;
}
}
@@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return 0;
}
-@@ -454,7 +464,7 @@ static int block2mtd_setup(const char *v
+@@ -456,7 +466,7 @@ static int block2mtd_setup(const char *v
module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
diff --git a/target/linux/generic/pending-5.4/441-block2mtd_probe.patch b/target/linux/generic/pending-5.4/441-block2mtd_probe.patch
index 7e974e01ed..cba17a57f3 100644
--- a/target/linux/generic/pending-5.4/441-block2mtd_probe.patch
+++ b/target/linux/generic/pending-5.4/441-block2mtd_probe.patch
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/devices/block2mtd.c
+++ b/drivers/mtd/devices/block2mtd.c
-@@ -387,7 +387,7 @@ static int block2mtd_setup2(const char *
+@@ -389,7 +389,7 @@ static int block2mtd_setup2(const char *
/* 80 for device, 12 for erase size, 80 for name, 8 for timeout */
char buf[80 + 12 + 80 + 8];
char *str = buf;
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
char *name;
size_t erase_size = PAGE_SIZE;
unsigned long timeout = MTD_DEFAULT_TIMEOUT;
-@@ -401,7 +401,7 @@ static int block2mtd_setup2(const char *
+@@ -403,7 +403,7 @@ static int block2mtd_setup2(const char *
strcpy(str, val);
kill_final_newline(str);
@@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
token[i] = strsep(&str, ",");
if (str) {
-@@ -430,6 +430,9 @@ static int block2mtd_setup2(const char *
+@@ -432,6 +432,9 @@ static int block2mtd_setup2(const char *
if (token[2] && (strlen(token[2]) + 1 > 80))
pr_err("mtd device name too long\n");
@@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
add_device(name, erase_size, token[2], timeout);
return 0;
-@@ -464,7 +467,7 @@ static int block2mtd_setup(const char *v
+@@ -466,7 +469,7 @@ static int block2mtd_setup(const char *v
module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
diff --git a/target/linux/generic/pending-5.4/450-mtd-spi-nor-allow-NOR-driver-to-write-fewer-bytes-th.patch b/target/linux/generic/pending-5.4/450-mtd-spi-nor-allow-NOR-driver-to-write-fewer-bytes-th.patch
index 6981c6d943..a84af43a29 100644
--- a/target/linux/generic/pending-5.4/450-mtd-spi-nor-allow-NOR-driver-to-write-fewer-bytes-th.patch
+++ b/target/linux/generic/pending-5.4/450-mtd-spi-nor-allow-NOR-driver-to-write-fewer-bytes-th.patch
@@ -11,26 +11,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1457,7 +1457,7 @@ static int spi_nor_write(struct mtd_info
+@@ -2704,7 +2704,7 @@ static int spi_nor_write(struct mtd_info
write_enable(nor);
- ret = nor->write(nor, addr, page_remain, buf + i);
+ ret = spi_nor_write_data(nor, addr, page_remain, buf + i);
- if (ret < 0)
+ if (ret <= 0)
goto write_err;
written = ret;
-@@ -1466,13 +1466,6 @@ static int spi_nor_write(struct mtd_info
- goto write_err;
- *retlen += written;
- i += written;
-- if (written != page_remain) {
-- dev_err(nor->dev,
-- "While writing %zu bytes written %zd bytes\n",
-- page_remain, written);
-- ret = -EIO;
-- goto write_err;
-- }
- }
-
- write_err:
diff --git a/target/linux/generic/pending-5.4/460-mtd-cfi_cmdset_0002-no-erase_suspend.patch b/target/linux/generic/pending-5.4/460-mtd-cfi_cmdset_0002-no-erase_suspend.patch
index 88d386302a..2595e096bb 100644
--- a/target/linux/generic/pending-5.4/460-mtd-cfi_cmdset_0002-no-erase_suspend.patch
+++ b/target/linux/generic/pending-5.4/460-mtd-cfi_cmdset_0002-no-erase_suspend.patch
@@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -812,7 +812,7 @@ static int get_chip(struct map_info *map
+@@ -910,7 +910,7 @@ static int get_chip(struct map_info *map
return 0;
case FL_ERASING:
diff --git a/target/linux/generic/pending-5.4/461-mtd-cfi_cmdset_0002-add-buffer-write-cmd-timeout.patch b/target/linux/generic/pending-5.4/461-mtd-cfi_cmdset_0002-add-buffer-write-cmd-timeout.patch
index 1b07791eca..cf9fdabd71 100644
--- a/target/linux/generic/pending-5.4/461-mtd-cfi_cmdset_0002-add-buffer-write-cmd-timeout.patch
+++ b/target/linux/generic/pending-5.4/461-mtd-cfi_cmdset_0002-add-buffer-write-cmd-timeout.patch
@@ -7,7 +7,7 @@ Signed-off-by: George Kashperko <george@znau.edu.ua>
1 file changed, 1 insertion(+)
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -1838,6 +1838,7 @@ static int __xipram do_write_buffer(stru
+@@ -2055,6 +2055,7 @@ static int __xipram do_write_buffer(stru
/* Write Buffer Load */
map_write(map, CMD(0x25), cmd_adr);
diff --git a/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch b/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch
index 0c5d6cfa63..24d2d4567d 100644
--- a/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch
+++ b/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch
@@ -8,11 +8,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -2735,6 +2735,7 @@ static int spi_nor_init(struct spi_nor *
+@@ -4884,6 +4884,7 @@ int spi_nor_scan(struct spi_nor *nor, co
*/
if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL ||
JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
+ JEDEC_MFR(nor->info) == SNOR_MFR_MACRONIX ||
JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
- nor->info->flags & SPI_NOR_HAS_LOCK) {
- write_enable(nor);
+ nor->info->flags & SPI_NOR_HAS_LOCK)
+ nor->clear_sr_bp = spi_nor_clear_sr_bp;
diff --git a/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch b/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch
index fb6ae7df7b..c5db43b5e6 100644
--- a/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch
+++ b/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch
@@ -17,21 +17,19 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -2737,6 +2737,7 @@ static int spi_nor_init(struct spi_nor *
+@@ -4397,6 +4397,7 @@ static void st_micron_set_default_init(s
+
+ static void winbond_set_default_init(struct spi_nor *nor)
+ {
++ nor->flags |= SNOR_F_HAS_LOCK;
+ nor->params.set_4byte = winbond_set_4byte;
+ }
+
+@@ -4886,6 +4887,7 @@ int spi_nor_scan(struct spi_nor *nor, co
JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
JEDEC_MFR(nor->info) == SNOR_MFR_MACRONIX ||
JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
+ JEDEC_MFR(nor->info) == SNOR_MFR_WINBOND ||
- nor->info->flags & SPI_NOR_HAS_LOCK) {
- write_enable(nor);
- write_sr(nor, 0);
-@@ -2873,7 +2874,8 @@ int spi_nor_scan(struct spi_nor *nor, co
+ nor->info->flags & SPI_NOR_HAS_LOCK)
+ nor->clear_sr_bp = spi_nor_clear_sr_bp;
- /* NOR protection support for STmicro/Micron chips and similar */
- if (JEDEC_MFR(info) == SNOR_MFR_MICRON ||
-- info->flags & SPI_NOR_HAS_LOCK) {
-+ JEDEC_MFR(info) == SNOR_MFR_WINBOND ||
-+ info->flags & SPI_NOR_HAS_LOCK) {
- nor->flash_lock = stm_lock;
- nor->flash_unlock = stm_unlock;
- nor->flash_is_locked = stm_is_locked;
diff --git a/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch b/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch
index 12d785856a..d3e587ff97 100644
--- a/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch
+++ b/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/mtd/spi-nor/Kconfig
+++ b/drivers/mtd/spi-nor/Kconfig
-@@ -39,6 +39,17 @@ config SPI_ASPEED_SMC
+@@ -34,6 +34,17 @@ config SPI_ASPEED_SMC
and support for the SPI flash memory controller (SPI) for
the host firmware. The implementation only supports SPI NOR.
@@ -34,23 +34,46 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ Any flash chip larger than the size specified in this option will
+ not use 4K sectors.
+
- config SPI_ATMEL_QUADSPI
- tristate "Atmel Quad SPI Controller"
- depends on ARCH_AT91 || (ARM && COMPILE_TEST && !ARCH_EBSA110)
+ config SPI_CADENCE_QUADSPI
+ tristate "Cadence Quad SPI controller"
+ depends on OF && (ARM || ARM64 || COMPILE_TEST)
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -2649,10 +2649,12 @@ static int spi_nor_select_erase(struct s
+@@ -4464,6 +4464,7 @@ static void spi_nor_info_init_params(str
+ struct spi_nor_erase_map *map = &params->erase_map;
+ const struct flash_info *info = nor->info;
+ struct device_node *np = spi_nor_get_flash_node(nor);
++ struct mtd_info *mtd = &nor->mtd;
+ u8 i, erase_mask;
- #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
- /* prefer "small sector" erase if possible */
-- if (info->flags & SECT_4K) {
-+ if ((info->flags & SECT_4K) && (mtd->size <=
-+ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
- nor->erase_opcode = SPINOR_OP_BE_4K;
- mtd->erasesize = 4096;
-- } else if (info->flags & SECT_4K_PMC) {
-+ } else if ((info->flags & SECT_4K_PMC) && (mtd->size <=
+ /* Initialize legacy flash parameters and settings. */
+@@ -4527,6 +4528,21 @@ static void spi_nor_info_init_params(str
+ */
+ erase_mask = 0;
+ i = 0;
++#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
++ if ((info->flags & SECT_4K_PMC) && (mtd->size <=
+ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
- nor->erase_opcode = SPINOR_OP_BE_4K_PMC;
- mtd->erasesize = 4096;
- } else
++ erase_mask |= BIT(i);
++ spi_nor_set_erase_type(&map->erase_type[i], 4096u,
++ SPINOR_OP_BE_4K_PMC);
++ i++;
++ } else if ((info->flags & SECT_4K) && (mtd->size <=
++ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
++ erase_mask |= BIT(i);
++ spi_nor_set_erase_type(&map->erase_type[i], 4096u,
++ SPINOR_OP_BE_4K);
++ i++;
++ }
++#else
+ if (info->flags & SECT_4K_PMC) {
+ erase_mask |= BIT(i);
+ spi_nor_set_erase_type(&map->erase_type[i], 4096u,
+@@ -4538,6 +4554,7 @@ static void spi_nor_info_init_params(str
+ SPINOR_OP_BE_4K);
+ i++;
+ }
++#endif
+ erase_mask |= BIT(i);
+ spi_nor_set_erase_type(&map->erase_type[i], info->sector_size,
+ SPINOR_OP_SE);
diff --git a/target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch b/target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch
deleted file mode 100644
index 72c4470332..0000000000
--- a/target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From: Robert Marko <robimarko@gmail.com>
-To: linux-mtd@lists.infradead.org
-Subject: mtd: spi-nor: Add Winbond w25q128jv support
-Date: Mon, 25 Jun 2018 13:17:48 +0200
-
-Datasheet:
-http://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
-
-Testing done on Mikrotik Routerboard wAP R board.
-It does not support Dual or Quad modes.
-
-Signed-off-by: Robert Marko <robimarko@gmail.com>
----
-
-Changes in v2:
- - Correct the title
----
- drivers/mtd/spi-nor/spi-nor.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/drivers/mtd/spi-nor/spi-nor.c
-+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1241,6 +1241,11 @@ static const struct flash_info spi_nor_i
- SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
- SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
- },
-+ {
-+ "w25q128jv", INFO(0xef7018, 0, 64 * 1024, 256,
-+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
-+ SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
-+ },
- { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
- { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
- { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
diff --git a/target/linux/generic/pending-5.4/476-mtd-spi-nor-add-eon-en25q128.patch b/target/linux/generic/pending-5.4/476-mtd-spi-nor-add-eon-en25q128.patch
index 69ac17ce4c..d35530492a 100644
--- a/target/linux/generic/pending-5.4/476-mtd-spi-nor-add-eon-en25q128.patch
+++ b/target/linux/generic/pending-5.4/476-mtd-spi-nor-add-eon-en25q128.patch
@@ -8,11 +8,11 @@ Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -994,6 +994,7 @@ static const struct flash_info spi_nor_i
+@@ -2177,6 +2177,7 @@ static const struct flash_info spi_nor_i
{ "en25q32b", INFO(0x1c3016, 0, 64 * 1024, 64, 0) },
{ "en25p64", INFO(0x1c2017, 0, 64 * 1024, 128, 0) },
{ "en25q64", INFO(0x1c3017, 0, 64 * 1024, 128, SECT_4K) },
+ { "en25q128", INFO(0x1c3018, 0, 64 * 1024, 256, SECT_4K) },
+ { "en25q80a", INFO(0x1c3014, 0, 64 * 1024, 16,
+ SECT_4K | SPI_NOR_DUAL_READ) },
{ "en25qh32", INFO(0x1c7016, 0, 64 * 1024, 64, 0) },
- { "en25qh128", INFO(0x1c7018, 0, 64 * 1024, 256, 0) },
- { "en25qh256", INFO(0x1c7019, 0, 64 * 1024, 512, 0) },
diff --git a/target/linux/generic/pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch b/target/linux/generic/pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch
deleted file mode 100644
index 0648b12e12..0000000000
--- a/target/linux/generic/pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-From: André Valentin <avalentin@marcant.net>
-Subject: linux/mtd: add id for mx25u3235f needed by ZyXEL NBG6817
-
-Signed-off-by: André Valentin <avalentin@marcant.net>
----
- drivers/mtd/spi-nor/spi-nor.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/mtd/spi-nor/spi-nor.c
-+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1083,6 +1083,7 @@ static const struct flash_info spi_nor_i
- { "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, SECT_4K) },
- { "mx25l3255e", INFO(0xc29e16, 0, 64 * 1024, 64, SECT_4K) },
- { "mx25l6405d", INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K) },
-+ { "mx25u3235f", INFO(0xc22536, 0, 64 * 1024, 64, 0) },
- { "mx25u2033e", INFO(0xc22532, 0, 64 * 1024, 4, SECT_4K) },
- { "mx25u4035", INFO(0xc22533, 0, 64 * 1024, 8, SECT_4K) },
- { "mx25u8035", INFO(0xc22534, 0, 64 * 1024, 16, SECT_4K) },
diff --git a/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch b/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch
deleted file mode 100644
index 6bb7754733..0000000000
--- a/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/spi-nor/spi-nor.c
-+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -996,6 +996,7 @@ static const struct flash_info spi_nor_i
- { "en25q64", INFO(0x1c3017, 0, 64 * 1024, 128, SECT_4K) },
- { "en25q128", INFO(0x1c3018, 0, 64 * 1024, 256, SECT_4K) },
- { "en25qh32", INFO(0x1c7016, 0, 64 * 1024, 64, 0) },
-+ { "en25qh64", INFO(0x1c7017, 0, 64 * 1024, 128, 0) },
- { "en25qh128", INFO(0x1c7018, 0, 64 * 1024, 256, 0) },
- { "en25qh256", INFO(0x1c7019, 0, 64 * 1024, 512, 0) },
- { "en25s64", INFO(0x1c3817, 0, 64 * 1024, 128, SECT_4K) },
diff --git a/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-xtx-xt25f128b.patch b/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-xtx-xt25f128b.patch
index 664837928b..0c58f29d5b 100644
--- a/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-xtx-xt25f128b.patch
+++ b/target/linux/generic/pending-5.4/479-mtd-spi-nor-add-xtx-xt25f128b.patch
@@ -30,7 +30,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1273,6 +1273,9 @@ static const struct flash_info spi_nor_i
+@@ -2504,6 +2504,9 @@ static const struct flash_info spi_nor_i
/* XMC (Wuhan Xinxin Semiconductor Manufacturing Corp.) */
{ "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
diff --git a/target/linux/generic/pending-5.4/480-mtd-set-rootfs-to-be-root-dev.patch b/target/linux/generic/pending-5.4/480-mtd-set-rootfs-to-be-root-dev.patch
index dce0432fac..3907ac2368 100644
--- a/target/linux/generic/pending-5.4/480-mtd-set-rootfs-to-be-root-dev.patch
+++ b/target/linux/generic/pending-5.4/480-mtd-set-rootfs-to-be-root-dev.patch
@@ -12,15 +12,15 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -41,6 +41,7 @@
+@@ -27,6 +27,7 @@
#include <linux/reboot.h>
#include <linux/leds.h>
#include <linux/debugfs.h>
+#include <linux/root_dev.h>
+ #include <linux/nvmem-provider.h>
#include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
-@@ -593,6 +594,15 @@ int add_mtd_device(struct mtd_info *mtd)
+@@ -698,6 +699,15 @@ int add_mtd_device(struct mtd_info *mtd)
of this try_ nonsense, and no bitching about it
either. :) */
__module_get(THIS_MODULE);
@@ -35,4 +35,4 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
+
return 0;
- fail_added:
+ fail_nvmem_add:
diff --git a/target/linux/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch b/target/linux/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index 79d18d036f..b21daea4f0 100644
--- a/target/linux/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
+++ b/target/linux/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
-@@ -1181,6 +1181,73 @@ static struct mtd_info * __init open_mtd
+@@ -1168,6 +1168,73 @@ static struct mtd_info * __init open_mtd
return mtd;
}
@@ -82,7 +82,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static int __init ubi_init(void)
{
int err, i, k;
-@@ -1264,6 +1331,12 @@ static int __init ubi_init(void)
+@@ -1251,6 +1318,12 @@ static int __init ubi_init(void)
}
}
diff --git a/target/linux/generic/pending-5.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch b/target/linux/generic/pending-5.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch
index cb2d525610..61fcbac92e 100644
--- a/target/linux/generic/pending-5.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch
+++ b/target/linux/generic/pending-5.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/block.c
+++ b/drivers/mtd/ubi/block.c
-@@ -633,6 +633,44 @@ static void __init ubiblock_create_from_
+@@ -652,6 +652,44 @@ static void __init ubiblock_create_from_
}
}
@@ -53,7 +53,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static void ubiblock_remove_all(void)
{
struct ubiblock *next;
-@@ -665,6 +703,10 @@ int __init ubiblock_init(void)
+@@ -684,6 +722,10 @@ int __init ubiblock_init(void)
*/
ubiblock_create_from_param();
diff --git a/target/linux/generic/pending-5.4/492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch b/target/linux/generic/pending-5.4/492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch
index b76e83e4a3..aa61f4ae8d 100644
--- a/target/linux/generic/pending-5.4/492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch
+++ b/target/linux/generic/pending-5.4/492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
-@@ -427,7 +427,28 @@ retry:
+@@ -460,7 +460,28 @@ retry:
out:
put_page(page);
}
@@ -38,7 +38,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
#ifdef CONFIG_ROOT_NFS
#define NFSROOT_TIMEOUT_MIN 5
-@@ -521,6 +542,10 @@ void __init mount_root(void)
+@@ -554,6 +575,10 @@ void __init mount_root(void)
change_floppy("root floppy");
}
#endif
diff --git a/target/linux/generic/pending-5.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch b/target/linux/generic/pending-5.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch
index 1bb53ada7f..2dff46807e 100644
--- a/target/linux/generic/pending-5.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch
+++ b/target/linux/generic/pending-5.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/block.c
+++ b/drivers/mtd/ubi/block.c
-@@ -50,6 +50,7 @@
+@@ -42,6 +42,7 @@
#include <linux/scatterlist.h>
#include <linux/idr.h>
#include <asm/div64.h>
@@ -16,7 +16,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
#include "ubi-media.h"
#include "ubi.h"
-@@ -445,6 +446,15 @@ int ubiblock_create(struct ubi_volume_in
+@@ -458,6 +459,15 @@ int ubiblock_create(struct ubi_volume_in
dev_info(disk_to_dev(dev->gd), "created from ubi%d:%d(%s)",
dev->ubi_num, dev->vol_id, vi->name);
mutex_unlock(&devices_mutex);
diff --git a/target/linux/generic/pending-5.4/494-mtd-ubi-add-EOF-marker-support.patch b/target/linux/generic/pending-5.4/494-mtd-ubi-add-EOF-marker-support.patch
index e38f11e592..57f5fcceba 100644
--- a/target/linux/generic/pending-5.4/494-mtd-ubi-add-EOF-marker-support.patch
+++ b/target/linux/generic/pending-5.4/494-mtd-ubi-add-EOF-marker-support.patch
@@ -9,7 +9,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
-@@ -939,6 +939,13 @@ static bool vol_ignored(int vol_id)
+@@ -926,6 +926,13 @@ static bool vol_ignored(int vol_id)
#endif
}
@@ -23,7 +23,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
/**
* scan_peb - scan and process UBI headers of a PEB.
* @ubi: UBI device description object
-@@ -971,9 +978,21 @@ static int scan_peb(struct ubi_device *u
+@@ -958,9 +965,21 @@ static int scan_peb(struct ubi_device *u
return 0;
}
@@ -50,7 +50,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
break;
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
-@@ -789,6 +789,7 @@ struct ubi_attach_info {
+@@ -776,6 +776,7 @@ struct ubi_attach_info {
int mean_ec;
uint64_t ec_sum;
int ec_count;
diff --git a/target/linux/generic/pending-5.4/495-mtd-core-add-get_mtd_device_by_node.patch b/target/linux/generic/pending-5.4/495-mtd-core-add-get_mtd_device_by_node.patch
index 1446ca2abc..3a118e38fe 100644
--- a/target/linux/generic/pending-5.4/495-mtd-core-add-get_mtd_device_by_node.patch
+++ b/target/linux/generic/pending-5.4/495-mtd-core-add-get_mtd_device_by_node.patch
@@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
-@@ -938,6 +938,44 @@ out_unlock:
+@@ -1049,6 +1049,44 @@ out_unlock:
}
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
@@ -64,7 +64,7 @@ Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
mutex_lock(&mtd_table_mutex);
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
-@@ -589,6 +589,8 @@ extern struct mtd_info *get_mtd_device(s
+@@ -586,6 +586,8 @@ extern struct mtd_info *get_mtd_device(s
extern int __get_mtd_device(struct mtd_info *mtd);
extern void __put_mtd_device(struct mtd_info *mtd);
extern struct mtd_info *get_mtd_device_nm(const char *name);
diff --git a/target/linux/generic/pending-5.4/497-mtd-mtdconcat-add-dt-driver-for-concat-devices.patch b/target/linux/generic/pending-5.4/497-mtd-mtdconcat-add-dt-driver-for-concat-devices.patch
index 6584e22882..4d7598cc7c 100644
--- a/target/linux/generic/pending-5.4/497-mtd-mtdconcat-add-dt-driver-for-concat-devices.patch
+++ b/target/linux/generic/pending-5.4/497-mtd-mtdconcat-add-dt-driver-for-concat-devices.patch
@@ -43,22 +43,22 @@ Signed-off-by: Bernhard Frauendienst <kernel@nospam.obeliks.de>
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
-@@ -374,4 +374,6 @@ source "drivers/mtd/spi-nor/Kconfig"
+@@ -244,4 +244,6 @@ source "drivers/mtd/ubi/Kconfig"
- source "drivers/mtd/ubi/Kconfig"
+ source "drivers/mtd/hyperbus/Kconfig"
+source "drivers/mtd/composite/Kconfig"
+
endif # MTD
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
-@@ -39,3 +39,6 @@ obj-y += chips/ lpddr/ maps/ devices/ n
-
+@@ -32,3 +32,6 @@ obj-y += chips/ lpddr/ maps/ devices/ n
obj-$(CONFIG_MTD_SPI_NOR) += spi-nor/
obj-$(CONFIG_MTD_UBI) += ubi/
+ obj-$(CONFIG_MTD_HYPERBUS) += hyperbus/
+
+# Composite drivers must be loaded last
-+obj-y += composite/
++obj-y += composite/
--- /dev/null
+++ b/drivers/mtd/composite/Kconfig
@@ -0,0 +1,12 @@
diff --git a/target/linux/generic/pending-5.4/530-jffs2_make_lzma_available.patch b/target/linux/generic/pending-5.4/530-jffs2_make_lzma_available.patch
index f28186a40c..0b6718912d 100644
--- a/target/linux/generic/pending-5.4/530-jffs2_make_lzma_available.patch
+++ b/target/linux/generic/pending-5.4/530-jffs2_make_lzma_available.patch
@@ -38,7 +38,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
--- a/fs/jffs2/Kconfig
+++ b/fs/jffs2/Kconfig
-@@ -135,6 +135,15 @@ config JFFS2_LZO
+@@ -136,6 +136,15 @@ config JFFS2_LZO
This feature was added in July, 2007. Say 'N' if you need
compatibility with older bootloaders or kernels.
@@ -244,7 +244,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
+}
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
-@@ -374,14 +374,41 @@ static int __init init_jffs2_fs(void)
+@@ -360,14 +360,41 @@ static int __init init_jffs2_fs(void)
BUILD_BUG_ON(sizeof(struct jffs2_raw_inode) != 68);
BUILD_BUG_ON(sizeof(struct jffs2_raw_summary) != 32);
@@ -1087,7 +1087,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
#define JFFS2_NODE_ACCURATE 0x2000
--- a/lib/Kconfig
+++ b/lib/Kconfig
-@@ -278,6 +278,12 @@ config ZSTD_DECOMPRESS
+@@ -303,6 +303,12 @@ config ZSTD_DECOMPRESS
source "lib/xz/Kconfig"
@@ -1119,7 +1119,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
ifdef CONFIG_FUNCTION_TRACER
ORIG_CFLAGS := $(KBUILD_CFLAGS)
KBUILD_CFLAGS = $(subst $(CC_FLAGS_FTRACE),,$(ORIG_CFLAGS))
-@@ -139,6 +149,8 @@ obj-$(CONFIG_ZSTD_COMPRESS) += zstd/
+@@ -150,6 +160,8 @@ obj-$(CONFIG_ZSTD_COMPRESS) += zstd/
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd/
obj-$(CONFIG_XZ_DEC) += xz/
obj-$(CONFIG_RAID6_PQ) += raid6/
diff --git a/target/linux/generic/pending-5.4/532-jffs2_eofdetect.patch b/target/linux/generic/pending-5.4/532-jffs2_eofdetect.patch
index e9952c6d84..df4ab9b754 100644
--- a/target/linux/generic/pending-5.4/532-jffs2_eofdetect.patch
+++ b/target/linux/generic/pending-5.4/532-jffs2_eofdetect.patch
@@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (ret < 0)
goto out;
-@@ -561,6 +567,17 @@ full_scan:
+@@ -564,6 +570,17 @@ full_scan:
return err;
}
diff --git a/target/linux/generic/pending-5.4/553-ubifs-Add-option-to-create-UBI-FS-version-4-on-empty.patch b/target/linux/generic/pending-5.4/553-ubifs-Add-option-to-create-UBI-FS-version-4-on-empty.patch
index 02c9b4c0fa..e726274ca2 100644
--- a/target/linux/generic/pending-5.4/553-ubifs-Add-option-to-create-UBI-FS-version-4-on-empty.patch
+++ b/target/linux/generic/pending-5.4/553-ubifs-Add-option-to-create-UBI-FS-version-4-on-empty.patch
@@ -20,11 +20,10 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
--- a/fs/ubifs/Kconfig
+++ b/fs/ubifs/Kconfig
-@@ -85,3 +85,16 @@ config UBIFS_FS_SECURITY
- the extended attribute support in advance.
+@@ -85,6 +85,19 @@ config UBIFS_FS_SECURITY
If you are not using a security module, say N.
-+
+
+config UBIFS_FS_FORMAT4
+ bool "Use file system format version 4 for new file systems"
+ depends on UBIFS_FS
@@ -37,9 +36,13 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+ format version 5 for ubifs file systems created with version 5.
+
+ If you are unsure, say N.
++
+ config UBIFS_FS_AUTHENTICATION
+ bool "UBIFS authentication support"
+ select KEYS
--- a/fs/ubifs/sb.c
+++ b/fs/ubifs/sb.c
-@@ -176,7 +176,9 @@ static int create_default_filesystem(str
+@@ -175,7 +175,9 @@ static int create_default_filesystem(str
tmp64 = (long long)max_buds * c->leb_size;
if (big_lpt)
sup_flags |= UBIFS_FLG_BIGLPT;
@@ -47,9 +50,9 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
sup_flags |= UBIFS_FLG_DOUBLE_HASH;
+#endif
- sup->ch.node_type = UBIFS_SB_NODE;
- sup->key_hash = UBIFS_KEY_HASH_R5;
-@@ -192,7 +194,11 @@ static int create_default_filesystem(str
+ if (ubifs_authenticated(c)) {
+ sup_flags |= UBIFS_FLG_AUTHENTICATION;
+@@ -201,7 +203,11 @@ static int create_default_filesystem(str
sup->jhead_cnt = cpu_to_le32(DEFAULT_JHEADS_CNT);
sup->fanout = cpu_to_le32(DEFAULT_FANOUT);
sup->lsave_cnt = cpu_to_le32(c->lsave_cnt);
diff --git a/target/linux/generic/pending-5.4/600-netfilter_conntrack_flush.patch b/target/linux/generic/pending-5.4/600-netfilter_conntrack_flush.patch
index fa32f88e17..14d3a37a8c 100644
--- a/target/linux/generic/pending-5.4/600-netfilter_conntrack_flush.patch
+++ b/target/linux/generic/pending-5.4/600-netfilter_conntrack_flush.patch
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <net/net_namespace.h>
#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
-@@ -433,6 +434,56 @@ static int ct_cpu_seq_show(struct seq_fi
+@@ -454,6 +455,56 @@ static int ct_cpu_seq_show(struct seq_fi
return 0;
}
@@ -74,7 +74,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static const struct seq_operations ct_cpu_seq_ops = {
.start = ct_cpu_seq_start,
.next = ct_cpu_seq_next,
-@@ -446,8 +497,9 @@ static int nf_conntrack_standalone_init_
+@@ -467,8 +518,9 @@ static int nf_conntrack_standalone_init_
kuid_t root_uid;
kgid_t root_gid;
diff --git a/target/linux/generic/pending-5.4/610-netfilter_match_bypass_default_checks.patch b/target/linux/generic/pending-5.4/610-netfilter_match_bypass_default_checks.patch
index 1691146825..703ac8215e 100644
--- a/target/linux/generic/pending-5.4/610-netfilter_match_bypass_default_checks.patch
+++ b/target/linux/generic/pending-5.4/610-netfilter_match_bypass_default_checks.patch
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#define IPT_INV_VIA_IN 0x01 /* Invert the sense of IN IFACE. */
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -53,6 +53,9 @@ ip_packet_match(const struct iphdr *ip,
+@@ -50,6 +50,9 @@ ip_packet_match(const struct iphdr *ip,
{
unsigned long ret;
@@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (NF_INVF(ipinfo, IPT_INV_SRCIP,
(ip->saddr & ipinfo->smsk.s_addr) != ipinfo->src.s_addr) ||
NF_INVF(ipinfo, IPT_INV_DSTIP,
-@@ -83,6 +86,29 @@ ip_packet_match(const struct iphdr *ip,
+@@ -80,6 +83,29 @@ ip_packet_match(const struct iphdr *ip,
return true;
}
@@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static bool
ip_checkentry(const struct ipt_ip *ip)
{
-@@ -527,6 +553,8 @@ find_check_entry(struct ipt_entry *e, st
+@@ -524,6 +550,8 @@ find_check_entry(struct ipt_entry *e, st
struct xt_mtchk_param mtpar;
struct xt_entry_match *ematch;
@@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!xt_percpu_counter_alloc(alloc_state, &e->counters))
return -ENOMEM;
-@@ -821,6 +849,7 @@ copy_entries_to_user(unsigned int total_
+@@ -818,6 +846,7 @@ copy_entries_to_user(unsigned int total_
const struct xt_table_info *private = table->private;
int ret = 0;
const void *loc_cpu_entry;
@@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
counters = alloc_counters(table);
if (IS_ERR(counters))
-@@ -848,6 +877,14 @@ copy_entries_to_user(unsigned int total_
+@@ -845,6 +874,14 @@ copy_entries_to_user(unsigned int total_
goto free_counters;
}
@@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
for (i = sizeof(struct ipt_entry);
i < e->target_offset;
i += m->u.match_size) {
-@@ -1228,12 +1265,15 @@ compat_copy_entry_to_user(struct ipt_ent
+@@ -1225,12 +1262,15 @@ compat_copy_entry_to_user(struct ipt_ent
compat_uint_t origsize;
const struct xt_entry_match *ematch;
int ret = 0;
diff --git a/target/linux/generic/pending-5.4/611-netfilter_match_bypass_default_table.patch b/target/linux/generic/pending-5.4/611-netfilter_match_bypass_default_table.patch
index ba976b0751..baf738a8d2 100644
--- a/target/linux/generic/pending-5.4/611-netfilter_match_bypass_default_table.patch
+++ b/target/linux/generic/pending-5.4/611-netfilter_match_bypass_default_table.patch
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -249,6 +249,33 @@ struct ipt_entry *ipt_next_entry(const s
+@@ -246,6 +246,33 @@ struct ipt_entry *ipt_next_entry(const s
return (void *)entry + entry->next_offset;
}
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* Returns one of the generic firewall policies, like NF_ACCEPT. */
unsigned int
ipt_do_table(struct sk_buff *skb,
-@@ -269,27 +296,28 @@ ipt_do_table(struct sk_buff *skb,
+@@ -266,27 +293,28 @@ ipt_do_table(struct sk_buff *skb,
unsigned int addend;
/* Initialization */
@@ -86,7 +86,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
jumpstack = (struct ipt_entry **)private->jumpstack[cpu];
/* Switch to alternate jumpstack if we're being invoked via TEE.
-@@ -302,7 +330,16 @@ ipt_do_table(struct sk_buff *skb,
+@@ -299,7 +327,16 @@ ipt_do_table(struct sk_buff *skb,
if (static_key_false(&xt_tee_enabled))
jumpstack += private->stacksize * __this_cpu_read(nf_skb_duplicated);
diff --git a/target/linux/generic/pending-5.4/612-netfilter_match_reduce_memory_access.patch b/target/linux/generic/pending-5.4/612-netfilter_match_reduce_memory_access.patch
index cd6fcf8e74..79da6778b6 100644
--- a/target/linux/generic/pending-5.4/612-netfilter_match_reduce_memory_access.patch
+++ b/target/linux/generic/pending-5.4/612-netfilter_match_reduce_memory_access.patch
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -56,9 +56,9 @@ ip_packet_match(const struct iphdr *ip,
+@@ -53,9 +53,9 @@ ip_packet_match(const struct iphdr *ip,
if (ipinfo->flags & IPT_F_NO_DEF_MATCH)
return true;
diff --git a/target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch b/target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
index 634218dfc3..5ad13883e7 100644
--- a/target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
+++ b/target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
-@@ -34,6 +34,9 @@
+@@ -31,6 +31,9 @@
#include <net/netfilter/ipv4/nf_conntrack_ipv4.h>
#include <net/netfilter/ipv6/nf_conntrack_ipv6.h>
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* "Be conservative in what you do,
be liberal in what you accept from others."
If it's non-zero, we mark only out of window RST segments as INVALID. */
-@@ -484,6 +487,9 @@ static bool tcp_in_window(const struct n
+@@ -476,6 +479,9 @@ static bool tcp_in_window(const struct n
s32 receiver_offset;
bool res, in_recv_win;
@@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* Get the required data from the packet.
*/
-@@ -1059,7 +1065,7 @@ static int tcp_packet(struct nf_conn *ct
+@@ -1123,7 +1129,7 @@ int nf_conntrack_tcp_packet(struct nf_co
IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED &&
timeouts[new_state] > timeouts[TCP_CONNTRACK_UNACK])
timeout = timeouts[TCP_CONNTRACK_UNACK];
@@ -37,17 +37,37 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
timeouts[new_state] > timeouts[TCP_CONNTRACK_RETRANS])
timeout = timeouts[TCP_CONNTRACK_RETRANS];
else
-@@ -1508,6 +1514,13 @@ static struct ctl_table tcp_sysctl_table
- .mode = 0644,
- .proc_handler = proc_dointvec,
+--- a/net/netfilter/nf_conntrack_standalone.c
++++ b/net/netfilter/nf_conntrack_standalone.c
+@@ -25,6 +25,9 @@
+ #include <net/netfilter/nf_conntrack_timestamp.h>
+ #include <linux/rculist_nulls.h>
+
++/* Do not check the TCP window for incoming packets */
++static int nf_ct_tcp_no_window_check __read_mostly = 1;
++
+ static bool enable_hooks __read_mostly;
+ MODULE_PARM_DESC(enable_hooks, "Always enable conntrack hooks");
+ module_param(enable_hooks, bool, 0000);
+@@ -646,6 +649,7 @@ enum nf_ct_sysctl_index {
+ NF_SYSCTL_CT_PROTO_TIMEOUT_GRE_STREAM,
+ #endif
+
++ NF_SYSCTL_CT_PROTO_TCP_NO_WINDOW_CHECK,
+ __NF_SYSCTL_CT_LAST_SYSCTL,
+ };
+
+@@ -972,6 +976,13 @@ static struct ctl_table nf_ct_sysctl_tab
+ .proc_handler = proc_dointvec_jiffies,
},
-+ {
+ #endif
++ [NF_SYSCTL_CT_PROTO_TCP_NO_WINDOW_CHECK] = {
+ .procname = "nf_conntrack_tcp_no_window_check",
+ .data = &nf_ct_tcp_no_window_check,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec,
+ },
- { }
+ {}
};
- #endif /* CONFIG_SYSCTL */
+
diff --git a/target/linux/generic/pending-5.4/616-net_optimize_xfrm_calls.patch b/target/linux/generic/pending-5.4/616-net_optimize_xfrm_calls.patch
index 6a5801027c..952bf690d8 100644
--- a/target/linux/generic/pending-5.4/616-net_optimize_xfrm_calls.patch
+++ b/target/linux/generic/pending-5.4/616-net_optimize_xfrm_calls.patch
@@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/netfilter/nf_nat_core.c
+++ b/net/netfilter/nf_nat_core.c
-@@ -110,6 +110,9 @@ int nf_xfrm_me_harder(struct net *net, s
+@@ -155,6 +155,9 @@ int nf_xfrm_me_harder(struct net *net, s
struct sock *sk = skb->sk;
int err;
diff --git a/target/linux/generic/pending-5.4/620-net_sched-codel-do-not-defer-queue-length-update.patch b/target/linux/generic/pending-5.4/620-net_sched-codel-do-not-defer-queue-length-update.patch
index 457c812841..ca85b8a98c 100644
--- a/target/linux/generic/pending-5.4/620-net_sched-codel-do-not-defer-queue-length-update.patch
+++ b/target/linux/generic/pending-5.4/620-net_sched-codel-do-not-defer-queue-length-update.patch
@@ -46,9 +46,9 @@ Link: https://bugzilla.kernel.org/show_bug.cgi?id=109581
}
--- a/net/sched/sch_fq_codel.c
+++ b/net/sched/sch_fq_codel.c
-@@ -317,6 +317,21 @@ begin:
- flow->dropped += q->cstats.drop_count - prev_drop_count;
- flow->dropped += q->cstats.ecn_mark - prev_ecn_mark;
+@@ -305,6 +305,21 @@ begin:
+ &flow->cvars, &q->cstats, qdisc_pkt_len,
+ codel_get_enqueue_time, drop_func, dequeue_func);
+ /* If our qlen is 0 qdisc_tree_reduce_backlog() will deactivate
+ * parent class, dequeue in parent qdisc will do the same if we
@@ -68,7 +68,7 @@ Link: https://bugzilla.kernel.org/show_bug.cgi?id=109581
if (!skb) {
/* force a pass through old_flows to prevent starvation */
if ((head == &q->new_flows) && !list_empty(&q->old_flows))
-@@ -327,15 +342,6 @@ begin:
+@@ -315,15 +330,6 @@ begin:
}
qdisc_bstats_update(sch, skb);
flow->deficit -= qdisc_pkt_len(skb);
diff --git a/target/linux/generic/pending-5.4/630-packet_socket_type.patch b/target/linux/generic/pending-5.4/630-packet_socket_type.patch
index 25f44b466a..80c891a630 100644
--- a/target/linux/generic/pending-5.4/630-packet_socket_type.patch
+++ b/target/linux/generic/pending-5.4/630-packet_socket_type.patch
@@ -20,17 +20,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* Packet socket options */
-@@ -57,6 +59,7 @@ struct sockaddr_ll {
- #define PACKET_QDISC_BYPASS 20
+@@ -58,6 +60,7 @@ struct sockaddr_ll {
#define PACKET_ROLLOVER_STATS 21
#define PACKET_FANOUT_DATA 22
-+#define PACKET_RECV_TYPE 23
+ #define PACKET_IGNORE_OUTGOING 23
++#define PACKET_RECV_TYPE 24
#define PACKET_FANOUT_HASH 0
#define PACKET_FANOUT_LB 1
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
-@@ -1796,6 +1796,7 @@ static int packet_rcv_spkt(struct sk_buf
+@@ -1795,6 +1795,7 @@ static int packet_rcv_spkt(struct sk_buf
{
struct sock *sk;
struct sockaddr_pkt *spkt;
@@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* When we registered the protocol we saved the socket in the data
-@@ -1803,6 +1804,7 @@ static int packet_rcv_spkt(struct sk_buf
+@@ -1802,6 +1803,7 @@ static int packet_rcv_spkt(struct sk_buf
*/
sk = pt->af_packet_priv;
@@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* Yank back the headers [hope the device set this
-@@ -1815,7 +1817,7 @@ static int packet_rcv_spkt(struct sk_buf
+@@ -1814,7 +1816,7 @@ static int packet_rcv_spkt(struct sk_buf
* so that this procedure is noop.
*/
@@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
goto out;
if (!net_eq(dev_net(dev), sock_net(sk)))
-@@ -2043,12 +2045,12 @@ static int packet_rcv(struct sk_buff *sk
+@@ -2052,12 +2054,12 @@ static int packet_rcv(struct sk_buff *sk
unsigned int snaplen, res;
bool is_drop_n_account = false;
@@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -2174,12 +2176,12 @@ static int tpacket_rcv(struct sk_buff *s
+@@ -2181,12 +2183,12 @@ static int tpacket_rcv(struct sk_buff *s
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
@@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3265,6 +3267,7 @@ static int packet_create(struct net *net
+@@ -3267,6 +3269,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
@@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3885,6 +3888,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3900,6 +3903,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0;
}
@@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
default:
return -ENOPROTOOPT;
}
-@@ -3937,6 +3950,13 @@ static int packet_getsockopt(struct sock
+@@ -3956,6 +3969,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
@@ -128,10 +128,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
break;
--- a/net/packet/internal.h
+++ b/net/packet/internal.h
-@@ -132,6 +132,7 @@ struct packet_sock {
- struct net_device __rcu *cached_dev;
+@@ -133,6 +133,7 @@ struct packet_sock {
int (*xmit)(struct sk_buff *skb);
struct packet_type prot_hook ____cacheline_aligned_in_smp;
+ atomic_t tp_drops ____cacheline_aligned_in_smp;
+ unsigned int pkt_type;
};
diff --git a/target/linux/generic/pending-5.4/640-netfilter-nf_flow_table-add-hardware-offload-support.patch b/target/linux/generic/pending-5.4/640-netfilter-nf_flow_table-add-hardware-offload-support.patch
index f0946e8dd2..b36b64f13a 100644
--- a/target/linux/generic/pending-5.4/640-netfilter-nf_flow_table-add-hardware-offload-support.patch
+++ b/target/linux/generic/pending-5.4/640-netfilter-nf_flow_table-add-hardware-offload-support.patch
@@ -23,9 +23,9 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -918,6 +918,13 @@ struct dev_ifalias {
- char ifalias[];
- };
+@@ -926,6 +926,13 @@ struct devlink;
+ struct tlsdev_ops;
+
+struct flow_offload;
+
@@ -37,7 +37,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
/*
* This structure defines the management hooks for network devices.
* The following hooks can be defined; unless noted otherwise, they are
-@@ -1150,6 +1157,10 @@ struct dev_ifalias {
+@@ -1158,6 +1165,10 @@ struct tlsdev_ops;
* int (*ndo_bridge_dellink)(struct net_device *dev, struct nlmsghdr *nlh,
* u16 flags);
*
@@ -48,7 +48,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
* int (*ndo_change_carrier)(struct net_device *dev, bool new_carrier);
* Called to change device carrier. Soft-devices (like dummy, team, etc)
* which do not represent real hardware may define this to allow their
-@@ -1377,6 +1388,8 @@ struct net_device_ops {
+@@ -1405,6 +1416,8 @@ struct net_device_ops {
int (*ndo_bridge_dellink)(struct net_device *dev,
struct nlmsghdr *nlh,
u16 flags);
@@ -59,7 +59,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
int (*ndo_get_phys_port_id)(struct net_device *dev,
--- a/include/net/netfilter/nf_flow_table.h
+++ b/include/net/netfilter/nf_flow_table.h
-@@ -20,11 +20,17 @@ struct nf_flowtable_type {
+@@ -21,11 +21,17 @@ struct nf_flowtable_type {
struct module *owner;
};
@@ -77,7 +77,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
enum flow_offload_tuple_dir {
-@@ -69,6 +75,7 @@ struct flow_offload_tuple_rhash {
+@@ -68,6 +74,7 @@ struct flow_offload_tuple_rhash {
#define FLOW_OFFLOAD_DNAT 0x2
#define FLOW_OFFLOAD_DYING 0x4
#define FLOW_OFFLOAD_TEARDOWN 0x8
@@ -85,7 +85,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct flow_offload {
struct flow_offload_tuple_rhash tuplehash[FLOW_OFFLOAD_DIR_MAX];
-@@ -125,6 +132,22 @@ unsigned int nf_flow_offload_ip_hook(voi
+@@ -120,6 +127,22 @@ unsigned int nf_flow_offload_ip_hook(voi
unsigned int nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb,
const struct nf_hook_state *state);
@@ -110,7 +110,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/uapi/linux/netfilter/nf_tables.h
+++ b/include/uapi/linux/netfilter/nf_tables.h
-@@ -1464,6 +1464,7 @@ enum nft_object_attributes {
+@@ -1516,6 +1516,7 @@ enum nft_object_attributes {
* @NFTA_FLOWTABLE_HOOK: netfilter hook configuration(NLA_U32)
* @NFTA_FLOWTABLE_USE: number of references to this flow table (NLA_U32)
* @NFTA_FLOWTABLE_HANDLE: object handle (NLA_U64)
@@ -118,7 +118,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
*/
enum nft_flowtable_attributes {
NFTA_FLOWTABLE_UNSPEC,
-@@ -1473,6 +1474,7 @@ enum nft_flowtable_attributes {
+@@ -1525,6 +1526,7 @@ enum nft_flowtable_attributes {
NFTA_FLOWTABLE_USE,
NFTA_FLOWTABLE_HANDLE,
NFTA_FLOWTABLE_PAD,
@@ -128,7 +128,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
#define NFTA_FLOWTABLE_MAX (__NFTA_FLOWTABLE_MAX - 1)
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
-@@ -714,6 +714,15 @@ config NF_FLOW_TABLE
+@@ -723,6 +723,15 @@ config NF_FLOW_TABLE
To compile it as a module, choose M here.
@@ -152,13 +152,13 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
obj-$(CONFIG_NF_FLOW_TABLE_INET) += nf_flow_table_inet.o
+obj-$(CONFIG_NF_FLOW_TABLE_HW) += nf_flow_table_hw.o
- # generic X tables
+ # generic X tables
obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o
--- a/net/netfilter/nf_flow_table_core.c
+++ b/net/netfilter/nf_flow_table_core.c
-@@ -228,10 +228,16 @@ int flow_offload_add(struct nf_flowtable
+@@ -248,10 +248,16 @@ static inline bool nf_flow_has_expired(c
+ return nf_flow_timeout_delta(flow->timeout) <= 0;
}
- EXPORT_SYMBOL_GPL(flow_offload_add);
+static inline bool nf_flow_in_hw(const struct flow_offload *flow)
+{
@@ -173,7 +173,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
rhashtable_remove_fast(&flow_table->rhashtable,
&flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].node,
-@@ -246,6 +252,9 @@ static void flow_offload_del(struct nf_f
+@@ -271,6 +277,9 @@ static void flow_offload_del(struct nf_f
if (!(flow->flags & FLOW_OFFLOAD_TEARDOWN))
flow_offload_fixup_ct_state(e->ct);
@@ -183,17 +183,17 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
flow_offload_free(flow);
}
-@@ -359,6 +368,9 @@ static int nf_flow_offload_gc_step(struc
- if (!teardown)
- nf_ct_offload_timeout(flow);
+@@ -361,6 +370,9 @@ static void nf_flow_offload_gc_step(stru
+ if (!teardown)
+ nf_ct_offload_timeout(flow);
-+ if (nf_flow_in_hw(flow) && !teardown)
-+ continue;
++ if (nf_flow_in_hw(flow) && !teardown)
++ return;
+
- if (nf_flow_has_expired(flow) || teardown)
- flow_offload_del(flow_table, flow);
- }
-@@ -494,10 +506,43 @@ int nf_flow_dnat_port(const struct flow_
+ if (nf_flow_has_expired(flow) || teardown)
+ flow_offload_del(flow_table, flow);
+ }
+@@ -490,10 +502,43 @@ int nf_flow_dnat_port(const struct flow_
}
EXPORT_SYMBOL_GPL(nf_flow_dnat_port);
@@ -237,7 +237,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
INIT_DEFERRABLE_WORK(&flowtable->gc_work, nf_flow_offload_work_gc);
err = rhashtable_init(&flowtable->rhashtable,
-@@ -538,6 +583,8 @@ static void nf_flow_table_iterate_cleanu
+@@ -534,6 +579,8 @@ static void nf_flow_table_iterate_cleanu
{
nf_flow_table_iterate(flowtable, nf_flow_table_do_cleanup, dev);
flush_delayed_work(&flowtable->gc_work);
@@ -245,8 +245,8 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+ flush_work(&nf_flow_offload_hw_work);
}
- void nf_flow_table_cleanup(struct net *net, struct net_device *dev)
-@@ -551,6 +598,26 @@ void nf_flow_table_cleanup(struct net *n
+ void nf_flow_table_cleanup(struct net_device *dev)
+@@ -547,6 +594,26 @@ void nf_flow_table_cleanup(struct net_de
}
EXPORT_SYMBOL_GPL(nf_flow_table_cleanup);
@@ -273,9 +273,9 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
void nf_flow_table_free(struct nf_flowtable *flow_table)
{
mutex_lock(&flowtable_lock);
-@@ -560,9 +627,58 @@ void nf_flow_table_free(struct nf_flowta
+@@ -556,9 +623,58 @@ void nf_flow_table_free(struct nf_flowta
nf_flow_table_iterate(flow_table, nf_flow_table_do_cleanup, NULL);
- WARN_ON(!nf_flow_offload_gc_step(flow_table));
+ nf_flow_table_iterate(flow_table, nf_flow_offload_gc_step, flow_table);
rhashtable_destroy(&flow_table->rhashtable);
+ if (flow_table->flags & NF_FLOWTABLE_F_HW)
+ nf_flow_offload_hw_free(flow_table);
@@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+MODULE_ALIAS("nf-flow-table-hw");
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
-@@ -5503,6 +5503,13 @@ static int nf_tables_flowtable_parse_hoo
+@@ -5740,6 +5740,13 @@ static int nf_tables_flowtable_parse_hoo
if (err < 0)
return err;
@@ -520,7 +520,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
if (!ops)
return -ENOMEM;
-@@ -5634,10 +5641,19 @@ static int nf_tables_newflowtable(struct
+@@ -5870,10 +5877,19 @@ static int nf_tables_newflowtable(struct
}
flowtable->data.type = type;
@@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
flowtable);
if (err < 0)
-@@ -5763,7 +5779,8 @@ static int nf_tables_fill_flowtable_info
+@@ -5999,7 +6015,8 @@ static int nf_tables_fill_flowtable_info
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
@@ -549,10 +549,10 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+ nla_put_be32(skb, NFTA_FLOWTABLE_FLAGS, htonl(flowtable->data.flags)))
goto nla_put_failure;
- nest = nla_nest_start(skb, NFTA_FLOWTABLE_HOOK);
+ nest = nla_nest_start_noflag(skb, NFTA_FLOWTABLE_HOOK);
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
-@@ -126,6 +126,9 @@ static void nft_flow_offload_eval(const
+@@ -128,6 +128,9 @@ static void nft_flow_offload_eval(const
if (ret < 0)
goto err_flow_add;
diff --git a/target/linux/generic/pending-5.4/641-netfilter-nf_flow_table-support-hw-offload-through-v.patch b/target/linux/generic/pending-5.4/641-netfilter-nf_flow_table-support-hw-offload-through-v.patch
index 87ff634793..ea87d18e23 100644
--- a/target/linux/generic/pending-5.4/641-netfilter-nf_flow_table-support-hw-offload-through-v.patch
+++ b/target/linux/generic/pending-5.4/641-netfilter-nf_flow_table-support-hw-offload-through-v.patch
@@ -15,15 +15,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -919,6 +919,7 @@ struct dev_ifalias {
- };
+@@ -927,6 +927,7 @@ struct tlsdev_ops;
+
struct flow_offload;
+struct flow_offload_hw_path;
enum flow_offload_type {
FLOW_OFFLOAD_ADD = 0,
-@@ -1157,8 +1158,15 @@ enum flow_offload_type {
+@@ -1165,8 +1166,15 @@ enum flow_offload_type {
* int (*ndo_bridge_dellink)(struct net_device *dev, struct nlmsghdr *nlh,
* u16 flags);
*
@@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
* Adds/deletes flow entry to/from net device flowtable.
*
* int (*ndo_change_carrier)(struct net_device *dev, bool new_carrier);
-@@ -1388,8 +1396,11 @@ struct net_device_ops {
+@@ -1416,8 +1424,11 @@ struct net_device_ops {
int (*ndo_bridge_dellink)(struct net_device *dev,
struct nlmsghdr *nlh,
u16 flags);
@@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
int (*ndo_get_phys_port_id)(struct net_device *dev,
--- a/include/net/netfilter/nf_flow_table.h
+++ b/include/net/netfilter/nf_flow_table.h
-@@ -86,6 +86,21 @@ struct flow_offload {
+@@ -85,6 +85,21 @@ struct flow_offload {
};
};
diff --git a/target/linux/generic/pending-5.4/642-net-8021q-support-hardware-flow-table-offload.patch b/target/linux/generic/pending-5.4/642-net-8021q-support-hardware-flow-table-offload.patch
index 7547c14bed..d67cad7159 100644
--- a/target/linux/generic/pending-5.4/642-net-8021q-support-hardware-flow-table-offload.patch
+++ b/target/linux/generic/pending-5.4/642-net-8021q-support-hardware-flow-table-offload.patch
@@ -9,18 +9,19 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
-@@ -32,6 +32,10 @@
+@@ -27,6 +27,11 @@
#include <linux/phy.h>
#include <net/arp.h>
- #include <net/switchdev.h>
+
+#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
+#include <linux/netfilter.h>
+#include <net/netfilter/nf_flow_table.h>
+#endif
-
++
#include "vlan.h"
#include "vlanproc.h"
-@@ -771,6 +775,27 @@ static int vlan_dev_get_iflink(const str
+ #include <linux/if_vlan.h>
+@@ -744,6 +749,27 @@ static int vlan_dev_get_iflink(const str
return real_dev->ifindex;
}
@@ -48,9 +49,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static const struct ethtool_ops vlan_ethtool_ops = {
.get_link_ksettings = vlan_ethtool_get_link_ksettings,
.get_drvinfo = vlan_ethtool_get_drvinfo,
-@@ -808,6 +833,9 @@ static const struct net_device_ops vlan_
+@@ -782,6 +808,9 @@ static const struct net_device_ops vlan_
+ #endif
.ndo_fix_features = vlan_dev_fix_features,
- .ndo_get_lock_subclass = vlan_dev_get_lock_subclass,
.ndo_get_iflink = vlan_dev_get_iflink,
+#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
+ .ndo_flow_offload_check = vlan_dev_flow_offload_check,
diff --git a/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch b/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch
index 8b09fabf12..13394899bb 100644
--- a/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch
+++ b/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
-@@ -18,6 +18,10 @@
+@@ -14,6 +14,10 @@
#include <linux/ethtool.h>
#include <linux/list.h>
#include <linux/netfilter_bridge.h>
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <linux/uaccess.h>
#include "br_private.h"
-@@ -376,6 +380,28 @@ static const struct ethtool_ops br_ethto
+@@ -375,6 +379,28 @@ static const struct ethtool_ops br_ethto
.get_link = ethtool_op_get_link,
};
diff --git a/target/linux/generic/pending-5.4/644-net-pppoe-support-hardware-flow-table-offload.patch b/target/linux/generic/pending-5.4/644-net-pppoe-support-hardware-flow-table-offload.patch
index 26d46ec005..32f75ca759 100644
--- a/target/linux/generic/pending-5.4/644-net-pppoe-support-hardware-flow-table-offload.patch
+++ b/target/linux/generic/pending-5.4/644-net-pppoe-support-hardware-flow-table-offload.patch
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
-@@ -57,6 +57,11 @@
+@@ -53,6 +53,11 @@
#include <net/net_namespace.h>
#include <net/netns/generic.h>
@@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#define PPP_VERSION "2.4.2"
/*
-@@ -1368,12 +1373,37 @@ static void ppp_dev_priv_destructor(stru
+@@ -1362,12 +1367,37 @@ static void ppp_dev_priv_destructor(stru
ppp_destroy_interface(ppp);
}
@@ -61,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static struct device_type ppp_type = {
--- a/drivers/net/ppp/pppoe.c
+++ b/drivers/net/ppp/pppoe.c
-@@ -78,6 +78,11 @@
+@@ -73,6 +73,11 @@
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
@@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <linux/nsproxy.h>
#include <net/net_namespace.h>
#include <net/netns/generic.h>
-@@ -976,8 +981,36 @@ static int pppoe_xmit(struct ppp_channel
+@@ -971,8 +976,36 @@ static int pppoe_xmit(struct ppp_channel
return __pppoe_xmit(sk, skb);
}
@@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int pppoe_recvmsg(struct socket *sock, struct msghdr *m,
--- a/include/linux/ppp_channel.h
+++ b/include/linux/ppp_channel.h
-@@ -32,6 +32,10 @@ struct ppp_channel_ops {
+@@ -28,6 +28,10 @@ struct ppp_channel_ops {
int (*start_xmit)(struct ppp_channel *, struct sk_buff *);
/* Handle an ioctl call that has come in via /dev/ppp. */
int (*ioctl)(struct ppp_channel *, unsigned int, unsigned long);
diff --git a/target/linux/generic/pending-5.4/645-netfilter-nf_flow_table-rework-hardware-offload-time.patch b/target/linux/generic/pending-5.4/645-netfilter-nf_flow_table-rework-hardware-offload-time.patch
index bfb7a9c190..3c44c29273 100644
--- a/target/linux/generic/pending-5.4/645-netfilter-nf_flow_table-rework-hardware-offload-time.patch
+++ b/target/linux/generic/pending-5.4/645-netfilter-nf_flow_table-rework-hardware-offload-time.patch
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/net/netfilter/nf_flow_table.h
+++ b/include/net/netfilter/nf_flow_table.h
-@@ -76,6 +76,7 @@ struct flow_offload_tuple_rhash {
+@@ -75,6 +75,7 @@ struct flow_offload_tuple_rhash {
#define FLOW_OFFLOAD_DYING 0x4
#define FLOW_OFFLOAD_TEARDOWN 0x8
#define FLOW_OFFLOAD_HW 0x10
@@ -26,12 +26,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
struct flow_offload_tuple_rhash tuplehash[FLOW_OFFLOAD_DIR_MAX];
--- a/net/netfilter/nf_flow_table_core.c
+++ b/net/netfilter/nf_flow_table_core.c
-@@ -368,7 +368,7 @@ static int nf_flow_offload_gc_step(struc
- if (!teardown)
- nf_ct_offload_timeout(flow);
+@@ -370,7 +370,7 @@ static void nf_flow_offload_gc_step(stru
+ if (!teardown)
+ nf_ct_offload_timeout(flow);
-- if (nf_flow_in_hw(flow) && !teardown)
-+ if ((flow->flags & FLOW_OFFLOAD_KEEP) && !teardown)
- continue;
+- if (nf_flow_in_hw(flow) && !teardown)
++ if ((flow->flags & FLOW_OFFLOAD_KEEP) && !teardown)
+ return;
- if (nf_flow_has_expired(flow) || teardown)
+ if (nf_flow_has_expired(flow) || teardown)
diff --git a/target/linux/generic/pending-5.4/646-netfilter-nf_flow_table-rework-private-driver-data.patch b/target/linux/generic/pending-5.4/646-netfilter-nf_flow_table-rework-private-driver-data.patch
index f94d7ad301..159ad8a0aa 100644
--- a/target/linux/generic/pending-5.4/646-netfilter-nf_flow_table-rework-private-driver-data.patch
+++ b/target/linux/generic/pending-5.4/646-netfilter-nf_flow_table-rework-private-driver-data.patch
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/net/netfilter/nf_flow_table.h
+++ b/include/net/netfilter/nf_flow_table.h
-@@ -81,9 +81,10 @@ struct flow_offload_tuple_rhash {
+@@ -80,9 +80,10 @@ struct flow_offload_tuple_rhash {
struct flow_offload {
struct flow_offload_tuple_rhash tuplehash[FLOW_OFFLOAD_DIR_MAX];
u32 flags;
diff --git a/target/linux/generic/pending-5.4/655-increase_skb_pad.patch b/target/linux/generic/pending-5.4/655-increase_skb_pad.patch
index 94e325b0cc..4fd40c65f5 100644
--- a/target/linux/generic/pending-5.4/655-increase_skb_pad.patch
+++ b/target/linux/generic/pending-5.4/655-increase_skb_pad.patch
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -2511,7 +2511,7 @@ static inline int pskb_network_may_pull(
+@@ -2631,7 +2631,7 @@ static inline int pskb_network_may_pull(
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD
diff --git a/target/linux/generic/pending-5.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch b/target/linux/generic/pending-5.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
index 8b7594e9cf..702199242d 100644
--- a/target/linux/generic/pending-5.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
+++ b/target/linux/generic/pending-5.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
@@ -69,16 +69,17 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
TUNNEL_ENCAP_FOU,
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
-@@ -16,6 +16,8 @@
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
+@@ -11,6 +11,9 @@
+ * linux/net/ipv6/sit.c and linux/net/ipv4/ipip.c
*
-+ * Changes:
-+ * Steven Barth <cyrus@openwrt.org>: MAP-E FMR support
+ * RFC 2473
++ *
++ * Changes:
++ * Steven Barth <cyrus@openwrt.org>: MAP-E FMR support
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-@@ -72,9 +74,9 @@ static bool log_ecn_error = true;
+@@ -67,9 +70,9 @@ static bool log_ecn_error = true;
module_param(log_ecn_error, bool, 0644);
MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
@@ -90,7 +91,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
return hash_32(hash, IP6_TUNNEL_HASH_SIZE_SHIFT);
}
-@@ -141,20 +143,29 @@ static struct net_device_stats *ip6_get_
+@@ -136,20 +139,29 @@ static struct net_device_stats *ip6_get_
static struct ip6_tnl *
ip6_tnl_lookup(struct net *net, const struct in6_addr *remote, const struct in6_addr *local)
{
@@ -125,7 +126,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
if (ipv6_addr_equal(local, &t->parms.laddr) &&
ipv6_addr_any(&t->parms.raddr) &&
-@@ -162,7 +173,7 @@ ip6_tnl_lookup(struct net *net, const st
+@@ -157,7 +169,7 @@ ip6_tnl_lookup(struct net *net, const st
return t;
}
@@ -134,7 +135,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
if (ipv6_addr_equal(remote, &t->parms.raddr) &&
ipv6_addr_any(&t->parms.laddr) &&
-@@ -202,7 +213,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n,
+@@ -197,7 +209,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n,
if (!ipv6_addr_any(remote) || !ipv6_addr_any(local)) {
prio = 1;
@@ -143,7 +144,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
}
return &ip6n->tnls[prio][h];
}
-@@ -383,6 +394,12 @@ ip6_tnl_dev_uninit(struct net_device *de
+@@ -378,6 +390,12 @@ ip6_tnl_dev_uninit(struct net_device *de
struct net *net = t->net;
struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
@@ -156,7 +157,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
if (dev == ip6n->fb_tnl_dev)
RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
else
-@@ -772,6 +789,107 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
+@@ -767,6 +785,107 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
}
EXPORT_SYMBOL_GPL(ip6_tnl_rcv_ctl);
@@ -264,7 +265,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
static int __ip6_tnl_rcv(struct ip6_tnl *tunnel, struct sk_buff *skb,
const struct tnl_ptk_info *tpi,
struct metadata_dst *tun_dst,
-@@ -824,6 +942,27 @@ static int __ip6_tnl_rcv(struct ip6_tnl
+@@ -819,6 +938,27 @@ static int __ip6_tnl_rcv(struct ip6_tnl
skb_reset_network_header(skb);
memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
@@ -292,7 +293,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
__skb_tunnel_rx(skb, tunnel->dev, tunnel->net);
err = dscp_ecn_decapsulate(tunnel, ipv6h, skb);
-@@ -956,6 +1095,7 @@ static void init_tel_txopt(struct ipv6_t
+@@ -951,6 +1091,7 @@ static void init_tel_txopt(struct ipv6_t
opt->ops.opt_nflen = 8;
}
@@ -300,7 +301,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
/**
* ip6_tnl_addr_conflict - compare packet addresses to tunnel's own
* @t: the outgoing tunnel device
-@@ -1308,6 +1448,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1303,6 +1444,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
{
struct ip6_tnl *t = netdev_priv(dev);
struct ipv6hdr *ipv6h;
@@ -308,7 +309,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
int encap_limit = -1;
__u16 offset;
struct flowi6 fl6;
-@@ -1373,6 +1514,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1368,6 +1510,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);
dsfield = INET_ECN_encapsulate(dsfield, ipv6_get_dsfield(ipv6h));
@@ -327,7 +328,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
return -1;
-@@ -1502,6 +1655,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
+@@ -1497,6 +1651,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
t->parms.link = p->link;
t->parms.proto = p->proto;
t->parms.fwmark = p->fwmark;
@@ -342,7 +343,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
dst_cache_reset(&t->dst_cache);
ip6_tnl_link_config(t);
return 0;
-@@ -1540,6 +1701,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
+@@ -1535,6 +1697,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
p->flowinfo = u->flowinfo;
p->link = u->link;
p->proto = u->proto;
@@ -350,7 +351,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
memcpy(p->name, u->name, sizeof(u->name));
}
-@@ -1924,6 +2086,15 @@ static int ip6_tnl_validate(struct nlatt
+@@ -1919,6 +2082,15 @@ static int ip6_tnl_validate(struct nlatt
return 0;
}
@@ -366,7 +367,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
static void ip6_tnl_netlink_parms(struct nlattr *data[],
struct __ip6_tnl_parm *parms)
{
-@@ -1961,6 +2132,46 @@ static void ip6_tnl_netlink_parms(struct
+@@ -1956,6 +2128,46 @@ static void ip6_tnl_netlink_parms(struct
if (data[IFLA_IPTUN_FWMARK])
parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);
@@ -413,7 +414,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
}
static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[],
-@@ -2076,6 +2287,12 @@ static void ip6_tnl_dellink(struct net_d
+@@ -2071,6 +2283,12 @@ static void ip6_tnl_dellink(struct net_d
static size_t ip6_tnl_get_size(const struct net_device *dev)
{
@@ -426,7 +427,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
return
/* IFLA_IPTUN_LINK */
nla_total_size(4) +
-@@ -2105,6 +2322,24 @@ static size_t ip6_tnl_get_size(const str
+@@ -2100,6 +2318,24 @@ static size_t ip6_tnl_get_size(const str
nla_total_size(0) +
/* IFLA_IPTUN_FWMARK */
nla_total_size(4) +
@@ -451,7 +452,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
0;
}
-@@ -2112,6 +2347,9 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2107,6 +2343,9 @@ static int ip6_tnl_fill_info(struct sk_b
{
struct ip6_tnl *tunnel = netdev_priv(dev);
struct __ip6_tnl_parm *parm = &tunnel->parms;
@@ -461,7 +462,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
-@@ -2121,9 +2359,27 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2116,9 +2355,27 @@ static int ip6_tnl_fill_info(struct sk_b
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) ||
@@ -490,7 +491,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) ||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) ||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) ||
-@@ -2163,6 +2419,7 @@ static const struct nla_policy ip6_tnl_p
+@@ -2158,6 +2415,7 @@ static const struct nla_policy ip6_tnl_p
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
[IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG },
[IFLA_IPTUN_FWMARK] = { .type = NLA_U32 },
diff --git a/target/linux/generic/pending-5.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch b/target/linux/generic/pending-5.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
index c35aca8a18..022537da70 100644
--- a/target/linux/generic/pending-5.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
+++ b/target/linux/generic/pending-5.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
@@ -20,7 +20,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
-@@ -78,6 +78,7 @@ struct netns_ipv6 {
+@@ -84,6 +84,7 @@ struct netns_ipv6 {
unsigned int fib6_rules_require_fldissect;
bool fib6_has_custom_rules;
struct rt6_info *ip6_prohibit_entry;
@@ -43,7 +43,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
-@@ -228,6 +228,7 @@ enum {
+@@ -235,6 +235,7 @@ enum {
RTN_THROW, /* Not in this table */
RTN_NAT, /* Translate this address */
RTN_XRESOLVE, /* Use external resolver */
@@ -53,7 +53,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
-@@ -139,6 +139,10 @@ const struct fib_prop fib_props[RTN_MAX
+@@ -141,6 +141,10 @@ const struct fib_prop fib_props[RTN_MAX
.error = -EINVAL,
.scope = RT_SCOPE_NOWHERE,
},
@@ -66,7 +66,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
static void rt_fibinfo_free(struct rtable __rcu **rtp)
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2474,6 +2474,7 @@ static const char *const rtn_type_names[
+@@ -2592,6 +2592,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
@@ -76,7 +76,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
-@@ -179,6 +179,7 @@ static int ipmr_rule_action(struct fib_r
+@@ -173,6 +173,7 @@ static int ipmr_rule_action(struct fib_r
case FR_ACT_UNREACHABLE:
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
@@ -86,7 +86,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
default:
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
-@@ -221,6 +221,10 @@ static int __fib6_rule_action(struct fib
+@@ -216,6 +216,10 @@ static int __fib6_rule_action(struct fib
err = -EACCES;
rt = net->ipv6.ip6_prohibit_entry;
goto discard_pkt;
@@ -99,7 +99,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
tb_id = fib_rule_get_table(rule, arg);
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
-@@ -162,6 +162,8 @@ static int ip6mr_rule_action(struct fib_
+@@ -161,6 +161,8 @@ static int ip6mr_rule_action(struct fib_
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
return -EACCES;
@@ -110,7 +110,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
return -EINVAL;
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
-@@ -97,6 +97,8 @@ static int ip6_pkt_discard(struct sk_bu
+@@ -93,6 +93,8 @@ static int ip6_pkt_discard(struct sk_bu
static int ip6_pkt_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb);
static int ip6_pkt_prohibit(struct sk_buff *skb);
static int ip6_pkt_prohibit_out(struct net *net, struct sock *sk, struct sk_buff *skb);
@@ -119,7 +119,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
static void ip6_link_failure(struct sk_buff *skb);
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu,
-@@ -328,6 +330,18 @@ static const struct rt6_info ip6_prohibi
+@@ -326,6 +328,18 @@ static const struct rt6_info ip6_prohibi
.rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
};
@@ -138,7 +138,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__refcnt = ATOMIC_INIT(1),
-@@ -906,6 +920,7 @@ static const int fib6_prop[RTN_MAX + 1]
+@@ -1044,6 +1058,7 @@ static const int fib6_prop[RTN_MAX + 1]
[RTN_BLACKHOLE] = -EINVAL,
[RTN_UNREACHABLE] = -EHOSTUNREACH,
[RTN_PROHIBIT] = -EACCES,
@@ -146,7 +146,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
[RTN_THROW] = -EAGAIN,
[RTN_NAT] = -EINVAL,
[RTN_XRESOLVE] = -EINVAL,
-@@ -943,6 +958,10 @@ static void ip6_rt_init_dst_reject(struc
+@@ -1081,6 +1096,10 @@ static void ip6_rt_init_dst_reject(struc
rt->dst.output = ip6_pkt_prohibit_out;
rt->dst.input = ip6_pkt_prohibit;
break;
@@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
case RTN_THROW:
case RTN_UNREACHABLE:
default:
-@@ -3789,6 +3808,17 @@ static int ip6_pkt_prohibit_out(struct n
+@@ -4389,6 +4408,17 @@ static int ip6_pkt_prohibit_out(struct n
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
}
@@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
/*
* Allocate a dst for local (unicast / anycast) address.
*/
-@@ -4236,7 +4266,8 @@ static int rtm_to_fib6_config(struct sk_
+@@ -4869,7 +4899,8 @@ static int rtm_to_fib6_config(struct sk_
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
@@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -5084,6 +5115,8 @@ static int ip6_route_dev_notify(struct n
+@@ -5988,6 +6019,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
@@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
-@@ -5095,6 +5128,7 @@ static int ip6_route_dev_notify(struct n
+@@ -5999,6 +6032,7 @@ static int ip6_route_dev_notify(struct n
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
@@ -202,40 +202,56 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
#endif
}
-@@ -5289,6 +5323,15 @@ static int __net_init ip6_route_net_init
- net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
- dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
- ip6_template_metrics, true);
+@@ -6191,6 +6225,8 @@ static int __net_init ip6_route_net_init
+
+ #ifdef CONFIG_IPV6_MULTIPLE_TABLES
+ net->ipv6.fib6_has_custom_rules = false;
+
++
+ net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
+ sizeof(*net->ipv6.ip6_prohibit_entry),
+ GFP_KERNEL);
+@@ -6201,11 +6237,21 @@ static int __net_init ip6_route_net_init
+ ip6_template_metrics, true);
+ INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached);
+
+ net->ipv6.ip6_policy_failed_entry =
-+ kmemdup(&ip6_policy_failed_entry_template,
-+ sizeof(*net->ipv6.ip6_policy_failed_entry), GFP_KERNEL);
++ kmemdup(&ip6_policy_failed_entry_template,
++ sizeof(*net->ipv6.ip6_policy_failed_entry), GFP_KERNEL);
+ if (!net->ipv6.ip6_policy_failed_entry)
-+ goto out_ip6_blk_hole_entry;
++ goto out_ip6_prohibit_entry;
+ net->ipv6.ip6_policy_failed_entry->dst.ops = &net->ipv6.ip6_dst_ops;
+ dst_init_metrics(&net->ipv6.ip6_policy_failed_entry->dst,
+ ip6_template_metrics, true);
- #endif
-
- net->ipv6.sysctl.flush_delay = 0;
-@@ -5307,6 +5350,8 @@ out:
++ INIT_LIST_HEAD(&net->ipv6.ip6_policy_failed_entry->rt6i_uncached);
++
+ net->ipv6.ip6_blk_hole_entry = kmemdup(&ip6_blk_hole_entry_template,
+ sizeof(*net->ipv6.ip6_blk_hole_entry),
+ GFP_KERNEL);
+ if (!net->ipv6.ip6_blk_hole_entry)
+- goto out_ip6_prohibit_entry;
++ goto out_ip6_policy_failed_entry;
+ net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
+ dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
+ ip6_template_metrics, true);
+@@ -6229,6 +6275,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
-+out_ip6_blk_hole_entry:
-+ kfree(net->ipv6.ip6_blk_hole_entry);
++out_ip6_policy_failed_entry:
++ kfree(net->ipv6.ip6_policy_failed_entry);
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -5327,6 +5372,7 @@ static void __net_exit ip6_route_net_exi
+@@ -6248,6 +6296,7 @@ static void __net_exit ip6_route_net_exi
+ kfree(net->ipv6.ip6_null_entry);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry);
- kfree(net->ipv6.ip6_blk_hole_entry);
+ kfree(net->ipv6.ip6_policy_failed_entry);
+ kfree(net->ipv6.ip6_blk_hole_entry);
#endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
- }
-@@ -5403,6 +5449,9 @@ void __init ip6_route_init_special_entri
+@@ -6325,6 +6374,9 @@ void __init ip6_route_init_special_entri
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
diff --git a/target/linux/generic/pending-5.4/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch b/target/linux/generic/pending-5.4/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch
index 85adfedc94..a92d8ec4c1 100644
--- a/target/linux/generic/pending-5.4/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch
+++ b/target/linux/generic/pending-5.4/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch
@@ -28,7 +28,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
#endif
--- a/include/uapi/linux/icmpv6.h
+++ b/include/uapi/linux/icmpv6.h
-@@ -119,6 +119,8 @@ struct icmp6hdr {
+@@ -125,6 +125,8 @@ struct icmp6hdr {
#define ICMPV6_POLICY_FAIL 5
#define ICMPV6_REJECT_ROUTE 6
@@ -39,7 +39,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
*/
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
-@@ -232,6 +232,8 @@ enum {
+@@ -239,6 +239,8 @@ enum {
__RTN_MAX
};
diff --git a/target/linux/generic/pending-5.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch b/target/linux/generic/pending-5.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
index 61cc4e830a..b1b166a194 100644
--- a/target/linux/generic/pending-5.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
+++ b/target/linux/generic/pending-5.4/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
-@@ -1891,6 +1891,8 @@ struct net_device {
+@@ -1922,6 +1922,8 @@ struct net_device {
struct netdev_hw_addr_list mc;
struct netdev_hw_addr_list dev_addrs;
@@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#endif
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -799,6 +799,7 @@ struct sk_buff {
+@@ -822,6 +822,7 @@ struct sk_buff {
#ifdef CONFIG_TLS_DEVICE
__u8 decrypted:1;
#endif
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
__u16 tc_index; /* traffic control index */
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -5454,6 +5454,9 @@ static enum gro_result dev_gro_receive(s
+@@ -5477,6 +5477,9 @@ static enum gro_result dev_gro_receive(s
int same_flow;
int grow;
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (netif_elide_gro(skb->dev))
goto normal;
-@@ -7112,6 +7115,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -7269,6 +7272,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower);
}
@@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master,
void *upper_priv, void *upper_info,
-@@ -7162,6 +7207,7 @@ static int __netdev_upper_dev_link(struc
+@@ -7319,6 +7364,7 @@ static int __netdev_upper_dev_link(struc
if (ret)
return ret;
@@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
ret = notifier_to_errno(ret);
-@@ -7254,6 +7300,7 @@ void netdev_upper_dev_unlink(struct net_
+@@ -7412,6 +7458,7 @@ void netdev_upper_dev_unlink(struct net_
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
@@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info);
-@@ -7893,6 +7940,7 @@ int dev_set_mac_address(struct net_devic
+@@ -8142,6 +8189,7 @@ int dev_set_mac_address(struct net_devic
if (err)
return err;
dev->addr_assign_type = NET_ADDR_SET;
@@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return 0;
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
-@@ -144,6 +144,18 @@ u32 eth_get_headlen(void *data, unsigned
+@@ -143,6 +143,18 @@ u32 eth_get_headlen(const struct net_dev
}
EXPORT_SYMBOL(eth_get_headlen);
@@ -136,17 +136,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/**
* eth_type_trans - determine the packet's protocol ID.
* @skb: received socket data
-@@ -172,8 +184,12 @@ __be16 eth_type_trans(struct sk_buff *sk
- skb->pkt_type = PACKET_MULTICAST;
- }
- else if (unlikely(!ether_addr_equal_64bits(eth->h_dest,
-- dev->dev_addr)))
-+ dev->dev_addr))) {
- skb->pkt_type = PACKET_OTHERHOST;
+@@ -174,6 +186,10 @@ __be16 eth_type_trans(struct sk_buff *sk
+ } else {
+ skb->pkt_type = PACKET_OTHERHOST;
+ }
++
+ if (eth_check_local_mask(eth->h_dest, dev->dev_addr,
+ dev->local_addr_mask))
+ skb->gro_skip = 1;
-+ }
+ }
/*
- * Some variants of DSA tagging don't have an ethertype field
diff --git a/target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch b/target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch
index 13f5640590..b02febefd8 100644
--- a/target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch
+++ b/target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch
@@ -16,9 +16,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/of/of_net.c
+++ b/drivers/of/of_net.c
@@ -11,6 +11,7 @@
- #include <linux/of_net.h>
#include <linux/phy.h>
#include <linux/export.h>
+ #include <linux/device.h>
+#include <linux/mtd/mtd.h>
/**
@@ -32,8 +32,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
{
struct property *pp = of_find_property(np, name, NULL);
-@@ -48,6 +49,79 @@ static const void *of_get_mac_addr(struc
- return NULL;
+@@ -72,6 +73,79 @@ static const void *of_get_mac_addr_nvmem
+ return mac;
}
+static const void *of_get_mac_address_mtd(struct device_node *np)
@@ -112,13 +112,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/**
* Search the device tree for the best MAC address to use. 'mac-address' is
* checked first, because that is supposed to contain to "most recent" MAC
-@@ -65,11 +139,18 @@ static const void *of_get_mac_addr(struc
- * addresses. Some older U-Boots only initialized 'local-mac-address'. In
+@@ -92,12 +166,20 @@ static const void *of_get_mac_addr_nvmem
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
* but is all zeros.
+ *
+ *
+ * If a mtd-mac-address property exists, try to fetch the MAC address from the
+ * specified mtd device, and store it as a 'mac-address' property
++ *
+ * Return: Will be a valid pointer on success and ERR_PTR in case of error.
*/
const void *of_get_mac_address(struct device_node *np)
{
diff --git a/target/linux/generic/pending-5.4/703-phy-add-detach-callback-to-struct-phy_driver.patch b/target/linux/generic/pending-5.4/703-phy-add-detach-callback-to-struct-phy_driver.patch
index 1c180b225b..7b19890217 100644
--- a/target/linux/generic/pending-5.4/703-phy-add-detach-callback-to-struct-phy_driver.patch
+++ b/target/linux/generic/pending-5.4/703-phy-add-detach-callback-to-struct-phy_driver.patch
@@ -11,21 +11,21 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
-@@ -1201,6 +1201,9 @@ void phy_detach(struct phy_device *phyde
- struct module *ndev_owner = dev->dev.parent->driver->owner;
+@@ -1458,6 +1458,9 @@ void phy_detach(struct phy_device *phyde
+ struct module *ndev_owner = NULL;
struct mii_bus *bus;
+ if (phydev->drv && phydev->drv->detach)
+ phydev->drv->detach(phydev);
+
if (phydev->sysfs_links) {
- sysfs_remove_link(&dev->dev.kobj, "phydev");
- sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
+ if (dev)
+ sysfs_remove_link(&dev->dev.kobj, "phydev");
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -567,6 +567,12 @@ struct phy_driver {
- */
- int (*did_interrupt)(struct phy_device *phydev);
+@@ -537,6 +537,12 @@ struct phy_driver {
+ /* Override default interrupt handling */
+ int (*handle_interrupt)(struct phy_device *phydev);
+ /*
+ * Called before an ethernet device is detached
diff --git a/target/linux/generic/pending-5.4/735-net-phy-at803x-fix-at8033-sgmii-mode.patch b/target/linux/generic/pending-5.4/735-net-phy-at803x-fix-at8033-sgmii-mode.patch
index 5c00b8781f..795743057a 100644
--- a/target/linux/generic/pending-5.4/735-net-phy-at803x-fix-at8033-sgmii-mode.patch
+++ b/target/linux/generic/pending-5.4/735-net-phy-at803x-fix-at8033-sgmii-mode.patch
@@ -13,15 +13,15 @@ Signed-off-by: Roman Yeryomin <roman@advem.lv>
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
-@@ -44,6 +44,7 @@
- #define AT803X_FUNC_DATA 0x4003
+@@ -46,6 +46,7 @@
+ #define AT803X_LOC_MAC_ADDR_32_47_OFFSET 0x804A
#define AT803X_REG_CHIP_CONFIG 0x1f
#define AT803X_BT_BX_REG_SEL 0x8000
+#define AT803X_SGMII_ANEG_EN 0x1000
#define AT803X_DEBUG_ADDR 0x1D
#define AT803X_DEBUG_DATA 0x1E
-@@ -252,6 +253,27 @@ static int at803x_probe(struct phy_devic
+@@ -259,6 +260,27 @@ static int at803x_probe(struct phy_devic
static int at803x_config_init(struct phy_device *phydev)
{
int ret;
@@ -47,5 +47,5 @@ Signed-off-by: Roman Yeryomin <roman@advem.lv>
+ return ret;
+ }
- ret = genphy_config_init(phydev);
- if (ret < 0)
+ /* The RX and TX delay default is:
+ * after HW reset: RX delay enabled and TX delay disabled
diff --git a/target/linux/generic/pending-5.4/739-net-avoid-tx-fault-with-Nokia-GPON-module.patch b/target/linux/generic/pending-5.4/739-net-avoid-tx-fault-with-Nokia-GPON-module.patch
index b540e1dbc1..627d33e2ea 100644
--- a/target/linux/generic/pending-5.4/739-net-avoid-tx-fault-with-Nokia-GPON-module.patch
+++ b/target/linux/generic/pending-5.4/739-net-avoid-tx-fault-with-Nokia-GPON-module.patch
@@ -14,7 +14,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -153,10 +153,20 @@ static const enum gpiod_flags gpio_flags
+@@ -155,10 +155,20 @@ static const enum gpiod_flags gpio_flags
GPIOD_ASIS,
};
@@ -39,7 +39,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* SFP module presence detection is poor: the three MOD DEF signals are
* the same length on the PCB, which means it's possible for MOD DEF 0 to
-@@ -216,6 +226,7 @@ struct sfp {
+@@ -218,6 +228,7 @@ struct sfp {
struct sfp_eeprom_id id;
unsigned int module_power_mW;
@@ -47,7 +47,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
#if IS_ENABLED(CONFIG_HWMON)
struct sfp_diag diag;
-@@ -1590,6 +1601,12 @@ static int sfp_sm_mod_probe(struct sfp *
+@@ -1655,6 +1666,12 @@ static int sfp_sm_mod_probe(struct sfp *
if (ret < 0)
return ret;
@@ -60,7 +60,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
return 0;
}
-@@ -1795,11 +1812,12 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1860,11 +1877,12 @@ static void sfp_sm_main(struct sfp *sfp,
break;
if (sfp->state & SFP_F_TX_FAULT) {
@@ -77,7 +77,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (timeout > T_WAIT)
timeout -= T_WAIT;
else
-@@ -1816,8 +1834,8 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1881,8 +1899,8 @@ static void sfp_sm_main(struct sfp *sfp,
case SFP_S_INIT:
if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
@@ -88,7 +88,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
*/
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
sfp->sm_retries == 5);
-@@ -1836,7 +1854,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1901,7 +1919,7 @@ static void sfp_sm_main(struct sfp *sfp,
case SFP_S_INIT_TX_FAULT:
if (event == SFP_E_TIMEOUT) {
sfp_module_tx_fault_reset(sfp);
@@ -97,7 +97,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
break;
-@@ -1860,7 +1878,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1925,7 +1943,7 @@ static void sfp_sm_main(struct sfp *sfp,
case SFP_S_TX_FAULT:
if (event == SFP_E_TIMEOUT) {
sfp_module_tx_fault_reset(sfp);
diff --git a/target/linux/generic/pending-5.4/740-net-sfp-remove-incomplete-100BASE-FX-and-100BASE-LX-.patch b/target/linux/generic/pending-5.4/740-net-sfp-remove-incomplete-100BASE-FX-and-100BASE-LX-.patch
index 304d9b40bd..4de6305827 100644
--- a/target/linux/generic/pending-5.4/740-net-sfp-remove-incomplete-100BASE-FX-and-100BASE-LX-.patch
+++ b/target/linux/generic/pending-5.4/740-net-sfp-remove-incomplete-100BASE-FX-and-100BASE-LX-.patch
@@ -17,7 +17,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
-@@ -341,9 +341,7 @@ phy_interface_t sfp_select_interface(str
+@@ -342,9 +342,7 @@ phy_interface_t sfp_select_interface(str
if (phylink_test(link_modes, 2500baseX_Full))
return PHY_INTERFACE_MODE_2500BASEX;
@@ -30,7 +30,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (phylink_test(link_modes, 1000baseX_Full))
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -1424,18 +1424,7 @@ static void sfp_sm_fault(struct sfp *sfp
+@@ -1489,18 +1489,7 @@ static void sfp_sm_fault(struct sfp *sfp
static void sfp_sm_probe_for_phy(struct sfp *sfp)
{
diff --git a/target/linux/generic/pending-5.4/741-net-sfp-derive-interface-mode-from-ethtool-link-mode.patch b/target/linux/generic/pending-5.4/741-net-sfp-derive-interface-mode-from-ethtool-link-mode.patch
index f20b66eae7..8158c78b0e 100644
--- a/target/linux/generic/pending-5.4/741-net-sfp-derive-interface-mode-from-ethtool-link-mode.patch
+++ b/target/linux/generic/pending-5.4/741-net-sfp-derive-interface-mode-from-ethtool-link-mode.patch
@@ -18,7 +18,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
-@@ -227,7 +227,7 @@ static int mv3310_sfp_insert(void *upstr
+@@ -214,7 +214,7 @@ static int mv3310_sfp_insert(void *upstr
phy_interface_t iface;
sfp_parse_support(phydev->sfp_bus, id, support);
@@ -29,18 +29,18 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
dev_err(&phydev->mdio.dev, "incompatible SFP module inserted\n");
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -1663,7 +1663,7 @@ static int phylink_sfp_module_insert(voi
+@@ -1718,7 +1718,7 @@ static int phylink_sfp_module_insert(voi
linkmode_copy(support1, support);
- iface = sfp_select_interface(pl->sfp_bus, id, config.advertising);
+ iface = sfp_select_interface(pl->sfp_bus, config.advertising);
if (iface == PHY_INTERFACE_MODE_NA) {
- netdev_err(pl->netdev,
- "selection of interface failed, advertisement %*pb\n",
+ phylink_err(pl,
+ "selection of interface failed, advertisement %*pb\n",
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
-@@ -319,16 +319,12 @@ EXPORT_SYMBOL_GPL(sfp_parse_support);
+@@ -320,16 +320,12 @@ EXPORT_SYMBOL_GPL(sfp_parse_support);
/**
* sfp_select_interface() - Select appropriate phy_interface_t mode
* @bus: a pointer to the &struct sfp_bus structure for the sfp module
@@ -59,7 +59,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
unsigned long *link_modes)
{
if (phylink_test(link_modes, 10000baseCR_Full) ||
-@@ -341,7 +337,8 @@ phy_interface_t sfp_select_interface(str
+@@ -342,7 +338,8 @@ phy_interface_t sfp_select_interface(str
if (phylink_test(link_modes, 2500baseX_Full))
return PHY_INTERFACE_MODE_2500BASEX;
diff --git a/target/linux/generic/pending-5.4/742-net-sfp-add-more-extended-compliance-codes.patch b/target/linux/generic/pending-5.4/742-net-sfp-add-more-extended-compliance-codes.patch
index 4ca0ded55d..0ddca287b9 100644
--- a/target/linux/generic/pending-5.4/742-net-sfp-add-more-extended-compliance-codes.patch
+++ b/target/linux/generic/pending-5.4/742-net-sfp-add-more-extended-compliance-codes.patch
@@ -19,7 +19,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
-@@ -123,35 +123,35 @@ int sfp_parse_port(struct sfp_bus *bus,
+@@ -124,35 +124,35 @@ int sfp_parse_port(struct sfp_bus *bus,
/* port is the physical connector, set this from the connector field. */
switch (id->base.connector) {
@@ -70,7 +70,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
port = PORT_OTHER;
break;
default:
-@@ -260,22 +260,33 @@ void sfp_parse_support(struct sfp_bus *b
+@@ -261,22 +261,33 @@ void sfp_parse_support(struct sfp_bus *b
}
switch (id->base.extended_cc) {
@@ -111,7 +111,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
default:
dev_warn(bus->sfp_dev,
"Unknown/unsupported extended compliance code: 0x%02x\n",
-@@ -300,7 +311,7 @@ void sfp_parse_support(struct sfp_bus *b
+@@ -301,7 +312,7 @@ void sfp_parse_support(struct sfp_bus *b
*/
if (bitmap_empty(modes, __ETHTOOL_LINK_MODE_MASK_NBITS)) {
/* If the encoding and bit rate allows 1000baseX */
@@ -120,7 +120,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
br_min <= 1300 && br_max >= 1200)
phylink_set(modes, 1000baseX_Full);
}
-@@ -331,7 +342,8 @@ phy_interface_t sfp_select_interface(str
+@@ -332,7 +343,8 @@ phy_interface_t sfp_select_interface(str
phylink_test(link_modes, 10000baseSR_Full) ||
phylink_test(link_modes, 10000baseLR_Full) ||
phylink_test(link_modes, 10000baseLRM_Full) ||
@@ -132,7 +132,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (phylink_test(link_modes, 2500baseX_Full))
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -240,7 +240,7 @@ struct sfp {
+@@ -242,7 +242,7 @@ struct sfp {
static bool sff_module_supported(const struct sfp_eeprom_id *id)
{
@@ -141,7 +141,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
}
-@@ -251,7 +251,7 @@ static const struct sff_data sff_data =
+@@ -253,7 +253,7 @@ static const struct sff_data sff_data =
static bool sfp_module_supported(const struct sfp_eeprom_id *id)
{
diff --git a/target/linux/generic/pending-5.4/743-net-sfp-add-module-start-stop-upstream-notifications.patch b/target/linux/generic/pending-5.4/743-net-sfp-add-module-start-stop-upstream-notifications.patch
index c0c3e9e57e..44de1b2a32 100644
--- a/target/linux/generic/pending-5.4/743-net-sfp-add-module-start-stop-upstream-notifications.patch
+++ b/target/linux/generic/pending-5.4/743-net-sfp-add-module-start-stop-upstream-notifications.patch
@@ -32,7 +32,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
-@@ -711,6 +711,27 @@ void sfp_module_remove(struct sfp_bus *b
+@@ -712,6 +712,27 @@ void sfp_module_remove(struct sfp_bus *b
}
EXPORT_SYMBOL_GPL(sfp_module_remove);
@@ -62,7 +62,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
bus->sfp_dev = NULL;
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -57,6 +57,7 @@ enum {
+@@ -59,6 +59,7 @@ enum {
SFP_DEV_UP,
SFP_S_DOWN = 0,
@@ -70,7 +70,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
SFP_S_WAIT,
SFP_S_INIT,
SFP_S_INIT_TX_FAULT,
-@@ -120,6 +121,7 @@ static const char *event_to_str(unsigned
+@@ -122,6 +123,7 @@ static const char *event_to_str(unsigned
static const char * const sm_state_strings[] = {
[SFP_S_DOWN] = "down",
@@ -78,7 +78,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
[SFP_S_WAIT] = "wait",
[SFP_S_INIT] = "init",
[SFP_S_INIT_TX_FAULT] = "init_tx_fault",
-@@ -1766,6 +1768,8 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1831,6 +1833,8 @@ static void sfp_sm_main(struct sfp *sfp,
if (sfp->sm_state == SFP_S_LINK_UP &&
sfp->sm_dev_state == SFP_DEV_UP)
sfp_sm_link_down(sfp);
@@ -87,7 +87,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (sfp->mod_phy)
sfp_sm_phy_detach(sfp);
sfp_module_tx_disable(sfp);
-@@ -1833,6 +1837,10 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1898,6 +1902,10 @@ static void sfp_sm_main(struct sfp *sfp,
* clear. Probe for the PHY and check the LOS state.
*/
sfp_sm_probe_for_phy(sfp);
diff --git a/target/linux/generic/pending-5.4/744-net-sfp-move-phy_start-phy_stop-to-phylink.patch b/target/linux/generic/pending-5.4/744-net-sfp-move-phy_start-phy_stop-to-phylink.patch
index a646fcd409..e88a81df2d 100644
--- a/target/linux/generic/pending-5.4/744-net-sfp-move-phy_start-phy_stop-to-phylink.patch
+++ b/target/linux/generic/pending-5.4/744-net-sfp-move-phy_start-phy_stop-to-phylink.patch
@@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -1717,6 +1717,26 @@ static int phylink_sfp_module_insert(voi
+@@ -1772,6 +1772,26 @@ static int phylink_sfp_module_insert(voi
return ret;
}
@@ -43,7 +43,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
static void phylink_sfp_link_down(void *upstream)
{
struct phylink *pl = upstream;
-@@ -1752,6 +1772,8 @@ static const struct sfp_upstream_ops sfp
+@@ -1807,6 +1827,8 @@ static const struct sfp_upstream_ops sfp
.attach = phylink_sfp_attach,
.detach = phylink_sfp_detach,
.module_insert = phylink_sfp_module_insert,
@@ -54,7 +54,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
.connect_phy = phylink_sfp_connect_phy,
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -1331,7 +1331,6 @@ static void sfp_sm_mod_next(struct sfp *
+@@ -1396,7 +1396,6 @@ static void sfp_sm_mod_next(struct sfp *
static void sfp_sm_phy_detach(struct sfp *sfp)
{
@@ -62,7 +62,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
sfp_remove_phy(sfp->sfp_bus);
phy_device_remove(sfp->mod_phy);
phy_device_free(sfp->mod_phy);
-@@ -1362,7 +1361,6 @@ static void sfp_sm_probe_phy(struct sfp
+@@ -1427,7 +1426,6 @@ static void sfp_sm_probe_phy(struct sfp
}
sfp->mod_phy = phy;
diff --git a/target/linux/generic/pending-5.4/745-net-mdio-i2c-add-support-for-Clause-45-accesses.patch b/target/linux/generic/pending-5.4/745-net-mdio-i2c-add-support-for-Clause-45-accesses.patch
index 9a4bb5bb78..761a94b3d4 100644
--- a/target/linux/generic/pending-5.4/745-net-mdio-i2c-add-support-for-Clause-45-accesses.patch
+++ b/target/linux/generic/pending-5.4/745-net-mdio-i2c-add-support-for-Clause-45-accesses.patch
@@ -15,7 +15,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/mdio-i2c.c
+++ b/drivers/net/phy/mdio-i2c.c
-@@ -36,17 +36,24 @@ static int i2c_mii_read(struct mii_bus *
+@@ -33,17 +33,24 @@ static int i2c_mii_read(struct mii_bus *
{
struct i2c_adapter *i2c = bus->priv;
struct i2c_msg msgs[2];
@@ -43,7 +43,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
msgs[1].addr = bus_addr;
msgs[1].flags = I2C_M_RD;
msgs[1].len = sizeof(data);
-@@ -64,18 +71,23 @@ static int i2c_mii_write(struct mii_bus
+@@ -61,18 +68,23 @@ static int i2c_mii_write(struct mii_bus
struct i2c_adapter *i2c = bus->priv;
struct i2c_msg msg;
int ret;
diff --git a/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch b/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch
index c74a56c575..d547a18d6e 100644
--- a/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch
+++ b/target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch
@@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -728,11 +728,9 @@ static int phylink_bringup_phy(struct ph
+@@ -765,11 +765,9 @@ static int phylink_bringup_phy(struct ph
return 0;
}
@@ -30,7 +30,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (WARN_ON(pl->link_an_mode == MLO_AN_FIXED ||
(pl->link_an_mode == MLO_AN_INBAND &&
phy_interface_mode_is_8023z(interface))))
-@@ -741,15 +739,7 @@ static int __phylink_connect_phy(struct
+@@ -778,15 +776,7 @@ static int __phylink_connect_phy(struct
if (pl->phydev)
return -EBUSY;
@@ -47,7 +47,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
/**
-@@ -769,13 +759,23 @@ static int __phylink_connect_phy(struct
+@@ -806,13 +796,23 @@ static int __phylink_connect_phy(struct
*/
int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
{
@@ -72,7 +72,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
EXPORT_SYMBOL_GPL(phylink_connect_phy);
-@@ -1759,8 +1759,17 @@ static void phylink_sfp_link_up(void *up
+@@ -1814,8 +1814,17 @@ static void phylink_sfp_link_up(void *up
static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy)
{
struct phylink *pl = upstream;
diff --git a/target/linux/generic/pending-5.4/747-net-phylink-support-Clause-45-PHYs-on-SFP-modules.patch b/target/linux/generic/pending-5.4/747-net-phylink-support-Clause-45-PHYs-on-SFP-modules.patch
index 2cea118c82..673de1005a 100644
--- a/target/linux/generic/pending-5.4/747-net-phylink-support-Clause-45-PHYs-on-SFP-modules.patch
+++ b/target/linux/generic/pending-5.4/747-net-phylink-support-Clause-45-PHYs-on-SFP-modules.patch
@@ -18,8 +18,8 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -671,7 +671,8 @@ static void phylink_phy_change(struct ph
- phy_duplex_to_str(phydev->duplex));
+@@ -712,7 +712,8 @@ static void phylink_phy_change(struct ph
+ phy_duplex_to_str(phydev->duplex));
}
-static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy)
@@ -28,16 +28,16 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
{
struct phylink_link_state config;
__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
-@@ -691,7 +692,7 @@ static int phylink_bringup_phy(struct ph
- ethtool_convert_legacy_u32_to_link_mode(supported, phy->supported);
- ethtool_convert_legacy_u32_to_link_mode(config.advertising,
- phy->advertising);
+@@ -730,7 +731,7 @@ static int phylink_bringup_phy(struct ph
+ memset(&config, 0, sizeof(config));
+ linkmode_copy(supported, phy->supported);
+ linkmode_copy(config.advertising, phy->advertising);
- config.interface = pl->link_config.interface;
+ config.interface = interface;
ret = phylink_validate(pl, supported, &config);
if (ret)
-@@ -707,6 +708,7 @@ static int phylink_bringup_phy(struct ph
+@@ -746,6 +747,7 @@ static int phylink_bringup_phy(struct ph
mutex_lock(&phy->lock);
mutex_lock(&pl->state_mutex);
pl->phydev = phy;
@@ -45,7 +45,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
linkmode_copy(pl->supported, supported);
linkmode_copy(pl->link_config.advertising, config.advertising);
-@@ -771,7 +773,7 @@ int phylink_connect_phy(struct phylink *
+@@ -808,7 +810,7 @@ int phylink_connect_phy(struct phylink *
if (ret < 0)
return ret;
@@ -54,7 +54,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (ret)
phy_detach(phy);
-@@ -824,7 +826,7 @@ int phylink_of_phy_connect(struct phylin
+@@ -861,7 +863,7 @@ int phylink_of_phy_connect(struct phylin
if (!phy_dev)
return -ENODEV;
@@ -63,7 +63,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (ret)
phy_detach(phy_dev);
-@@ -1759,13 +1761,22 @@ static void phylink_sfp_link_up(void *up
+@@ -1814,13 +1816,22 @@ static void phylink_sfp_link_up(void *up
static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy)
{
struct phylink *pl = upstream;
diff --git a/target/linux/generic/pending-5.4/748-net-phylink-split-link_an_mode-configured-and-curren.patch b/target/linux/generic/pending-5.4/748-net-phylink-split-link_an_mode-configured-and-curren.patch
index f30d37f0c6..eaf21dbc87 100644
--- a/target/linux/generic/pending-5.4/748-net-phylink-split-link_an_mode-configured-and-curren.patch
+++ b/target/linux/generic/pending-5.4/748-net-phylink-split-link_an_mode-configured-and-curren.patch
@@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
u8 link_port; /* The current non-phy ethtool port */
__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
-@@ -253,12 +254,12 @@ static int phylink_parse_mode(struct phy
+@@ -258,12 +259,12 @@ static int phylink_parse_mode(struct phy
dn = fwnode_get_named_child_node(fwnode, "fixed-link");
if (dn || fwnode_property_present(fwnode, "fixed-link"))
@@ -38,10 +38,10 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
strcmp(managed, "in-band-status") == 0) {
- if (pl->link_an_mode == MLO_AN_FIXED) {
+ if (pl->cfg_link_an_mode == MLO_AN_FIXED) {
- netdev_err(pl->netdev,
- "can't use both fixed-link and in-band-status\n");
+ phylink_err(pl,
+ "can't use both fixed-link and in-band-status\n");
return -EINVAL;
-@@ -270,7 +271,7 @@ static int phylink_parse_mode(struct phy
+@@ -275,7 +276,7 @@ static int phylink_parse_mode(struct phy
phylink_set(pl->supported, Asym_Pause);
phylink_set(pl->supported, Pause);
pl->link_config.an_enabled = true;
@@ -50,24 +50,42 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
switch (pl->link_config.interface) {
case PHY_INTERFACE_MODE_SGMII:
-@@ -330,14 +331,14 @@ static void phylink_mac_config(struct ph
+@@ -335,14 +336,14 @@ static void phylink_mac_config(struct ph
{
- netdev_dbg(pl->netdev,
- "%s: mode=%s/%s/%s/%s adv=%*pb pause=%02x link=%u an=%u\n",
-- __func__, phylink_an_mode_str(pl->link_an_mode),
-+ __func__, phylink_an_mode_str(pl->cur_link_an_mode),
- phy_modes(state->interface),
- phy_speed_to_str(state->speed),
- phy_duplex_to_str(state->duplex),
- __ETHTOOL_LINK_MODE_MASK_NBITS, state->advertising,
- state->pause, state->link, state->an_enabled);
-
-- pl->ops->mac_config(pl->netdev, pl->link_an_mode, state);
-+ pl->ops->mac_config(pl->netdev, pl->cur_link_an_mode, state);
+ phylink_dbg(pl,
+ "%s: mode=%s/%s/%s/%s adv=%*pb pause=%02x link=%u an=%u\n",
+- __func__, phylink_an_mode_str(pl->link_an_mode),
++ __func__, phylink_an_mode_str(pl->cur_link_an_mode),
+ phy_modes(state->interface),
+ phy_speed_to_str(state->speed),
+ phy_duplex_to_str(state->duplex),
+ __ETHTOOL_LINK_MODE_MASK_NBITS, state->advertising,
+ state->pause, state->link, state->an_enabled);
+
+- pl->ops->mac_config(pl->config, pl->link_an_mode, state);
++ pl->ops->mac_config(pl->config, pl->cur_link_an_mode, state);
}
static void phylink_mac_config_up(struct phylink *pl,
-@@ -446,7 +447,7 @@ static void phylink_resolve(struct work_
+@@ -443,7 +444,7 @@ static void phylink_mac_link_up(struct p
+ struct net_device *ndev = pl->netdev;
+
+ pl->cur_interface = link_state.interface;
+- pl->ops->mac_link_up(pl->config, pl->link_an_mode,
++ pl->ops->mac_link_up(pl->config, pl->cur_link_an_mode,
+ pl->cur_interface, pl->phydev);
+
+ if (ndev)
+@@ -462,7 +463,7 @@ static void phylink_mac_link_down(struct
+
+ if (ndev)
+ netif_carrier_off(ndev);
+- pl->ops->mac_link_down(pl->config, pl->link_an_mode,
++ pl->ops->mac_link_down(pl->config, pl->cur_link_an_mode,
+ pl->cur_interface);
+ phylink_info(pl, "Link is Down\n");
+ }
+@@ -481,7 +482,7 @@ static void phylink_resolve(struct work_
} else if (pl->mac_link_dropped) {
link_state.link = false;
} else {
@@ -76,22 +94,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
case MLO_AN_PHY:
link_state = pl->phy_state;
phylink_resolve_flow(pl, &link_state);
-@@ -483,12 +484,12 @@ static void phylink_resolve(struct work_
- if (link_state.link != netif_carrier_ok(ndev)) {
- if (!link_state.link) {
- netif_carrier_off(ndev);
-- pl->ops->mac_link_down(ndev, pl->link_an_mode,
-+ pl->ops->mac_link_down(ndev, pl->cur_link_an_mode,
- pl->cur_interface);
- netdev_info(ndev, "Link is Down\n");
- } else {
- pl->cur_interface = link_state.interface;
-- pl->ops->mac_link_up(ndev, pl->link_an_mode,
-+ pl->ops->mac_link_up(ndev, pl->cur_link_an_mode,
- pl->cur_interface, pl->phydev);
-
- netif_carrier_on(ndev);
-@@ -610,7 +611,7 @@ struct phylink *phylink_create(struct ne
+@@ -649,7 +650,7 @@ struct phylink *phylink_create(struct ph
return ERR_PTR(ret);
}
@@ -100,7 +103,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
ret = phylink_parse_fixedlink(pl, fwnode);
if (ret < 0) {
kfree(pl);
-@@ -618,6 +619,8 @@ struct phylink *phylink_create(struct ne
+@@ -657,6 +658,8 @@ struct phylink *phylink_create(struct ph
}
}
@@ -109,7 +112,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
ret = phylink_register_sfp(pl, fwnode);
if (ret < 0) {
kfree(pl);
-@@ -733,8 +736,8 @@ static int phylink_bringup_phy(struct ph
+@@ -770,8 +773,8 @@ static int phylink_bringup_phy(struct ph
static int phylink_attach_phy(struct phylink *pl, struct phy_device *phy,
phy_interface_t interface)
{
@@ -120,7 +123,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
phy_interface_mode_is_8023z(interface))))
return -EINVAL;
-@@ -801,8 +804,8 @@ int phylink_of_phy_connect(struct phylin
+@@ -838,8 +841,8 @@ int phylink_of_phy_connect(struct phylin
int ret;
/* Fixed links and 802.3z are handled without needing a PHY */
@@ -131,7 +134,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
phy_interface_mode_is_8023z(pl->link_interface)))
return 0;
-@@ -813,7 +816,7 @@ int phylink_of_phy_connect(struct phylin
+@@ -850,7 +853,7 @@ int phylink_of_phy_connect(struct phylin
phy_node = of_parse_phandle(dn, "phy-device", 0);
if (!phy_node) {
@@ -140,7 +143,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
return -ENODEV;
return 0;
}
-@@ -876,7 +879,7 @@ int phylink_fixed_state_cb(struct phylin
+@@ -913,7 +916,7 @@ int phylink_fixed_state_cb(struct phylin
/* It does not make sense to let the link be overriden unless we use
* MLO_AN_FIXED
*/
@@ -149,16 +152,16 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
return -EINVAL;
mutex_lock(&pl->state_mutex);
-@@ -926,7 +929,7 @@ void phylink_start(struct phylink *pl)
+@@ -963,7 +966,7 @@ void phylink_start(struct phylink *pl)
ASSERT_RTNL();
- netdev_info(pl->netdev, "configuring for %s/%s link mode\n",
-- phylink_an_mode_str(pl->link_an_mode),
-+ phylink_an_mode_str(pl->cur_link_an_mode),
- phy_modes(pl->link_config.interface));
+ phylink_info(pl, "configuring for %s/%s link mode\n",
+- phylink_an_mode_str(pl->link_an_mode),
++ phylink_an_mode_str(pl->cur_link_an_mode),
+ phy_modes(pl->link_config.interface));
/* Always set the carrier off */
-@@ -948,7 +951,7 @@ void phylink_start(struct phylink *pl)
+@@ -986,7 +989,7 @@ void phylink_start(struct phylink *pl)
clear_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
phylink_run_resolve(pl);
@@ -167,7 +170,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
int irq = gpiod_to_irq(pl->link_gpio);
if (irq > 0) {
-@@ -963,7 +966,7 @@ void phylink_start(struct phylink *pl)
+@@ -1001,7 +1004,7 @@ void phylink_start(struct phylink *pl)
if (irq <= 0)
mod_timer(&pl->link_poll, jiffies + HZ);
}
@@ -176,7 +179,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
mod_timer(&pl->link_poll, jiffies + HZ);
if (pl->phydev)
phy_start(pl->phydev);
-@@ -1090,7 +1093,7 @@ int phylink_ethtool_ksettings_get(struct
+@@ -1128,7 +1131,7 @@ int phylink_ethtool_ksettings_get(struct
linkmode_copy(kset->link_modes.supported, pl->supported);
@@ -185,7 +188,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
case MLO_AN_FIXED:
/* We are using fixed settings. Report these as the
* current link settings - and note that these also
-@@ -1163,7 +1166,7 @@ int phylink_ethtool_ksettings_set(struct
+@@ -1200,7 +1203,7 @@ int phylink_ethtool_ksettings_set(struct
/* If we have a fixed link (as specified by firmware), refuse
* to change link parameters.
*/
@@ -194,7 +197,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
(s->speed != pl->link_config.speed ||
s->duplex != pl->link_config.duplex))
return -EINVAL;
-@@ -1175,7 +1178,7 @@ int phylink_ethtool_ksettings_set(struct
+@@ -1212,7 +1215,7 @@ int phylink_ethtool_ksettings_set(struct
__clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, config.advertising);
} else {
/* If we have a fixed link, refuse to enable autonegotiation */
@@ -203,7 +206,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
return -EINVAL;
config.speed = SPEED_UNKNOWN;
-@@ -1217,7 +1220,7 @@ int phylink_ethtool_ksettings_set(struct
+@@ -1254,7 +1257,7 @@ int phylink_ethtool_ksettings_set(struct
* configuration. For a fixed link, this isn't able to change any
* parameters, which just leaves inband mode.
*/
@@ -212,7 +215,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
!test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state)) {
phylink_mac_config(pl, &pl->link_config);
phylink_mac_an_restart(pl);
-@@ -1307,7 +1310,7 @@ int phylink_ethtool_set_pauseparam(struc
+@@ -1344,7 +1347,7 @@ int phylink_ethtool_set_pauseparam(struc
pause->tx_pause);
} else if (!test_bit(PHYLINK_DISABLE_STOPPED,
&pl->phylink_disable_state)) {
@@ -221,7 +224,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
case MLO_AN_FIXED:
/* Should we allow fixed links to change against the config? */
phylink_resolve_flow(pl, config);
-@@ -1496,7 +1499,7 @@ static int phylink_mii_read(struct phyli
+@@ -1551,7 +1554,7 @@ static int phylink_mii_read(struct phyli
struct phylink_link_state state;
int val = 0xffff;
@@ -230,7 +233,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
case MLO_AN_FIXED:
if (phy_id == 0) {
phylink_get_fixed_state(pl, &state);
-@@ -1524,7 +1527,7 @@ static int phylink_mii_read(struct phyli
+@@ -1579,7 +1582,7 @@ static int phylink_mii_read(struct phyli
static int phylink_mii_write(struct phylink *pl, unsigned int phy_id,
unsigned int reg, unsigned int val)
{
@@ -239,7 +242,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
case MLO_AN_FIXED:
break;
-@@ -1698,10 +1701,10 @@ static int phylink_sfp_module_insert(voi
+@@ -1753,10 +1756,10 @@ static int phylink_sfp_module_insert(voi
linkmode_copy(pl->link_config.advertising, config.advertising);
}
diff --git a/target/linux/generic/pending-5.4/749-net-phylink-split-phylink_sfp_module_insert.patch b/target/linux/generic/pending-5.4/749-net-phylink-split-phylink_sfp_module_insert.patch
index 87d70d1434..b840d71c43 100644
--- a/target/linux/generic/pending-5.4/749-net-phylink-split-phylink_sfp_module_insert.patch
+++ b/target/linux/generic/pending-5.4/749-net-phylink-split-phylink_sfp_module_insert.patch
@@ -13,7 +13,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -1633,25 +1633,21 @@ static void phylink_sfp_detach(void *ups
+@@ -1688,25 +1688,21 @@ static void phylink_sfp_detach(void *ups
pl->netdev->sfp_bus = NULL;
}
@@ -46,7 +46,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
config.interface = PHY_INTERFACE_MODE_NA;
config.speed = SPEED_UNKNOWN;
config.duplex = DUPLEX_UNKNOWN;
-@@ -1666,8 +1662,6 @@ static int phylink_sfp_module_insert(voi
+@@ -1721,8 +1717,6 @@ static int phylink_sfp_module_insert(voi
return ret;
}
@@ -54,30 +54,30 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-
iface = sfp_select_interface(pl->sfp_bus, config.advertising);
if (iface == PHY_INTERFACE_MODE_NA) {
- netdev_err(pl->netdev,
-@@ -1677,18 +1671,18 @@ static int phylink_sfp_module_insert(voi
+ phylink_err(pl,
+@@ -1732,18 +1726,18 @@ static int phylink_sfp_module_insert(voi
}
config.interface = iface;
+ linkmode_copy(support1, support);
ret = phylink_validate(pl, support1, &config);
if (ret) {
- netdev_err(pl->netdev, "validation of %s/%s with support %*pb failed: %d\n",
-- phylink_an_mode_str(MLO_AN_INBAND),
-+ phylink_an_mode_str(mode),
- phy_modes(config.interface),
- __ETHTOOL_LINK_MODE_MASK_NBITS, support, ret);
+ phylink_err(pl, "validation of %s/%s with support %*pb failed: %d\n",
+- phylink_an_mode_str(MLO_AN_INBAND),
++ phylink_an_mode_str(mode),
+ phy_modes(config.interface),
+ __ETHTOOL_LINK_MODE_MASK_NBITS, support, ret);
return ret;
}
- netdev_dbg(pl->netdev, "requesting link mode %s/%s with support %*pb\n",
-- phylink_an_mode_str(MLO_AN_INBAND),
-- phy_modes(config.interface),
-+ phylink_an_mode_str(mode), phy_modes(config.interface),
- __ETHTOOL_LINK_MODE_MASK_NBITS, support);
+ phylink_dbg(pl, "requesting link mode %s/%s with support %*pb\n",
+- phylink_an_mode_str(MLO_AN_INBAND),
+- phy_modes(config.interface),
++ phylink_an_mode_str(mode), phy_modes(config.interface),
+ __ETHTOOL_LINK_MODE_MASK_NBITS, support);
if (phy_interface_mode_is_8023z(iface) && pl->phydev)
-@@ -1701,15 +1695,15 @@ static int phylink_sfp_module_insert(voi
+@@ -1756,15 +1750,15 @@ static int phylink_sfp_module_insert(voi
linkmode_copy(pl->link_config.advertising, config.advertising);
}
@@ -90,13 +90,13 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
changed = true;
- netdev_info(pl->netdev, "switched to %s/%s link mode\n",
-- phylink_an_mode_str(MLO_AN_INBAND),
-+ phylink_an_mode_str(mode),
- phy_modes(config.interface));
+ phylink_info(pl, "switched to %s/%s link mode\n",
+- phylink_an_mode_str(MLO_AN_INBAND),
++ phylink_an_mode_str(mode),
+ phy_modes(config.interface));
}
-@@ -1722,6 +1716,21 @@ static int phylink_sfp_module_insert(voi
+@@ -1777,6 +1771,21 @@ static int phylink_sfp_module_insert(voi
return ret;
}
diff --git a/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch b/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch
index 358b9a1082..667170a398 100644
--- a/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch
+++ b/target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch
@@ -1,8 +1,7 @@
-From eb514428f75bc67d12ff019c44a8f8ca9f33c54c Mon Sep 17 00:00:00 2001
+From 52c956003a9d5bcae1f445f9dfd42b624adb6e87 Mon Sep 17 00:00:00 2001
From: Russell King <rmk+kernel@armlinux.org.uk>
-Date: Thu, 21 Nov 2019 17:42:49 +0000
-Subject: [PATCH 653/660] net: phylink: delay MAC configuration for copper SFP
- modules
+Date: Wed, 11 Dec 2019 10:56:45 +0000
+Subject: [PATCH] net: phylink: delay MAC configuration for copper SFP modules
Knowing whether we need to delay the MAC configuration because a module
may have a PHY is useful to phylink to allow NBASE-T modules to work on
@@ -17,12 +16,14 @@ We move the PHY-based setup a little later, and use the PHYs support
capabilities rather than the EEPROM parsed capabilities to determine
whether we can support the PHY.
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
---
- drivers/net/phy/phylink.c | 59 +++++++++++++++++++++++++++++++--------
- drivers/net/phy/sfp-bus.c | 28 +++++++++++++++++++
- include/linux/sfp.h | 7 +++++
- 3 files changed, 83 insertions(+), 11 deletions(-)
+ drivers/net/phy/phylink.c | 53 +++++++++++++++++++++++++++++++--------
+ drivers/net/phy/sfp-bus.c | 28 +++++++++++++++++++++
+ include/linux/sfp.h | 7 ++++++
+ 3 files changed, 78 insertions(+), 10 deletions(-)
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -35,8 +36,8 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ u8 sfp_port;
};
- static inline void linkmode_zero(unsigned long *dst)
-@@ -1633,7 +1636,7 @@ static void phylink_sfp_detach(void *ups
+ #define phylink_printk(level, pl, fmt, ...) \
+@@ -1688,7 +1691,7 @@ static void phylink_sfp_detach(void *ups
pl->netdev->sfp_bus = NULL;
}
@@ -45,8 +46,8 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
const unsigned long *supported,
const unsigned long *advertising)
{
-@@ -1707,7 +1710,7 @@ static int phylink_sfp_config(struct phy
- phy_modes(config.interface));
+@@ -1762,7 +1765,7 @@ static int phylink_sfp_config(struct phy
+ phy_modes(config.interface));
}
- pl->link_port = port;
@@ -54,7 +55,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (changed && !test_bit(PHYLINK_DISABLE_STOPPED,
&pl->phylink_disable_state))
-@@ -1720,15 +1723,20 @@ static int phylink_sfp_module_insert(voi
+@@ -1775,15 +1778,20 @@ static int phylink_sfp_module_insert(voi
const struct sfp_eeprom_id *id)
{
struct phylink *pl = upstream;
@@ -79,7 +80,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
static int phylink_sfp_module_start(void *upstream)
-@@ -1736,10 +1744,19 @@ static int phylink_sfp_module_start(void
+@@ -1791,10 +1799,19 @@ static int phylink_sfp_module_start(void
struct phylink *pl = upstream;
/* If this SFP module has a PHY, start the PHY now. */
@@ -102,13 +103,11 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
static void phylink_sfp_module_stop(void *upstream)
-@@ -1773,10 +1790,30 @@ static void phylink_sfp_link_up(void *up
+@@ -1828,10 +1845,26 @@ static void phylink_sfp_link_up(void *up
static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy)
{
struct phylink *pl = upstream;
- phy_interface_t interface = pl->link_config.interface;
-+ __ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
-+ __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
+ phy_interface_t interface;
int ret;
@@ -122,11 +121,9 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ */
+ phy_support_asym_pause(phy);
+
-+ ethtool_convert_legacy_u32_to_link_mode(supported, phy->supported);
-+ ethtool_convert_legacy_u32_to_link_mode(advertising, phy->advertising);
-+
+ /* Do the initial configuration */
-+ ret = phylink_sfp_config(pl, ML_AN_INBAND, supported, advertising);
++ ret = phylink_sfp_config(pl, MLO_AN_INBAND, phy->supported,
++ phy->advertising);
+ if (ret < 0)
+ return ret;
+
@@ -137,7 +134,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
-@@ -102,6 +102,7 @@ static const struct sfp_quirk *sfp_looku
+@@ -103,6 +103,7 @@ static const struct sfp_quirk *sfp_looku
return NULL;
}
@@ -145,7 +142,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/**
* sfp_parse_port() - Parse the EEPROM base ID, setting the port type
* @bus: a pointer to the &struct sfp_bus structure for the sfp module
-@@ -178,6 +179,33 @@ int sfp_parse_port(struct sfp_bus *bus,
+@@ -179,6 +180,33 @@ int sfp_parse_port(struct sfp_bus *bus,
EXPORT_SYMBOL_GPL(sfp_parse_port);
/**
diff --git a/target/linux/generic/pending-5.4/751-net-phylink-make-Broadcom-BCM84881-based-SFPs-work.patch b/target/linux/generic/pending-5.4/751-net-phylink-make-Broadcom-BCM84881-based-SFPs-work.patch
index 1724d445b7..d58304410a 100644
--- a/target/linux/generic/pending-5.4/751-net-phylink-make-Broadcom-BCM84881-based-SFPs-work.patch
+++ b/target/linux/generic/pending-5.4/751-net-phylink-make-Broadcom-BCM84881-based-SFPs-work.patch
@@ -1,7 +1,7 @@
-From 3d8592a23dd67fb78ad85ddf711a059d3880fcb4 Mon Sep 17 00:00:00 2001
+From 7adb5b2126bc013f0964ddaefad6ad1b132e86c3 Mon Sep 17 00:00:00 2001
From: Russell King <rmk+kernel@armlinux.org.uk>
-Date: Fri, 8 Nov 2019 17:19:16 +0000
-Subject: [PATCH 654/660] net: phylink: make Broadcom BCM84881 based SFPs work
+Date: Wed, 11 Dec 2019 10:56:50 +0000
+Subject: [PATCH] net: phylink: make Broadcom BCM84881 based SFPs work
The Broadcom BCM84881 does not appear to send the SGMII control word
when operating in SGMII mode, which causes network adapters to fail
@@ -11,14 +11,16 @@ the PHY negotiated 100M.
Work around this by detecting the Broadcom BCM84881 and switch to phy
mode rather than inband mode.
+Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
---
- drivers/net/phy/phylink.c | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
+ drivers/net/phy/phylink.c | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -1787,12 +1787,22 @@ static void phylink_sfp_link_up(void *up
+@@ -1842,10 +1842,20 @@ static void phylink_sfp_link_up(void *up
phylink_run_resolve(pl);
}
@@ -34,16 +36,14 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
static int phylink_sfp_connect_phy(void *upstream, struct phy_device *phy)
{
struct phylink *pl = upstream;
- __ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
- __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
phy_interface_t interface;
+ u8 mode;
int ret;
/*
-@@ -1807,8 +1817,13 @@ static int phylink_sfp_connect_phy(void
- ethtool_convert_legacy_u32_to_link_mode(supported, phy->supported);
- ethtool_convert_legacy_u32_to_link_mode(advertising, phy->advertising);
+@@ -1857,9 +1867,13 @@ static int phylink_sfp_connect_phy(void
+ */
+ phy_support_asym_pause(phy);
+ if (phylink_phy_no_inband(phy))
+ mode = MLO_AN_PHY;
@@ -51,8 +51,9 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ mode = MLO_AN_INBAND;
+
/* Do the initial configuration */
-- ret = phylink_sfp_config(pl, ML_AN_INBAND, supported, advertising);
-+ ret = phylink_sfp_config(pl, mode, supported, advertising);
+- ret = phylink_sfp_config(pl, MLO_AN_INBAND, phy->supported,
+- phy->advertising);
++ ret = phylink_sfp_config(pl, mode, phy->supported, phy->advertising);
if (ret < 0)
return ret;
diff --git a/target/linux/generic/pending-5.4/752-net-phy-add-Broadcom-BCM84881-PHY-driver.patch b/target/linux/generic/pending-5.4/752-net-phy-add-Broadcom-BCM84881-PHY-driver.patch
index a69cf397aa..8929f1f19e 100644
--- a/target/linux/generic/pending-5.4/752-net-phy-add-Broadcom-BCM84881-PHY-driver.patch
+++ b/target/linux/generic/pending-5.4/752-net-phy-add-Broadcom-BCM84881-PHY-driver.patch
@@ -1,27 +1,30 @@
-From 0f669e10ede7f06bb998373de6a9d169f47fcc66 Mon Sep 17 00:00:00 2001
+From 75f4d8d10e016f7428c268424483a927ee7a78bb Mon Sep 17 00:00:00 2001
From: Russell King <rmk+kernel@armlinux.org.uk>
-Date: Tue, 5 Nov 2019 11:54:30 +0000
-Subject: [PATCH 655/660] net: phy: add Broadcom BCM84881 PHY driver
+Date: Wed, 11 Dec 2019 10:56:56 +0000
+Subject: [PATCH] net: phy: add Broadcom BCM84881 PHY driver
Add a rudimentary Clause 45 driver for the BCM84881 PHY, found on
Methode DM7052 SFPs.
+Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
---
- drivers/net/phy/Kconfig | 5 +
+ drivers/net/phy/Kconfig | 6 +
drivers/net/phy/Makefile | 1 +
- drivers/net/phy/bcm84881.c | 290 +++++++++++++++++++++++++++++++++++++
- 3 files changed, 296 insertions(+)
+ drivers/net/phy/bcm84881.c | 269 +++++++++++++++++++++++++++++++++++++
+ 3 files changed, 276 insertions(+)
create mode 100644 drivers/net/phy/bcm84881.c
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
-@@ -280,6 +280,11 @@ config BROADCOM_PHY
+@@ -329,6 +329,12 @@ config BROADCOM_PHY
Currently supports the BCM5411, BCM5421, BCM5461, BCM54616S, BCM5464,
BCM5481, BCM54810 and BCM5482 PHYs.
+config BCM84881_PHY
+ tristate "Broadcom BCM84881 PHY"
++ depends on PHYLIB
+ ---help---
+ Support the Broadcom BCM84881 PHY.
+
@@ -30,7 +33,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---help---
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
-@@ -54,6 +54,7 @@ obj-$(CONFIG_BCM87XX_PHY) += bcm87xx.o
+@@ -62,6 +62,7 @@ obj-$(CONFIG_BCM87XX_PHY) += bcm87xx.o
obj-$(CONFIG_BCM_CYGNUS_PHY) += bcm-cygnus.o
obj-$(CONFIG_BCM_NET_PHYLIB) += bcm-phy-lib.o
obj-$(CONFIG_BROADCOM_PHY) += broadcom.o
@@ -40,7 +43,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
obj-$(CONFIG_DAVICOM_PHY) += davicom.o
--- /dev/null
+++ b/drivers/net/phy/bcm84881.c
-@@ -0,0 +1,290 @@
+@@ -0,0 +1,269 @@
+// SPDX-License-Identifier: GPL-2.0
+// Broadcom BCM84881 NBASE-T PHY driver, as found on a SFP+ module.
+// Copyright (C) 2019 Russell King, Deep Blue Solutions Ltd.
@@ -116,34 +119,21 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ return 0;
+}
+
-+static int genphy_c45_an_config_aneg(struct phy_device *phydev)
++static int bcm84881_get_features(struct phy_device *phydev)
+{
-+ bool changed = false;
-+ u32 advertising;
+ int ret;
+
-+ phydev->advertising &= phydev->supported;
-+ advertising = phydev->advertising;
-+
-+ ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE,
-+ ADVERTISE_ALL | ADVERTISE_100BASE4 |
-+ ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM,
-+ ethtool_adv_to_mii_adv_t(advertising));
-+ if (ret < 0)
++ ret = genphy_c45_pma_read_abilities(phydev);
++ if (ret)
+ return ret;
-+ if (ret > 0)
-+ changed = true;
+
-+ ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL,
-+ MDIO_AN_10GBT_CTRL_ADV10G,
-+ advertising & ADVERTISED_10000baseT_Full ?
-+ MDIO_AN_10GBT_CTRL_ADV10G : 0);
-+ if (ret < 0)
-+ return ret;
-+ if (ret > 0)
-+ changed = true;
++ /* Although the PHY sets bit 1.11.8, it does not support 10M modes */
++ linkmode_clear_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
++ phydev->supported);
++ linkmode_clear_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
++ phydev->supported);
+
-+ return genphy_c45_check_and_restart_aneg(phydev, changed);
++ return 0;
+}
+
+static int bcm84881_config_aneg(struct phy_device *phydev)
@@ -172,7 +162,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ if (ret > 0)
+ changed = true;
+
-+ adv = ethtool_adv_to_mii_ctrl1000_t(phydev->advertising);
++ adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising);
+ ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN,
+ MDIO_AN_C22 + MII_CTRL1000,
+ ADVERTISE_1000FULL | ADVERTISE_1000HALF,
@@ -203,7 +193,6 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+
+static int bcm84881_read_status(struct phy_device *phydev)
+{
-+ bool autoneg_complete;
+ unsigned int mode;
+ int bmsr, val;
+
@@ -224,24 +213,24 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ if (bmsr < 0)
+ return val;
+
-+ autoneg_complete = !!(val & MDIO_AN_STAT1_COMPLETE) &&
-+ !!(bmsr & BMSR_ANEGCOMPLETE);
++ phydev->autoneg_complete = !!(val & MDIO_AN_STAT1_COMPLETE) &&
++ !!(bmsr & BMSR_ANEGCOMPLETE);
+ phydev->link = !!(val & MDIO_STAT1_LSTATUS) &&
+ !!(bmsr & BMSR_LSTATUS);
-+ if (phydev->autoneg == AUTONEG_ENABLE && !autoneg_complete)
++ if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete)
+ phydev->link = false;
+
+ if (!phydev->link)
+ return 0;
+
-+ phydev->lp_advertising = 0;
++ linkmode_zero(phydev->lp_advertising);
+ phydev->speed = SPEED_UNKNOWN;
+ phydev->duplex = DUPLEX_UNKNOWN;
+ phydev->pause = 0;
+ phydev->asym_pause = 0;
+ phydev->mdix = 0;
+
-+ if (autoneg_complete) {
++ if (phydev->autoneg_complete) {
+ val = genphy_c45_read_lpa(phydev);
+ if (val < 0)
+ return val;
@@ -251,7 +240,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ if (val < 0)
+ return val;
+
-+ phydev->lp_advertising |= mii_stat1000_to_ethtool_lpa_t(val);
++ mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, val);
+
+ if (phydev->autoneg == AUTONEG_ENABLE)
+ phy_resolve_aneg_linkmode(phydev);
@@ -304,16 +293,9 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+ .phy_id = 0xae025150,
+ .phy_id_mask = 0xfffffff0,
+ .name = "Broadcom BCM84881",
-+ .features = SUPPORTED_100baseT_Full |
-+ SUPPORTED_100baseT_Half |
-+ SUPPORTED_1000baseT_Full |
-+ SUPPORTED_Autoneg |
-+ SUPPORTED_TP |
-+ SUPPORTED_FIBRE |
-+ SUPPORTED_10000baseT_Full |
-+ SUPPORTED_Backplane,
+ .config_init = bcm84881_config_init,
+ .probe = bcm84881_probe,
++ .get_features = bcm84881_get_features,
+ .config_aneg = bcm84881_config_aneg,
+ .aneg_done = bcm84881_aneg_done,
+ .read_status = bcm84881_read_status,
diff --git a/target/linux/generic/pending-5.4/753-net-sfp-add-support-for-Clause-45-PHYs.patch b/target/linux/generic/pending-5.4/753-net-sfp-add-support-for-Clause-45-PHYs.patch
index ea26770841..338ddc3761 100644
--- a/target/linux/generic/pending-5.4/753-net-sfp-add-support-for-Clause-45-PHYs.patch
+++ b/target/linux/generic/pending-5.4/753-net-sfp-add-support-for-Clause-45-PHYs.patch
@@ -14,7 +14,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -1337,12 +1337,12 @@ static void sfp_sm_phy_detach(struct sfp
+@@ -1402,12 +1402,12 @@ static void sfp_sm_phy_detach(struct sfp
sfp->mod_phy = NULL;
}
@@ -29,7 +29,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (phy == ERR_PTR(-ENODEV)) {
dev_info(sfp->dev, "no PHY detected\n");
return;
-@@ -1352,6 +1352,13 @@ static void sfp_sm_probe_phy(struct sfp
+@@ -1417,6 +1417,13 @@ static void sfp_sm_probe_phy(struct sfp
return;
}
@@ -43,7 +43,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
err = sfp_add_phy(sfp->sfp_bus, phy);
if (err) {
phy_device_remove(phy);
-@@ -1422,10 +1429,32 @@ static void sfp_sm_fault(struct sfp *sfp
+@@ -1487,10 +1494,32 @@ static void sfp_sm_fault(struct sfp *sfp
}
}
@@ -78,7 +78,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
static int sfp_module_parse_power(struct sfp *sfp)
-@@ -1485,6 +1514,13 @@ static int sfp_sm_mod_hpower(struct sfp
+@@ -1550,6 +1579,13 @@ static int sfp_sm_mod_hpower(struct sfp
return -EAGAIN;
}
diff --git a/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch b/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch
index 55fabafa81..d5f3645025 100644
--- a/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch
+++ b/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch
@@ -15,7 +15,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -2260,6 +2260,10 @@ static int sfp_remove(struct platform_de
+@@ -2343,6 +2343,10 @@ static int sfp_remove(struct platform_de
sfp_unregister_socket(sfp->sfp_bus);
diff --git a/target/linux/generic/pending-5.4/755-net-sfp-fix-hwmon.patch b/target/linux/generic/pending-5.4/755-net-sfp-fix-hwmon.patch
index d003df4e13..8bfe37bf4c 100644
--- a/target/linux/generic/pending-5.4/755-net-sfp-fix-hwmon.patch
+++ b/target/linux/generic/pending-5.4/755-net-sfp-fix-hwmon.patch
@@ -15,7 +15,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -1731,6 +1731,10 @@ static void sfp_sm_module(struct sfp *sf
+@@ -1796,6 +1796,10 @@ static void sfp_sm_module(struct sfp *sf
break;
}
@@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
/* fall through */
case SFP_MOD_WAITDEV:
-@@ -1780,15 +1784,6 @@ static void sfp_sm_module(struct sfp *sf
+@@ -1845,15 +1849,6 @@ static void sfp_sm_module(struct sfp *sf
case SFP_MOD_ERROR:
break;
}
diff --git a/target/linux/generic/pending-5.4/756-net-sfp-use-a-definition-for-the-fault-recovery-atte.patch b/target/linux/generic/pending-5.4/756-net-sfp-use-a-definition-for-the-fault-recovery-atte.patch
index 8362f73f46..47d807813a 100644
--- a/target/linux/generic/pending-5.4/756-net-sfp-use-a-definition-for-the-fault-recovery-atte.patch
+++ b/target/linux/generic/pending-5.4/756-net-sfp-use-a-definition-for-the-fault-recovery-atte.patch
@@ -11,7 +11,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -170,6 +170,14 @@ static const enum gpiod_flags gpio_flags
+@@ -172,6 +172,14 @@ static const enum gpiod_flags gpio_flags
#define T_RESET_US 10
#define T_FAULT_RECOVER msecs_to_jiffies(1000)
@@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* SFP module presence detection is poor: the three MOD DEF signals are
* the same length on the PCB, which means it's possible for MOD DEF 0 to
* connect before the I2C bus on MOD DEF 1/2.
-@@ -1820,7 +1828,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1885,7 +1893,7 @@ static void sfp_sm_main(struct sfp *sfp,
sfp_module_tx_enable(sfp);
/* Initialise the fault clearance retries */
@@ -35,7 +35,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* We need to check the TX_FAULT state, which is not defined
* while TX_DISABLE is asserted. The earliest we want to do
-@@ -1860,7 +1868,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1925,7 +1933,7 @@ static void sfp_sm_main(struct sfp *sfp,
* or t_start_up, so assume there is a fault.
*/
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
@@ -44,7 +44,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
init_done: /* TX_FAULT deasserted or we timed out with TX_FAULT
* clear. Probe for the PHY and check the LOS state.
-@@ -1873,7 +1881,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1938,7 +1946,7 @@ static void sfp_sm_main(struct sfp *sfp,
sfp_sm_link_check_los(sfp);
/* Reset the fault retry count */
diff --git a/target/linux/generic/pending-5.4/757-net-sfp-rename-sm_retries.patch b/target/linux/generic/pending-5.4/757-net-sfp-rename-sm_retries.patch
index c6f43729da..0ca73c9266 100644
--- a/target/linux/generic/pending-5.4/757-net-sfp-rename-sm_retries.patch
+++ b/target/linux/generic/pending-5.4/757-net-sfp-rename-sm_retries.patch
@@ -13,7 +13,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -232,7 +232,7 @@ struct sfp {
+@@ -234,7 +234,7 @@ struct sfp {
unsigned char sm_mod_tries;
unsigned char sm_dev_state;
unsigned short sm_state;
@@ -22,7 +22,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
struct sfp_eeprom_id id;
unsigned int module_power_mW;
-@@ -1425,7 +1425,7 @@ static bool sfp_los_event_inactive(struc
+@@ -1490,7 +1490,7 @@ static bool sfp_los_event_inactive(struc
static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
{
@@ -31,7 +31,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
dev_err(sfp->dev,
"module persistently indicates fault, disabling\n");
sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
-@@ -1828,7 +1828,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1893,7 +1893,7 @@ static void sfp_sm_main(struct sfp *sfp,
sfp_module_tx_enable(sfp);
/* Initialise the fault clearance retries */
@@ -40,7 +40,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* We need to check the TX_FAULT state, which is not defined
* while TX_DISABLE is asserted. The earliest we want to do
-@@ -1868,7 +1868,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1933,7 +1933,7 @@ static void sfp_sm_main(struct sfp *sfp,
* or t_start_up, so assume there is a fault.
*/
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
@@ -49,7 +49,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
init_done: /* TX_FAULT deasserted or we timed out with TX_FAULT
* clear. Probe for the PHY and check the LOS state.
-@@ -1881,7 +1881,7 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1946,7 +1946,7 @@ static void sfp_sm_main(struct sfp *sfp,
sfp_sm_link_check_los(sfp);
/* Reset the fault retry count */
diff --git a/target/linux/generic/pending-5.4/758-net-sfp-error-handling-for-phy-probe.patch b/target/linux/generic/pending-5.4/758-net-sfp-error-handling-for-phy-probe.patch
index 8191e622a1..b0bb905fec 100644
--- a/target/linux/generic/pending-5.4/758-net-sfp-error-handling-for-phy-probe.patch
+++ b/target/linux/generic/pending-5.4/758-net-sfp-error-handling-for-phy-probe.patch
@@ -10,7 +10,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -1345,7 +1345,7 @@ static void sfp_sm_phy_detach(struct sfp
+@@ -1410,7 +1410,7 @@ static void sfp_sm_phy_detach(struct sfp
sfp->mod_phy = NULL;
}
@@ -19,7 +19,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
{
struct phy_device *phy;
int err;
-@@ -1353,18 +1353,18 @@ static void sfp_sm_probe_phy(struct sfp
+@@ -1418,18 +1418,18 @@ static void sfp_sm_probe_phy(struct sfp
phy = get_phy_device(sfp->i2c_mii, SFP_PHY_ADDR, is_c45);
if (phy == ERR_PTR(-ENODEV)) {
dev_info(sfp->dev, "no PHY detected\n");
@@ -41,7 +41,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
err = sfp_add_phy(sfp->sfp_bus, phy);
-@@ -1372,10 +1372,12 @@ static void sfp_sm_probe_phy(struct sfp
+@@ -1437,10 +1437,12 @@ static void sfp_sm_probe_phy(struct sfp
phy_device_remove(phy);
phy_device_free(phy);
dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err);
@@ -55,7 +55,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
static void sfp_sm_link_up(struct sfp *sfp)
-@@ -1448,21 +1450,24 @@ static void sfp_sm_fault(struct sfp *sfp
+@@ -1513,21 +1515,24 @@ static void sfp_sm_fault(struct sfp *sfp
* Clause 45 copper SFP+ modules (10G) appear to switch their interface
* mode according to the negotiated line speed.
*/
@@ -83,7 +83,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
}
static int sfp_module_parse_power(struct sfp *sfp)
-@@ -1873,7 +1878,10 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1938,7 +1943,10 @@ static void sfp_sm_main(struct sfp *sfp,
init_done: /* TX_FAULT deasserted or we timed out with TX_FAULT
* clear. Probe for the PHY and check the LOS state.
*/
diff --git a/target/linux/generic/pending-5.4/759-net-sfp-re-attempt-probing-for-phy.patch b/target/linux/generic/pending-5.4/759-net-sfp-re-attempt-probing-for-phy.patch
index 46d987344f..d122bc7c62 100644
--- a/target/linux/generic/pending-5.4/759-net-sfp-re-attempt-probing-for-phy.patch
+++ b/target/linux/generic/pending-5.4/759-net-sfp-re-attempt-probing-for-phy.patch
@@ -19,7 +19,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -60,6 +60,7 @@ enum {
+@@ -62,6 +62,7 @@ enum {
SFP_S_FAIL,
SFP_S_WAIT,
SFP_S_INIT,
@@ -27,7 +27,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
SFP_S_INIT_TX_FAULT,
SFP_S_WAIT_LOS,
SFP_S_LINK_UP,
-@@ -124,6 +125,7 @@ static const char * const sm_state_strin
+@@ -126,6 +127,7 @@ static const char * const sm_state_strin
[SFP_S_FAIL] = "fail",
[SFP_S_WAIT] = "wait",
[SFP_S_INIT] = "init",
@@ -35,7 +35,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
[SFP_S_INIT_TX_FAULT] = "init_tx_fault",
[SFP_S_WAIT_LOS] = "wait_los",
[SFP_S_LINK_UP] = "link_up",
-@@ -178,6 +180,12 @@ static const enum gpiod_flags gpio_flags
+@@ -180,6 +182,12 @@ static const enum gpiod_flags gpio_flags
#define N_FAULT_INIT 5
#define N_FAULT 5
@@ -48,7 +48,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* SFP module presence detection is poor: the three MOD DEF signals are
* the same length on the PCB, which means it's possible for MOD DEF 0 to
* connect before the I2C bus on MOD DEF 1/2.
-@@ -233,6 +241,7 @@ struct sfp {
+@@ -235,6 +243,7 @@ struct sfp {
unsigned char sm_dev_state;
unsigned short sm_state;
unsigned char sm_fault_retries;
@@ -56,7 +56,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
struct sfp_eeprom_id id;
unsigned int module_power_mW;
-@@ -1351,10 +1360,8 @@ static int sfp_sm_probe_phy(struct sfp *
+@@ -1416,10 +1425,8 @@ static int sfp_sm_probe_phy(struct sfp *
int err;
phy = get_phy_device(sfp->i2c_mii, SFP_PHY_ADDR, is_c45);
@@ -69,7 +69,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
if (IS_ERR(phy)) {
dev_err(sfp->dev, "mdiobus scan returned %ld\n", PTR_ERR(phy));
return PTR_ERR(phy);
-@@ -1802,6 +1809,7 @@ static void sfp_sm_module(struct sfp *sf
+@@ -1867,6 +1874,7 @@ static void sfp_sm_module(struct sfp *sf
static void sfp_sm_main(struct sfp *sfp, unsigned int event)
{
unsigned long timeout;
@@ -77,7 +77,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
/* Some events are global */
if (sfp->sm_state != SFP_S_DOWN &&
-@@ -1875,22 +1883,39 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -1940,22 +1948,39 @@ static void sfp_sm_main(struct sfp *sfp,
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
sfp->sm_fault_retries == N_FAULT_INIT);
} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
diff --git a/target/linux/generic/pending-5.4/810-pci_disable_common_quirks.patch b/target/linux/generic/pending-5.4/810-pci_disable_common_quirks.patch
index c8c28b5175..f4b887d475 100644
--- a/target/linux/generic/pending-5.4/810-pci_disable_common_quirks.patch
+++ b/target/linux/generic/pending-5.4/810-pci_disable_common_quirks.patch
@@ -9,7 +9,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/pci/Kconfig
+++ b/drivers/pci/Kconfig
-@@ -89,6 +89,13 @@ config XEN_PCIDEV_FRONTEND
+@@ -115,6 +115,13 @@ config XEN_PCIDEV_FRONTEND
The PCI device frontend driver allows the kernel to import arbitrary
PCI devices from a PCI backend to support PCI driver domains.
@@ -25,7 +25,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -207,6 +207,7 @@ static void quirk_mmio_always_on(struct
+@@ -205,6 +205,7 @@ static void quirk_mmio_always_on(struct
DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_BRIDGE_HOST, 8, quirk_mmio_always_on);
@@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
/*
* The Mellanox Tavor device gives false positive parity errors. Mark this
* device with a broken_parity_status to allow PCI scanning code to "skip"
-@@ -3152,6 +3153,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
+@@ -3241,6 +3242,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
@@ -42,7 +42,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
/*
* Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.
* To work around this, query the size it should be configured to by the
-@@ -3177,6 +3180,8 @@ static void quirk_intel_ntb(struct pci_d
+@@ -3266,6 +3269,8 @@ static void quirk_intel_ntb(struct pci_d
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
@@ -51,7 +51,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
/*
* Some BIOS implementations leave the Intel GPU interrupts enabled, even
* though no one is handling them (e.g., if the i915 driver is never
-@@ -3215,6 +3220,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
+@@ -3304,6 +3309,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
diff --git a/target/linux/generic/pending-5.4/811-pci_disable_usb_common_quirks.patch b/target/linux/generic/pending-5.4/811-pci_disable_usb_common_quirks.patch
index 848aecaa87..6e4584c8a1 100644
--- a/target/linux/generic/pending-5.4/811-pci_disable_usb_common_quirks.patch
+++ b/target/linux/generic/pending-5.4/811-pci_disable_usb_common_quirks.patch
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static struct amd_chipset_info {
struct pci_dev *nb_dev;
struct pci_dev *smbus_dev;
-@@ -628,6 +630,10 @@ bool usb_amd_pt_check_port(struct device
+@@ -630,6 +632,10 @@ bool usb_amd_pt_check_port(struct device
}
EXPORT_SYMBOL_GPL(usb_amd_pt_check_port);
@@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* Make sure the controller is completely inactive, unable to
* generate interrupts or do DMA.
-@@ -707,8 +713,17 @@ reset_needed:
+@@ -709,8 +715,17 @@ reset_needed:
uhci_reset_hc(pdev, base);
return 1;
}
@@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static inline int io_type_enabled(struct pci_dev *pdev, unsigned int mask)
{
u16 cmd;
-@@ -1275,3 +1290,4 @@ static void quirk_usb_early_handoff(stru
+@@ -1271,3 +1286,4 @@ static void quirk_usb_early_handoff(stru
}
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff);
@@ -62,14 +62,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+#endif /* CONFIG_USB_PCI */
+
+#if defined(CONFIG_USB_PCI) && !defined(CONFIG_PCI_DISABLE_COMMON_QUIRKS)
- int usb_amd_find_chipset_info(void);
int usb_hcd_amd_remote_wakeup_quirk(struct pci_dev *pdev);
bool usb_amd_hang_symptom_quirk(void);
+ bool usb_amd_prefetch_quirk(void);
@@ -19,6 +22,18 @@ void sb800_prefetch(struct device *dev,
bool usb_amd_pt_check_port(struct device *device, int port);
#else
struct pci_dev;
-+static inline int usb_amd_find_chipset_info(void)
++static inline int usb_amd_quirk_pll_check(void)
+{
+ return 0;
+}
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#endif /* __LINUX_USB_PCI_QUIRKS_H */
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
-@@ -473,7 +473,14 @@ extern int usb_hcd_pci_probe(struct pci_
+@@ -483,7 +483,14 @@ extern int usb_hcd_pci_probe(struct pci_
extern void usb_hcd_pci_remove(struct pci_dev *dev);
extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
diff --git a/target/linux/generic/pending-5.4/834-ledtrig-libata.patch b/target/linux/generic/pending-5.4/834-ledtrig-libata.patch
index f1dc0e5995..1d4334e5f9 100644
--- a/target/linux/generic/pending-5.4/834-ledtrig-libata.patch
+++ b/target/linux/generic/pending-5.4/834-ledtrig-libata.patch
@@ -20,7 +20,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
-@@ -46,6 +46,22 @@ config ATA_VERBOSE_ERROR
+@@ -45,6 +45,22 @@ config ATA_VERBOSE_ERROR
If unsure, say Y.
@@ -45,7 +45,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
depends on ACPI
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
-@@ -731,6 +731,19 @@ u64 ata_tf_read_block(const struct ata_t
+@@ -715,6 +715,19 @@ u64 ata_tf_read_block(const struct ata_t
return block;
}
@@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
/**
* ata_build_rw_tf - Build ATA taskfile for given read/write request
* @tf: Target ATA taskfile
-@@ -5134,6 +5147,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
+@@ -5116,6 +5129,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (tag < 0)
return NULL;
}
@@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
qc = __ata_qc_from_tag(ap, tag);
qc->tag = qc->hw_tag = tag;
-@@ -6068,6 +6084,9 @@ struct ata_port *ata_port_alloc(struct a
+@@ -6050,6 +6066,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1;
#endif
@@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
ata_sff_port_init(ap);
return ap;
-@@ -6103,6 +6122,12 @@ static void ata_host_release(struct kref
+@@ -6085,6 +6104,12 @@ static void ata_host_release(struct kref
kfree(ap->pmp_link);
kfree(ap->slave_link);
@@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
kfree(ap);
host->ports[i] = NULL;
}
-@@ -6566,7 +6591,23 @@ int ata_host_register(struct ata_host *h
+@@ -6548,7 +6573,23 @@ int ata_host_register(struct ata_host *h
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
host->ports[i]->local_port_no = i + 1;
}
@@ -124,7 +124,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
rc = ata_tport_add(host->dev,host->ports[i]);
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -38,6 +38,9 @@
+@@ -22,6 +22,9 @@
#include <linux/acpi.h>
#include <linux/cdrom.h>
#include <linux/sched.h>
@@ -134,7 +134,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -893,6 +896,12 @@ struct ata_port {
+@@ -876,6 +879,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
diff --git a/target/linux/generic/pending-5.4/920-mangle_bootargs.patch b/target/linux/generic/pending-5.4/920-mangle_bootargs.patch
index 0750ab77c2..77947cac8f 100644
--- a/target/linux/generic/pending-5.4/920-mangle_bootargs.patch
+++ b/target/linux/generic/pending-5.4/920-mangle_bootargs.patch
@@ -13,7 +13,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1531,6 +1531,15 @@ config EMBEDDED
+@@ -1700,6 +1700,15 @@ config EMBEDDED
an embedded system so certain expert options are available
for configuration.
@@ -31,7 +31,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
help
--- a/init/main.c
+++ b/init/main.c
-@@ -365,6 +365,29 @@ static inline void setup_nr_cpu_ids(void
+@@ -366,6 +366,29 @@ static inline void setup_nr_cpu_ids(void
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
#endif
@@ -61,10 +61,10 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
/*
* We need to store the untouched command line for future reference.
* We also need to store the touched command line since the parameter
-@@ -557,6 +580,7 @@ asmlinkage __visible void __init start_k
- add_device_randomness(command_line, strlen(command_line));
- boot_init_stack_canary();
- mm_init_cpumask(&init_mm);
+@@ -596,6 +619,7 @@ asmlinkage __visible void __init start_k
+ pr_notice("%s", linux_banner);
+ early_security_init();
+ setup_arch(&command_line);
+ mangle_bootargs(command_line);
setup_command_line(command_line);
setup_nr_cpu_ids();