diff options
Diffstat (limited to 'target')
215 files changed, 1535 insertions, 6794 deletions
diff --git a/target/linux/generic/backport-5.4/011-kbuild-export-SUBARCH.patch b/target/linux/generic/backport-5.4/011-kbuild-export-SUBARCH.patch index a42c720446..f39e876436 100644 --- a/target/linux/generic/backport-5.4/011-kbuild-export-SUBARCH.patch +++ b/target/linux/generic/backport-5.4/011-kbuild-export-SUBARCH.patch @@ -10,14 +10,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/Makefile +++ b/Makefile -@@ -432,8 +432,8 @@ KBUILD_LDFLAGS := +@@ -471,8 +471,9 @@ KBUILD_LDFLAGS := GCC_PLUGINS_CFLAGS := CLANG_FLAGS := --export ARCH SRCARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC --export CPP AR NM STRIP OBJCOPY OBJDUMP KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS -+export ARCH SRCARCH SUBARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD -+export CC CPP AR NM STRIP OBJCOPY OBJDUMP KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS - export MAKE LEX YACC AWK GENKSYMS INSTALLKERNEL PERL PYTHON PYTHON2 PYTHON3 UTS_MACHINE - export HOSTCXX KBUILD_HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS +-export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC +-export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE PAHOLE LEX YACC AWK INSTALLKERNEL ++export ARCH SRCARCH SUBARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD ++export CC CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE PAHOLE LEX YACC AWK INSTALLKERNEL ++ + export PERL PYTHON PYTHON2 PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX + export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE diff --git a/target/linux/generic/backport-5.4/020-backport_netfilter_rtcache.patch b/target/linux/generic/backport-5.4/020-backport_netfilter_rtcache.patch index c02b8f39e0..7b1aab9acc 100644 --- a/target/linux/generic/backport-5.4/020-backport_netfilter_rtcache.patch +++ b/target/linux/generic/backport-5.4/020-backport_netfilter_rtcache.patch @@ -94,7 +94,7 @@ Signed-off-by: Florian Westphal <fw@strlen.de> +} --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -135,6 +135,18 @@ config NF_CONNTRACK_EVENTS +@@ -136,6 +136,18 @@ config NF_CONNTRACK_EVENTS If unsure, say `N'. @@ -115,16 +115,16 @@ Signed-off-by: Florian Westphal <fw@strlen.de> depends on NETFILTER_ADVANCED --- a/net/netfilter/Makefile +++ b/net/netfilter/Makefile -@@ -25,6 +25,9 @@ obj-$(CONFIG_NETFILTER_NETLINK_OSF) += n +@@ -26,6 +26,9 @@ obj-$(CONFIG_NETFILTER_NETLINK_OSF) += n # connection tracking obj-$(CONFIG_NF_CONNTRACK) += nf_conntrack.o +# optional conntrack route cache extension +obj-$(CONFIG_NF_CONNTRACK_RTCACHE) += nf_conntrack_rtcache.o + - obj-$(CONFIG_NF_CT_PROTO_GRE) += nf_conntrack_proto_gre.o - # netlink interface for nf_conntrack + obj-$(CONFIG_NF_CT_NETLINK) += nf_conntrack_netlink.o + obj-$(CONFIG_NF_CT_NETLINK_TIMEOUT) += nfnetlink_cttimeout.o --- /dev/null +++ b/net/netfilter/nf_conntrack_rtcache.c @@ -0,0 +1,428 @@ diff --git a/target/linux/generic/backport-5.4/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch b/target/linux/generic/backport-5.4/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch deleted file mode 100644 index d587c9ec07..0000000000 --- a/target/linux/generic/backport-5.4/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 1186af457cc186c5ed01708da71b1ffbdf0a2638 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> -Date: Tue, 20 Nov 2018 09:55:45 +0100 -Subject: [PATCH] mtd: keep original flags for every struct mtd_info -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When allocating a new partition mtd subsystem runs internal tests in the -allocate_partition(). They may result in modifying specified flags (e.g. -dropping some /features/ like write access). - -Those constraints don't have to be necessary true for subpartitions. It -may happen parent partition isn't block aligned (effectively disabling -write access) while subpartition may fit blocks nicely. In such case all -checks should be run again (starting with original flags value). - -Signed-off-by: RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl> -Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> ---- - drivers/mtd/mtdcore.c | 2 ++ - drivers/mtd/mtdpart.c | 3 ++- - include/linux/mtd/mtd.h | 1 + - 3 files changed, 5 insertions(+), 1 deletion(-) - ---- a/drivers/mtd/mtdcore.c -+++ b/drivers/mtd/mtdcore.c -@@ -665,6 +665,8 @@ static void mtd_set_dev_defaults(struct - } else { - pr_debug("mtd device won't show a device symlink in sysfs\n"); - } -+ -+ mtd->orig_flags = mtd->flags; - } - - /** ---- a/drivers/mtd/mtdpart.c -+++ b/drivers/mtd/mtdpart.c -@@ -346,7 +346,8 @@ static struct mtd_part *allocate_partiti - - /* set up the MTD object for this partition */ - slave->mtd.type = parent->type; -- slave->mtd.flags = parent->flags & ~part->mask_flags; -+ slave->mtd.flags = parent->orig_flags & ~part->mask_flags; -+ slave->mtd.orig_flags = slave->mtd.flags; - slave->mtd.size = part->size; - slave->mtd.writesize = parent->writesize; - slave->mtd.writebufsize = parent->writebufsize; ---- a/include/linux/mtd/mtd.h -+++ b/include/linux/mtd/mtd.h -@@ -207,6 +207,7 @@ struct mtd_debug_info { - struct mtd_info { - u_char type; - uint32_t flags; -+ uint32_t orig_flags; /* Flags as before running mtd checks */ - uint64_t size; // Total size of the MTD - - /* "Major" erase size for the device. Naïve users may take this diff --git a/target/linux/generic/backport-5.4/048-v4.21-mtd-improve-calculating-partition-boundaries-when-ch.patch b/target/linux/generic/backport-5.4/048-v4.21-mtd-improve-calculating-partition-boundaries-when-ch.patch deleted file mode 100644 index 02296276b0..0000000000 --- a/target/linux/generic/backport-5.4/048-v4.21-mtd-improve-calculating-partition-boundaries-when-ch.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 6750f61a13a0197c40e4a40739117493b15f19e8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> -Date: Tue, 20 Nov 2018 10:24:09 +0100 -Subject: [PATCH] mtd: improve calculating partition boundaries when checking - for alignment -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When checking for alignment mtd should check absolute offsets. It's -important for subpartitions as it doesn't make sense to check their -relative addresses. - -Signed-off-by: RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl> -Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> ---- - drivers/mtd/mtdpart.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - ---- a/drivers/mtd/mtdpart.c -+++ b/drivers/mtd/mtdpart.c -@@ -61,6 +61,15 @@ static inline struct mtd_part *mtd_to_pa - return container_of(mtd, struct mtd_part, mtd); - } - -+static u64 part_absolute_offset(struct mtd_info *mtd) -+{ -+ struct mtd_part *part = mtd_to_part(mtd); -+ -+ if (!mtd_is_partition(mtd)) -+ return 0; -+ -+ return part_absolute_offset(part->parent) + part->offset; -+} - - /* - * MTD methods which simply translate the effective address and pass through -@@ -518,7 +527,7 @@ static struct mtd_part *allocate_partiti - if (!(slave->mtd.flags & MTD_NO_ERASE)) - wr_alignment = slave->mtd.erasesize; - -- tmp = slave->offset; -+ tmp = part_absolute_offset(parent) + slave->offset; - remainder = do_div(tmp, wr_alignment); - if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) { - /* Doesn't start on a boundary of major erase size */ -@@ -529,7 +538,7 @@ static struct mtd_part *allocate_partiti - part->name); - } - -- tmp = slave->mtd.size; -+ tmp = part_absolute_offset(parent) + slave->mtd.size; - remainder = do_div(tmp, wr_alignment); - if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) { - slave->mtd.flags &= ~MTD_WRITEABLE; diff --git a/target/linux/generic/backport-5.4/080-v5.1-0001-bcma-keep-a-direct-pointer-to-the-struct-device.patch b/target/linux/generic/backport-5.4/080-v5.1-0001-bcma-keep-a-direct-pointer-to-the-struct-device.patch deleted file mode 100644 index cc32aee17b..0000000000 --- a/target/linux/generic/backport-5.4/080-v5.1-0001-bcma-keep-a-direct-pointer-to-the-struct-device.patch +++ /dev/null @@ -1,199 +0,0 @@ -From 5a1c18b761ddb299a06746948b9ec2814b04fa92 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> -Date: Wed, 2 Jan 2019 00:00:01 +0100 -Subject: [PATCH] bcma: keep a direct pointer to the struct device -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Accessing struct device is pretty useful/common so having a direct -pointer: -1) Simplifies some code -2) Makes bcma_bus_get_host_dev() unneeded -3) Allows further improvements like using dev_* printing helpers - -Signed-off-by: RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl> -Signed-off-by: Kalle Valo <kvalo@codeaurora.org> ---- - drivers/bcma/bcma_private.h | 1 - - drivers/bcma/driver_gpio.c | 2 +- - drivers/bcma/host_pci.c | 2 ++ - drivers/bcma/host_soc.c | 4 ++-- - drivers/bcma/main.c | 45 +++++++++---------------------------- - include/linux/bcma/bcma.h | 11 +++------ - 6 files changed, 18 insertions(+), 47 deletions(-) - ---- a/drivers/bcma/bcma_private.h -+++ b/drivers/bcma/bcma_private.h -@@ -33,7 +33,6 @@ int __init bcma_bus_early_register(struc - int bcma_bus_suspend(struct bcma_bus *bus); - int bcma_bus_resume(struct bcma_bus *bus); - #endif --struct device *bcma_bus_get_host_dev(struct bcma_bus *bus); - - /* scan.c */ - void bcma_detect_chip(struct bcma_bus *bus); ---- a/drivers/bcma/driver_gpio.c -+++ b/drivers/bcma/driver_gpio.c -@@ -183,7 +183,7 @@ int bcma_gpio_init(struct bcma_drv_cc *c - chip->direction_input = bcma_gpio_direction_input; - chip->direction_output = bcma_gpio_direction_output; - chip->owner = THIS_MODULE; -- chip->parent = bcma_bus_get_host_dev(bus); -+ chip->parent = bus->dev; - #if IS_BUILTIN(CONFIG_OF) - chip->of_node = cc->core->dev.of_node; - #endif ---- a/drivers/bcma/host_pci.c -+++ b/drivers/bcma/host_pci.c -@@ -196,6 +196,8 @@ static int bcma_host_pci_probe(struct pc - goto err_pci_release_regions; - } - -+ bus->dev = &dev->dev; -+ - /* Map MMIO */ - err = -ENOMEM; - bus->mmio = pci_iomap(dev, 0, ~0UL); ---- a/drivers/bcma/host_soc.c -+++ b/drivers/bcma/host_soc.c -@@ -179,7 +179,6 @@ int __init bcma_host_soc_register(struct - /* Host specific */ - bus->hosttype = BCMA_HOSTTYPE_SOC; - bus->ops = &bcma_host_soc_ops; -- bus->host_pdev = NULL; - - /* Initialize struct, detect chip */ - bcma_init_bus(bus); -@@ -213,6 +212,8 @@ static int bcma_host_soc_probe(struct pl - if (!bus) - return -ENOMEM; - -+ bus->dev = dev; -+ - /* Map MMIO */ - bus->mmio = of_iomap(np, 0); - if (!bus->mmio) -@@ -221,7 +222,6 @@ static int bcma_host_soc_probe(struct pl - /* Host specific */ - bus->hosttype = BCMA_HOSTTYPE_SOC; - bus->ops = &bcma_host_soc_ops; -- bus->host_pdev = pdev; - - /* Initialize struct, detect chip */ - bcma_init_bus(bus); ---- a/drivers/bcma/main.c -+++ b/drivers/bcma/main.c -@@ -223,8 +223,8 @@ unsigned int bcma_core_irq(struct bcma_d - mips_irq = bcma_core_mips_irq(core); - return mips_irq <= 4 ? mips_irq + 2 : 0; - } -- if (bus->host_pdev) -- return bcma_of_get_irq(&bus->host_pdev->dev, core, num); -+ if (bus->dev) -+ return bcma_of_get_irq(bus->dev, core, num); - return 0; - case BCMA_HOSTTYPE_SDIO: - return 0; -@@ -239,18 +239,18 @@ void bcma_prepare_core(struct bcma_bus * - core->dev.release = bcma_release_core_dev; - core->dev.bus = &bcma_bus_type; - dev_set_name(&core->dev, "bcma%d:%d", bus->num, core->core_index); -- core->dev.parent = bcma_bus_get_host_dev(bus); -- if (core->dev.parent) -- bcma_of_fill_device(core->dev.parent, core); -+ core->dev.parent = bus->dev; -+ if (bus->dev) -+ bcma_of_fill_device(bus->dev, core); - - switch (bus->hosttype) { - case BCMA_HOSTTYPE_PCI: -- core->dma_dev = &bus->host_pci->dev; -+ core->dma_dev = bus->dev; - core->irq = bus->host_pci->irq; - break; - case BCMA_HOSTTYPE_SOC: -- if (IS_ENABLED(CONFIG_OF) && bus->host_pdev) { -- core->dma_dev = &bus->host_pdev->dev; -+ if (IS_ENABLED(CONFIG_OF) && bus->dev) { -+ core->dma_dev = bus->dev; - } else { - core->dev.dma_mask = &core->dev.coherent_dma_mask; - core->dma_dev = &core->dev; -@@ -261,28 +261,6 @@ void bcma_prepare_core(struct bcma_bus * - } - } - --struct device *bcma_bus_get_host_dev(struct bcma_bus *bus) --{ -- switch (bus->hosttype) { -- case BCMA_HOSTTYPE_PCI: -- if (bus->host_pci) -- return &bus->host_pci->dev; -- else -- return NULL; -- case BCMA_HOSTTYPE_SOC: -- if (bus->host_pdev) -- return &bus->host_pdev->dev; -- else -- return NULL; -- case BCMA_HOSTTYPE_SDIO: -- if (bus->host_sdio) -- return &bus->host_sdio->dev; -- else -- return NULL; -- } -- return NULL; --} -- - void bcma_init_bus(struct bcma_bus *bus) - { - mutex_lock(&bcma_buses_mutex); -@@ -402,7 +380,6 @@ int bcma_bus_register(struct bcma_bus *b - { - int err; - struct bcma_device *core; -- struct device *dev; - - /* Scan for devices (cores) */ - err = bcma_bus_scan(bus); -@@ -425,10 +402,8 @@ int bcma_bus_register(struct bcma_bus *b - bcma_core_pci_early_init(&bus->drv_pci[0]); - } - -- dev = bcma_bus_get_host_dev(bus); -- if (dev) { -- of_platform_default_populate(dev->of_node, NULL, dev); -- } -+ if (bus->dev) -+ of_platform_default_populate(bus->dev->of_node, NULL, bus->dev); - - /* Cores providing flash access go before SPROM init */ - list_for_each_entry(core, &bus->cores, list) { ---- a/include/linux/bcma/bcma.h -+++ b/include/linux/bcma/bcma.h -@@ -332,6 +332,8 @@ extern int bcma_arch_register_fallback_s - struct ssb_sprom *out)); - - struct bcma_bus { -+ struct device *dev; -+ - /* The MMIO area. */ - void __iomem *mmio; - -@@ -339,14 +341,7 @@ struct bcma_bus { - - enum bcma_hosttype hosttype; - bool host_is_pcie2; /* Used for BCMA_HOSTTYPE_PCI only */ -- union { -- /* Pointer to the PCI bus (only for BCMA_HOSTTYPE_PCI) */ -- struct pci_dev *host_pci; -- /* Pointer to the SDIO device (only for BCMA_HOSTTYPE_SDIO) */ -- struct sdio_func *host_sdio; -- /* Pointer to platform device (only for BCMA_HOSTTYPE_SOC) */ -- struct platform_device *host_pdev; -- }; -+ struct pci_dev *host_pci; /* PCI bus pointer (BCMA_HOSTTYPE_PCI only) */ - - struct bcma_chipinfo chipinfo; - diff --git a/target/linux/generic/backport-5.4/080-v5.1-0002-bcma-use-dev_-printing-functions.patch b/target/linux/generic/backport-5.4/080-v5.1-0002-bcma-use-dev_-printing-functions.patch deleted file mode 100644 index 7ce8ba8967..0000000000 --- a/target/linux/generic/backport-5.4/080-v5.1-0002-bcma-use-dev_-printing-functions.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 777bc4801a6868fcbff09ffb6e30f023e7c5ed38 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> -Date: Wed, 2 Jan 2019 00:00:02 +0100 -Subject: [PATCH] bcma: use dev_* printing functions -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -It provides more meaningful messages. - -Signed-off-by: RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl> -Signed-off-by: Kalle Valo <kvalo@codeaurora.org> ---- - drivers/bcma/bcma_private.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - ---- a/drivers/bcma/bcma_private.h -+++ b/drivers/bcma/bcma_private.h -@@ -10,13 +10,13 @@ - #include <linux/delay.h> - - #define bcma_err(bus, fmt, ...) \ -- pr_err("bus%d: " fmt, (bus)->num, ##__VA_ARGS__) -+ dev_err((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__) - #define bcma_warn(bus, fmt, ...) \ -- pr_warn("bus%d: " fmt, (bus)->num, ##__VA_ARGS__) -+ dev_warn((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__) - #define bcma_info(bus, fmt, ...) \ -- pr_info("bus%d: " fmt, (bus)->num, ##__VA_ARGS__) -+ dev_info((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__) - #define bcma_debug(bus, fmt, ...) \ -- pr_debug("bus%d: " fmt, (bus)->num, ##__VA_ARGS__) -+ dev_dbg((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__) - - struct bcma_bus; - diff --git a/target/linux/generic/backport-5.4/095-Allow-class-e-address-assignment-via-ifconfig-ioctl.patch b/target/linux/generic/backport-5.4/095-Allow-class-e-address-assignment-via-ifconfig-ioctl.patch deleted file mode 100644 index bf6d9aca34..0000000000 --- a/target/linux/generic/backport-5.4/095-Allow-class-e-address-assignment-via-ifconfig-ioctl.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 46bf067870156abd61fe24d14c2486d15b8b502c Mon Sep 17 00:00:00 2001 -From: Dave Taht <dave@taht.net> -Date: Fri, 14 Dec 2018 18:38:40 +0000 -Subject: [PATCH 1/1] Allow class-e address assignment in ifconfig and early - boot - -While the linux kernel became mostly "class-e clean" a decade ago, -and most distributions long ago switched to the iproute2 suite -of utilities, which allow class-e (240.0.0.0/4) address assignment, -distributions relying on busybox, toybox and other forms of -ifconfig cannot assign class-e addresses without this kernel patch. - -With this patch, also, a boot command line on these addresses is feasible: -(ip=248.0.1.2::248.0.1.1:255.255.255.0). - -While CIDR has been obsolete for 2 decades, and a survey of all the -userspace open source code in the world shows most IN_whatever macros -are also obsolete... rather than obsolete CIDR from this ioctl entirely, -this patch merely enables class-e assignment, sanely. - -H/T to Vince Fuller and his original patch here: - https://lkml.org/lkml/2008/1/7/370 - -Signed-off-by: Dave Taht <dave.taht@gmail.com> -Reviewed-by: John Gilmore <gnu@toad.com> ---- - include/uapi/linux/in.h | 8 ++++++-- - net/ipv4/devinet.c | 4 +++- - net/ipv4/ipconfig.c | 2 ++ - 3 files changed, 11 insertions(+), 3 deletions(-) - ---- a/include/uapi/linux/in.h -+++ b/include/uapi/linux/in.h -@@ -268,8 +268,12 @@ struct sockaddr_in { - #define IN_MULTICAST(a) IN_CLASSD(a) - #define IN_MULTICAST_NET 0xF0000000 - --#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000) --#define IN_BADCLASS(a) IN_EXPERIMENTAL((a)) -+#define IN_BADCLASS(a) (((long int) (a) ) == (long int)0xffffffff) -+#define IN_EXPERIMENTAL(a) IN_BADCLASS((a)) -+ -+#define IN_CLASSE(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000) -+#define IN_CLASSE_NET 0xffffffff -+#define IN_CLASSE_NSHIFT 0 - - /* Address to accept any incoming messages. */ - #define INADDR_ANY ((unsigned long int) 0x00000000) ---- a/net/ipv4/devinet.c -+++ b/net/ipv4/devinet.c -@@ -949,7 +949,7 @@ static int inet_abc_len(__be32 addr) - { - int rc = -1; /* Something else, probably a multicast. */ - -- if (ipv4_is_zeronet(addr)) -+ if (ipv4_is_zeronet(addr) || ipv4_is_lbcast(addr)) - rc = 0; - else { - __u32 haddr = ntohl(addr); -@@ -960,6 +960,8 @@ static int inet_abc_len(__be32 addr) - rc = 16; - else if (IN_CLASSC(haddr)) - rc = 24; -+ else if (IN_CLASSE(haddr)) -+ rc = 32; - } - - return rc; ---- a/net/ipv4/ipconfig.c -+++ b/net/ipv4/ipconfig.c -@@ -429,6 +429,8 @@ static int __init ic_defaults(void) - ic_netmask = htonl(IN_CLASSB_NET); - else if (IN_CLASSC(ntohl(ic_myaddr))) - ic_netmask = htonl(IN_CLASSC_NET); -+ else if (IN_CLASSE(ntohl(ic_myaddr))) -+ ic_netmask = htonl(IN_CLASSE_NET); - else { - pr_err("IP-Config: Unable to guess netmask for address %pI4\n", - &ic_myaddr); diff --git a/target/linux/generic/backport-5.4/101-arm-cns3xxx-use-actual-size-reads-for-PCIe.patch b/target/linux/generic/backport-5.4/101-arm-cns3xxx-use-actual-size-reads-for-PCIe.patch deleted file mode 100644 index 2b3384391a..0000000000 --- a/target/linux/generic/backport-5.4/101-arm-cns3xxx-use-actual-size-reads-for-PCIe.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 4cc30de79d293f1e8c5f50ae3a9c005def9564a0 Mon Sep 17 00:00:00 2001 -From: Koen Vandeputte <koen.vandeputte@ncentric.com> -Date: Mon, 7 Jan 2019 14:14:27 +0100 -Subject: [PATCH 2/2] arm: cns3xxx: use actual size reads for PCIe - -commit 802b7c06adc7 ("ARM: cns3xxx: Convert PCI to use generic config accessors") -reimplemented cns3xxx_pci_read_config() using pci_generic_config_read32(), -which preserved the property of only doing 32-bit reads. - -It also replaced cns3xxx_pci_write_config() with pci_generic_config_write(), -so it changed writes from always being 32 bits to being the actual size, -which works just fine. - -Due to: -- The documentation does not mention that only 32 bit access is allowed. -- Writes are already executed using the actual size -- Extensive testing shows that 8b, 16b and 32b reads work as intended - -It makes perfectly sense to also swap 32 bit reading in favor of actual size. - -Fixes: 802b7c06adc7 ("ARM: cns3xxx: Convert PCI to use generic config accessors") -Suggested-by: Bjorn Helgaas <bhelgaas@google.com> -Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com> -CC: Arnd Bergmann <arnd@arndb.de> -CC: Krzysztof Halasa <khalasa@piap.pl> -CC: Olof Johansson <olof@lixom.net> -CC: Robin Leblon <robin.leblon@ncentric.com> -CC: Rob Herring <robh@kernel.org> -CC: Russell King <linux@armlinux.org.uk> -CC: Tim Harvey <tharvey@gateworks.com> -CC: stable@vger.kernel.org # v4.0+ ---- - arch/arm/mach-cns3xxx/pcie.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/arch/arm/mach-cns3xxx/pcie.c -+++ b/arch/arm/mach-cns3xxx/pcie.c -@@ -93,7 +93,7 @@ static int cns3xxx_pci_read_config(struc - u32 mask = (0x1ull << (size * 8)) - 1; - int shift = (where % 4) * 8; - -- ret = pci_generic_config_read32(bus, devfn, where, size, val); -+ ret = pci_generic_config_read(bus, devfn, where, size, val); - - if (ret == PCIBIOS_SUCCESSFUL && !bus->number && !devfn && - (where & 0xffc) == PCI_CLASS_REVISION) diff --git a/target/linux/generic/backport-5.4/200-v5.2-usb-dwc2-Set-lpm-mode-parameters-depend-on-HW-configuration.patch b/target/linux/generic/backport-5.4/200-v5.2-usb-dwc2-Set-lpm-mode-parameters-depend-on-HW-configuration.patch deleted file mode 100644 index ed4aadf2be..0000000000 --- a/target/linux/generic/backport-5.4/200-v5.2-usb-dwc2-Set-lpm-mode-parameters-depend-on-HW-configuration.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 28b5c129ca6e585ec95c160ec4297bc6c6360b6f Mon Sep 17 00:00:00 2001 -From: Minas Harutyunyan <minas.harutyunyan@synopsys.com> -Date: Mon, 4 Mar 2019 17:08:07 +0400 -Subject: usb: dwc2: Set lpm mode parameters depend on HW configuration - -If core not supported lpm, i.e. BCM2835 then confusing warnings seen -in log. - -To avoid these warnings, added function dwc2_set_param_lpm() to set -lpm and other lpm related parameters based on lpm support by core. - -Signed-off-by: Minas Harutyunyan <hminas@synopsys.com> -Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> ---- - drivers/usb/dwc2/params.c | 23 ++++++++++++++++++----- - 1 file changed, 18 insertions(+), 5 deletions(-) - ---- a/drivers/usb/dwc2/params.c -+++ b/drivers/usb/dwc2/params.c -@@ -273,6 +273,23 @@ static void dwc2_set_param_power_down(st - hsotg->params.power_down = val; - } - -+static void dwc2_set_param_lpm(struct dwc2_hsotg *hsotg) -+{ -+ struct dwc2_core_params *p = &hsotg->params; -+ -+ p->lpm = hsotg->hw_params.lpm_mode; -+ if (p->lpm) { -+ p->lpm_clock_gating = true; -+ p->besl = true; -+ p->hird_threshold_en = true; -+ p->hird_threshold = 4; -+ } else { -+ p->lpm_clock_gating = false; -+ p->besl = false; -+ p->hird_threshold_en = false; -+ } -+} -+ - /** - * dwc2_set_default_params() - Set all core parameters to their - * auto-detected default values. -@@ -291,6 +308,7 @@ static void dwc2_set_default_params(stru - dwc2_set_param_speed(hsotg); - dwc2_set_param_phy_utmi_width(hsotg); - dwc2_set_param_power_down(hsotg); -+ dwc2_set_param_lpm(hsotg); - p->phy_ulpi_ddr = false; - p->phy_ulpi_ext_vbus = false; - -@@ -303,11 +321,6 @@ static void dwc2_set_default_params(stru - p->reload_ctl = (hw->snpsid >= DWC2_CORE_REV_2_92a); - p->uframe_sched = true; - p->external_id_pin_ctl = false; -- p->lpm = true; -- p->lpm_clock_gating = true; -- p->besl = true; -- p->hird_threshold_en = true; -- p->hird_threshold = 4; - p->ipg_isoc_en = false; - p->max_packet_count = hw->max_packet_count; - p->max_transfer_size = hw->max_transfer_size; diff --git a/target/linux/generic/backport-5.4/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch b/target/linux/generic/backport-5.4/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch deleted file mode 100644 index 7c574fd343..0000000000 --- a/target/linux/generic/backport-5.4/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch +++ /dev/null @@ -1,280 +0,0 @@ -From 9966a05c7b80f075f2bc7e48dbb108d3f2927234 Mon Sep 17 00:00:00 2001 -From: Dave Martin <Dave.Martin@arm.com> -Date: Fri, 4 Jan 2019 13:09:51 +0000 -Subject: [PATCH] arm64/sve: Disentangle <uapi/asm/ptrace.h> from - <uapi/asm/sigcontext.h> - -Currently, <uapi/asm/sigcontext.h> provides common definitions for -describing SVE context structures that are also used by the ptrace -definitions in <uapi/asm/ptrace.h>. - -For this reason, a #include of <asm/sigcontext.h> was added in -ptrace.h, but it this turns out that this can interact badly with -userspace code that tries to include ptrace.h on top of the libc -headers (which may provide their own shadow definitions for -sigcontext.h). - -To make the headers easier for userspace to consume, this patch -bounces the common definitions into an __SVE_* namespace and moves -them to a backend header <uapi/asm/sve_context.h> that can be -included by the other headers as appropriate. This should allow -ptrace.h to be used alongside libc's sigcontext.h (if any) without -ill effects. - -This should make the situation unambiguous: <asm/sigcontext.h> is -the header to include for the sigframe-specific definitions, while -<asm/ptrace.h> is the header to include for ptrace-specific -definitions. - -To avoid conflicting with existing usage, <asm/sigcontext.h> -remains the canonical way to get the common definitions for -SVE_VQ_MIN, sve_vq_from_vl() etc., both in userspace and in the -kernel: relying on these being defined as a side effect of -including just <asm/ptrace.h> was never intended to be safe. - -Signed-off-by: Dave Martin <Dave.Martin@arm.com> -Signed-off-by: Will Deacon <will.deacon@arm.com> ---- - arch/arm64/include/uapi/asm/ptrace.h | 39 ++++++++-------- - arch/arm64/include/uapi/asm/sigcontext.h | 56 +++++++++++------------ - arch/arm64/include/uapi/asm/sve_context.h | 53 +++++++++++++++++++++ - 3 files changed, 99 insertions(+), 49 deletions(-) - create mode 100644 arch/arm64/include/uapi/asm/sve_context.h - ---- a/arch/arm64/include/uapi/asm/ptrace.h -+++ b/arch/arm64/include/uapi/asm/ptrace.h -@@ -23,7 +23,7 @@ - #include <linux/types.h> - - #include <asm/hwcap.h> --#include <asm/sigcontext.h> -+#include <asm/sve_context.h> - - - /* -@@ -129,9 +129,9 @@ struct user_sve_header { - */ - - /* Offset from the start of struct user_sve_header to the register data */ --#define SVE_PT_REGS_OFFSET \ -- ((sizeof(struct user_sve_header) + (SVE_VQ_BYTES - 1)) \ -- / SVE_VQ_BYTES * SVE_VQ_BYTES) -+#define SVE_PT_REGS_OFFSET \ -+ ((sizeof(struct user_sve_header) + (__SVE_VQ_BYTES - 1)) \ -+ / __SVE_VQ_BYTES * __SVE_VQ_BYTES) - - /* - * The register data content and layout depends on the value of the -@@ -177,39 +177,36 @@ struct user_sve_header { - * Additional data might be appended in the future. - */ - --#define SVE_PT_SVE_ZREG_SIZE(vq) SVE_SIG_ZREG_SIZE(vq) --#define SVE_PT_SVE_PREG_SIZE(vq) SVE_SIG_PREG_SIZE(vq) --#define SVE_PT_SVE_FFR_SIZE(vq) SVE_SIG_FFR_SIZE(vq) -+#define SVE_PT_SVE_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq) -+#define SVE_PT_SVE_PREG_SIZE(vq) __SVE_PREG_SIZE(vq) -+#define SVE_PT_SVE_FFR_SIZE(vq) __SVE_FFR_SIZE(vq) - #define SVE_PT_SVE_FPSR_SIZE sizeof(__u32) - #define SVE_PT_SVE_FPCR_SIZE sizeof(__u32) - --#define __SVE_SIG_TO_PT(offset) \ -- ((offset) - SVE_SIG_REGS_OFFSET + SVE_PT_REGS_OFFSET) -- - #define SVE_PT_SVE_OFFSET SVE_PT_REGS_OFFSET - - #define SVE_PT_SVE_ZREGS_OFFSET \ -- __SVE_SIG_TO_PT(SVE_SIG_ZREGS_OFFSET) -+ (SVE_PT_REGS_OFFSET + __SVE_ZREGS_OFFSET) - #define SVE_PT_SVE_ZREG_OFFSET(vq, n) \ -- __SVE_SIG_TO_PT(SVE_SIG_ZREG_OFFSET(vq, n)) -+ (SVE_PT_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n)) - #define SVE_PT_SVE_ZREGS_SIZE(vq) \ -- (SVE_PT_SVE_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET) -+ (SVE_PT_SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET) - - #define SVE_PT_SVE_PREGS_OFFSET(vq) \ -- __SVE_SIG_TO_PT(SVE_SIG_PREGS_OFFSET(vq)) -+ (SVE_PT_REGS_OFFSET + __SVE_PREGS_OFFSET(vq)) - #define SVE_PT_SVE_PREG_OFFSET(vq, n) \ -- __SVE_SIG_TO_PT(SVE_SIG_PREG_OFFSET(vq, n)) -+ (SVE_PT_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n)) - #define SVE_PT_SVE_PREGS_SIZE(vq) \ -- (SVE_PT_SVE_PREG_OFFSET(vq, SVE_NUM_PREGS) - \ -+ (SVE_PT_SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - \ - SVE_PT_SVE_PREGS_OFFSET(vq)) - - #define SVE_PT_SVE_FFR_OFFSET(vq) \ -- __SVE_SIG_TO_PT(SVE_SIG_FFR_OFFSET(vq)) -+ (SVE_PT_REGS_OFFSET + __SVE_FFR_OFFSET(vq)) - - #define SVE_PT_SVE_FPSR_OFFSET(vq) \ - ((SVE_PT_SVE_FFR_OFFSET(vq) + SVE_PT_SVE_FFR_SIZE(vq) + \ -- (SVE_VQ_BYTES - 1)) \ -- / SVE_VQ_BYTES * SVE_VQ_BYTES) -+ (__SVE_VQ_BYTES - 1)) \ -+ / __SVE_VQ_BYTES * __SVE_VQ_BYTES) - #define SVE_PT_SVE_FPCR_OFFSET(vq) \ - (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE) - -@@ -220,8 +217,8 @@ struct user_sve_header { - - #define SVE_PT_SVE_SIZE(vq, flags) \ - ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \ -- - SVE_PT_SVE_OFFSET + (SVE_VQ_BYTES - 1)) \ -- / SVE_VQ_BYTES * SVE_VQ_BYTES) -+ - SVE_PT_SVE_OFFSET + (__SVE_VQ_BYTES - 1)) \ -+ / __SVE_VQ_BYTES * __SVE_VQ_BYTES) - - #define SVE_PT_SIZE(vq, flags) \ - (((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_SVE ? \ ---- a/arch/arm64/include/uapi/asm/sigcontext.h -+++ b/arch/arm64/include/uapi/asm/sigcontext.h -@@ -130,6 +130,8 @@ struct sve_context { - - #endif /* !__ASSEMBLY__ */ - -+#include <asm/sve_context.h> -+ - /* - * The SVE architecture leaves space for future expansion of the - * vector length beyond its initial architectural limit of 2048 bits -@@ -138,21 +140,20 @@ struct sve_context { - * See linux/Documentation/arm64/sve.txt for a description of the VL/VQ - * terminology. - */ --#define SVE_VQ_BYTES 16 /* number of bytes per quadword */ -+#define SVE_VQ_BYTES __SVE_VQ_BYTES /* bytes per quadword */ - --#define SVE_VQ_MIN 1 --#define SVE_VQ_MAX 512 -+#define SVE_VQ_MIN __SVE_VQ_MIN -+#define SVE_VQ_MAX __SVE_VQ_MAX - --#define SVE_VL_MIN (SVE_VQ_MIN * SVE_VQ_BYTES) --#define SVE_VL_MAX (SVE_VQ_MAX * SVE_VQ_BYTES) -+#define SVE_VL_MIN __SVE_VL_MIN -+#define SVE_VL_MAX __SVE_VL_MAX - --#define SVE_NUM_ZREGS 32 --#define SVE_NUM_PREGS 16 -+#define SVE_NUM_ZREGS __SVE_NUM_ZREGS -+#define SVE_NUM_PREGS __SVE_NUM_PREGS - --#define sve_vl_valid(vl) \ -- ((vl) % SVE_VQ_BYTES == 0 && (vl) >= SVE_VL_MIN && (vl) <= SVE_VL_MAX) --#define sve_vq_from_vl(vl) ((vl) / SVE_VQ_BYTES) --#define sve_vl_from_vq(vq) ((vq) * SVE_VQ_BYTES) -+#define sve_vl_valid(vl) __sve_vl_valid(vl) -+#define sve_vq_from_vl(vl) __sve_vq_from_vl(vl) -+#define sve_vl_from_vq(vq) __sve_vl_from_vq(vq) - - /* - * If the SVE registers are currently live for the thread at signal delivery, -@@ -205,34 +206,33 @@ struct sve_context { - * Additional data might be appended in the future. - */ - --#define SVE_SIG_ZREG_SIZE(vq) ((__u32)(vq) * SVE_VQ_BYTES) --#define SVE_SIG_PREG_SIZE(vq) ((__u32)(vq) * (SVE_VQ_BYTES / 8)) --#define SVE_SIG_FFR_SIZE(vq) SVE_SIG_PREG_SIZE(vq) -+#define SVE_SIG_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq) -+#define SVE_SIG_PREG_SIZE(vq) __SVE_PREG_SIZE(vq) -+#define SVE_SIG_FFR_SIZE(vq) __SVE_FFR_SIZE(vq) - - #define SVE_SIG_REGS_OFFSET \ -- ((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1)) \ -- / SVE_VQ_BYTES * SVE_VQ_BYTES) -+ ((sizeof(struct sve_context) + (__SVE_VQ_BYTES - 1)) \ -+ / __SVE_VQ_BYTES * __SVE_VQ_BYTES) - --#define SVE_SIG_ZREGS_OFFSET SVE_SIG_REGS_OFFSET -+#define SVE_SIG_ZREGS_OFFSET \ -+ (SVE_SIG_REGS_OFFSET + __SVE_ZREGS_OFFSET) - #define SVE_SIG_ZREG_OFFSET(vq, n) \ -- (SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREG_SIZE(vq) * (n)) --#define SVE_SIG_ZREGS_SIZE(vq) \ -- (SVE_SIG_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_SIG_ZREGS_OFFSET) -+ (SVE_SIG_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n)) -+#define SVE_SIG_ZREGS_SIZE(vq) __SVE_ZREGS_SIZE(vq) - - #define SVE_SIG_PREGS_OFFSET(vq) \ -- (SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREGS_SIZE(vq)) -+ (SVE_SIG_REGS_OFFSET + __SVE_PREGS_OFFSET(vq)) - #define SVE_SIG_PREG_OFFSET(vq, n) \ -- (SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREG_SIZE(vq) * (n)) --#define SVE_SIG_PREGS_SIZE(vq) \ -- (SVE_SIG_PREG_OFFSET(vq, SVE_NUM_PREGS) - SVE_SIG_PREGS_OFFSET(vq)) -+ (SVE_SIG_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n)) -+#define SVE_SIG_PREGS_SIZE(vq) __SVE_PREGS_SIZE(vq) - - #define SVE_SIG_FFR_OFFSET(vq) \ -- (SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREGS_SIZE(vq)) -+ (SVE_SIG_REGS_OFFSET + __SVE_FFR_OFFSET(vq)) - - #define SVE_SIG_REGS_SIZE(vq) \ -- (SVE_SIG_FFR_OFFSET(vq) + SVE_SIG_FFR_SIZE(vq) - SVE_SIG_REGS_OFFSET) -- --#define SVE_SIG_CONTEXT_SIZE(vq) (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq)) -+ (__SVE_FFR_OFFSET(vq) + __SVE_FFR_SIZE(vq)) - -+#define SVE_SIG_CONTEXT_SIZE(vq) \ -+ (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq)) - - #endif /* _UAPI__ASM_SIGCONTEXT_H */ ---- /dev/null -+++ b/arch/arm64/include/uapi/asm/sve_context.h -@@ -0,0 +1,53 @@ -+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -+/* Copyright (C) 2017-2018 ARM Limited */ -+ -+/* -+ * For use by other UAPI headers only. -+ * Do not make direct use of header or its definitions. -+ */ -+ -+#ifndef _UAPI__ASM_SVE_CONTEXT_H -+#define _UAPI__ASM_SVE_CONTEXT_H -+ -+#include <linux/types.h> -+ -+#define __SVE_VQ_BYTES 16 /* number of bytes per quadword */ -+ -+#define __SVE_VQ_MIN 1 -+#define __SVE_VQ_MAX 512 -+ -+#define __SVE_VL_MIN (__SVE_VQ_MIN * __SVE_VQ_BYTES) -+#define __SVE_VL_MAX (__SVE_VQ_MAX * __SVE_VQ_BYTES) -+ -+#define __SVE_NUM_ZREGS 32 -+#define __SVE_NUM_PREGS 16 -+ -+#define __sve_vl_valid(vl) \ -+ ((vl) % __SVE_VQ_BYTES == 0 && \ -+ (vl) >= __SVE_VL_MIN && \ -+ (vl) <= __SVE_VL_MAX) -+ -+#define __sve_vq_from_vl(vl) ((vl) / __SVE_VQ_BYTES) -+#define __sve_vl_from_vq(vq) ((vq) * __SVE_VQ_BYTES) -+ -+#define __SVE_ZREG_SIZE(vq) ((__u32)(vq) * __SVE_VQ_BYTES) -+#define __SVE_PREG_SIZE(vq) ((__u32)(vq) * (__SVE_VQ_BYTES / 8)) -+#define __SVE_FFR_SIZE(vq) __SVE_PREG_SIZE(vq) -+ -+#define __SVE_ZREGS_OFFSET 0 -+#define __SVE_ZREG_OFFSET(vq, n) \ -+ (__SVE_ZREGS_OFFSET + __SVE_ZREG_SIZE(vq) * (n)) -+#define __SVE_ZREGS_SIZE(vq) \ -+ (__SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - __SVE_ZREGS_OFFSET) -+ -+#define __SVE_PREGS_OFFSET(vq) \ -+ (__SVE_ZREGS_OFFSET + __SVE_ZREGS_SIZE(vq)) -+#define __SVE_PREG_OFFSET(vq, n) \ -+ (__SVE_PREGS_OFFSET(vq) + __SVE_PREG_SIZE(vq) * (n)) -+#define __SVE_PREGS_SIZE(vq) \ -+ (__SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - __SVE_PREGS_OFFSET(vq)) -+ -+#define __SVE_FFR_OFFSET(vq) \ -+ (__SVE_PREGS_OFFSET(vq) + __SVE_PREGS_SIZE(vq)) -+ -+#endif /* ! _UAPI__ASM_SVE_CONTEXT_H */ diff --git a/target/linux/generic/backport-5.4/343-netfilter-nft_flow_offload-handle-netdevice-events-f.patch b/target/linux/generic/backport-5.4/343-netfilter-nft_flow_offload-handle-netdevice-events-f.patch index 577f2d3df6..501f42d88e 100644 --- a/target/linux/generic/backport-5.4/343-netfilter-nft_flow_offload-handle-netdevice-events-f.patch +++ b/target/linux/generic/backport-5.4/343-netfilter-nft_flow_offload-handle-netdevice-events-f.patch @@ -10,7 +10,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- a/net/netfilter/nf_flow_table_core.c +++ b/net/netfilter/nf_flow_table_core.c -@@ -535,5 +535,35 @@ void nf_flow_table_free(struct nf_flowta +@@ -529,5 +529,35 @@ void nf_flow_table_free(struct nf_flowta } EXPORT_SYMBOL_GPL(nf_flow_table_free); @@ -22,7 +22,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> + if (event != NETDEV_DOWN) + return NOTIFY_DONE; + -+ nf_flow_table_cleanup(dev_net(dev), dev); ++ nf_flow_table_cleanup(dev); + + return NOTIFY_DONE; +} @@ -48,7 +48,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>"); --- a/net/netfilter/nft_flow_offload.c +++ b/net/netfilter/nft_flow_offload.c -@@ -216,47 +216,14 @@ static struct nft_expr_type nft_flow_off +@@ -234,47 +234,14 @@ static struct nft_expr_type nft_flow_off .owner = THIS_MODULE, }; @@ -60,7 +60,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> - if (event != NETDEV_DOWN) - return NOTIFY_DONE; - -- nf_flow_table_cleanup(dev_net(dev), dev); +- nf_flow_table_cleanup(dev); - - return NOTIFY_DONE; -} diff --git a/target/linux/generic/backport-5.4/370-netfilter-nf_flow_table-fix-offloaded-connection-tim.patch b/target/linux/generic/backport-5.4/370-netfilter-nf_flow_table-fix-offloaded-connection-tim.patch index 7c10f6f189..4edcbe1691 100644 --- a/target/linux/generic/backport-5.4/370-netfilter-nf_flow_table-fix-offloaded-connection-tim.patch +++ b/target/linux/generic/backport-5.4/370-netfilter-nf_flow_table-fix-offloaded-connection-tim.patch @@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -1178,18 +1178,6 @@ static bool gc_worker_can_early_drop(con +@@ -1206,18 +1206,6 @@ static bool gc_worker_can_early_drop(con return false; } @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static void gc_worker(struct work_struct *work) { unsigned int min_interval = max(HZ / GC_MAX_BUCKETS_DIV, 1u); -@@ -1226,10 +1214,8 @@ static void gc_worker(struct work_struct +@@ -1254,10 +1242,8 @@ static void gc_worker(struct work_struct tmp = nf_ct_tuplehash_to_ctrack(h); scanned++; @@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> nf_ct_gc_expired(tmp); --- a/net/netfilter/nf_flow_table_core.c +++ b/net/netfilter/nf_flow_table_core.c -@@ -183,10 +183,29 @@ static const struct rhashtable_params nf +@@ -198,10 +198,29 @@ static const struct rhashtable_params nf .automatic_shrinking = true, }; @@ -84,29 +84,31 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT; err = rhashtable_insert_fast(&flow_table->rhashtable, -@@ -317,6 +336,8 @@ static int nf_flow_offload_gc_step(struc +@@ -304,6 +323,7 @@ nf_flow_table_iterate(struct nf_flowtabl rhashtable_walk_start(&hti); while ((tuplehash = rhashtable_walk_next(&hti))) { -+ bool teardown; + if (IS_ERR(tuplehash)) { - err = PTR_ERR(tuplehash); - if (err != -EAGAIN) -@@ -329,9 +350,13 @@ static int nf_flow_offload_gc_step(struc - - flow = container_of(tuplehash, struct flow_offload, tuplehash[0]); + if (PTR_ERR(tuplehash) != -EAGAIN) { + err = PTR_ERR(tuplehash); +@@ -328,10 +348,17 @@ static void nf_flow_offload_gc_step(stru + { + struct nf_flowtable *flow_table = data; + struct flow_offload_entry *e; ++ bool teardown; -- if (nf_flow_has_expired(flow) || -- (flow->flags & (FLOW_OFFLOAD_DYING | -- FLOW_OFFLOAD_TEARDOWN))) -+ teardown = flow->flags & (FLOW_OFFLOAD_DYING | -+ FLOW_OFFLOAD_TEARDOWN); + e = container_of(flow, struct flow_offload_entry, flow); +- if (nf_flow_has_expired(flow) || nf_ct_is_dying(e->ct) || +- (flow->flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN))) ++ ++ teardown = flow->flags & (FLOW_OFFLOAD_DYING | ++ FLOW_OFFLOAD_TEARDOWN); + -+ if (!teardown) -+ nf_ct_offload_timeout(flow); ++ if (!teardown) ++ nf_ct_offload_timeout(flow); + -+ if (nf_flow_has_expired(flow) || teardown) - flow_offload_del(flow_table, flow); - } - out: ++ if (nf_flow_has_expired(flow) || teardown) + flow_offload_del(flow_table, flow); + } + diff --git a/target/linux/generic/backport-5.4/371-netfilter-nf_flow_table-fix-up-ct-state-of-flows-aft.patch b/target/linux/generic/backport-5.4/371-netfilter-nf_flow_table-fix-up-ct-state-of-flows-aft.patch index 2e25066499..383641dfb7 100644 --- a/target/linux/generic/backport-5.4/371-netfilter-nf_flow_table-fix-up-ct-state-of-flows-aft.patch +++ b/target/linux/generic/backport-5.4/371-netfilter-nf_flow_table-fix-up-ct-state-of-flows-aft.patch @@ -12,9 +12,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/netfilter/nf_flow_table_core.c +++ b/net/netfilter/nf_flow_table_core.c -@@ -243,6 +243,9 @@ static void flow_offload_del(struct nf_f - e = container_of(flow, struct flow_offload_entry, flow); - clear_bit(IPS_OFFLOAD_BIT, &e->ct->status); +@@ -268,6 +268,9 @@ static void flow_offload_del(struct nf_f + else if (flow->flags & FLOW_OFFLOAD_TEARDOWN) + flow_offload_fixup_ct_timeout(e->ct); + if (!(flow->flags & FLOW_OFFLOAD_TEARDOWN)) + flow_offload_fixup_ct_state(e->ct); diff --git a/target/linux/generic/backport-5.4/380-v5.3-net-sched-Introduce-act_ctinfo-action.patch b/target/linux/generic/backport-5.4/380-v5.3-net-sched-Introduce-act_ctinfo-action.patch deleted file mode 100644 index a680402f26..0000000000 --- a/target/linux/generic/backport-5.4/380-v5.3-net-sched-Introduce-act_ctinfo-action.patch +++ /dev/null @@ -1,670 +0,0 @@ -From d129a72f465dab2d9fc8f1580c38600a8b808327 Mon Sep 17 00:00:00 2001 -From: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> -Date: Wed, 13 Mar 2019 20:54:49 +0000 -Subject: [PATCH] net: sched: Backport Introduce act_ctinfo action -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -ctinfo is a new tc filter action module. It is designed to restore -information contained in firewall conntrack marks to other packet fields -and is typically used on packet ingress paths. At present it has two -independent sub-functions or operating modes, DSCP restoration mode & -skb mark restoration mode. - -The DSCP restore mode: - -This mode copies DSCP values that have been placed in the firewall -conntrack mark back into the IPv4/v6 diffserv fields of relevant -packets. - -The DSCP restoration is intended for use and has been found useful for -restoring ingress classifications based on egress classifications across -links that bleach or otherwise change DSCP, typically home ISP Internet -links. Restoring DSCP on ingress on the WAN link allows qdiscs such as -but by no means limited to CAKE to shape inbound packets according to -policies that are easier to set & mark on egress. - -Ingress classification is traditionally a challenging task since -iptables rules haven't yet run and tc filter/eBPF programs are pre-NAT -lookups, hence are unable to see internal IPv4 addresses as used on the -typical home masquerading gateway. Thus marking the connection in some -manner on egress for later restoration of classification on ingress is -easier to implement. - -Parameters related to DSCP restore mode: - -dscpmask - a 32 bit mask of 6 contiguous bits and indicate bits of the -conntrack mark field contain the DSCP value to be restored. - -statemask - a 32 bit mask of (usually) 1 bit length, outside the area -specified by dscpmask. This represents a conditional operation flag -whereby the DSCP is only restored if the flag is set. This is useful to -implement a 'one shot' iptables based classification where the -'complicated' iptables rules are only run once to classify the -connection on initial (egress) packet and subsequent packets are all -marked/restored with the same DSCP. A mask of zero disables the -conditional behaviour ie. the conntrack mark DSCP bits are always -restored to the ip diffserv field (assuming the conntrack entry is found -& the skb is an ipv4/ipv6 type) - -e.g. dscpmask 0xfc000000 statemask 0x01000000 - -|----0xFC----conntrack mark----000000---| -| Bits 31-26 | bit 25 | bit24 |~~~ Bit 0| -| DSCP | unused | flag |unused | -|-----------------------0x01---000000---| - | | - | | - ---| Conditional flag - v only restore if set -|-ip diffserv-| -| 6 bits | -|-------------| - -The skb mark restore mode (cpmark): - -This mode copies the firewall conntrack mark to the skb's mark field. -It is completely the functional equivalent of the existing act_connmark -action with the additional feature of being able to apply a mask to the -restored value. - -Parameters related to skb mark restore mode: - -mask - a 32 bit mask applied to the firewall conntrack mark to mask out -bits unwanted for restoration. This can be useful where the conntrack -mark is being used for different purposes by different applications. If -not specified and by default the whole mark field is copied (i.e. -default mask of 0xffffffff) - -e.g. mask 0x00ffffff to mask out the top 8 bits being used by the -aforementioned DSCP restore mode. - -|----0x00----conntrack mark----ffffff---| -| Bits 31-24 | | -| DSCP & flag| some value here | -|---------------------------------------| - | - | - v -|------------skb mark-------------------| -| | | -| zeroed | | -|---------------------------------------| - -Overall parameters: - -zone - conntrack zone - -control - action related control (reclassify | pipe | drop | continue | -ok | goto chain <CHAIN_INDEX>) - -Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> -Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com> -Acked-by: Cong Wang <xiyou.wangcong@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -Backport -Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> ---- - include/net/tc_act/tc_ctinfo.h | 33 ++ - include/uapi/linux/pkt_cls.h | 3 +- - include/uapi/linux/tc_act/tc_ctinfo.h | 29 ++ - net/sched/Kconfig | 17 + - net/sched/Makefile | 1 + - net/sched/act_ctinfo.c | 420 ++++++++++++++++++++++ - tools/testing/selftests/tc-testing/config | 1 + - 7 files changed, 503 insertions(+), 1 deletion(-) - create mode 100644 include/net/tc_act/tc_ctinfo.h - create mode 100644 include/uapi/linux/tc_act/tc_ctinfo.h - create mode 100644 net/sched/act_ctinfo.c - ---- /dev/null -+++ b/include/net/tc_act/tc_ctinfo.h -@@ -0,0 +1,33 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef __NET_TC_CTINFO_H -+#define __NET_TC_CTINFO_H -+ -+#include <net/act_api.h> -+ -+struct tcf_ctinfo_params { -+ struct rcu_head rcu; -+ struct net *net; -+ u32 dscpmask; -+ u32 dscpstatemask; -+ u32 cpmarkmask; -+ u16 zone; -+ u8 mode; -+ u8 dscpmaskshift; -+}; -+ -+struct tcf_ctinfo { -+ struct tc_action common; -+ struct tcf_ctinfo_params __rcu *params; -+ u64 stats_dscp_set; -+ u64 stats_dscp_error; -+ u64 stats_cpmark_set; -+}; -+ -+enum { -+ CTINFO_MODE_DSCP = BIT(0), -+ CTINFO_MODE_CPMARK = BIT(1) -+}; -+ -+#define to_ctinfo(a) ((struct tcf_ctinfo *)a) -+ -+#endif /* __NET_TC_CTINFO_H */ ---- a/include/uapi/linux/pkt_cls.h -+++ b/include/uapi/linux/pkt_cls.h -@@ -68,7 +68,8 @@ enum { - TCA_ID_UNSPEC=0, - TCA_ID_POLICE=1, - /* other actions go here */ -- __TCA_ID_MAX=255 -+ TCA_ID_CTINFO, -+ __TCA_ID_MAX = 255 - }; - - #define TCA_ID_MAX __TCA_ID_MAX ---- /dev/null -+++ b/include/uapi/linux/tc_act/tc_ctinfo.h -@@ -0,0 +1,29 @@ -+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -+#ifndef __UAPI_TC_CTINFO_H -+#define __UAPI_TC_CTINFO_H -+ -+#include <linux/types.h> -+#include <linux/pkt_cls.h> -+ -+struct tc_ctinfo { -+ tc_gen; -+}; -+ -+enum { -+ TCA_CTINFO_UNSPEC, -+ TCA_CTINFO_PAD, -+ TCA_CTINFO_TM, -+ TCA_CTINFO_ACT, -+ TCA_CTINFO_ZONE, -+ TCA_CTINFO_PARMS_DSCP_MASK, -+ TCA_CTINFO_PARMS_DSCP_STATEMASK, -+ TCA_CTINFO_PARMS_CPMARK_MASK, -+ TCA_CTINFO_STATS_DSCP_SET, -+ TCA_CTINFO_STATS_DSCP_ERROR, -+ TCA_CTINFO_STATS_CPMARK_SET, -+ __TCA_CTINFO_MAX -+}; -+ -+#define TCA_CTINFO_MAX (__TCA_CTINFO_MAX - 1) -+ -+#endif ---- a/net/sched/Kconfig -+++ b/net/sched/Kconfig -@@ -866,6 +866,23 @@ config NET_ACT_CONNMARK - To compile this code as a module, choose M here: the - module will be called act_connmark. - -+config NET_ACT_CTINFO -+ tristate "Netfilter Connection Mark Actions" -+ depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES -+ depends on NF_CONNTRACK && NF_CONNTRACK_MARK -+ help -+ Say Y here to allow transfer of a connmark stored information. -+ Current actions transfer connmark stored DSCP into -+ ipv4/v6 diffserv and/or to transfer connmark to packet -+ mark. Both are useful for restoring egress based marks -+ back onto ingress connections for qdisc priority mapping -+ purposes. -+ -+ If unsure, say N. -+ -+ To compile this code as a module, choose M here: the -+ module will be called act_ctinfo. -+ - config NET_ACT_SKBMOD - tristate "skb data modification action" - depends on NET_CLS_ACT ---- a/net/sched/Makefile -+++ b/net/sched/Makefile -@@ -21,6 +21,7 @@ obj-$(CONFIG_NET_ACT_CSUM) += act_csum.o - obj-$(CONFIG_NET_ACT_VLAN) += act_vlan.o - obj-$(CONFIG_NET_ACT_BPF) += act_bpf.o - obj-$(CONFIG_NET_ACT_CONNMARK) += act_connmark.o -+obj-$(CONFIG_NET_ACT_CTINFO) += act_ctinfo.o - obj-$(CONFIG_NET_ACT_SKBMOD) += act_skbmod.o - obj-$(CONFIG_NET_ACT_IFE) += act_ife.o - obj-$(CONFIG_NET_IFE_SKBMARK) += act_meta_mark.o ---- /dev/null -+++ b/net/sched/act_ctinfo.c -@@ -0,0 +1,420 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* net/sched/act_ctinfo.c netfilter ctinfo connmark actions -+ * -+ * Copyright (c) 2019 Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> -+ */ -+ -+#include <linux/module.h> -+#include <linux/init.h> -+#include <linux/kernel.h> -+#include <linux/skbuff.h> -+#include <linux/rtnetlink.h> -+#include <linux/pkt_cls.h> -+#include <linux/ip.h> -+#include <linux/ipv6.h> -+#include <net/netlink.h> -+#include <net/pkt_sched.h> -+#include <net/act_api.h> -+#include <net/pkt_cls.h> -+#include <uapi/linux/tc_act/tc_ctinfo.h> -+#include <net/tc_act/tc_ctinfo.h> -+ -+#include <net/netfilter/nf_conntrack.h> -+#include <net/netfilter/nf_conntrack_core.h> -+#include <net/netfilter/nf_conntrack_ecache.h> -+#include <net/netfilter/nf_conntrack_zones.h> -+ -+static struct tc_action_ops act_ctinfo_ops; -+static unsigned int ctinfo_net_id; -+ -+static void tcf_ctinfo_dscp_set(struct nf_conn *ct, struct tcf_ctinfo *ca, -+ struct tcf_ctinfo_params *cp, -+ struct sk_buff *skb, int wlen, int proto) -+{ -+ u8 dscp, newdscp; -+ -+ newdscp = (((ct->mark & cp->dscpmask) >> cp->dscpmaskshift) << 2) & -+ ~INET_ECN_MASK; -+ -+ switch (proto) { -+ case NFPROTO_IPV4: -+ dscp = ipv4_get_dsfield(ip_hdr(skb)) & ~INET_ECN_MASK; -+ if (dscp != newdscp) { -+ if (likely(!skb_try_make_writable(skb, wlen))) { -+ ipv4_change_dsfield(ip_hdr(skb), -+ INET_ECN_MASK, -+ newdscp); -+ ca->stats_dscp_set++; -+ } else { -+ ca->stats_dscp_error++; -+ } -+ } -+ break; -+ case NFPROTO_IPV6: -+ dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & ~INET_ECN_MASK; -+ if (dscp != newdscp) { -+ if (likely(!skb_try_make_writable(skb, wlen))) { -+ ipv6_change_dsfield(ipv6_hdr(skb), -+ INET_ECN_MASK, -+ newdscp); -+ ca->stats_dscp_set++; -+ } else { -+ ca->stats_dscp_error++; -+ } -+ } -+ break; -+ default: -+ break; -+ } -+} -+ -+static void tcf_ctinfo_cpmark_set(struct nf_conn *ct, struct tcf_ctinfo *ca, -+ struct tcf_ctinfo_params *cp, -+ struct sk_buff *skb) -+{ -+ ca->stats_cpmark_set++; -+ skb->mark = ct->mark & cp->cpmarkmask; -+} -+ -+static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a, -+ struct tcf_result *res) -+{ -+ const struct nf_conntrack_tuple_hash *thash = NULL; -+ struct tcf_ctinfo *ca = to_ctinfo(a); -+ struct nf_conntrack_tuple tuple; -+ struct nf_conntrack_zone zone; -+ enum ip_conntrack_info ctinfo; -+ struct tcf_ctinfo_params *cp; -+ struct nf_conn *ct; -+ int proto, wlen; -+ int action; -+ -+ cp = rcu_dereference_bh(ca->params); -+ -+ tcf_lastuse_update(&ca->tcf_tm); -+ bstats_update(&ca->tcf_bstats, skb); -+ action = READ_ONCE(ca->tcf_action); -+ -+ wlen = skb_network_offset(skb); -+ if (tc_skb_protocol(skb) == htons(ETH_P_IP)) { -+ wlen += sizeof(struct iphdr); -+ if (!pskb_may_pull(skb, wlen)) -+ goto out; -+ -+ proto = NFPROTO_IPV4; -+ } else if (tc_skb_protocol(skb) == htons(ETH_P_IPV6)) { -+ wlen += sizeof(struct ipv6hdr); -+ if (!pskb_may_pull(skb, wlen)) -+ goto out; -+ -+ proto = NFPROTO_IPV6; -+ } else { -+ goto out; -+ } -+ -+ ct = nf_ct_get(skb, &ctinfo); -+ if (!ct) { /* look harder, usually ingress */ -+ if (!nf_ct_get_tuplepr(skb, skb_network_offset(skb), -+ proto, cp->net, &tuple)) -+ goto out; -+ zone.id = cp->zone; -+ zone.dir = NF_CT_DEFAULT_ZONE_DIR; -+ -+ thash = nf_conntrack_find_get(cp->net, &zone, &tuple); -+ if (!thash) -+ goto out; -+ -+ ct = nf_ct_tuplehash_to_ctrack(thash); -+ } -+ -+ if (cp->mode & CTINFO_MODE_DSCP) -+ if (!cp->dscpstatemask || (ct->mark & cp->dscpstatemask)) -+ tcf_ctinfo_dscp_set(ct, ca, cp, skb, wlen, proto); -+ -+ if (cp->mode & CTINFO_MODE_CPMARK) -+ tcf_ctinfo_cpmark_set(ct, ca, cp, skb); -+ -+ if (thash) -+ nf_ct_put(ct); -+out: -+ return action; -+} -+ -+static const struct nla_policy ctinfo_policy[TCA_CTINFO_MAX + 1] = { -+ [TCA_CTINFO_ACT] = { .len = sizeof(struct -+ tc_ctinfo) }, -+ [TCA_CTINFO_ZONE] = { .type = NLA_U16 }, -+ [TCA_CTINFO_PARMS_DSCP_MASK] = { .type = NLA_U32 }, -+ [TCA_CTINFO_PARMS_DSCP_STATEMASK] = { .type = NLA_U32 }, -+ [TCA_CTINFO_PARMS_CPMARK_MASK] = { .type = NLA_U32 }, -+}; -+ -+static int tcf_ctinfo_init(struct net *net, struct nlattr *nla, -+ struct nlattr *est, struct tc_action **a, -+ int ovr, int bind, bool rtnl_held, -+ struct netlink_ext_ack *extack) -+{ -+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id); -+ u32 dscpmask = 0, dscpstatemask, index; -+ struct nlattr *tb[TCA_CTINFO_MAX + 1]; -+ struct tcf_ctinfo_params *cp_new; -+/* struct tcf_chain *goto_ch = NULL; */ -+ struct tc_ctinfo *actparm; -+ struct tcf_ctinfo *ci; -+ u8 dscpmaskshift; -+ int ret = 0, err; -+ -+ if (!nla) { -+ NL_SET_ERR_MSG_MOD(extack, "ctinfo requires attributes to be passed"); -+ return -EINVAL; -+ } -+ -+ err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, extack); -+ if (err < 0) -+ return err; -+ -+ if (!tb[TCA_CTINFO_ACT]) { -+ NL_SET_ERR_MSG_MOD(extack, -+ "Missing required TCA_CTINFO_ACT attribute"); -+ return -EINVAL; -+ } -+ actparm = nla_data(tb[TCA_CTINFO_ACT]); -+ -+ /* do some basic validation here before dynamically allocating things */ -+ /* that we would otherwise have to clean up. */ -+ if (tb[TCA_CTINFO_PARMS_DSCP_MASK]) { -+ dscpmask = nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_MASK]); -+ /* need contiguous 6 bit mask */ -+ dscpmaskshift = dscpmask ? __ffs(dscpmask) : 0; -+ if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f) { -+ NL_SET_ERR_MSG_ATTR(extack, -+ tb[TCA_CTINFO_PARMS_DSCP_MASK], -+ "dscp mask must be 6 contiguous bits"); -+ return -EINVAL; -+ } -+ dscpstatemask = tb[TCA_CTINFO_PARMS_DSCP_STATEMASK] ? -+ nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_STATEMASK]) : 0; -+ /* mask & statemask must not overlap */ -+ if (dscpmask & dscpstatemask) { -+ NL_SET_ERR_MSG_ATTR(extack, -+ tb[TCA_CTINFO_PARMS_DSCP_STATEMASK], -+ "dscp statemask must not overlap dscp mask"); -+ return -EINVAL; -+ } -+ } -+ -+ /* done the validation:now to the actual action allocation */ -+ index = actparm->index; -+ err = tcf_idr_check_alloc(tn, &index, a, bind); -+ if (!err) { -+ ret = tcf_idr_create(tn, index, est, a, -+ &act_ctinfo_ops, bind, false); -+ if (ret) { -+ tcf_idr_cleanup(tn, index); -+ return ret; -+ } -+ ret = ACT_P_CREATED; -+ } else if (err > 0) { -+ if (bind) /* don't override defaults */ -+ return 0; -+ if (!ovr) { -+ tcf_idr_release(*a, bind); -+ return -EEXIST; -+ } -+ } else { -+ return err; -+ } -+ -+/* err = tcf_action_check_ctrlact(actparm->action, tp, &goto_ch, extack); -+ if (err < 0) -+ goto release_idr; -+ */ -+ -+ ci = to_ctinfo(*a); -+ -+ cp_new = kzalloc(sizeof(*cp_new), GFP_KERNEL); -+ if (unlikely(!cp_new)) { -+ err = -ENOMEM; -+ goto put_chain; -+ } -+ -+ cp_new->net = net; -+ cp_new->zone = tb[TCA_CTINFO_ZONE] ? -+ nla_get_u16(tb[TCA_CTINFO_ZONE]) : 0; -+ if (dscpmask) { -+ cp_new->dscpmask = dscpmask; -+ cp_new->dscpmaskshift = dscpmaskshift; -+ cp_new->dscpstatemask = dscpstatemask; -+ cp_new->mode |= CTINFO_MODE_DSCP; -+ } -+ -+ if (tb[TCA_CTINFO_PARMS_CPMARK_MASK]) { -+ cp_new->cpmarkmask = -+ nla_get_u32(tb[TCA_CTINFO_PARMS_CPMARK_MASK]); -+ cp_new->mode |= CTINFO_MODE_CPMARK; -+ } -+ -+ spin_lock_bh(&ci->tcf_lock); -+/* goto_ch = tcf_action_set_ctrlact(*a, actparm->action, goto_ch); */ -+ ci->tcf_action = actparm->action; -+ rcu_swap_protected(ci->params, cp_new, -+ lockdep_is_held(&ci->tcf_lock)); -+ spin_unlock_bh(&ci->tcf_lock); -+ -+/* if (goto_ch) -+ tcf_chain_put_by_act(goto_ch); */ -+ if (cp_new) -+ kfree_rcu(cp_new, rcu); -+ -+ if (ret == ACT_P_CREATED) -+ tcf_idr_insert(tn, *a); -+ -+ return ret; -+ -+put_chain: -+/* if (goto_ch) -+ tcf_chain_put_by_act(goto_ch); -+release_idr: */ -+ tcf_idr_release(*a, bind); -+ return err; -+} -+ -+static int tcf_ctinfo_dump(struct sk_buff *skb, struct tc_action *a, -+ int bind, int ref) -+{ -+ struct tcf_ctinfo *ci = to_ctinfo(a); -+ struct tc_ctinfo opt = { -+ .index = ci->tcf_index, -+ .refcnt = refcount_read(&ci->tcf_refcnt) - ref, -+ .bindcnt = atomic_read(&ci->tcf_bindcnt) - bind, -+ }; -+ unsigned char *b = skb_tail_pointer(skb); -+ struct tcf_ctinfo_params *cp; -+ struct tcf_t t; -+ -+ spin_lock_bh(&ci->tcf_lock); -+ cp = rcu_dereference_protected(ci->params, -+ lockdep_is_held(&ci->tcf_lock)); -+ -+ tcf_tm_dump(&t, &ci->tcf_tm); -+ if (nla_put_64bit(skb, TCA_CTINFO_TM, sizeof(t), &t, TCA_CTINFO_PAD)) -+ goto nla_put_failure; -+ -+ opt.action = ci->tcf_action; -+ if (nla_put(skb, TCA_CTINFO_ACT, sizeof(opt), &opt)) -+ goto nla_put_failure; -+ -+ if (nla_put_u16(skb, TCA_CTINFO_ZONE, cp->zone)) -+ goto nla_put_failure; -+ -+ if (cp->mode & CTINFO_MODE_DSCP) { -+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_DSCP_MASK, -+ cp->dscpmask)) -+ goto nla_put_failure; -+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_DSCP_STATEMASK, -+ cp->dscpstatemask)) -+ goto nla_put_failure; -+ } -+ -+ if (cp->mode & CTINFO_MODE_CPMARK) { -+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_CPMARK_MASK, -+ cp->cpmarkmask)) -+ goto nla_put_failure; -+ } -+ -+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_DSCP_SET, -+ ci->stats_dscp_set, TCA_CTINFO_PAD)) -+ goto nla_put_failure; -+ -+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_DSCP_ERROR, -+ ci->stats_dscp_error, TCA_CTINFO_PAD)) -+ goto nla_put_failure; -+ -+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_CPMARK_SET, -+ ci->stats_cpmark_set, TCA_CTINFO_PAD)) -+ goto nla_put_failure; -+ -+ spin_unlock_bh(&ci->tcf_lock); -+ return skb->len; -+ -+nla_put_failure: -+ spin_unlock_bh(&ci->tcf_lock); -+ nlmsg_trim(skb, b); -+ return -1; -+} -+ -+static int tcf_ctinfo_walker(struct net *net, struct sk_buff *skb, -+ struct netlink_callback *cb, int type, -+ const struct tc_action_ops *ops, -+ struct netlink_ext_ack *extack) -+{ -+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id); -+ -+ return tcf_generic_walker(tn, skb, cb, type, ops, extack); -+} -+ -+static int tcf_ctinfo_search(struct net *net, struct tc_action **a, u32 index, -+ struct netlink_ext_ack *extack) -+{ -+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id); -+ -+ return tcf_idr_search(tn, a, index); -+} -+ -+static void tcf_ctinfo_cleanup(struct tc_action *a) -+{ -+ struct tcf_ctinfo *ci = to_ctinfo(a); -+ struct tcf_ctinfo_params *cp; -+ -+ cp = rcu_dereference_protected(ci->params, 1); -+ if (cp) -+ kfree_rcu(cp, rcu); -+} -+ -+static struct tc_action_ops act_ctinfo_ops = { -+ .kind = "ctinfo", -+ .type = TCA_ID_CTINFO, -+ .owner = THIS_MODULE, -+ .act = tcf_ctinfo_act, -+ .dump = tcf_ctinfo_dump, -+ .init = tcf_ctinfo_init, -+ .walk = tcf_ctinfo_walker, -+ .cleanup= tcf_ctinfo_cleanup, -+ .lookup = tcf_ctinfo_search, -+ .size = sizeof(struct tcf_ctinfo), -+}; -+ -+static __net_init int ctinfo_init_net(struct net *net) -+{ -+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id); -+ -+ return tc_action_net_init(net, tn, &act_ctinfo_ops); -+} -+ -+static void __net_exit ctinfo_exit_net(struct list_head *net_list) -+{ -+ tc_action_net_exit(net_list, ctinfo_net_id); -+} -+ -+static struct pernet_operations ctinfo_net_ops = { -+ .init = ctinfo_init_net, -+ .exit_batch = ctinfo_exit_net, -+ .id = &ctinfo_net_id, -+ .size = sizeof(struct tc_action_net), -+}; -+ -+static int __init ctinfo_init_module(void) -+{ -+ return tcf_register_action(&act_ctinfo_ops, &ctinfo_net_ops); -+} -+ -+static void __exit ctinfo_cleanup_module(void) -+{ -+ tcf_unregister_action(&act_ctinfo_ops, &ctinfo_net_ops); -+} -+ -+module_init(ctinfo_init_module); -+module_exit(ctinfo_cleanup_module); -+MODULE_AUTHOR("Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>"); -+MODULE_DESCRIPTION("Connection tracking mark actions"); -+MODULE_LICENSE("GPL"); ---- a/tools/testing/selftests/tc-testing/config -+++ b/tools/testing/selftests/tc-testing/config -@@ -38,6 +38,7 @@ CONFIG_NET_ACT_CSUM=m - CONFIG_NET_ACT_VLAN=m - CONFIG_NET_ACT_BPF=m - CONFIG_NET_ACT_CONNMARK=m -+CONFIG_NET_ACT_CONNCTINFO=m - CONFIG_NET_ACT_SKBMOD=m - CONFIG_NET_ACT_IFE=m - CONFIG_NET_ACT_TUNNEL_KEY=m diff --git a/target/linux/generic/backport-5.4/450-v5.0-mtd-spinand-winbond-Add-support-for-W25N01GV.patch b/target/linux/generic/backport-5.4/450-v5.0-mtd-spinand-winbond-Add-support-for-W25N01GV.patch deleted file mode 100644 index 2024577b8f..0000000000 --- a/target/linux/generic/backport-5.4/450-v5.0-mtd-spinand-winbond-Add-support-for-W25N01GV.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 9a4d83074769d6ecf1f5c3fef0f183b09abf3726 Mon Sep 17 00:00:00 2001 -From: Robert Marko <robimarko@gmail.com> -Date: Sat, 6 Oct 2018 17:36:42 +0200 -Subject: [PATCH 1/8] mtd: spinand: winbond: Add support for W25N01GV - -W25N01GV is a single die version of the already supported -W25M02GV with half the capacity. Everything else is the -same so introduce support for W25N01GV. - -Datasheet:http://www.winbond.com/resource-files/w25n01gv%20revl%20050918%20unsecured.pdf - -Tested on 8devices Jalapeno dev board under OpenWrt running 4.19-rc5. - -Signed-off-by: Robert Marko <robimarko@gmail.com> -Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/winbond.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - ---- a/drivers/mtd/nand/spi/winbond.c -+++ b/drivers/mtd/nand/spi/winbond.c -@@ -84,6 +84,14 @@ static const struct spinand_info winbond - 0, - SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL), - SPINAND_SELECT_TARGET(w25m02gv_select_target)), -+ SPINAND_INFO("W25N01GV", 0xAA, -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(1, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)), - }; - - /** diff --git a/target/linux/generic/backport-5.4/451-v5.0-mtd-spinand-Add-initial-support-for-Toshiba-TC58CVG2.patch b/target/linux/generic/backport-5.4/451-v5.0-mtd-spinand-Add-initial-support-for-Toshiba-TC58CVG2.patch deleted file mode 100644 index ed42f0024b..0000000000 --- a/target/linux/generic/backport-5.4/451-v5.0-mtd-spinand-Add-initial-support-for-Toshiba-TC58CVG2.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 10949af1681d5bb5cdbcc012815c6e40eec17d02 Mon Sep 17 00:00:00 2001 -From: Schrempf Frieder <frieder.schrempf@kontron.De> -Date: Thu, 8 Nov 2018 08:32:11 +0000 -Subject: [PATCH 2/8] mtd: spinand: Add initial support for Toshiba TC58CVG2S0H -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add minimal support for the Toshiba TC58CVG2S0H SPI NAND chip. - -Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Acked-by: Clément Péron <peron.clem@gmail.com> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/Makefile | 2 +- - drivers/mtd/nand/spi/core.c | 1 + - drivers/mtd/nand/spi/toshiba.c | 137 +++++++++++++++++++++++++++++++++ - include/linux/mtd/spinand.h | 1 + - 4 files changed, 140 insertions(+), 1 deletion(-) - create mode 100644 drivers/mtd/nand/spi/toshiba.c - ---- a/drivers/mtd/nand/spi/Makefile -+++ b/drivers/mtd/nand/spi/Makefile -@@ -1,3 +1,3 @@ - # SPDX-License-Identifier: GPL-2.0 --spinand-objs := core.o macronix.o micron.o winbond.o -+spinand-objs := core.o macronix.o micron.o toshiba.o winbond.o - obj-$(CONFIG_MTD_SPI_NAND) += spinand.o ---- a/drivers/mtd/nand/spi/core.c -+++ b/drivers/mtd/nand/spi/core.c -@@ -764,6 +764,7 @@ static const struct nand_ops spinand_ops - static const struct spinand_manufacturer *spinand_manufacturers[] = { - ¯onix_spinand_manufacturer, - µn_spinand_manufacturer, -+ &toshiba_spinand_manufacturer, - &winbond_spinand_manufacturer, - }; - ---- /dev/null -+++ b/drivers/mtd/nand/spi/toshiba.c -@@ -0,0 +1,137 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2018 exceet electronics GmbH -+ * Copyright (c) 2018 Kontron Electronics GmbH -+ * -+ * Author: Frieder Schrempf <frieder.schrempf@kontron.de> -+ */ -+ -+#include <linux/device.h> -+#include <linux/kernel.h> -+#include <linux/mtd/spinand.h> -+ -+#define SPINAND_MFR_TOSHIBA 0x98 -+#define TOSH_STATUS_ECC_HAS_BITFLIPS_T (3 << 4) -+ -+static SPINAND_OP_VARIANTS(read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(write_cache_variants, -+ SPINAND_PROG_LOAD(true, 0, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(update_cache_variants, -+ SPINAND_PROG_LOAD(false, 0, NULL, 0)); -+ -+static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 7) -+ return -ERANGE; -+ -+ region->offset = 128 + 16 * section; -+ region->length = 16; -+ -+ return 0; -+} -+ -+static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 0) -+ return -ERANGE; -+ -+ /* 2 bytes reserved for BBM */ -+ region->offset = 2; -+ region->length = 126; -+ -+ return 0; -+} -+ -+static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = { -+ .ecc = tc58cvg2s0h_ooblayout_ecc, -+ .free = tc58cvg2s0h_ooblayout_free, -+}; -+ -+static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ struct nand_device *nand = spinand_to_nand(spinand); -+ u8 mbf = 0; -+ struct spi_mem_op op = SPINAND_GET_FEATURE_OP(0x30, &mbf); -+ -+ switch (status & STATUS_ECC_MASK) { -+ case STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ case STATUS_ECC_HAS_BITFLIPS: -+ case TOSH_STATUS_ECC_HAS_BITFLIPS_T: -+ /* -+ * Let's try to retrieve the real maximum number of bitflips -+ * in order to avoid forcing the wear-leveling layer to move -+ * data around if it's not necessary. -+ */ -+ if (spi_mem_exec_op(spinand->spimem, &op)) -+ return nand->eccreq.strength; -+ -+ mbf >>= 4; -+ -+ if (WARN_ON(mbf > nand->eccreq.strength || !mbf)) -+ return nand->eccreq.strength; -+ -+ return mbf; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ -+static const struct spinand_info toshiba_spinand_table[] = { -+ SPINAND_INFO("TC58CVG2S0H", 0xCD, -+ NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&tc58cvg2s0h_ooblayout, -+ tc58cvg2s0h_ecc_get_status)), -+}; -+ -+static int toshiba_spinand_detect(struct spinand_device *spinand) -+{ -+ u8 *id = spinand->id.data; -+ int ret; -+ -+ /* -+ * Toshiba SPI NAND read ID needs a dummy byte, -+ * so the first byte in id is garbage. -+ */ -+ if (id[1] != SPINAND_MFR_TOSHIBA) -+ return 0; -+ -+ ret = spinand_match_and_init(spinand, toshiba_spinand_table, -+ ARRAY_SIZE(toshiba_spinand_table), -+ id[2]); -+ if (ret) -+ return ret; -+ -+ return 1; -+} -+ -+static const struct spinand_manufacturer_ops toshiba_spinand_manuf_ops = { -+ .detect = toshiba_spinand_detect, -+}; -+ -+const struct spinand_manufacturer toshiba_spinand_manufacturer = { -+ .id = SPINAND_MFR_TOSHIBA, -+ .name = "Toshiba", -+ .ops = &toshiba_spinand_manuf_ops, -+}; ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -196,6 +196,7 @@ struct spinand_manufacturer { - /* SPI NAND manufacturers */ - extern const struct spinand_manufacturer macronix_spinand_manufacturer; - extern const struct spinand_manufacturer micron_spinand_manufacturer; -+extern const struct spinand_manufacturer toshiba_spinand_manufacturer; - extern const struct spinand_manufacturer winbond_spinand_manufacturer; - - /** diff --git a/target/linux/generic/backport-5.4/452-v5.0-mtd-spinand-add-support-for-GigaDevice-GD5FxGQ4xA.patch b/target/linux/generic/backport-5.4/452-v5.0-mtd-spinand-add-support-for-GigaDevice-GD5FxGQ4xA.patch deleted file mode 100644 index 4e6f18a4cb..0000000000 --- a/target/linux/generic/backport-5.4/452-v5.0-mtd-spinand-add-support-for-GigaDevice-GD5FxGQ4xA.patch +++ /dev/null @@ -1,196 +0,0 @@ -From c93c613214ac70c87beab5422a60077bf126b855 Mon Sep 17 00:00:00 2001 -From: Chuanhong Guo <gch981213@gmail.com> -Date: Wed, 28 Nov 2018 21:07:25 +0800 -Subject: [PATCH 3/8] mtd: spinand: add support for GigaDevice GD5FxGQ4xA - -Add support for GigaDevice GD5F1G/2G/4GQ4xA SPI NAND. - -Signed-off-by: Chuanhong Guo <gch981213@gmail.com> -Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/Makefile | 2 +- - drivers/mtd/nand/spi/core.c | 1 + - drivers/mtd/nand/spi/gigadevice.c | 148 ++++++++++++++++++++++++++++++ - include/linux/mtd/spinand.h | 1 + - 4 files changed, 151 insertions(+), 1 deletion(-) - create mode 100644 drivers/mtd/nand/spi/gigadevice.c - ---- a/drivers/mtd/nand/spi/Makefile -+++ b/drivers/mtd/nand/spi/Makefile -@@ -1,3 +1,3 @@ - # SPDX-License-Identifier: GPL-2.0 --spinand-objs := core.o macronix.o micron.o toshiba.o winbond.o -+spinand-objs := core.o gigadevice.o macronix.o micron.o toshiba.o winbond.o - obj-$(CONFIG_MTD_SPI_NAND) += spinand.o ---- a/drivers/mtd/nand/spi/core.c -+++ b/drivers/mtd/nand/spi/core.c -@@ -762,6 +762,7 @@ static const struct nand_ops spinand_ops - }; - - static const struct spinand_manufacturer *spinand_manufacturers[] = { -+ &gigadevice_spinand_manufacturer, - ¯onix_spinand_manufacturer, - µn_spinand_manufacturer, - &toshiba_spinand_manufacturer, ---- /dev/null -+++ b/drivers/mtd/nand/spi/gigadevice.c -@@ -0,0 +1,148 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Author: -+ * Chuanhong Guo <gch981213@gmail.com> -+ */ -+ -+#include <linux/device.h> -+#include <linux/kernel.h> -+#include <linux/mtd/spinand.h> -+ -+#define SPINAND_MFR_GIGADEVICE 0xC8 -+#define GD5FXGQ4XA_STATUS_ECC_1_7_BITFLIPS (1 << 4) -+#define GD5FXGQ4XA_STATUS_ECC_8_BITFLIPS (3 << 4) -+ -+static SPINAND_OP_VARIANTS(read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(write_cache_variants, -+ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), -+ SPINAND_PROG_LOAD(true, 0, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(update_cache_variants, -+ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), -+ SPINAND_PROG_LOAD(false, 0, NULL, 0)); -+ -+static int gd5fxgq4xa_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (16 * section) + 8; -+ region->length = 8; -+ -+ return 0; -+} -+ -+static int gd5fxgq4xa_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ if (section) { -+ region->offset = 16 * section; -+ region->length = 8; -+ } else { -+ /* section 0 has one byte reserved for bad block mark */ -+ region->offset = 1; -+ region->length = 7; -+ } -+ return 0; -+} -+ -+static int gd5fxgq4xa_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & STATUS_ECC_MASK) { -+ case STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case GD5FXGQ4XA_STATUS_ECC_1_7_BITFLIPS: -+ /* 1-7 bits are flipped. return the maximum. */ -+ return 7; -+ -+ case GD5FXGQ4XA_STATUS_ECC_8_BITFLIPS: -+ return 8; -+ -+ case STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ -+static const struct mtd_ooblayout_ops gd5fxgq4xa_ooblayout = { -+ .ecc = gd5fxgq4xa_ooblayout_ecc, -+ .free = gd5fxgq4xa_ooblayout_free, -+}; -+ -+static const struct spinand_info gigadevice_spinand_table[] = { -+ SPINAND_INFO("GD5F1GQ4xA", 0xF1, -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, -+ gd5fxgq4xa_ecc_get_status)), -+ SPINAND_INFO("GD5F2GQ4xA", 0xF2, -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, -+ gd5fxgq4xa_ecc_get_status)), -+ SPINAND_INFO("GD5F4GQ4xA", 0xF4, -+ NAND_MEMORG(1, 2048, 64, 64, 4096, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, -+ gd5fxgq4xa_ecc_get_status)), -+}; -+ -+static int gigadevice_spinand_detect(struct spinand_device *spinand) -+{ -+ u8 *id = spinand->id.data; -+ int ret; -+ -+ /* -+ * For GD NANDs, There is an address byte needed to shift in before IDs -+ * are read out, so the first byte in raw_id is dummy. -+ */ -+ if (id[1] != SPINAND_MFR_GIGADEVICE) -+ return 0; -+ -+ ret = spinand_match_and_init(spinand, gigadevice_spinand_table, -+ ARRAY_SIZE(gigadevice_spinand_table), -+ id[2]); -+ if (ret) -+ return ret; -+ -+ return 1; -+} -+ -+static const struct spinand_manufacturer_ops gigadevice_spinand_manuf_ops = { -+ .detect = gigadevice_spinand_detect, -+}; -+ -+const struct spinand_manufacturer gigadevice_spinand_manufacturer = { -+ .id = SPINAND_MFR_GIGADEVICE, -+ .name = "GigaDevice", -+ .ops = &gigadevice_spinand_manuf_ops, -+}; ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -194,6 +194,7 @@ struct spinand_manufacturer { - }; - - /* SPI NAND manufacturers */ -+extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; - extern const struct spinand_manufacturer macronix_spinand_manufacturer; - extern const struct spinand_manufacturer micron_spinand_manufacturer; - extern const struct spinand_manufacturer toshiba_spinand_manufacturer; diff --git a/target/linux/generic/backport-5.4/455-v5.1-mtd-spinand-Add-support-for-all-Toshiba-Memory-produ.patch b/target/linux/generic/backport-5.4/455-v5.1-mtd-spinand-Add-support-for-all-Toshiba-Memory-produ.patch deleted file mode 100644 index aad82dcf7a..0000000000 --- a/target/linux/generic/backport-5.4/455-v5.1-mtd-spinand-Add-support-for-all-Toshiba-Memory-produ.patch +++ /dev/null @@ -1,136 +0,0 @@ -From db214513f62fd13c0a9af3bd5c5d634dba37e65d Mon Sep 17 00:00:00 2001 -From: Yoshio Furuyama <tmcmc-mb-yfuruyama7@ml.toshiba.co.jp> -Date: Wed, 16 Jan 2019 14:53:19 +0900 -Subject: [PATCH 7/8] mtd: spinand: Add support for all Toshiba Memory products - -Add device table for Toshiba Memory products. -Also, generalize OOB layout structure and function names. - -Signed-off-by: Yoshio Furuyama <tmcmc-mb-yfuruyama7@ml.toshiba.co.jp> -Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/toshiba.c | 79 ++++++++++++++++++++++++++++------ - 1 file changed, 65 insertions(+), 14 deletions(-) - ---- a/drivers/mtd/nand/spi/toshiba.c -+++ b/drivers/mtd/nand/spi/toshiba.c -@@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_v - static SPINAND_OP_VARIANTS(update_cache_variants, - SPINAND_PROG_LOAD(false, 0, NULL, 0)); - --static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section, -+static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { -- if (section > 7) -+ if (section > 0) - return -ERANGE; - -- region->offset = 128 + 16 * section; -- region->length = 16; -+ region->offset = mtd->oobsize / 2; -+ region->length = mtd->oobsize / 2; - - return 0; - } - --static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section, -+static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { - if (section > 0) -@@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(st - - /* 2 bytes reserved for BBM */ - region->offset = 2; -- region->length = 126; -+ region->length = (mtd->oobsize / 2) - 2; - - return 0; - } - --static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = { -- .ecc = tc58cvg2s0h_ooblayout_ecc, -- .free = tc58cvg2s0h_ooblayout_free, -+static const struct mtd_ooblayout_ops tc58cxgxsx_ooblayout = { -+ .ecc = tc58cxgxsx_ooblayout_ecc, -+ .free = tc58cxgxsx_ooblayout_free, - }; - --static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand, -+static int tc58cxgxsx_ecc_get_status(struct spinand_device *spinand, - u8 status) - { - struct nand_device *nand = spinand_to_nand(spinand); -@@ -94,15 +94,66 @@ static int tc58cvg2s0h_ecc_get_status(st - } - - static const struct spinand_info toshiba_spinand_table[] = { -- SPINAND_INFO("TC58CVG2S0H", 0xCD, -+ /* 3.3V 1Gb */ -+ SPINAND_INFO("TC58CVG0S3", 0xC2, -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&tc58cxgxsx_ooblayout, -+ tc58cxgxsx_ecc_get_status)), -+ /* 3.3V 2Gb */ -+ SPINAND_INFO("TC58CVG1S3", 0xCB, -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&tc58cxgxsx_ooblayout, -+ tc58cxgxsx_ecc_get_status)), -+ /* 3.3V 4Gb */ -+ SPINAND_INFO("TC58CVG2S0", 0xCD, -+ NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&tc58cxgxsx_ooblayout, -+ tc58cxgxsx_ecc_get_status)), -+ /* 1.8V 1Gb */ -+ SPINAND_INFO("TC58CYG0S3", 0xB2, -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&tc58cxgxsx_ooblayout, -+ tc58cxgxsx_ecc_get_status)), -+ /* 1.8V 2Gb */ -+ SPINAND_INFO("TC58CYG1S3", 0xBB, -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&tc58cxgxsx_ooblayout, -+ tc58cxgxsx_ecc_get_status)), -+ /* 1.8V 4Gb */ -+ SPINAND_INFO("TC58CYG2S0", 0xBD, - NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, - &write_cache_variants, - &update_cache_variants), -- SPINAND_HAS_QE_BIT, -- SPINAND_ECCINFO(&tc58cvg2s0h_ooblayout, -- tc58cvg2s0h_ecc_get_status)), -+ 0, -+ SPINAND_ECCINFO(&tc58cxgxsx_ooblayout, -+ tc58cxgxsx_ecc_get_status)), - }; - - static int toshiba_spinand_detect(struct spinand_device *spinand) diff --git a/target/linux/generic/backport-5.4/456-v5.1-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UExxG.patch b/target/linux/generic/backport-5.4/456-v5.1-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UExxG.patch deleted file mode 100644 index 8e48debf43..0000000000 --- a/target/linux/generic/backport-5.4/456-v5.1-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UExxG.patch +++ /dev/null @@ -1,129 +0,0 @@ -From c40c7a990a46e5102a1cc4190557bf315d32d80d Mon Sep 17 00:00:00 2001 -From: Stefan Roese <sr@denx.de> -Date: Thu, 24 Jan 2019 13:48:06 +0100 -Subject: [PATCH 8/8] mtd: spinand: Add support for GigaDevice GD5F1GQ4UExxG - -Add support for GigaDevice GD5F1GQ4UExxG SPI NAND chip. - -Signed-off-by: Stefan Roese <sr@denx.de> -Cc: Chuanhong Guo <gch981213@gmail.com> -Cc: Frieder Schrempf <frieder.schrempf@kontron.de> -Cc: Miquel Raynal <miquel.raynal@bootlin.com> -Cc: Boris Brezillon <bbrezillon@kernel.org> -Reviewed-by: Boris Brezillon <bbrezillon@kernel.org> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/gigadevice.c | 83 +++++++++++++++++++++++++++++++ - 1 file changed, 83 insertions(+) - ---- a/drivers/mtd/nand/spi/gigadevice.c -+++ b/drivers/mtd/nand/spi/gigadevice.c -@@ -12,6 +12,8 @@ - #define GD5FXGQ4XA_STATUS_ECC_1_7_BITFLIPS (1 << 4) - #define GD5FXGQ4XA_STATUS_ECC_8_BITFLIPS (3 << 4) - -+#define GD5FXGQ4UEXXG_REG_STATUS2 0xf0 -+ - static SPINAND_OP_VARIANTS(read_cache_variants, - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -@@ -81,11 +83,83 @@ static int gd5fxgq4xa_ecc_get_status(str - return -EINVAL; - } - -+static int gd5fxgq4uexxg_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section) -+ return -ERANGE; -+ -+ region->offset = 64; -+ region->length = 64; -+ -+ return 0; -+} -+ -+static int gd5fxgq4uexxg_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section) -+ return -ERANGE; -+ -+ /* Reserve 1 bytes for the BBM. */ -+ region->offset = 1; -+ region->length = 63; -+ -+ return 0; -+} -+ -+static int gd5fxgq4uexxg_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ u8 status2; -+ struct spi_mem_op op = SPINAND_GET_FEATURE_OP(GD5FXGQ4UEXXG_REG_STATUS2, -+ &status2); -+ int ret; -+ -+ switch (status & STATUS_ECC_MASK) { -+ case STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case GD5FXGQ4XA_STATUS_ECC_1_7_BITFLIPS: -+ /* -+ * Read status2 register to determine a more fine grained -+ * bit error status -+ */ -+ ret = spi_mem_exec_op(spinand->spimem, &op); -+ if (ret) -+ return ret; -+ -+ /* -+ * 4 ... 7 bits are flipped (1..4 can't be detected, so -+ * report the maximum of 4 in this case -+ */ -+ /* bits sorted this way (3...0): ECCS1,ECCS0,ECCSE1,ECCSE0 */ -+ return ((status & STATUS_ECC_MASK) >> 2) | -+ ((status2 & STATUS_ECC_MASK) >> 4); -+ -+ case GD5FXGQ4XA_STATUS_ECC_8_BITFLIPS: -+ return 8; -+ -+ case STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ - static const struct mtd_ooblayout_ops gd5fxgq4xa_ooblayout = { - .ecc = gd5fxgq4xa_ooblayout_ecc, - .free = gd5fxgq4xa_ooblayout_free, - }; - -+static const struct mtd_ooblayout_ops gd5fxgq4uexxg_ooblayout = { -+ .ecc = gd5fxgq4uexxg_ooblayout_ecc, -+ .free = gd5fxgq4uexxg_ooblayout_free, -+}; -+ - static const struct spinand_info gigadevice_spinand_table[] = { - SPINAND_INFO("GD5F1GQ4xA", 0xF1, - NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1), -@@ -114,6 +188,15 @@ static const struct spinand_info gigadev - 0, - SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout, - gd5fxgq4xa_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ4UExxG", 0xd1, -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&gd5fxgq4uexxg_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), - }; - - static int gigadevice_spinand_detect(struct spinand_device *spinand) diff --git a/target/linux/generic/backport-5.4/460-v5.0-mtd-spi-nor-Add-support-for-mx25u12835f.patch b/target/linux/generic/backport-5.4/460-v5.0-mtd-spi-nor-Add-support-for-mx25u12835f.patch deleted file mode 100644 index 1bdf35b987..0000000000 --- a/target/linux/generic/backport-5.4/460-v5.0-mtd-spi-nor-Add-support-for-mx25u12835f.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 81554171373018b83f3554b9e725d2b5bf1844a5 Mon Sep 17 00:00:00 2001 -From: Alexander Sverdlin <alexander.sverdlin@nokia.com> -Date: Fri, 13 Jul 2018 15:06:46 +0200 -Subject: [PATCH] mtd: spi-nor: Add support for mx25u12835f - -This chip supports dual and quad read and uniform 4K-byte erase. - -Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com> -Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com> -Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> ---- - drivers/mtd/spi-nor/spi-nor.c | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/drivers/mtd/spi-nor/spi-nor.c -+++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1088,6 +1088,8 @@ static const struct flash_info spi_nor_i - { "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) }, - { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, - { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, -+ { "mx25u12835f", INFO(0xc22538, 0, 64 * 1024, 256, -+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, - { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, - { "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) }, - { "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) }, diff --git a/target/linux/generic/backport-5.4/460-v5.3-mtd-spinand-Define-macros-for-page-read-ops-with-thr.patch b/target/linux/generic/backport-5.4/460-v5.3-mtd-spinand-Define-macros-for-page-read-ops-with-thr.patch deleted file mode 100644 index c28ae1d797..0000000000 --- a/target/linux/generic/backport-5.4/460-v5.3-mtd-spinand-Define-macros-for-page-read-ops-with-thr.patch +++ /dev/null @@ -1,81 +0,0 @@ -From d014717d50b1efd011a3a028ce92563a4dc9bae5 Mon Sep 17 00:00:00 2001 -From: Jeff Kletsky <git-commits@allycomm.com> -Date: Wed, 22 May 2019 15:05:53 -0700 -Subject: [PATCH 1/3] mtd: spinand: Define macros for page-read ops with - three-byte addresses - -The GigaDevice GD5F1GQ4UFxxG SPI NAND utilizes three-byte addresses -for its page-read ops. - -http://www.gigadevice.com/datasheet/gd5f1gq4xfxxg/ - -Signed-off-by: Jeff Kletsky <git-commits@allycomm.com> -Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - include/linux/mtd/spinand.h | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -68,30 +68,60 @@ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 1)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_OP_3A(fast, addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(fast ? 0x0b : 0x03, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 1), \ -+ SPI_MEM_OP_DUMMY(ndummy, 1), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 1)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_X2_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x3b, 1), \ - SPI_MEM_OP_ADDR(2, addr, 1), \ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 2)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_X2_OP_3A(addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(0x3b, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 1), \ -+ SPI_MEM_OP_DUMMY(ndummy, 1), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 2)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_X4_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x6b, 1), \ - SPI_MEM_OP_ADDR(2, addr, 1), \ - SPI_MEM_OP_DUMMY(ndummy, 1), \ - SPI_MEM_OP_DATA_IN(len, buf, 4)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_X4_OP_3A(addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(0x6b, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 1), \ -+ SPI_MEM_OP_DUMMY(ndummy, 1), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 4)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0xbb, 1), \ - SPI_MEM_OP_ADDR(2, addr, 2), \ - SPI_MEM_OP_DUMMY(ndummy, 2), \ - SPI_MEM_OP_DATA_IN(len, buf, 2)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP_3A(addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(0xbb, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 2), \ -+ SPI_MEM_OP_DUMMY(ndummy, 2), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 2)) -+ - #define SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(addr, ndummy, buf, len) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0xeb, 1), \ - SPI_MEM_OP_ADDR(2, addr, 4), \ - SPI_MEM_OP_DUMMY(ndummy, 4), \ - SPI_MEM_OP_DATA_IN(len, buf, 4)) - -+#define SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP_3A(addr, ndummy, buf, len) \ -+ SPI_MEM_OP(SPI_MEM_OP_CMD(0xeb, 1), \ -+ SPI_MEM_OP_ADDR(3, addr, 4), \ -+ SPI_MEM_OP_DUMMY(ndummy, 4), \ -+ SPI_MEM_OP_DATA_IN(len, buf, 4)) -+ - #define SPINAND_PROG_EXEC_OP(addr) \ - SPI_MEM_OP(SPI_MEM_OP_CMD(0x10, 1), \ - SPI_MEM_OP_ADDR(3, addr, 1), \ diff --git a/target/linux/generic/backport-5.4/461-v5.3-mtd-spinand-Add-support-for-two-byte-device-IDs.patch b/target/linux/generic/backport-5.4/461-v5.3-mtd-spinand-Add-support-for-two-byte-device-IDs.patch deleted file mode 100644 index fcbecbb762..0000000000 --- a/target/linux/generic/backport-5.4/461-v5.3-mtd-spinand-Add-support-for-two-byte-device-IDs.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 53dd94a79d3bfdaae30e5a4ebf474ea1af1d572e Mon Sep 17 00:00:00 2001 -From: Jeff Kletsky <git-commits@allycomm.com> -Date: Wed, 22 May 2019 15:05:54 -0700 -Subject: [PATCH 2/3] mtd: spinand: Add support for two-byte device IDs - -The GigaDevice GD5F1GQ4UFxxG SPI NAND utilizes two-byte device IDs. - -http://www.gigadevice.com/datasheet/gd5f1gq4xfxxg/ - -Signed-off-by: Jeff Kletsky <git-commits@allycomm.com> -Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/core.c | 2 +- - include/linux/mtd/spinand.h | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - ---- a/drivers/mtd/nand/spi/core.c -+++ b/drivers/mtd/nand/spi/core.c -@@ -853,7 +853,7 @@ spinand_select_op_variant(struct spinand - */ - int spinand_match_and_init(struct spinand_device *spinand, - const struct spinand_info *table, -- unsigned int table_size, u8 devid) -+ unsigned int table_size, u16 devid) - { - struct nand_device *nand = spinand_to_nand(spinand); - unsigned int i; ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -290,7 +290,7 @@ struct spinand_ecc_info { - */ - struct spinand_info { - const char *model; -- u8 devid; -+ u16 devid; - u32 flags; - struct nand_memory_organization memorg; - struct nand_ecc_req eccreq; -@@ -445,7 +445,7 @@ static inline void spinand_set_of_node(s - - int spinand_match_and_init(struct spinand_device *dev, - const struct spinand_info *table, -- unsigned int table_size, u8 devid); -+ unsigned int table_size, u16 devid); - - int spinand_upd_cfg(struct spinand_device *spinand, u8 mask, u8 val); - int spinand_select_target(struct spinand_device *spinand, unsigned int target); diff --git a/target/linux/generic/backport-5.4/462-v5.3-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UFxxG.patch b/target/linux/generic/backport-5.4/462-v5.3-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UFxxG.patch deleted file mode 100644 index 06d87ba5e0..0000000000 --- a/target/linux/generic/backport-5.4/462-v5.3-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UFxxG.patch +++ /dev/null @@ -1,197 +0,0 @@ - -IMPORTANT NOTE -============== - -The content of this patch has been adapted for Linux 4.19 - -Changes were made in Linux 5.x to add the bad-block limit -to the metadata available to the driver, adding a parameter - -NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), - ^- New bad-block limit - -This patch omits that parameter from the upstream patch -for compatibility with the Linux 4.19 driver. - -===== - -From 049df13c4e63884fe6634db5568e08f65922256e Mon Sep 17 00:00:00 2001 -From: Jeff Kletsky <git-commits@allycomm.com> -Date: Wed, 22 May 2019 15:05:55 -0700 -Subject: [PATCH 3/3] mtd: spinand: Add support for GigaDevice GD5F1GQ4UFxxG - -The GigaDevice GD5F1GQ4UFxxG SPI NAND is in current production devices -and, while it has the same logical layout as the E-series devices, -it differs in the SPI interfacing in significant ways. - -This support is contingent on previous commits to: - - * Add support for two-byte device IDs - * Define macros for page-read ops with three-byte addresses - -http://www.gigadevice.com/datasheet/gd5f1gq4xfxxg/ - -Signed-off-by: Jeff Kletsky <git-commits@allycomm.com> -Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> ---- - drivers/mtd/nand/spi/gigadevice.c | 79 +++++++++++++++++++++++++------ - 1 file changed, 64 insertions(+), 15 deletions(-) - ---- a/drivers/mtd/nand/spi/gigadevice.c -+++ b/drivers/mtd/nand/spi/gigadevice.c -@@ -9,11 +9,17 @@ - #include <linux/mtd/spinand.h> - - #define SPINAND_MFR_GIGADEVICE 0xC8 -+ - #define GD5FXGQ4XA_STATUS_ECC_1_7_BITFLIPS (1 << 4) - #define GD5FXGQ4XA_STATUS_ECC_8_BITFLIPS (3 << 4) - - #define GD5FXGQ4UEXXG_REG_STATUS2 0xf0 - -+#define GD5FXGQ4UXFXXG_STATUS_ECC_MASK (7 << 4) -+#define GD5FXGQ4UXFXXG_STATUS_ECC_NO_BITFLIPS (0 << 4) -+#define GD5FXGQ4UXFXXG_STATUS_ECC_1_3_BITFLIPS (1 << 4) -+#define GD5FXGQ4UXFXXG_STATUS_ECC_UNCOR_ERROR (7 << 4) -+ - static SPINAND_OP_VARIANTS(read_cache_variants, - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -@@ -22,6 +28,14 @@ static SPINAND_OP_VARIANTS(read_cache_va - SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); - -+static SPINAND_OP_VARIANTS(read_cache_variants_f, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP_3A(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP_3A(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0)); -+ - static SPINAND_OP_VARIANTS(write_cache_variants, - SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), - SPINAND_PROG_LOAD(true, 0, NULL, 0)); -@@ -59,6 +73,11 @@ static int gd5fxgq4xa_ooblayout_free(str - return 0; - } - -+static const struct mtd_ooblayout_ops gd5fxgq4xa_ooblayout = { -+ .ecc = gd5fxgq4xa_ooblayout_ecc, -+ .free = gd5fxgq4xa_ooblayout_free, -+}; -+ - static int gd5fxgq4xa_ecc_get_status(struct spinand_device *spinand, - u8 status) - { -@@ -83,7 +102,7 @@ static int gd5fxgq4xa_ecc_get_status(str - return -EINVAL; - } - --static int gd5fxgq4uexxg_ooblayout_ecc(struct mtd_info *mtd, int section, -+static int gd5fxgq4_variant2_ooblayout_ecc(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { - if (section) -@@ -95,7 +114,7 @@ static int gd5fxgq4uexxg_ooblayout_ecc(s - return 0; - } - --static int gd5fxgq4uexxg_ooblayout_free(struct mtd_info *mtd, int section, -+static int gd5fxgq4_variant2_ooblayout_free(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { - if (section) -@@ -108,6 +127,11 @@ static int gd5fxgq4uexxg_ooblayout_free( - return 0; - } - -+static const struct mtd_ooblayout_ops gd5fxgq4_variant2_ooblayout = { -+ .ecc = gd5fxgq4_variant2_ooblayout_ecc, -+ .free = gd5fxgq4_variant2_ooblayout_free, -+}; -+ - static int gd5fxgq4uexxg_ecc_get_status(struct spinand_device *spinand, - u8 status) - { -@@ -150,15 +174,25 @@ static int gd5fxgq4uexxg_ecc_get_status( - return -EINVAL; - } - --static const struct mtd_ooblayout_ops gd5fxgq4xa_ooblayout = { -- .ecc = gd5fxgq4xa_ooblayout_ecc, -- .free = gd5fxgq4xa_ooblayout_free, --}; -+static int gd5fxgq4ufxxg_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & GD5FXGQ4UXFXXG_STATUS_ECC_MASK) { -+ case GD5FXGQ4UXFXXG_STATUS_ECC_NO_BITFLIPS: -+ return 0; - --static const struct mtd_ooblayout_ops gd5fxgq4uexxg_ooblayout = { -- .ecc = gd5fxgq4uexxg_ooblayout_ecc, -- .free = gd5fxgq4uexxg_ooblayout_free, --}; -+ case GD5FXGQ4UXFXXG_STATUS_ECC_1_3_BITFLIPS: -+ return 3; -+ -+ case GD5FXGQ4UXFXXG_STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: /* (2 << 4) through (6 << 4) are 4-8 corrected errors */ -+ return ((status & GD5FXGQ4UXFXXG_STATUS_ECC_MASK) >> 4) + 2; -+ } -+ -+ return -EINVAL; -+} - - static const struct spinand_info gigadevice_spinand_table[] = { - SPINAND_INFO("GD5F1GQ4xA", 0xF1, -@@ -195,25 +229,40 @@ static const struct spinand_info gigadev - &write_cache_variants, - &update_cache_variants), - 0, -- SPINAND_ECCINFO(&gd5fxgq4uexxg_ooblayout, -+ SPINAND_ECCINFO(&gd5fxgq4_variant2_ooblayout, - gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ4UFxxG", 0xb148, -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_f, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&gd5fxgq4_variant2_ooblayout, -+ gd5fxgq4ufxxg_ecc_get_status)), - }; - - static int gigadevice_spinand_detect(struct spinand_device *spinand) - { - u8 *id = spinand->id.data; -+ u16 did; - int ret; - - /* -- * For GD NANDs, There is an address byte needed to shift in before IDs -- * are read out, so the first byte in raw_id is dummy. -+ * Earlier GDF5-series devices (A,E) return [0][MID][DID] -+ * Later (F) devices return [MID][DID1][DID2] - */ -- if (id[1] != SPINAND_MFR_GIGADEVICE) -+ -+ if (id[0] == SPINAND_MFR_GIGADEVICE) -+ did = (id[1] << 8) + id[2]; -+ else if (id[0] == 0 && id[1] == SPINAND_MFR_GIGADEVICE) -+ did = id[2]; -+ else - return 0; - - ret = spinand_match_and_init(spinand, gigadevice_spinand_table, - ARRAY_SIZE(gigadevice_spinand_table), -- id[2]); -+ did); - if (ret) - return ret; - diff --git a/target/linux/generic/backport-5.4/463-v5.3-mtd-spinand-Add-initial-support-for-Paragon-PN26G0xA.patch b/target/linux/generic/backport-5.4/463-v5.3-mtd-spinand-Add-initial-support-for-Paragon-PN26G0xA.patch deleted file mode 100644 index 17b8e779bc..0000000000 --- a/target/linux/generic/backport-5.4/463-v5.3-mtd-spinand-Add-initial-support-for-Paragon-PN26G0xA.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 3552691616c940a7c4125c2678ba816653cd725e Mon Sep 17 00:00:00 2001 -From: Jeff Kletsky <git-commits@allycomm.com> -Date: Tue, 18 Jun 2019 10:08:05 -0700 -Subject: [PATCH] mtd: spinand: Add initial support for Paragon PN26G0xA - -Add initial support for Paragon Technology -PN26G01Axxxxx and PN26G02Axxxxx SPI NAND - -Datasheets available at -http://www.xtxtech.com/upfile/2016082517274590.pdf -http://www.xtxtech.com/upfile/2016082517282329.pdf - -Signed-off-by: Jeff Kletsky <git-commits@allycomm.com> -Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> -Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> - -ADOPTED FROM UPSTREAM due to upstream commit 377e517b5fa5 in Linux 5.2 - which added another parameter to NAND_MEMORG ---- - drivers/mtd/nand/spi/Makefile | 2 +- - drivers/mtd/nand/spi/core.c | 1 + - drivers/mtd/nand/spi/paragon.c | 147 +++++++++++++++++++++++++++++++++ - include/linux/mtd/spinand.h | 1 + - 4 files changed, 150 insertions(+), 1 deletion(-) - create mode 100644 drivers/mtd/nand/spi/paragon.c - ---- a/drivers/mtd/nand/spi/Makefile -+++ b/drivers/mtd/nand/spi/Makefile -@@ -1,3 +1,3 @@ - # SPDX-License-Identifier: GPL-2.0 --spinand-objs := core.o gigadevice.o macronix.o micron.o toshiba.o winbond.o -+spinand-objs := core.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o - obj-$(CONFIG_MTD_SPI_NAND) += spinand.o ---- a/drivers/mtd/nand/spi/core.c -+++ b/drivers/mtd/nand/spi/core.c -@@ -765,6 +765,7 @@ static const struct spinand_manufacturer - &gigadevice_spinand_manufacturer, - ¯onix_spinand_manufacturer, - µn_spinand_manufacturer, -+ ¶gon_spinand_manufacturer, - &toshiba_spinand_manufacturer, - &winbond_spinand_manufacturer, - }; ---- /dev/null -+++ b/drivers/mtd/nand/spi/paragon.c -@@ -0,0 +1,147 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (C) 2019 Jeff Kletsky -+ * -+ * Author: Jeff Kletsky <git-commits@allycomm.com> -+ */ -+ -+#include <linux/device.h> -+#include <linux/kernel.h> -+#include <linux/mtd/spinand.h> -+ -+ -+#define SPINAND_MFR_PARAGON 0xa1 -+ -+ -+#define PN26G0XA_STATUS_ECC_BITMASK (3 << 4) -+ -+#define PN26G0XA_STATUS_ECC_NONE_DETECTED (0 << 4) -+#define PN26G0XA_STATUS_ECC_1_7_CORRECTED (1 << 4) -+#define PN26G0XA_STATUS_ECC_ERRORED (2 << 4) -+#define PN26G0XA_STATUS_ECC_8_CORRECTED (3 << 4) -+ -+ -+static SPINAND_OP_VARIANTS(read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(write_cache_variants, -+ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), -+ SPINAND_PROG_LOAD(true, 0, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(update_cache_variants, -+ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), -+ SPINAND_PROG_LOAD(false, 0, NULL, 0)); -+ -+ -+static int pn26g0xa_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = 6 + (15 * section); /* 4 BBM + 2 user bytes */ -+ region->length = 13; -+ -+ return 0; -+} -+ -+static int pn26g0xa_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 4) -+ return -ERANGE; -+ -+ if (section == 4) { -+ region->offset = 64; -+ region->length = 64; -+ } else { -+ region->offset = 4 + (15 * section); -+ region->length = 2; -+ } -+ -+ return 0; -+} -+ -+static int pn26g0xa_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & PN26G0XA_STATUS_ECC_BITMASK) { -+ case PN26G0XA_STATUS_ECC_NONE_DETECTED: -+ return 0; -+ -+ case PN26G0XA_STATUS_ECC_1_7_CORRECTED: -+ return 7; /* Return upper limit by convention */ -+ -+ case PN26G0XA_STATUS_ECC_8_CORRECTED: -+ return 8; -+ -+ case PN26G0XA_STATUS_ECC_ERRORED: -+ return -EBADMSG; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ -+static const struct mtd_ooblayout_ops pn26g0xa_ooblayout = { -+ .ecc = pn26g0xa_ooblayout_ecc, -+ .free = pn26g0xa_ooblayout_free, -+}; -+ -+ -+static const struct spinand_info paragon_spinand_table[] = { -+ SPINAND_INFO("PN26G01A", 0xe1, -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&pn26g0xa_ooblayout, -+ pn26g0xa_ecc_get_status)), -+ SPINAND_INFO("PN26G02A", 0xe2, -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&pn26g0xa_ooblayout, -+ pn26g0xa_ecc_get_status)), -+}; -+ -+static int paragon_spinand_detect(struct spinand_device *spinand) -+{ -+ u8 *id = spinand->id.data; -+ int ret; -+ -+ /* Read ID returns [0][MID][DID] */ -+ -+ if (id[1] != SPINAND_MFR_PARAGON) -+ return 0; -+ -+ ret = spinand_match_and_init(spinand, paragon_spinand_table, -+ ARRAY_SIZE(paragon_spinand_table), -+ id[2]); -+ if (ret) -+ return ret; -+ -+ return 1; -+} -+ -+static const struct spinand_manufacturer_ops paragon_spinand_manuf_ops = { -+ .detect = paragon_spinand_detect, -+}; -+ -+const struct spinand_manufacturer paragon_spinand_manufacturer = { -+ .id = SPINAND_MFR_PARAGON, -+ .name = "Paragon", -+ .ops = ¶gon_spinand_manuf_ops, -+}; ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -227,6 +227,7 @@ struct spinand_manufacturer { - extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; - extern const struct spinand_manufacturer macronix_spinand_manufacturer; - extern const struct spinand_manufacturer micron_spinand_manufacturer; -+extern const struct spinand_manufacturer paragon_spinand_manufacturer; - extern const struct spinand_manufacturer toshiba_spinand_manufacturer; - extern const struct spinand_manufacturer winbond_spinand_manufacturer; - diff --git a/target/linux/generic/backport-5.4/700-v5.1-net-phylink-only-call-mac_config-during-resolve-when.patch b/target/linux/generic/backport-5.4/700-v5.1-net-phylink-only-call-mac_config-during-resolve-when.patch deleted file mode 100644 index 0e272ea891..0000000000 --- a/target/linux/generic/backport-5.4/700-v5.1-net-phylink-only-call-mac_config-during-resolve-when.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 6f3ea4e5b1f0867ec217f6101fcb89783ed905d7 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Sat, 9 Feb 2019 18:23:26 +0000 -Subject: [PATCH] net: phylink: only call mac_config() during resolve - when link is up - -There's little point calling mac_config() when the link is down. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -339,6 +339,13 @@ static void phylink_mac_config(struct ph - pl->ops->mac_config(pl->netdev, pl->link_an_mode, state); - } - -+static void phylink_mac_config_up(struct phylink *pl, -+ const struct phylink_link_state *state) -+{ -+ if (state->link) -+ phylink_mac_config(pl, state); -+} -+ - static void phylink_mac_an_restart(struct phylink *pl) - { - if (pl->link_config.an_enabled && -@@ -442,12 +449,12 @@ static void phylink_resolve(struct work_ - case MLO_AN_PHY: - link_state = pl->phy_state; - phylink_resolve_flow(pl, &link_state); -- phylink_mac_config(pl, &link_state); -+ phylink_mac_config_up(pl, &link_state); - break; - - case MLO_AN_FIXED: - phylink_get_fixed_state(pl, &link_state); -- phylink_mac_config(pl, &link_state); -+ phylink_mac_config_up(pl, &link_state); - break; - - case MLO_AN_INBAND: diff --git a/target/linux/generic/backport-5.4/701-v5.2-net-phylink-ensure-inband-AN-works-correctly.patch b/target/linux/generic/backport-5.4/701-v5.2-net-phylink-ensure-inband-AN-works-correctly.patch deleted file mode 100644 index 746aca2e5a..0000000000 --- a/target/linux/generic/backport-5.4/701-v5.2-net-phylink-ensure-inband-AN-works-correctly.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 72f973f292b3eaaf451ebcd3253900d41f4ef24a Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Fri, 25 Jan 2019 17:42:51 +0000 -Subject: [PATCH] net: phylink: ensure inband AN works correctly - -Do not update the link interface mode while the link is down to avoid -spurious link interface changes. - -Always call mac_config if we have a PHY to propagate the pause mode -settings to the MAC. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 37 +++++++++++++++---------------------- - 1 file changed, 15 insertions(+), 22 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -459,28 +459,21 @@ static void phylink_resolve(struct work_ - - case MLO_AN_INBAND: - phylink_get_mac_state(pl, &link_state); -- if (pl->phydev) { -- bool changed = false; - -- link_state.link = link_state.link && -- pl->phy_state.link; -+ /* If we have a phy, the "up" state is the union of -+ * both the PHY and the MAC */ -+ if (pl->phydev) -+ link_state.link &= pl->phy_state.link; - -- if (pl->phy_state.interface != -- link_state.interface) { -- link_state.interface = pl->phy_state.interface; -- changed = true; -- } -+ /* Only update if the PHY link is up */ -+ if (pl->phydev && pl->phy_state.link) { -+ link_state.interface = pl->phy_state.interface; - -- /* Propagate the flow control from the PHY -- * to the MAC. Also propagate the interface -- * if changed. -- */ -- if (pl->phy_state.link || changed) { -- link_state.pause |= pl->phy_state.pause; -- phylink_resolve_flow(pl, &link_state); -- -- phylink_mac_config(pl, &link_state); -- } -+ /* If we have a PHY, we need to update with -+ * the pause mode bits. */ -+ link_state.pause |= pl->phy_state.pause; -+ phylink_resolve_flow(pl, &link_state); -+ phylink_mac_config(pl, &link_state); - } - break; - } diff --git a/target/linux/generic/backport-5.4/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch b/target/linux/generic/backport-5.4/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch deleted file mode 100644 index 3ada51636b..0000000000 --- a/target/linux/generic/backport-5.4/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 1da223db3a0c522300b519ecbe1dc45927e28088 Mon Sep 17 00:00:00 2001 -From: Andrew Lunn <andrew@lunn.ch> -Date: Wed, 12 Sep 2018 01:53:15 +0200 -Subject: [PATCH 600/660] net: ethernet: Add helper for MACs which support asym - pause - -Rather than have the MAC drivers manipulate phydev members to indicate -they support Asym Pause, add a helper function. - -Signed-off-by: Andrew Lunn <andrew@lunn.ch> -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/phy/phy_device.c | 13 +++++++++++++ - include/linux/phy.h | 1 + - 2 files changed, 14 insertions(+) - ---- a/drivers/net/phy/phy_device.c -+++ b/drivers/net/phy/phy_device.c -@@ -1777,6 +1777,19 @@ int phy_set_max_speed(struct phy_device - } - EXPORT_SYMBOL(phy_set_max_speed); - -+/** -+ * phy_support_asym_pause - Enable support of asym pause -+ * @phydev: target phy_device struct -+ * -+ * Description: Called by the MAC to indicate is supports Asym Pause. -+ */ -+void phy_support_asym_pause(struct phy_device *phydev) -+{ -+ phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; -+ phydev->advertising = phydev->supported; -+} -+EXPORT_SYMBOL(phy_support_asym_pause); -+ - static void of_set_phy_supported(struct phy_device *phydev) - { - struct device_node *node = phydev->mdio.dev.of_node; ---- a/include/linux/phy.h -+++ b/include/linux/phy.h -@@ -1049,6 +1049,7 @@ int phy_mii_ioctl(struct phy_device *phy - int phy_start_interrupts(struct phy_device *phydev); - void phy_print_status(struct phy_device *phydev); - int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); -+void phy_support_asym_pause(struct phy_device *phydev); - - int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, - int (*run)(struct phy_device *)); diff --git a/target/linux/generic/backport-5.4/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch b/target/linux/generic/backport-5.4/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch deleted file mode 100644 index 4ad3bf698a..0000000000 --- a/target/linux/generic/backport-5.4/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch +++ /dev/null @@ -1,66 +0,0 @@ -From ce825df56e0480a2cbb296e38976babafb57e503 Mon Sep 17 00:00:00 2001 -From: Andrew Lunn <andrew@lunn.ch> -Date: Wed, 12 Sep 2018 01:53:17 +0200 -Subject: [PATCH 601/660] net: ethernet: Add helper for set_pauseparam for Asym - Pause - -ethtool can be used to enable/disable pause. Add a helper to configure -the PHY when asym pause is supported. - -Signed-off-by: Andrew Lunn <andrew@lunn.ch> -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/phy/phy_device.c | 30 ++++++++++++++++++++++++++++++ - include/linux/phy.h | 1 + - 2 files changed, 31 insertions(+) - ---- a/drivers/net/phy/phy_device.c -+++ b/drivers/net/phy/phy_device.c -@@ -1790,6 +1790,36 @@ void phy_support_asym_pause(struct phy_d - } - EXPORT_SYMBOL(phy_support_asym_pause); - -+/** -+ * phy_set_asym_pause - Configure Pause and Asym Pause -+ * @phydev: target phy_device struct -+ * @rx: Receiver Pause is supported -+ * @tx: Transmit Pause is supported -+ * -+ * Description: Configure advertised Pause support depending on if -+ * transmit and receiver pause is supported. If there has been a -+ * change in adverting, trigger a new autoneg. Generally called from -+ * the set_pauseparam .ndo. -+ */ -+void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx) -+{ -+ u16 oldadv = phydev->advertising; -+ u16 newadv = oldadv &= ~(SUPPORTED_Pause | SUPPORTED_Asym_Pause); -+ -+ if (rx) -+ newadv |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; -+ if (tx) -+ newadv ^= SUPPORTED_Asym_Pause; -+ -+ if (oldadv != newadv) { -+ phydev->advertising = newadv; -+ -+ if (phydev->autoneg) -+ phy_start_aneg(phydev); -+ } -+} -+EXPORT_SYMBOL(phy_set_asym_pause); -+ - static void of_set_phy_supported(struct phy_device *phydev) - { - struct device_node *node = phydev->mdio.dev.of_node; ---- a/include/linux/phy.h -+++ b/include/linux/phy.h -@@ -1050,6 +1050,7 @@ int phy_start_interrupts(struct phy_devi - void phy_print_status(struct phy_device *phydev); - int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); - void phy_support_asym_pause(struct phy_device *phydev); -+void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx); - - int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, - int (*run)(struct phy_device *)); diff --git a/target/linux/generic/backport-5.4/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch b/target/linux/generic/backport-5.4/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch deleted file mode 100644 index 00ef6b7a1d..0000000000 --- a/target/linux/generic/backport-5.4/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 1541649a9dd79e9b941d399de564475e426a2d0b Mon Sep 17 00:00:00 2001 -From: Florian Fainelli <f.fainelli@gmail.com> -Date: Tue, 25 Sep 2018 11:28:45 -0700 -Subject: [PATCH 602/660] net: phy: Stop with excessive soft reset - -While consolidating the PHY reset in phy_init_hw() an unconditionaly -BMCR soft-reset I became quite trigger happy with those. This was later -on deactivated for the Generic PHY driver on the premise that a prior -software entity (e.g: bootloader) might have applied workarounds in -commit 0878fff1f42c ("net: phy: Do not perform software reset for -Generic PHY"). - -Since we have a hook to wire-up a soft_reset callback, just use that and -get rid of the call to genphy_soft_reset() entirely. This speeds up -initialization and link establishment for most PHYs out there that do -not require a reset. - -Fixes: 87aa9f9c61ad ("net: phy: consolidate PHY reset in phy_init_hw()") -Tested-by: Wang, Dongsheng <dongsheng.wang@hxt-semitech.com> -Tested-by: Chris Healy <cphealy@gmail.com> -Tested-by: Andrew Lunn <andrew@lunn.ch> -Tested-by: Clemens Gruber <clemens.gruber@pqgruber.com> -Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phy_device.c | 2 -- - 1 file changed, 2 deletions(-) - ---- a/drivers/net/phy/phy_device.c -+++ b/drivers/net/phy/phy_device.c -@@ -886,8 +886,6 @@ int phy_init_hw(struct phy_device *phyde - - if (phydev->drv->soft_reset) - ret = phydev->drv->soft_reset(phydev); -- else -- ret = genphy_soft_reset(phydev); - - if (ret < 0) - return ret; diff --git a/target/linux/generic/backport-5.4/705-v5.1-net-phy-provide-full-set-of-accessor-functions-to-MM.patch b/target/linux/generic/backport-5.4/705-v5.1-net-phy-provide-full-set-of-accessor-functions-to-MM.patch deleted file mode 100644 index 9a587ad3a6..0000000000 --- a/target/linux/generic/backport-5.4/705-v5.1-net-phy-provide-full-set-of-accessor-functions-to-MM.patch +++ /dev/null @@ -1,375 +0,0 @@ -From 80758d9542205cd2e9fa730067bc3888d4f5a096 Mon Sep 17 00:00:00 2001 -From: Nikita Yushchenko <nikita.yoush@cogentembedded.com> -Date: Wed, 6 Feb 2019 07:36:40 +0100 -Subject: [PATCH 603/660] net: phy: provide full set of accessor functions to - MMD registers - -This adds full set of locked and unlocked accessor functions to read and -write PHY MMD registers and/or bitfields. - -Set of functions exactly matches what is already available for PHY -legacy registers. - -Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com> -Signed-off-by: Andrew Lunn <andrew@lunn.ch> -Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phy-core.c | 116 ++++++++++++++++++++++++++++---- - include/linux/phy.h | 134 ++++++++++++++++++++++++++++++------- - 2 files changed, 214 insertions(+), 36 deletions(-) - ---- a/drivers/net/phy/phy-core.c -+++ b/drivers/net/phy/phy-core.c -@@ -247,15 +247,15 @@ static void mmd_phy_indirect(struct mii_ - } - - /** -- * phy_read_mmd - Convenience function for reading a register -+ * __phy_read_mmd - Convenience function for reading a register - * from an MMD on a given PHY. - * @phydev: The phy_device struct - * @devad: The MMD to read from (0..31) - * @regnum: The register on the MMD to read (0..65535) - * -- * Same rules as for phy_read(); -+ * Same rules as for __phy_read(); - */ --int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) -+int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) - { - int val; - -@@ -267,33 +267,52 @@ int phy_read_mmd(struct phy_device *phyd - } else if (phydev->is_c45) { - u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff); - -- val = mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, addr); -+ val = __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, addr); - } else { - struct mii_bus *bus = phydev->mdio.bus; - int phy_addr = phydev->mdio.addr; - -- mutex_lock(&bus->mdio_lock); - mmd_phy_indirect(bus, phy_addr, devad, regnum); - - /* Read the content of the MMD's selected register */ - val = __mdiobus_read(bus, phy_addr, MII_MMD_DATA); -- mutex_unlock(&bus->mdio_lock); - } - return val; - } -+EXPORT_SYMBOL(__phy_read_mmd); -+ -+/** -+ * phy_read_mmd - Convenience function for reading a register -+ * from an MMD on a given PHY. -+ * @phydev: The phy_device struct -+ * @devad: The MMD to read from -+ * @regnum: The register on the MMD to read -+ * -+ * Same rules as for phy_read(); -+ */ -+int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_read_mmd(phydev, devad, regnum); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} - EXPORT_SYMBOL(phy_read_mmd); - - /** -- * phy_write_mmd - Convenience function for writing a register -+ * __phy_write_mmd - Convenience function for writing a register - * on an MMD on a given PHY. - * @phydev: The phy_device struct - * @devad: The MMD to read from - * @regnum: The register on the MMD to read - * @val: value to write to @regnum - * -- * Same rules as for phy_write(); -+ * Same rules as for __phy_write(); - */ --int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) -+int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) - { - int ret; - -@@ -305,23 +324,43 @@ int phy_write_mmd(struct phy_device *phy - } else if (phydev->is_c45) { - u32 addr = MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff); - -- ret = mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, -- addr, val); -+ ret = __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, -+ addr, val); - } else { - struct mii_bus *bus = phydev->mdio.bus; - int phy_addr = phydev->mdio.addr; - -- mutex_lock(&bus->mdio_lock); - mmd_phy_indirect(bus, phy_addr, devad, regnum); - - /* Write the data into MMD's selected register */ - __mdiobus_write(bus, phy_addr, MII_MMD_DATA, val); -- mutex_unlock(&bus->mdio_lock); - - ret = 0; - } - return ret; - } -+EXPORT_SYMBOL(__phy_write_mmd); -+ -+/** -+ * phy_write_mmd - Convenience function for writing a register -+ * on an MMD on a given PHY. -+ * @phydev: The phy_device struct -+ * @devad: The MMD to read from -+ * @regnum: The register on the MMD to read -+ * @val: value to write to @regnum -+ * -+ * Same rules as for phy_write(); -+ */ -+int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_write_mmd(phydev, devad, regnum, val); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} - EXPORT_SYMBOL(phy_write_mmd); - - /** -@@ -371,6 +410,57 @@ int phy_modify(struct phy_device *phydev - } - EXPORT_SYMBOL_GPL(phy_modify); - -+/** -+ * __phy_modify_mmd - Convenience function for modifying a register on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * Unlocked helper function which allows a MMD register to be modified as -+ * new register value = (old register value & ~mask) | set -+ */ -+int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) -+{ -+ int ret; -+ -+ ret = __phy_read_mmd(phydev, devad, regnum); -+ if (ret < 0) -+ return ret; -+ -+ ret = __phy_write_mmd(phydev, devad, regnum, (ret & ~mask) | set); -+ -+ return ret < 0 ? ret : 0; -+} -+EXPORT_SYMBOL_GPL(__phy_modify_mmd); -+ -+/** -+ * phy_modify_mmd - Convenience function for modifying a register on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ */ -+int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_modify_mmd(phydev, devad, regnum, mask, set); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(phy_modify_mmd); -+ - static int __phy_read_page(struct phy_device *phydev) - { - return phydev->drv->read_page(phydev); ---- a/include/linux/phy.h -+++ b/include/linux/phy.h -@@ -695,17 +695,6 @@ size_t phy_speeds(unsigned int *speeds, - void phy_resolve_aneg_linkmode(struct phy_device *phydev); - - /** -- * phy_read_mmd - Convenience function for reading a register -- * from an MMD on a given PHY. -- * @phydev: The phy_device struct -- * @devad: The MMD to read from -- * @regnum: The register on the MMD to read -- * -- * Same rules as for phy_read(); -- */ --int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum); -- --/** - * phy_read - Convenience function for reading a given PHY register - * @phydev: the phy_device struct - * @regnum: register number to read -@@ -760,9 +749,60 @@ static inline int __phy_write(struct phy - val); - } - -+/** -+ * phy_read_mmd - Convenience function for reading a register -+ * from an MMD on a given PHY. -+ * @phydev: The phy_device struct -+ * @devad: The MMD to read from -+ * @regnum: The register on the MMD to read -+ * -+ * Same rules as for phy_read(); -+ */ -+int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum); -+ -+/** -+ * __phy_read_mmd - Convenience function for reading a register -+ * from an MMD on a given PHY. -+ * @phydev: The phy_device struct -+ * @devad: The MMD to read from -+ * @regnum: The register on the MMD to read -+ * -+ * Same rules as for __phy_read(); -+ */ -+int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum); -+ -+/** -+ * phy_write_mmd - Convenience function for writing a register -+ * on an MMD on a given PHY. -+ * @phydev: The phy_device struct -+ * @devad: The MMD to write to -+ * @regnum: The register on the MMD to read -+ * @val: value to write to @regnum -+ * -+ * Same rules as for phy_write(); -+ */ -+int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); -+ -+/** -+ * __phy_write_mmd - Convenience function for writing a register -+ * on an MMD on a given PHY. -+ * @phydev: The phy_device struct -+ * @devad: The MMD to write to -+ * @regnum: The register on the MMD to read -+ * @val: value to write to @regnum -+ * -+ * Same rules as for __phy_write(); -+ */ -+int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); -+ - int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set); - int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set); - -+int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set); -+int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set); -+ - /** - * __phy_set_bits - Convenience function for setting bits in a PHY register - * @phydev: the phy_device struct -@@ -813,6 +853,66 @@ static inline int phy_clear_bits(struct - } - - /** -+ * __phy_set_bits_mmd - Convenience function for setting bits in a register -+ * on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @val: bits to set -+ * -+ * The caller must have taken the MDIO bus lock. -+ */ -+static inline int __phy_set_bits_mmd(struct phy_device *phydev, int devad, -+ u32 regnum, u16 val) -+{ -+ return __phy_modify_mmd(phydev, devad, regnum, 0, val); -+} -+ -+/** -+ * __phy_clear_bits_mmd - Convenience function for clearing bits in a register -+ * on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @val: bits to clear -+ * -+ * The caller must have taken the MDIO bus lock. -+ */ -+static inline int __phy_clear_bits_mmd(struct phy_device *phydev, int devad, -+ u32 regnum, u16 val) -+{ -+ return __phy_modify_mmd(phydev, devad, regnum, val, 0); -+} -+ -+/** -+ * phy_set_bits_mmd - Convenience function for setting bits in a register -+ * on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @val: bits to set -+ */ -+static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad, -+ u32 regnum, u16 val) -+{ -+ return phy_modify_mmd(phydev, devad, regnum, 0, val); -+} -+ -+/** -+ * phy_clear_bits_mmd - Convenience function for clearing bits in a register -+ * on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @val: bits to clear -+ */ -+static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad, -+ u32 regnum, u16 val) -+{ -+ return phy_modify_mmd(phydev, devad, regnum, val, 0); -+} -+ -+/** - * phy_interrupt_is_valid - Convenience function for testing a given PHY irq - * @phydev: the phy_device struct - * -@@ -888,18 +988,6 @@ static inline bool phy_is_pseudo_fixed_l - return phydev->is_pseudo_fixed_link; - } - --/** -- * phy_write_mmd - Convenience function for writing a register -- * on an MMD on a given PHY. -- * @phydev: The phy_device struct -- * @devad: The MMD to read from -- * @regnum: The register on the MMD to read -- * @val: value to write to @regnum -- * -- * Same rules as for phy_write(); -- */ --int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); -- - int phy_save_page(struct phy_device *phydev); - int phy_select_page(struct phy_device *phydev, int page); - int phy_restore_page(struct phy_device *phydev, int oldpage, int ret); diff --git a/target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch b/target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch deleted file mode 100644 index dddfcc2018..0000000000 --- a/target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch +++ /dev/null @@ -1,217 +0,0 @@ -From c1e3f753f6b85d7636024159bb78f764e09492f1 Mon Sep 17 00:00:00 2001 -From: Heiner Kallweit <hkallweit1@gmail.com> -Date: Sun, 10 Feb 2019 19:57:56 +0100 -Subject: [PATCH 604/660] net: phy: add register modifying helpers returning 1 - on change - -When modifying registers there are scenarios where we need to know -whether the register content actually changed. This patch adds -new helpers to not break users of the current ones, phy_modify() etc. - -Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> -Reviewed-by: Andrew Lunn <andrew@lunn.ch> -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phy-core.c | 127 ++++++++++++++++++++++++++++++++++--- - include/linux/phy.h | 12 +++- - 2 files changed, 128 insertions(+), 11 deletions(-) - ---- a/drivers/net/phy/phy-core.c -+++ b/drivers/net/phy/phy-core.c -@@ -364,7 +364,7 @@ int phy_write_mmd(struct phy_device *phy - EXPORT_SYMBOL(phy_write_mmd); - - /** -- * __phy_modify() - Convenience function for modifying a PHY register -+ * __phy_modify_changed() - Convenience function for modifying a PHY register - * @phydev: a pointer to a &struct phy_device - * @regnum: register number - * @mask: bit mask of bits to clear -@@ -372,16 +372,69 @@ EXPORT_SYMBOL(phy_write_mmd); - * - * Unlocked helper function which allows a PHY register to be modified as - * new register value = (old register value & ~mask) | set -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change - */ --int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) -+int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, -+ u16 set) - { -- int ret; -+ int new, ret; - - ret = __phy_read(phydev, regnum); - if (ret < 0) - return ret; - -- ret = __phy_write(phydev, regnum, (ret & ~mask) | set); -+ new = (ret & ~mask) | set; -+ if (new == ret) -+ return 0; -+ -+ ret = __phy_write(phydev, regnum, new); -+ -+ return ret < 0 ? ret : 1; -+} -+EXPORT_SYMBOL_GPL(__phy_modify_changed); -+ -+/** -+ * phy_modify_changed - Function for modifying a PHY register -+ * @phydev: the phy_device struct -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change -+ */ -+int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_modify_changed(phydev, regnum, mask, set); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(phy_modify_changed); -+ -+/** -+ * __phy_modify - Convenience function for modifying a PHY register -+ * @phydev: the phy_device struct -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ */ -+int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) -+{ -+ int ret; -+ -+ ret = __phy_modify_changed(phydev, regnum, mask, set); - - return ret < 0 ? ret : 0; - } -@@ -411,7 +464,7 @@ int phy_modify(struct phy_device *phydev - EXPORT_SYMBOL_GPL(phy_modify); - - /** -- * __phy_modify_mmd - Convenience function for modifying a register on MMD -+ * __phy_modify_mmd_changed - Function for modifying a register on MMD - * @phydev: the phy_device struct - * @devad: the MMD containing register to modify - * @regnum: register number to modify -@@ -420,17 +473,73 @@ EXPORT_SYMBOL_GPL(phy_modify); - * - * Unlocked helper function which allows a MMD register to be modified as - * new register value = (old register value & ~mask) | set -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change - */ --int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -- u16 mask, u16 set) -+int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) - { -- int ret; -+ int new, ret; - - ret = __phy_read_mmd(phydev, devad, regnum); - if (ret < 0) - return ret; - -- ret = __phy_write_mmd(phydev, devad, regnum, (ret & ~mask) | set); -+ new = (ret & ~mask) | set; -+ if (new == ret) -+ return 0; -+ -+ ret = __phy_write_mmd(phydev, devad, regnum, new); -+ -+ return ret < 0 ? ret : 1; -+} -+EXPORT_SYMBOL_GPL(__phy_modify_mmd_changed); -+ -+/** -+ * phy_modify_mmd_changed - Function for modifying a register on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change -+ */ -+int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(phy_modify_mmd_changed); -+ -+/** -+ * __phy_modify_mmd - Convenience function for modifying a register on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ */ -+int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) -+{ -+ int ret; -+ -+ ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); - - return ret < 0 ? ret : 0; - } ---- a/include/linux/phy.h -+++ b/include/linux/phy.h -@@ -795,13 +795,21 @@ int phy_write_mmd(struct phy_device *phy - */ - int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); - -+int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, -+ u16 set); -+int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, -+ u16 set); - int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set); - int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set); - -+int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set); -+int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set); - int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -- u16 mask, u16 set); -+ u16 mask, u16 set); - int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -- u16 mask, u16 set); -+ u16 mask, u16 set); - - /** - * __phy_set_bits - Convenience function for setting bits in a PHY register diff --git a/target/linux/generic/backport-5.4/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch b/target/linux/generic/backport-5.4/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch deleted file mode 100644 index 6d47fa9634..0000000000 --- a/target/linux/generic/backport-5.4/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 2c3db705737cf52d7d24c993f0889b25b956c718 Mon Sep 17 00:00:00 2001 -From: Heiner Kallweit <hkallweit1@gmail.com> -Date: Mon, 18 Feb 2019 21:27:18 +0100 -Subject: [PATCH 605/660] net: phy: add genphy_c45_check_and_restart_aneg - -This function will be used by config_aneg callback implementations of -PHY drivers and allows to reduce boilerplate code. - -Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/phy/phy-c45.c | 30 ++++++++++++++++++++++++++++++ - include/linux/phy.h | 1 + - 2 files changed, 31 insertions(+) - ---- a/drivers/net/phy/phy-c45.c -+++ b/drivers/net/phy/phy-c45.c -@@ -110,6 +110,36 @@ int genphy_c45_restart_aneg(struct phy_d - EXPORT_SYMBOL_GPL(genphy_c45_restart_aneg); - - /** -+ * genphy_c45_check_and_restart_aneg - Enable and restart auto-negotiation -+ * @phydev: target phy_device struct -+ * @restart: whether aneg restart is requested -+ * -+ * This assumes that the auto-negotiation MMD is present. -+ * -+ * Check, and restart auto-negotiation if needed. -+ */ -+int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart) -+{ -+ int ret = 0; -+ -+ if (!restart) { -+ /* Configure and restart aneg if it wasn't set before */ -+ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); -+ if (ret < 0) -+ return ret; -+ -+ if (!(ret & MDIO_AN_CTRL1_ENABLE)) -+ restart = true; -+ } -+ -+ if (restart) -+ ret = genphy_c45_restart_aneg(phydev); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(genphy_c45_check_and_restart_aneg); -+ -+/** - * genphy_c45_aneg_done - return auto-negotiation complete status - * @phydev: target phy_device struct - * ---- a/include/linux/phy.h -+++ b/include/linux/phy.h -@@ -1098,6 +1098,7 @@ int genphy_write_mmd_unsupported(struct - - /* Clause 45 PHY */ - int genphy_c45_restart_aneg(struct phy_device *phydev); -+int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart); - int genphy_c45_aneg_done(struct phy_device *phydev); - int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask); - int genphy_c45_read_lpa(struct phy_device *phydev); diff --git a/target/linux/generic/backport-5.4/708-v5.3-net-phylink-remove-netdev-from-phylink-mii-ioctl-emu.patch b/target/linux/generic/backport-5.4/708-v5.3-net-phylink-remove-netdev-from-phylink-mii-ioctl-emu.patch deleted file mode 100644 index 1c3f1cc01a..0000000000 --- a/target/linux/generic/backport-5.4/708-v5.3-net-phylink-remove-netdev-from-phylink-mii-ioctl-emu.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 4c4323084e9a67210c8d269dceba1be99356c414 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Tue, 28 May 2019 10:57:18 +0100 -Subject: [PATCH 606/660] net: phylink: remove netdev from phylink mii ioctl - emulation - -The netdev used in the phylink ioctl emulation is never used, so let's -remove it. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> -Reviewed-by: Andrew Lunn <andrew@lunn.ch> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 12 ++++-------- - 1 file changed, 4 insertions(+), 8 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -1360,8 +1360,8 @@ EXPORT_SYMBOL_GPL(phylink_ethtool_set_ee - * - * FIXME: should deal with negotiation state too. - */ --static int phylink_mii_emul_read(struct net_device *ndev, unsigned int reg, -- struct phylink_link_state *state, bool aneg) -+static int phylink_mii_emul_read(unsigned int reg, -+ struct phylink_link_state *state) - { - struct fixed_phy_status fs; - int val; -@@ -1376,8 +1376,6 @@ static int phylink_mii_emul_read(struct - if (reg == MII_BMSR) { - if (!state->an_complete) - val &= ~BMSR_ANEGCOMPLETE; -- if (!aneg) -- val &= ~BMSR_ANEGCAPABLE; - } - return val; - } -@@ -1473,8 +1471,7 @@ static int phylink_mii_read(struct phyli - case MLO_AN_FIXED: - if (phy_id == 0) { - phylink_get_fixed_state(pl, &state); -- val = phylink_mii_emul_read(pl->netdev, reg, &state, -- true); -+ val = phylink_mii_emul_read(reg, &state); - } - break; - -@@ -1487,8 +1484,7 @@ static int phylink_mii_read(struct phyli - if (val < 0) - return val; - -- val = phylink_mii_emul_read(pl->netdev, reg, &state, -- true); -+ val = phylink_mii_emul_read(reg, &state); - } - break; - } diff --git a/target/linux/generic/backport-5.4/709-v5.3-net-phylink-support-for-link-gpio-interrupt.patch b/target/linux/generic/backport-5.4/709-v5.3-net-phylink-support-for-link-gpio-interrupt.patch deleted file mode 100644 index 84a1c853d1..0000000000 --- a/target/linux/generic/backport-5.4/709-v5.3-net-phylink-support-for-link-gpio-interrupt.patch +++ /dev/null @@ -1,90 +0,0 @@ -From cba0aba37d2228556e0d1f776d403435868cdbfa Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Tue, 28 May 2019 10:57:23 +0100 -Subject: [PATCH 607/660] net: phylink: support for link gpio interrupt - -Add support for using GPIO interrupts with a fixed-link GPIO rather than -polling the GPIO every second and invoking the phylink resolution. This -avoids unnecessary calls to mac_config(). - -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> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 36 ++++++++++++++++++++++++++++++++---- - 1 file changed, 32 insertions(+), 4 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -59,6 +59,7 @@ struct phylink { - phy_interface_t cur_interface; - - struct gpio_desc *link_gpio; -+ unsigned int link_irq; - struct timer_list link_poll; - void (*get_fixed_state)(struct net_device *dev, - struct phylink_link_state *s); -@@ -645,7 +646,7 @@ void phylink_destroy(struct phylink *pl) - { - if (pl->sfp_bus) - sfp_unregister_upstream(pl->sfp_bus); -- if (!IS_ERR_OR_NULL(pl->link_gpio)) -+ if (pl->link_gpio) - gpiod_put(pl->link_gpio); - - cancel_work_sync(&pl->resolve); -@@ -912,6 +913,15 @@ void phylink_mac_change(struct phylink * - } - EXPORT_SYMBOL_GPL(phylink_mac_change); - -+static irqreturn_t phylink_link_handler(int irq, void *data) -+{ -+ struct phylink *pl = data; -+ -+ phylink_run_resolve(pl); -+ -+ return IRQ_HANDLED; -+} -+ - /** - * phylink_start() - start a phylink instance - * @pl: a pointer to a &struct phylink returned from phylink_create() -@@ -947,7 +957,22 @@ void phylink_start(struct phylink *pl) - clear_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state); - phylink_run_resolve(pl); - -- if (pl->link_an_mode == MLO_AN_FIXED && !IS_ERR(pl->link_gpio)) -+ if (pl->link_an_mode == MLO_AN_FIXED && pl->link_gpio) { -+ int irq = gpiod_to_irq(pl->link_gpio); -+ -+ if (irq > 0) { -+ if (!request_irq(irq, phylink_link_handler, -+ IRQF_TRIGGER_RISING | -+ IRQF_TRIGGER_FALLING, -+ "netdev link", pl)) -+ pl->link_irq = irq; -+ else -+ irq = 0; -+ } -+ if (irq <= 0) -+ mod_timer(&pl->link_poll, jiffies + HZ); -+ } -+ if (pl->link_an_mode == MLO_AN_FIXED && pl->get_fixed_state) - mod_timer(&pl->link_poll, jiffies + HZ); - if (pl->sfp_bus) - sfp_upstream_start(pl->sfp_bus); -@@ -973,8 +998,11 @@ void phylink_stop(struct phylink *pl) - phy_stop(pl->phydev); - if (pl->sfp_bus) - sfp_upstream_stop(pl->sfp_bus); -- if (pl->link_an_mode == MLO_AN_FIXED && !IS_ERR(pl->link_gpio)) -- del_timer_sync(&pl->link_poll); -+ del_timer_sync(&pl->link_poll); -+ if (pl->link_irq) { -+ free_irq(pl->link_irq, pl); -+ pl->link_irq = 0; -+ } - - phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_STOPPED); - } diff --git a/target/linux/generic/backport-5.4/710-v5.3-net-phy-allow-Clause-45-access-via-mii-ioctl.patch b/target/linux/generic/backport-5.4/710-v5.3-net-phy-allow-Clause-45-access-via-mii-ioctl.patch deleted file mode 100644 index 3a601c65b0..0000000000 --- a/target/linux/generic/backport-5.4/710-v5.3-net-phy-allow-Clause-45-access-via-mii-ioctl.patch +++ /dev/null @@ -1,77 +0,0 @@ -From eb5df3d026824832831376bbdf04e01a52776eea Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Tue, 28 May 2019 10:57:29 +0100 -Subject: [PATCH 608/660] net: phy: allow Clause 45 access via mii ioctl - -Allow userspace to generate Clause 45 MII access cycles via phylib. -This is useful for tools such as mii-diag to be able to inspect Clause -45 PHYs. - -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> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phy.c | 33 ++++++++++++++++++++++++--------- - 1 file changed, 24 insertions(+), 9 deletions(-) - ---- a/drivers/net/phy/phy.c -+++ b/drivers/net/phy/phy.c -@@ -397,6 +397,7 @@ int phy_mii_ioctl(struct phy_device *phy - struct mii_ioctl_data *mii_data = if_mii(ifr); - u16 val = mii_data->val_in; - bool change_autoneg = false; -+ int prtad, devad; - - switch (cmd) { - case SIOCGMIIPHY: -@@ -404,14 +405,29 @@ int phy_mii_ioctl(struct phy_device *phy - /* fall through */ - - case SIOCGMIIREG: -- mii_data->val_out = mdiobus_read(phydev->mdio.bus, -- mii_data->phy_id, -- mii_data->reg_num); -+ if (mdio_phy_id_is_c45(mii_data->phy_id)) { -+ prtad = mdio_phy_id_prtad(mii_data->phy_id); -+ devad = mdio_phy_id_devad(mii_data->phy_id); -+ devad = MII_ADDR_C45 | devad << 16 | mii_data->reg_num; -+ } else { -+ prtad = mii_data->phy_id; -+ devad = mii_data->reg_num; -+ } -+ mii_data->val_out = mdiobus_read(phydev->mdio.bus, prtad, -+ devad); - return 0; - - case SIOCSMIIREG: -- if (mii_data->phy_id == phydev->mdio.addr) { -- switch (mii_data->reg_num) { -+ if (mdio_phy_id_is_c45(mii_data->phy_id)) { -+ prtad = mdio_phy_id_prtad(mii_data->phy_id); -+ devad = mdio_phy_id_devad(mii_data->phy_id); -+ devad = MII_ADDR_C45 | devad << 16 | mii_data->reg_num; -+ } else { -+ prtad = mii_data->phy_id; -+ devad = mii_data->reg_num; -+ } -+ if (prtad == phydev->mdio.addr) { -+ switch (devad) { - case MII_BMCR: - if ((val & (BMCR_RESET | BMCR_ANENABLE)) == 0) { - if (phydev->autoneg == AUTONEG_ENABLE) -@@ -443,11 +459,10 @@ int phy_mii_ioctl(struct phy_device *phy - } - } - -- mdiobus_write(phydev->mdio.bus, mii_data->phy_id, -- mii_data->reg_num, val); -+ mdiobus_write(phydev->mdio.bus, prtad, devad, val); - -- if (mii_data->phy_id == phydev->mdio.addr && -- mii_data->reg_num == MII_BMCR && -+ if (prtad == phydev->mdio.addr && -+ devad == MII_BMCR && - val & BMCR_RESET) - return phy_init_hw(phydev); - diff --git a/target/linux/generic/backport-5.4/711-v5.3-net-sfp-add-mandatory-attach-detach-methods-for-sfp-.patch b/target/linux/generic/backport-5.4/711-v5.3-net-sfp-add-mandatory-attach-detach-methods-for-sfp-.patch deleted file mode 100644 index 74dc39fa7f..0000000000 --- a/target/linux/generic/backport-5.4/711-v5.3-net-sfp-add-mandatory-attach-detach-methods-for-sfp-.patch +++ /dev/null @@ -1,94 +0,0 @@ -From aeabfaa63285470e81fa341e14f92d68880aa160 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Tue, 28 May 2019 10:57:34 +0100 -Subject: [PATCH 609/660] net: sfp: add mandatory attach/detach methods for sfp - buses - -Add attach and detach methods for SFP buses, which will allow us to get -rid of the netdev storage in sfp-bus. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> -Reviewed-by: Andrew Lunn <andrew@lunn.ch> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 16 ++++++++++++++++ - drivers/net/phy/sfp-bus.c | 4 ++-- - include/linux/sfp.h | 6 ++++++ - 3 files changed, 24 insertions(+), 2 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -1615,6 +1615,20 @@ int phylink_mii_ioctl(struct phylink *pl - } - EXPORT_SYMBOL_GPL(phylink_mii_ioctl); - -+static void phylink_sfp_attach(void *upstream, struct sfp_bus *bus) -+{ -+ struct phylink *pl = upstream; -+ -+ pl->netdev->sfp_bus = bus; -+} -+ -+static void phylink_sfp_detach(void *upstream, struct sfp_bus *bus) -+{ -+ struct phylink *pl = upstream; -+ -+ pl->netdev->sfp_bus = NULL; -+} -+ - static int phylink_sfp_module_insert(void *upstream, - const struct sfp_eeprom_id *id) - { -@@ -1733,6 +1747,8 @@ static void phylink_sfp_disconnect_phy(v - } - - static const struct sfp_upstream_ops sfp_phylink_ops = { -+ .attach = phylink_sfp_attach, -+ .detach = phylink_sfp_detach, - .module_insert = phylink_sfp_module_insert, - .link_up = phylink_sfp_link_up, - .link_down = phylink_sfp_link_down, ---- a/drivers/net/phy/sfp-bus.c -+++ b/drivers/net/phy/sfp-bus.c -@@ -350,7 +350,7 @@ static int sfp_register_bus(struct sfp_b - bus->socket_ops->attach(bus->sfp); - if (bus->started) - bus->socket_ops->start(bus->sfp); -- bus->netdev->sfp_bus = bus; -+ bus->upstream_ops->attach(bus->upstream, bus); - bus->registered = true; - return 0; - } -@@ -359,8 +359,8 @@ static void sfp_unregister_bus(struct sf - { - const struct sfp_upstream_ops *ops = bus->upstream_ops; - -- bus->netdev->sfp_bus = NULL; - if (bus->registered) { -+ bus->upstream_ops->detach(bus->upstream, bus); - if (bus->started) - bus->socket_ops->stop(bus->sfp); - bus->socket_ops->detach(bus->sfp); ---- a/include/linux/sfp.h -+++ b/include/linux/sfp.h -@@ -469,6 +469,10 @@ struct sfp_bus; - - /** - * struct sfp_upstream_ops - upstream operations structure -+ * @attach: called when the sfp socket driver is bound to the upstream -+ * (mandatory). -+ * @detach: called when the sfp socket driver is unbound from the upstream -+ * (mandatory). - * @module_insert: called after a module has been detected to determine - * whether the module is supported for the upstream device. - * @module_remove: called after the module has been removed. -@@ -481,6 +485,8 @@ struct sfp_bus; - * been removed. - */ - struct sfp_upstream_ops { -+ void (*attach)(void *priv, struct sfp_bus *bus); -+ void (*detach)(void *priv, struct sfp_bus *bus); - int (*module_insert)(void *priv, const struct sfp_eeprom_id *id); - void (*module_remove)(void *priv); - void (*link_down)(void *priv); diff --git a/target/linux/generic/backport-5.4/712-v5.3-net-sfp-remove-sfp-bus-use-of-netdevs.patch b/target/linux/generic/backport-5.4/712-v5.3-net-sfp-remove-sfp-bus-use-of-netdevs.patch deleted file mode 100644 index 8f0c37e092..0000000000 --- a/target/linux/generic/backport-5.4/712-v5.3-net-sfp-remove-sfp-bus-use-of-netdevs.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 60d756717d772be90d07a07cd2cc140c76da3e4a Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Tue, 28 May 2019 10:57:39 +0100 -Subject: [PATCH 610/660] net: sfp: remove sfp-bus use of netdevs - -The sfp-bus code now no longer has any use for the network device -structure, so remove its use. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> -Reviewed-by: Andrew Lunn <andrew@lunn.ch> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 3 +-- - drivers/net/phy/sfp-bus.c | 10 +++------- - include/linux/sfp.h | 6 ++---- - 3 files changed, 6 insertions(+), 13 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -555,8 +555,7 @@ static int phylink_register_sfp(struct p - return ret; - } - -- pl->sfp_bus = sfp_register_upstream(ref.fwnode, pl->netdev, pl, -- &sfp_phylink_ops); -+ pl->sfp_bus = sfp_register_upstream(ref.fwnode, pl, &sfp_phylink_ops); - if (!pl->sfp_bus) - return -ENOMEM; - ---- a/drivers/net/phy/sfp-bus.c -+++ b/drivers/net/phy/sfp-bus.c -@@ -23,7 +23,6 @@ struct sfp_bus { - - const struct sfp_upstream_ops *upstream_ops; - void *upstream; -- struct net_device *netdev; - struct phy_device *phydev; - - bool registered; -@@ -442,13 +441,11 @@ static void sfp_upstream_clear(struct sf - { - bus->upstream_ops = NULL; - bus->upstream = NULL; -- bus->netdev = NULL; - } - - /** - * sfp_register_upstream() - Register the neighbouring device - * @fwnode: firmware node for the SFP bus -- * @ndev: network device associated with the interface - * @upstream: the upstream private data - * @ops: the upstream's &struct sfp_upstream_ops - * -@@ -459,7 +456,7 @@ static void sfp_upstream_clear(struct sf - * On error, returns %NULL. - */ - struct sfp_bus *sfp_register_upstream(struct fwnode_handle *fwnode, -- struct net_device *ndev, void *upstream, -+ void *upstream, - const struct sfp_upstream_ops *ops) - { - struct sfp_bus *bus = sfp_bus_get(fwnode); -@@ -469,7 +466,6 @@ struct sfp_bus *sfp_register_upstream(st - rtnl_lock(); - bus->upstream_ops = ops; - bus->upstream = upstream; -- bus->netdev = ndev; - - if (bus->sfp) { - ret = sfp_register_bus(bus); -@@ -591,7 +587,7 @@ struct sfp_bus *sfp_register_socket(stru - bus->sfp = sfp; - bus->socket_ops = ops; - -- if (bus->netdev) { -+ if (bus->upstream_ops) { - ret = sfp_register_bus(bus); - if (ret) - sfp_socket_clear(bus); -@@ -611,7 +607,7 @@ EXPORT_SYMBOL_GPL(sfp_register_socket); - void sfp_unregister_socket(struct sfp_bus *bus) - { - rtnl_lock(); -- if (bus->netdev) -+ if (bus->upstream_ops) - sfp_unregister_bus(bus); - sfp_socket_clear(bus); - rtnl_unlock(); ---- a/include/linux/sfp.h -+++ b/include/linux/sfp.h -@@ -464,7 +464,6 @@ enum { - struct fwnode_handle; - struct ethtool_eeprom; - struct ethtool_modinfo; --struct net_device; - struct sfp_bus; - - /** -@@ -510,7 +509,7 @@ int sfp_get_module_eeprom(struct sfp_bus - void sfp_upstream_start(struct sfp_bus *bus); - void sfp_upstream_stop(struct sfp_bus *bus); - struct sfp_bus *sfp_register_upstream(struct fwnode_handle *fwnode, -- struct net_device *ndev, void *upstream, -+ void *upstream, - const struct sfp_upstream_ops *ops); - void sfp_unregister_upstream(struct sfp_bus *bus); - #else -@@ -555,8 +554,7 @@ static inline void sfp_upstream_stop(str - } - - static inline struct sfp_bus *sfp_register_upstream( -- struct fwnode_handle *fwnode, -- struct net_device *ndev, void *upstream, -+ struct fwnode_handle *fwnode, void *upstream, - const struct sfp_upstream_ops *ops) - { - return (struct sfp_bus *)-1; diff --git a/target/linux/generic/backport-5.4/713-v5.2-net-phylink-avoid-reducing-support-mask.patch b/target/linux/generic/backport-5.4/713-v5.2-net-phylink-avoid-reducing-support-mask.patch deleted file mode 100644 index 3aa8d9e571..0000000000 --- a/target/linux/generic/backport-5.4/713-v5.2-net-phylink-avoid-reducing-support-mask.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 8ac1d3e5cf7d277769ba3403d99f643fab1e3fae Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Sat, 23 Nov 2019 14:19:54 +0000 -Subject: [PATCH 611/660] net: phylink: avoid reducing support mask - -Avoid reducing the support mask as a result of the interface type -selected for SFP modules, or when setting the link settings through -ethtool - this should only change when the supported link modes of -the hardware combination change. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/phy/phylink.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -1137,6 +1137,7 @@ EXPORT_SYMBOL_GPL(phylink_ethtool_ksetti - int phylink_ethtool_ksettings_set(struct phylink *pl, - const struct ethtool_link_ksettings *kset) - { -+ __ETHTOOL_DECLARE_LINK_MODE_MASK(support); - struct ethtool_link_ksettings our_kset; - struct phylink_link_state config; - int ret; -@@ -1147,11 +1148,12 @@ int phylink_ethtool_ksettings_set(struct - kset->base.autoneg != AUTONEG_ENABLE) - return -EINVAL; - -+ linkmode_copy(support, pl->supported); - config = pl->link_config; - - /* Mask out unsupported advertisements */ - linkmode_and(config.advertising, kset->link_modes.advertising, -- pl->supported); -+ support); - - /* FIXME: should we reject autoneg if phy/mac does not support it? */ - if (kset->base.autoneg == AUTONEG_DISABLE) { -@@ -1161,7 +1163,7 @@ int phylink_ethtool_ksettings_set(struct - * duplex. - */ - s = phy_lookup_setting(kset->base.speed, kset->base.duplex, -- pl->supported, -+ support, - __ETHTOOL_LINK_MODE_MASK_NBITS, false); - if (!s) - return -EINVAL; -@@ -1191,7 +1193,7 @@ int phylink_ethtool_ksettings_set(struct - __set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, config.advertising); - } - -- if (phylink_validate(pl, pl->supported, &config)) -+ if (phylink_validate(pl, support, &config)) - return -EINVAL; - - /* If autonegotiation is enabled, we must have an advertisement */ -@@ -1633,6 +1635,7 @@ static int phylink_sfp_module_insert(voi - { - struct phylink *pl = upstream; - __ETHTOOL_DECLARE_LINK_MODE_MASK(support) = { 0, }; -+ __ETHTOOL_DECLARE_LINK_MODE_MASK(support1); - struct phylink_link_state config; - phy_interface_t iface; - int ret = 0; -@@ -1660,6 +1663,8 @@ static int phylink_sfp_module_insert(voi - return ret; - } - -+ linkmode_copy(support1, support); -+ - iface = sfp_select_interface(pl->sfp_bus, id, config.advertising); - if (iface == PHY_INTERFACE_MODE_NA) { - netdev_err(pl->netdev, -@@ -1669,7 +1674,7 @@ static int phylink_sfp_module_insert(voi - } - - config.interface = iface; -- ret = phylink_validate(pl, support, &config); -+ 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), diff --git a/target/linux/generic/backport-5.4/714-v5.3-net-sfp-Stop-SFP-polling-and-interrupt-handling-duri.patch b/target/linux/generic/backport-5.4/714-v5.3-net-sfp-Stop-SFP-polling-and-interrupt-handling-duri.patch deleted file mode 100644 index 0509950296..0000000000 --- a/target/linux/generic/backport-5.4/714-v5.3-net-sfp-Stop-SFP-polling-and-interrupt-handling-duri.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 254236a22109efa84c9e9f5a9c76a1719439e309 Mon Sep 17 00:00:00 2001 -From: Robert Hancock <hancock@sedsystems.ca> -Date: Fri, 7 Jun 2019 10:42:35 -0600 -Subject: [PATCH 612/660] net: sfp: Stop SFP polling and interrupt handling - during shutdown - -SFP device polling can cause problems during the shutdown process if the -parent devices of the network controller have been shut down already. -This problem was seen on the iMX6 platform with PCIe devices, where -accessing the device after the bus is shut down causes a hang. - -Free any acquired GPIO interrupts and stop all delayed work in the SFP -driver during the shutdown process, so that we ensure that no pending -operations are still occurring after the SFP shutdown completes. - -Signed-off-by: Robert Hancock <hancock@sedsystems.ca> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/phy/sfp.c | 31 ++++++++++++++++++++++++++----- - 1 file changed, 26 insertions(+), 5 deletions(-) - ---- a/drivers/net/phy/sfp.c -+++ b/drivers/net/phy/sfp.c -@@ -183,6 +183,7 @@ struct sfp { - int (*write)(struct sfp *, bool, u8, void *, size_t); - - struct gpio_desc *gpio[GPIO_MAX]; -+ int gpio_irq[GPIO_MAX]; - - bool attached; - struct mutex st_mutex; /* Protects state */ -@@ -1803,7 +1804,7 @@ static int sfp_probe(struct platform_dev - const struct sff_data *sff; - struct sfp *sfp; - bool poll = false; -- int irq, err, i; -+ int err, i; - - sfp = sfp_alloc(&pdev->dev); - if (IS_ERR(sfp)) -@@ -1885,19 +1886,22 @@ static int sfp_probe(struct platform_dev - if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i]) - continue; - -- irq = gpiod_to_irq(sfp->gpio[i]); -- if (!irq) { -+ sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]); -+ if (!sfp->gpio_irq[i]) { - poll = true; - continue; - } - -- err = devm_request_threaded_irq(sfp->dev, irq, NULL, sfp_irq, -+ err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i], -+ NULL, sfp_irq, - IRQF_ONESHOT | - IRQF_TRIGGER_RISING | - IRQF_TRIGGER_FALLING, - dev_name(sfp->dev), sfp); -- if (err) -+ if (err) { -+ sfp->gpio_irq[i] = 0; - poll = true; -+ } - } - - if (poll) -@@ -1928,9 +1932,26 @@ static int sfp_remove(struct platform_de - return 0; - } - -+static void sfp_shutdown(struct platform_device *pdev) -+{ -+ struct sfp *sfp = platform_get_drvdata(pdev); -+ int i; -+ -+ for (i = 0; i < GPIO_MAX; i++) { -+ if (!sfp->gpio_irq[i]) -+ continue; -+ -+ devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp); -+ } -+ -+ cancel_delayed_work_sync(&sfp->poll); -+ cancel_delayed_work_sync(&sfp->timeout); -+} -+ - static struct platform_driver sfp_driver = { - .probe = sfp_probe, - .remove = sfp_remove, -+ .shutdown = sfp_shutdown, - .driver = { - .name = "sfp", - .of_match_table = sfp_of_match, diff --git a/target/linux/generic/backport-5.4/715-v5.3-net-phylink-don-t-start-and-stop-SGMII-PHYs-in-SFP-m.patch b/target/linux/generic/backport-5.4/715-v5.3-net-phylink-don-t-start-and-stop-SGMII-PHYs-in-SFP-m.patch deleted file mode 100644 index 94fb2fb3e4..0000000000 --- a/target/linux/generic/backport-5.4/715-v5.3-net-phylink-don-t-start-and-stop-SGMII-PHYs-in-SFP-m.patch +++ /dev/null @@ -1,141 +0,0 @@ -From b8803113537a1c1f457eba6270d46e3af305031f Mon Sep 17 00:00:00 2001 -From: Arseny Solokha <asolokha@kb.kras.ru> -Date: Wed, 24 Jul 2019 20:31:39 +0700 -Subject: [PATCH 613/660] net: phylink: don't start and stop SGMII PHYs in SFP - modules twice - -SFP modules connected using the SGMII interface have their own PHYs which -are handled by the struct phylink's phydev field. On the other hand, for -the modules connected using 1000Base-X interface that field is not set. - -Since commit ce0aa27ff3f6 ("sfp: add sfp-bus to bridge between network -devices and sfp cages") phylink_start() ends up setting the phydev field -using the sfp-bus infrastructure, which eventually calls phy_start() on it, -and then calling phy_start() again on the same phydev from phylink_start() -itself. Similar call sequence holds for phylink_stop(), only in the reverse -order. This results in WARNs during network interface bringup and shutdown -when a copper SFP module is connected, as phy_start() and phy_stop() are -called twice in a row for the same phy_device: - - % ip link set up dev eth0 - ------------[ cut here ]------------ - called from state UP - WARNING: CPU: 1 PID: 155 at drivers/net/phy/phy.c:895 phy_start+0x74/0xc0 - Modules linked in: - CPU: 1 PID: 155 Comm: backend Not tainted 5.2.0+ #1 - NIP: c0227bf0 LR: c0227bf0 CTR: c004d224 - REGS: df547720 TRAP: 0700 Not tainted (5.2.0+) - MSR: 00029000 <CE,EE,ME> CR: 24002822 XER: 00000000 - - GPR00: c0227bf0 df5477d8 df5d7080 00000014 df9d2370 df9d5ac4 1f4eb000 00000001 - GPR08: c061fe58 00000000 00000000 df5477d8 0000003c 100c8768 00000000 00000000 - GPR16: df486a00 c046f1c8 c046eea0 00000000 c046e904 c0239604 db68449c 00000000 - GPR24: e9083204 00000000 00000001 db684460 e9083404 00000000 db6dce00 db6dcc00 - NIP [c0227bf0] phy_start+0x74/0xc0 - LR [c0227bf0] phy_start+0x74/0xc0 - Call Trace: - [df5477d8] [c0227bf0] phy_start+0x74/0xc0 (unreliable) - [df5477e8] [c023cad0] startup_gfar+0x398/0x3f4 - [df547828] [c023cf08] gfar_enet_open+0x364/0x374 - [df547898] [c029d870] __dev_open+0xe4/0x140 - [df5478c8] [c029db70] __dev_change_flags+0xf0/0x188 - [df5478f8] [c029dc28] dev_change_flags+0x20/0x54 - [df547918] [c02ae304] do_setlink+0x310/0x818 - [df547a08] [c02b1eb8] __rtnl_newlink+0x384/0x6b0 - [df547c28] [c02b222c] rtnl_newlink+0x48/0x68 - [df547c48] [c02ad7c8] rtnetlink_rcv_msg+0x240/0x27c - [df547c98] [c02cc068] netlink_rcv_skb+0x8c/0xf0 - [df547cd8] [c02cba3c] netlink_unicast+0x114/0x19c - [df547d08] [c02cbd74] netlink_sendmsg+0x2b0/0x2c0 - [df547d58] [c027b668] sock_sendmsg_nosec+0x20/0x40 - [df547d68] [c027d080] ___sys_sendmsg+0x17c/0x1dc - [df547e98] [c027df7c] __sys_sendmsg+0x68/0x84 - [df547ef8] [c027e430] sys_socketcall+0x1a0/0x204 - [df547f38] [c000d1d8] ret_from_syscall+0x0/0x38 - --- interrupt: c01 at 0xfd4e030 - LR = 0xfd4e010 - Instruction dump: - 813f0188 38800000 2b890005 419d0014 3d40c046 5529103a 394aa208 7c8a482e - 3c60c046 3863a1b8 4cc63182 4be009a1 <0fe00000> 48000030 3c60c046 3863a1d0 - ---[ end trace d4c095aeaf6ea998 ]--- - -and - - % ip link set down dev eth0 - ------------[ cut here ]------------ - called from state HALTED - WARNING: CPU: 1 PID: 184 at drivers/net/phy/phy.c:858 phy_stop+0x3c/0x88 - - <...> - - Call Trace: - [df581788] [c0228450] phy_stop+0x3c/0x88 (unreliable) - [df581798] [c022d548] sfp_sm_phy_detach+0x1c/0x44 - [df5817a8] [c022e8cc] sfp_sm_event+0x4b0/0x87c - [df581848] [c022f04c] sfp_upstream_stop+0x34/0x44 - [df581858] [c0225608] phylink_stop+0x7c/0xe4 - [df581868] [c023c57c] stop_gfar+0x7c/0x94 - [df581888] [c023c5b8] gfar_close+0x24/0x94 - [df5818a8] [c0298688] __dev_close_many+0xdc/0xf8 - [df5818c8] [c029db58] __dev_change_flags+0xd8/0x188 - [df5818f8] [c029dc28] dev_change_flags+0x20/0x54 - [df581918] [c02ae304] do_setlink+0x310/0x818 - [df581a08] [c02b1eb8] __rtnl_newlink+0x384/0x6b0 - [df581c28] [c02b222c] rtnl_newlink+0x48/0x68 - [df581c48] [c02ad7c8] rtnetlink_rcv_msg+0x240/0x27c - [df581c98] [c02cc068] netlink_rcv_skb+0x8c/0xf0 - [df581cd8] [c02cba3c] netlink_unicast+0x114/0x19c - [df581d08] [c02cbd74] netlink_sendmsg+0x2b0/0x2c0 - [df581d58] [c027b668] sock_sendmsg_nosec+0x20/0x40 - [df581d68] [c027d080] ___sys_sendmsg+0x17c/0x1dc - [df581e98] [c027df7c] __sys_sendmsg+0x68/0x84 - [df581ef8] [c027e430] sys_socketcall+0x1a0/0x204 - [df581f38] [c000d1d8] ret_from_syscall+0x0/0x38 - - <...> - - ---[ end trace d4c095aeaf6ea999 ]--- - -SFP modules with the 1000Base-X interface are not affected. - -Place explicit calls to phy_start() and phy_stop() before enabling or after -disabling an attached SFP module, where phydev is not yet set (or is -already unset), so they will be made only from the inside of sfp-bus, if -needed. - -Fixes: 217962615662 ("net: phy: warn if phy_start is called from invalid state") -Signed-off-by: Arseny Solokha <asolokha@kb.kras.ru> -Acked-by: Russell King <rmk+kernel@armlinux.org.uk> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/phy/phylink.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -973,10 +973,10 @@ void phylink_start(struct phylink *pl) - } - if (pl->link_an_mode == MLO_AN_FIXED && pl->get_fixed_state) - mod_timer(&pl->link_poll, jiffies + HZ); -- if (pl->sfp_bus) -- sfp_upstream_start(pl->sfp_bus); - if (pl->phydev) - phy_start(pl->phydev); -+ if (pl->sfp_bus) -+ sfp_upstream_start(pl->sfp_bus); - } - EXPORT_SYMBOL_GPL(phylink_start); - -@@ -993,10 +993,10 @@ void phylink_stop(struct phylink *pl) - { - ASSERT_RTNL(); - -- if (pl->phydev) -- phy_stop(pl->phydev); - if (pl->sfp_bus) - sfp_upstream_stop(pl->sfp_bus); -+ if (pl->phydev) -+ phy_stop(pl->phydev); - del_timer_sync(&pl->link_poll); - if (pl->link_irq) { - free_irq(pl->link_irq, pl); diff --git a/target/linux/generic/backport-5.4/716-v5.4-net-sfp-move-fwnode-parsing-into-sfp-bus-layer.patch b/target/linux/generic/backport-5.4/716-v5.4-net-sfp-move-fwnode-parsing-into-sfp-bus-layer.patch index 27ab78f3ee..858c584c05 100644 --- a/target/linux/generic/backport-5.4/716-v5.4-net-sfp-move-fwnode-parsing-into-sfp-bus-layer.patch +++ b/target/linux/generic/backport-5.4/716-v5.4-net-sfp-move-fwnode-parsing-into-sfp-bus-layer.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 -@@ -538,26 +538,17 @@ static const struct sfp_upstream_ops sfp +@@ -565,26 +565,17 @@ static const struct sfp_upstream_ops sfp static int phylink_register_sfp(struct phylink *pl, struct fwnode_handle *fwnode) { @@ -33,12 +33,12 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> - if (ret == -ENOENT) - return 0; - -- netdev_err(pl->netdev, "unable to parse \"sfp\" node: %d\n", -- ret); +- phylink_err(pl, "unable to parse \"sfp\" node: %d\n", +- ret); + bus = sfp_register_upstream_node(fwnode, pl, &sfp_phylink_ops); + if (IS_ERR(bus)) { + ret = PTR_ERR(bus); -+ netdev_err(pl->netdev, "unable to attach SFP bus: %d\n", ret); ++ phylink_err(pl, "unable to attach SFP bus: %d\n", ret); return ret; } @@ -51,7 +51,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 -@@ -3,6 +3,7 @@ +@@ -4,6 +4,7 @@ #include <linux/list.h> #include <linux/mutex.h> #include <linux/phylink.h> @@ -59,7 +59,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #include <linux/rtnetlink.h> #include <linux/slab.h> -@@ -444,45 +445,63 @@ static void sfp_upstream_clear(struct sf +@@ -445,45 +446,63 @@ static void sfp_upstream_clear(struct sf } /** diff --git a/target/linux/generic/backport-5.4/717-v5.5-net-sfp-rework-upstream-interface.patch b/target/linux/generic/backport-5.4/717-v5.5-net-sfp-rework-upstream-interface.patch index f7dd187c16..f3454851bf 100644 --- a/target/linux/generic/backport-5.4/717-v5.5-net-sfp-rework-upstream-interface.patch +++ b/target/linux/generic/backport-5.4/717-v5.5-net-sfp-rework-upstream-interface.patch @@ -20,7 +20,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c -@@ -541,7 +541,7 @@ static int phylink_register_sfp(struct p +@@ -568,7 +568,7 @@ static int phylink_register_sfp(struct p struct sfp_bus *bus; int ret; @@ -28,8 +28,8 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> + bus = sfp_bus_find_fwnode(fwnode); if (IS_ERR(bus)) { ret = PTR_ERR(bus); - netdev_err(pl->netdev, "unable to attach SFP bus: %d\n", ret); -@@ -550,7 +550,10 @@ static int phylink_register_sfp(struct p + phylink_err(pl, "unable to attach SFP bus: %d\n", ret); +@@ -577,7 +577,10 @@ static int phylink_register_sfp(struct p pl->sfp_bus = bus; @@ -41,7 +41,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } /** -@@ -634,8 +637,7 @@ EXPORT_SYMBOL_GPL(phylink_create); +@@ -675,8 +678,7 @@ EXPORT_SYMBOL_GPL(phylink_create); */ void phylink_destroy(struct phylink *pl) { @@ -53,7 +53,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 -@@ -328,10 +328,19 @@ static void sfp_bus_release(struct kref +@@ -329,10 +329,19 @@ static void sfp_bus_release(struct kref kfree(bus); } @@ -75,7 +75,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> static int sfp_register_bus(struct sfp_bus *bus) { -@@ -347,11 +356,11 @@ static int sfp_register_bus(struct sfp_b +@@ -348,11 +357,11 @@ static int sfp_register_bus(struct sfp_b return ret; } } @@ -88,7 +88,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return 0; } -@@ -445,13 +454,12 @@ static void sfp_upstream_clear(struct sf +@@ -446,13 +455,12 @@ static void sfp_upstream_clear(struct sf } /** @@ -106,7 +106,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> * * Returns: on success, a pointer to the sfp_bus structure, * %NULL if no SFP is specified, -@@ -461,9 +469,7 @@ static void sfp_upstream_clear(struct sf +@@ -462,9 +470,7 @@ static void sfp_upstream_clear(struct sf * %-ENOMEM if we failed to allocate the bus. * an error from the upstream's connect_phy() method. */ @@ -117,7 +117,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> { struct fwnode_reference_args ref; struct sfp_bus *bus; -@@ -481,7 +487,39 @@ struct sfp_bus *sfp_register_upstream_no +@@ -482,7 +488,39 @@ struct sfp_bus *sfp_register_upstream_no if (!bus) return ERR_PTR(-ENOMEM); @@ -157,7 +157,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> bus->upstream_ops = ops; bus->upstream = upstream; -@@ -494,33 +532,33 @@ struct sfp_bus *sfp_register_upstream_no +@@ -495,33 +533,33 @@ struct sfp_bus *sfp_register_upstream_no } rtnl_unlock(); diff --git a/target/linux/generic/backport-5.4/718-v5.5-net-sfp-fix-sfp_bus_put-kernel-documentation.patch b/target/linux/generic/backport-5.4/718-v5.5-net-sfp-fix-sfp_bus_put-kernel-documentation.patch index 59d2ce588c..13dc5216f9 100644 --- a/target/linux/generic/backport-5.4/718-v5.5-net-sfp-fix-sfp_bus_put-kernel-documentation.patch +++ b/target/linux/generic/backport-5.4/718-v5.5-net-sfp-fix-sfp_bus_put-kernel-documentation.patch @@ -16,7 +16,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 -@@ -330,7 +330,7 @@ static void sfp_bus_release(struct kref +@@ -331,7 +331,7 @@ static void sfp_bus_release(struct kref /** * sfp_bus_put() - put a reference on the &struct sfp_bus diff --git a/target/linux/generic/backport-5.4/720-v5.5-net-sfp-move-sfp-sub-state-machines-into-separate-fu.patch b/target/linux/generic/backport-5.4/720-v5.5-net-sfp-move-sfp-sub-state-machines-into-separate-fu.patch index 2f90b00438..e4ca85b6e2 100644 --- a/target/linux/generic/backport-5.4/720-v5.5-net-sfp-move-sfp-sub-state-machines-into-separate-fu.patch +++ b/target/linux/generic/backport-5.4/720-v5.5-net-sfp-move-sfp-sub-state-machines-into-separate-fu.patch @@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -1479,19 +1479,34 @@ static void sfp_sm_mod_remove(struct sfp +@@ -1544,19 +1544,34 @@ static void sfp_sm_mod_remove(struct sfp dev_info(sfp->dev, "module removed\n"); } @@ -61,7 +61,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> switch (sfp->sm_mod_state) { default: if (event == SFP_E_INSERT && sfp->attached) { -@@ -1531,27 +1546,10 @@ static void sfp_sm_event(struct sfp *sfp +@@ -1596,27 +1611,10 @@ static void sfp_sm_event(struct sfp *sfp } break; } @@ -92,7 +92,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* Some events are global */ if (sfp->sm_state != SFP_S_DOWN && (sfp->sm_mod_state != SFP_MOD_PRESENT || -@@ -1562,7 +1560,6 @@ static void sfp_sm_event(struct sfp *sfp +@@ -1627,7 +1625,6 @@ static void sfp_sm_event(struct sfp *sfp if (sfp->mod_phy) sfp_sm_phy_detach(sfp); sfp_sm_next(sfp, SFP_S_DOWN, 0); @@ -100,7 +100,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return; } -@@ -1617,6 +1614,21 @@ static void sfp_sm_event(struct sfp *sfp +@@ -1682,6 +1679,21 @@ static void sfp_sm_event(struct sfp *sfp case SFP_S_TX_DISABLE: break; } diff --git a/target/linux/generic/backport-5.4/721-v5.5-net-sfp-move-tx-disable-on-device-down-to-main-state.patch b/target/linux/generic/backport-5.4/721-v5.5-net-sfp-move-tx-disable-on-device-down-to-main-state.patch index 5b3caaf0fd..71021c8f4e 100644 --- a/target/linux/generic/backport-5.4/721-v5.5-net-sfp-move-tx-disable-on-device-down-to-main-state.patch +++ b/target/linux/generic/backport-5.4/721-v5.5-net-sfp-move-tx-disable-on-device-down-to-main-state.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 -@@ -1489,15 +1489,8 @@ static void sfp_sm_device(struct sfp *sf +@@ -1554,15 +1554,8 @@ static void sfp_sm_device(struct sfp *sf break; case SFP_DEV_UP: @@ -31,7 +31,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> break; } } -@@ -1559,6 +1552,7 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1624,6 +1617,7 @@ static void sfp_sm_main(struct sfp *sfp, sfp_sm_link_down(sfp); if (sfp->mod_phy) sfp_sm_phy_detach(sfp); diff --git a/target/linux/generic/backport-5.4/722-v5.5-net-sfp-rename-sfp_sm_ins_next-as-sfp_sm_mod_next.patch b/target/linux/generic/backport-5.4/722-v5.5-net-sfp-rename-sfp_sm_ins_next-as-sfp_sm_mod_next.patch index ed84e76fdf..2974586b13 100644 --- a/target/linux/generic/backport-5.4/722-v5.5-net-sfp-rename-sfp_sm_ins_next-as-sfp_sm_mod_next.patch +++ b/target/linux/generic/backport-5.4/722-v5.5-net-sfp-rename-sfp_sm_ins_next-as-sfp_sm_mod_next.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 -@@ -1180,7 +1180,7 @@ static void sfp_sm_next(struct sfp *sfp, +@@ -1245,7 +1245,7 @@ static void sfp_sm_next(struct sfp *sfp, sfp_sm_set_timer(sfp, timeout); } @@ -23,7 +23,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> unsigned int timeout) { sfp->sm_mod_state = state; -@@ -1504,22 +1504,22 @@ static void sfp_sm_module(struct sfp *sf +@@ -1569,22 +1569,22 @@ static void sfp_sm_module(struct sfp *sf default: if (event == SFP_E_INSERT && sfp->attached) { sfp_module_tx_disable(sfp); @@ -51,7 +51,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> else sfp_sm_set_timer(sfp, T_PROBE_RETRY); } -@@ -1527,7 +1527,7 @@ static void sfp_sm_module(struct sfp *sf +@@ -1592,7 +1592,7 @@ static void sfp_sm_module(struct sfp *sf case SFP_MOD_HPOWER: if (event == SFP_E_TIMEOUT) { @@ -60,7 +60,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> break; } /* fallthrough */ -@@ -1535,7 +1535,7 @@ static void sfp_sm_module(struct sfp *sf +@@ -1600,7 +1600,7 @@ static void sfp_sm_module(struct sfp *sf case SFP_MOD_ERROR: if (event == SFP_E_REMOVE) { sfp_sm_mod_remove(sfp); diff --git a/target/linux/generic/backport-5.4/723-v5.5-net-sfp-handle-module-remove-outside-state-machine.patch b/target/linux/generic/backport-5.4/723-v5.5-net-sfp-handle-module-remove-outside-state-machine.patch index 542aeaea77..62cdb8a6ce 100644 --- a/target/linux/generic/backport-5.4/723-v5.5-net-sfp-handle-module-remove-outside-state-machine.patch +++ b/target/linux/generic/backport-5.4/723-v5.5-net-sfp-handle-module-remove-outside-state-machine.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 -@@ -1500,6 +1500,14 @@ static void sfp_sm_device(struct sfp *sf +@@ -1565,6 +1565,14 @@ static void sfp_sm_device(struct sfp *sf */ static void sfp_sm_module(struct sfp *sfp, unsigned int event) { @@ -29,7 +29,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> switch (sfp->sm_mod_state) { default: if (event == SFP_E_INSERT && sfp->attached) { -@@ -1509,9 +1517,7 @@ static void sfp_sm_module(struct sfp *sf +@@ -1574,9 +1582,7 @@ static void sfp_sm_module(struct sfp *sf break; case SFP_MOD_PROBE: @@ -40,7 +40,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> int val = sfp_sm_mod_probe(sfp); if (val == 0) -@@ -1533,10 +1539,6 @@ static void sfp_sm_module(struct sfp *sf +@@ -1598,10 +1604,6 @@ static void sfp_sm_module(struct sfp *sf /* fallthrough */ case SFP_MOD_PRESENT: case SFP_MOD_ERROR: diff --git a/target/linux/generic/backport-5.4/724-v5.5-net-sfp-rename-T_PROBE_WAIT-to-T_SERIAL.patch b/target/linux/generic/backport-5.4/724-v5.5-net-sfp-rename-T_PROBE_WAIT-to-T_SERIAL.patch index e0c35feea3..780e7d7876 100644 --- a/target/linux/generic/backport-5.4/724-v5.5-net-sfp-rename-T_PROBE_WAIT-to-T_SERIAL.patch +++ b/target/linux/generic/backport-5.4/724-v5.5-net-sfp-rename-T_PROBE_WAIT-to-T_SERIAL.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 -@@ -147,11 +147,10 @@ static const enum gpiod_flags gpio_flags +@@ -149,11 +149,10 @@ static const enum gpiod_flags gpio_flags * 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. * @@ -29,7 +29,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #define T_HPOWER_LEVEL msecs_to_jiffies(300) #define T_PROBE_RETRY msecs_to_jiffies(100) -@@ -1495,8 +1494,8 @@ static void sfp_sm_device(struct sfp *sf +@@ -1560,8 +1559,8 @@ static void sfp_sm_device(struct sfp *sf } } @@ -40,7 +40,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> */ static void sfp_sm_module(struct sfp *sfp, unsigned int event) { -@@ -1512,7 +1511,7 @@ static void sfp_sm_module(struct sfp *sf +@@ -1577,7 +1576,7 @@ static void sfp_sm_module(struct sfp *sf default: if (event == SFP_E_INSERT && sfp->attached) { sfp_module_tx_disable(sfp); diff --git a/target/linux/generic/backport-5.4/725-v5.5-net-sfp-parse-SFP-power-requirement-earlier.patch b/target/linux/generic/backport-5.4/725-v5.5-net-sfp-parse-SFP-power-requirement-earlier.patch index 0b358f86d2..df5ef9f79e 100644 --- a/target/linux/generic/backport-5.4/725-v5.5-net-sfp-parse-SFP-power-requirement-earlier.patch +++ b/target/linux/generic/backport-5.4/725-v5.5-net-sfp-parse-SFP-power-requirement-earlier.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 -@@ -196,6 +196,8 @@ struct sfp { +@@ -198,6 +198,8 @@ struct sfp { unsigned int sm_retries; struct sfp_eeprom_id id; @@ -22,7 +22,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #if IS_ENABLED(CONFIG_HWMON) struct sfp_diag diag; struct device *hwmon_dev; -@@ -1309,17 +1311,14 @@ static void sfp_sm_mod_init(struct sfp * +@@ -1374,17 +1376,14 @@ static void sfp_sm_mod_init(struct sfp * sfp_sm_probe_phy(sfp); } @@ -44,7 +44,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE && (sfp->id.ext.diagmon & (SFP_DIAGMON_DDM | SFP_DIAGMON_ADDRMODE)) != -@@ -1328,23 +1327,33 @@ static int sfp_sm_mod_hpower(struct sfp +@@ -1393,23 +1392,33 @@ static int sfp_sm_mod_hpower(struct sfp * or requires an address change sequence, so assume that * the module powers up in the indicated power mode. */ @@ -83,7 +83,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return 0; err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val)); -@@ -1364,7 +1373,8 @@ static int sfp_sm_mod_hpower(struct sfp +@@ -1429,7 +1438,8 @@ static int sfp_sm_mod_hpower(struct sfp } dev_info(sfp->dev, "Module switched to %u.%uW power level\n", @@ -93,7 +93,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return T_HPOWER_LEVEL; err: -@@ -1451,6 +1461,11 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -1516,6 +1526,11 @@ static int sfp_sm_mod_probe(struct sfp * dev_warn(sfp->dev, "module address swap to access page 0xA2 is not supported.\n"); @@ -105,7 +105,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ret = sfp_hwmon_insert(sfp); if (ret < 0) return ret; -@@ -1474,6 +1489,7 @@ static void sfp_sm_mod_remove(struct sfp +@@ -1539,6 +1554,7 @@ static void sfp_sm_mod_remove(struct sfp sfp_module_tx_disable(sfp); memset(&sfp->id, 0, sizeof(sfp->id)); diff --git a/target/linux/generic/backport-5.4/726-v5.5-net-sfp-avoid-power-switch-on-address-change-modules.patch b/target/linux/generic/backport-5.4/726-v5.5-net-sfp-avoid-power-switch-on-address-change-modules.patch index 2ddd4c4d02..5237f55055 100644 --- a/target/linux/generic/backport-5.4/726-v5.5-net-sfp-avoid-power-switch-on-address-change-modules.patch +++ b/target/linux/generic/backport-5.4/726-v5.5-net-sfp-avoid-power-switch-on-address-change-modules.patch @@ -17,7 +17,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -1320,25 +1320,34 @@ static int sfp_module_parse_power(struct +@@ -1385,25 +1385,34 @@ static int sfp_module_parse_power(struct if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL)) power_mW = 2000; diff --git a/target/linux/generic/backport-5.4/727-v5.5-net-sfp-control-TX_DISABLE-and-phy-only-from-main-st.patch b/target/linux/generic/backport-5.4/727-v5.5-net-sfp-control-TX_DISABLE-and-phy-only-from-main-st.patch index 0eac6abb88..eebcac639f 100644 --- a/target/linux/generic/backport-5.4/727-v5.5-net-sfp-control-TX_DISABLE-and-phy-only-from-main-st.patch +++ b/target/linux/generic/backport-5.4/727-v5.5-net-sfp-control-TX_DISABLE-and-phy-only-from-main-st.patch @@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -1492,11 +1492,6 @@ static void sfp_sm_mod_remove(struct sfp +@@ -1557,11 +1557,6 @@ static void sfp_sm_mod_remove(struct sfp sfp_hwmon_remove(sfp); @@ -38,7 +38,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> memset(&sfp->id, 0, sizeof(sfp->id)); sfp->module_power_mW = 0; -@@ -1534,10 +1529,8 @@ static void sfp_sm_module(struct sfp *sf +@@ -1599,10 +1594,8 @@ static void sfp_sm_module(struct sfp *sf switch (sfp->sm_mod_state) { default: diff --git a/target/linux/generic/backport-5.4/728-v5.5-net-sfp-split-the-PHY-probe-from-sfp_sm_mod_init.patch b/target/linux/generic/backport-5.4/728-v5.5-net-sfp-split-the-PHY-probe-from-sfp_sm_mod_init.patch index 7830b9268f..92df26c6a2 100644 --- a/target/linux/generic/backport-5.4/728-v5.5-net-sfp-split-the-PHY-probe-from-sfp_sm_mod_init.patch +++ b/target/linux/generic/backport-5.4/728-v5.5-net-sfp-split-the-PHY-probe-from-sfp_sm_mod_init.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 -@@ -1288,14 +1288,10 @@ static void sfp_sm_fault(struct sfp *sfp +@@ -1353,14 +1353,10 @@ static void sfp_sm_fault(struct sfp *sfp static void sfp_sm_mod_init(struct sfp *sfp) { sfp_module_tx_enable(sfp); @@ -32,7 +32,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* Setting the serdes link mode is guesswork: there's no * field in the EEPROM which indicates what mode should * be used. -@@ -1580,8 +1576,17 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1645,8 +1641,17 @@ static void sfp_sm_main(struct sfp *sfp, switch (sfp->sm_state) { case SFP_S_DOWN: if (sfp->sm_mod_state == SFP_MOD_PRESENT && diff --git a/target/linux/generic/backport-5.4/729-v5.5-net-sfp-eliminate-mdelay-from-PHY-probe.patch b/target/linux/generic/backport-5.4/729-v5.5-net-sfp-eliminate-mdelay-from-PHY-probe.patch index 5dc92bd10e..e26a7276d3 100644 --- a/target/linux/generic/backport-5.4/729-v5.5-net-sfp-eliminate-mdelay-from-PHY-probe.patch +++ b/target/linux/generic/backport-5.4/729-v5.5-net-sfp-eliminate-mdelay-from-PHY-probe.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 -@@ -52,6 +52,7 @@ enum { +@@ -54,6 +54,7 @@ enum { SFP_DEV_UP, SFP_S_DOWN = 0, @@ -23,7 +23,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> SFP_S_INIT, SFP_S_WAIT_LOS, SFP_S_LINK_UP, -@@ -108,6 +109,7 @@ static const char *event_to_str(unsigned +@@ -110,6 +111,7 @@ static const char *event_to_str(unsigned static const char * const sm_state_strings[] = { [SFP_S_DOWN] = "down", @@ -31,7 +31,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> [SFP_S_INIT] = "init", [SFP_S_WAIT_LOS] = "wait_los", [SFP_S_LINK_UP] = "link_up", -@@ -139,6 +141,7 @@ static const enum gpiod_flags gpio_flags +@@ -141,6 +143,7 @@ static const enum gpiod_flags gpio_flags GPIOD_ASIS, }; @@ -39,7 +39,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #define T_INIT_JIFFIES msecs_to_jiffies(300) #define T_RESET_US 10 #define T_FAULT_RECOVER msecs_to_jiffies(1000) -@@ -159,9 +162,6 @@ static const enum gpiod_flags gpio_flags +@@ -161,9 +164,6 @@ static const enum gpiod_flags gpio_flags */ #define SFP_PHY_ADDR 22 @@ -49,7 +49,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> struct sff_data { unsigned int gpios; bool (*module_supported)(const struct sfp_eeprom_id *id); -@@ -1202,8 +1202,6 @@ static void sfp_sm_probe_phy(struct sfp +@@ -1267,8 +1267,6 @@ static void sfp_sm_probe_phy(struct sfp struct phy_device *phy; int err; @@ -58,7 +58,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> phy = mdiobus_scan(sfp->i2c_mii, SFP_PHY_ADDR); if (phy == ERR_PTR(-ENODEV)) { dev_info(sfp->dev, "no PHY detected\n"); -@@ -1558,6 +1556,8 @@ static void sfp_sm_module(struct sfp *sf +@@ -1623,6 +1621,8 @@ static void sfp_sm_module(struct sfp *sf static void sfp_sm_main(struct sfp *sfp, unsigned int event) { @@ -67,7 +67,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* Some events are global */ if (sfp->sm_state != SFP_S_DOWN && (sfp->sm_mod_state != SFP_MOD_PRESENT || -@@ -1575,17 +1575,45 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1640,17 +1640,45 @@ static void sfp_sm_main(struct sfp *sfp, /* The main state machine */ switch (sfp->sm_state) { case SFP_S_DOWN: @@ -119,7 +119,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } break; -@@ -1593,7 +1621,7 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1658,7 +1686,7 @@ static void sfp_sm_main(struct sfp *sfp, if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) sfp_sm_fault(sfp, true); else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) diff --git a/target/linux/generic/backport-5.4/730-v5.5-net-sfp-allow-fault-processing-to-transition-to-othe.patch b/target/linux/generic/backport-5.4/730-v5.5-net-sfp-allow-fault-processing-to-transition-to-othe.patch index 6e34e6cc0f..d45b0618bd 100644 --- a/target/linux/generic/backport-5.4/730-v5.5-net-sfp-allow-fault-processing-to-transition-to-othe.patch +++ b/target/linux/generic/backport-5.4/730-v5.5-net-sfp-allow-fault-processing-to-transition-to-othe.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 -@@ -1269,7 +1269,7 @@ static bool sfp_los_event_inactive(struc +@@ -1334,7 +1334,7 @@ static bool sfp_los_event_inactive(struc event == SFP_E_LOS_LOW); } @@ -23,7 +23,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> { if (sfp->sm_retries && !--sfp->sm_retries) { dev_err(sfp->dev, -@@ -1279,7 +1279,7 @@ static void sfp_sm_fault(struct sfp *sfp +@@ -1344,7 +1344,7 @@ static void sfp_sm_fault(struct sfp *sfp if (warn) dev_err(sfp->dev, "module transmit fault indicated\n"); @@ -32,7 +32,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } } -@@ -1619,14 +1619,14 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1684,14 +1684,14 @@ static void sfp_sm_main(struct sfp *sfp, case SFP_S_INIT: if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) @@ -49,7 +49,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> else if (sfp_los_event_inactive(sfp, event)) sfp_sm_link_up(sfp); break; -@@ -1634,7 +1634,7 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1699,7 +1699,7 @@ static void sfp_sm_main(struct sfp *sfp, case SFP_S_LINK_UP: if (event == SFP_E_TX_FAULT) { sfp_sm_link_down(sfp); @@ -58,7 +58,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } else if (sfp_los_event_active(sfp, event)) { sfp_sm_link_down(sfp); sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0); -@@ -1650,7 +1650,7 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1715,7 +1715,7 @@ static void sfp_sm_main(struct sfp *sfp, case SFP_S_REINIT: if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) { diff --git a/target/linux/generic/backport-5.4/731-v5.5-net-sfp-ensure-TX_FAULT-has-deasserted-before-probin.patch b/target/linux/generic/backport-5.4/731-v5.5-net-sfp-ensure-TX_FAULT-has-deasserted-before-probin.patch index 03415fb6e7..acca29be87 100644 --- a/target/linux/generic/backport-5.4/731-v5.5-net-sfp-ensure-TX_FAULT-has-deasserted-before-probin.patch +++ b/target/linux/generic/backport-5.4/731-v5.5-net-sfp-ensure-TX_FAULT-has-deasserted-before-probin.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 -@@ -54,6 +54,7 @@ enum { +@@ -56,6 +56,7 @@ enum { SFP_S_DOWN = 0, SFP_S_WAIT, SFP_S_INIT, @@ -27,7 +27,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> SFP_S_WAIT_LOS, SFP_S_LINK_UP, SFP_S_TX_FAULT, -@@ -111,6 +112,7 @@ static const char * const sm_state_strin +@@ -113,6 +114,7 @@ static const char * const sm_state_strin [SFP_S_DOWN] = "down", [SFP_S_WAIT] = "wait", [SFP_S_INIT] = "init", @@ -35,7 +35,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> [SFP_S_WAIT_LOS] = "wait_los", [SFP_S_LINK_UP] = "link_up", [SFP_S_TX_FAULT] = "tx_fault", -@@ -1595,8 +1597,6 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1660,8 +1662,6 @@ static void sfp_sm_main(struct sfp *sfp, if (event != SFP_E_TIMEOUT) break; @@ -44,7 +44,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> if (sfp->state & SFP_F_TX_FAULT) { /* Wait t_init before indicating that the link is up, * provided the current state indicates no TX_FAULT. If -@@ -1618,10 +1618,29 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1683,10 +1683,29 @@ static void sfp_sm_main(struct sfp *sfp, break; case SFP_S_INIT: diff --git a/target/linux/generic/backport-5.4/732-v5.5-net-sfp-track-upstream-s-attachment-state-in-state-m.patch b/target/linux/generic/backport-5.4/732-v5.5-net-sfp-track-upstream-s-attachment-state-in-state-m.patch index 5ee44dbf0c..714d783c4e 100644 --- a/target/linux/generic/backport-5.4/732-v5.5-net-sfp-track-upstream-s-attachment-state-in-state-m.patch +++ b/target/linux/generic/backport-5.4/732-v5.5-net-sfp-track-upstream-s-attachment-state-in-state-m.patch @@ -24,7 +24,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -34,6 +34,8 @@ enum { +@@ -36,6 +36,8 @@ enum { SFP_E_INSERT = 0, SFP_E_REMOVE, @@ -33,7 +33,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> SFP_E_DEV_DOWN, SFP_E_DEV_UP, SFP_E_TX_FAULT, -@@ -48,7 +50,8 @@ enum { +@@ -50,7 +52,8 @@ enum { SFP_MOD_PRESENT, SFP_MOD_ERROR, @@ -43,7 +43,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> SFP_DEV_UP, SFP_S_DOWN = 0, -@@ -78,6 +81,7 @@ static const char *mod_state_to_str(unsi +@@ -80,6 +83,7 @@ static const char *mod_state_to_str(unsi } static const char * const dev_state_strings[] = { @@ -51,7 +51,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> [SFP_DEV_DOWN] = "down", [SFP_DEV_UP] = "up", }; -@@ -92,6 +96,8 @@ static const char *dev_state_to_str(unsi +@@ -94,6 +98,8 @@ static const char *dev_state_to_str(unsi static const char * const event_strings[] = { [SFP_E_INSERT] = "insert", [SFP_E_REMOVE] = "remove", @@ -60,7 +60,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> [SFP_E_DEV_DOWN] = "dev_down", [SFP_E_DEV_UP] = "dev_up", [SFP_E_TX_FAULT] = "tx_fault", -@@ -186,7 +192,6 @@ struct sfp { +@@ -188,7 +194,6 @@ struct sfp { struct gpio_desc *gpio[GPIO_MAX]; int gpio_irq[GPIO_MAX]; @@ -68,7 +68,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> struct mutex st_mutex; /* Protects state */ unsigned int state; struct delayed_work poll; -@@ -1494,17 +1499,26 @@ static void sfp_sm_mod_remove(struct sfp +@@ -1559,17 +1564,26 @@ static void sfp_sm_mod_remove(struct sfp dev_info(sfp->dev, "module removed\n"); } @@ -98,7 +98,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> sfp->sm_dev_state = SFP_DEV_DOWN; break; } -@@ -1515,17 +1529,20 @@ static void sfp_sm_device(struct sfp *sf +@@ -1580,17 +1594,20 @@ static void sfp_sm_device(struct sfp *sf */ static void sfp_sm_module(struct sfp *sfp, unsigned int event) { @@ -123,7 +123,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> sfp_sm_mod_next(sfp, SFP_MOD_PROBE, T_SERIAL); break; -@@ -1691,8 +1708,8 @@ static void sfp_sm_event(struct sfp *sfp +@@ -1756,8 +1773,8 @@ static void sfp_sm_event(struct sfp *sfp sm_state_to_str(sfp->sm_state), event_to_str(event)); @@ -133,7 +133,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> sfp_sm_main(sfp, event); dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n", -@@ -1705,15 +1722,14 @@ static void sfp_sm_event(struct sfp *sfp +@@ -1770,15 +1787,14 @@ static void sfp_sm_event(struct sfp *sfp static void sfp_attach(struct sfp *sfp) { diff --git a/target/linux/generic/backport-5.4/733-v5.5-net-sfp-split-power-mode-switching-from-probe.patch b/target/linux/generic/backport-5.4/733-v5.5-net-sfp-split-power-mode-switching-from-probe.patch index 06b3cb5428..f645e44191 100644 --- a/target/linux/generic/backport-5.4/733-v5.5-net-sfp-split-power-mode-switching-from-probe.patch +++ b/target/linux/generic/backport-5.4/733-v5.5-net-sfp-split-power-mode-switching-from-probe.patch @@ -18,7 +18,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -47,6 +47,7 @@ enum { +@@ -49,6 +49,7 @@ enum { SFP_MOD_EMPTY = 0, SFP_MOD_PROBE, SFP_MOD_HPOWER, @@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> SFP_MOD_PRESENT, SFP_MOD_ERROR, -@@ -69,6 +70,7 @@ static const char * const mod_state_str +@@ -71,6 +72,7 @@ static const char * const mod_state_str [SFP_MOD_EMPTY] = "empty", [SFP_MOD_PROBE] = "probe", [SFP_MOD_HPOWER] = "hpower", @@ -34,7 +34,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> [SFP_MOD_PRESENT] = "present", [SFP_MOD_ERROR] = "error", }; -@@ -1358,37 +1360,34 @@ static int sfp_module_parse_power(struct +@@ -1423,37 +1425,34 @@ static int sfp_module_parse_power(struct return 0; } @@ -84,7 +84,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } static int sfp_sm_mod_probe(struct sfp *sfp) -@@ -1484,7 +1483,7 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -1549,7 +1548,7 @@ static int sfp_sm_mod_probe(struct sfp * if (ret < 0) return ret; @@ -93,7 +93,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } static void sfp_sm_mod_remove(struct sfp *sfp) -@@ -1529,13 +1528,22 @@ static void sfp_sm_device(struct sfp *sf +@@ -1594,13 +1593,22 @@ static void sfp_sm_device(struct sfp *sf */ static void sfp_sm_module(struct sfp *sfp, unsigned int event) { @@ -121,7 +121,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> sfp_sm_mod_next(sfp, SFP_MOD_EMPTY, 0); return; } -@@ -1547,26 +1555,45 @@ static void sfp_sm_module(struct sfp *sf +@@ -1612,26 +1620,45 @@ static void sfp_sm_module(struct sfp *sf break; case SFP_MOD_PROBE: diff --git a/target/linux/generic/backport-5.4/734-v5.5-net-sfp-move-module-insert-reporting-out-of-probe.patch b/target/linux/generic/backport-5.4/734-v5.5-net-sfp-move-module-insert-reporting-out-of-probe.patch index 26b6a6b0e4..e49bde27e3 100644 --- a/target/linux/generic/backport-5.4/734-v5.5-net-sfp-move-module-insert-reporting-out-of-probe.patch +++ b/target/linux/generic/backport-5.4/734-v5.5-net-sfp-move-module-insert-reporting-out-of-probe.patch @@ -20,7 +20,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -45,11 +45,12 @@ enum { +@@ -47,11 +47,12 @@ enum { SFP_E_TIMEOUT, SFP_MOD_EMPTY = 0, @@ -34,7 +34,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> SFP_DEV_DETACHED = 0, SFP_DEV_DOWN, -@@ -68,11 +69,12 @@ enum { +@@ -70,11 +71,12 @@ enum { static const char * const mod_state_strings[] = { [SFP_MOD_EMPTY] = "empty", @@ -48,7 +48,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> }; static const char *mod_state_to_str(unsigned short mod_state) -@@ -1479,16 +1481,13 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -1544,16 +1546,13 @@ static int sfp_sm_mod_probe(struct sfp * if (ret < 0) return ret; @@ -67,7 +67,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> sfp_hwmon_remove(sfp); -@@ -1539,12 +1538,12 @@ static void sfp_sm_module(struct sfp *sf +@@ -1604,12 +1603,12 @@ static void sfp_sm_module(struct sfp *sf } /* Handle device detach globally */ @@ -83,7 +83,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return; } -@@ -1555,6 +1554,7 @@ static void sfp_sm_module(struct sfp *sf +@@ -1620,6 +1619,7 @@ static void sfp_sm_module(struct sfp *sf break; case SFP_MOD_PROBE: @@ -91,7 +91,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> if (event != SFP_E_TIMEOUT) break; -@@ -1568,6 +1568,20 @@ static void sfp_sm_module(struct sfp *sf +@@ -1633,6 +1633,20 @@ static void sfp_sm_module(struct sfp *sf break; } @@ -112,7 +112,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* If this is a power level 1 module, we are done */ if (sfp->module_power_mW <= 1000) goto insert; -@@ -1577,12 +1591,17 @@ static void sfp_sm_module(struct sfp *sf +@@ -1642,12 +1656,17 @@ static void sfp_sm_module(struct sfp *sf case SFP_MOD_HPOWER: /* Enable high power mode */ err = sfp_sm_mod_hpower(sfp, true); @@ -136,7 +136,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> break; case SFP_MOD_WAITPWR: -@@ -1750,8 +1769,6 @@ static void sfp_sm_event(struct sfp *sfp +@@ -1815,8 +1834,6 @@ static void sfp_sm_event(struct sfp *sfp static void sfp_attach(struct sfp *sfp) { sfp_sm_event(sfp, SFP_E_DEV_ATTACH); @@ -145,7 +145,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } static void sfp_detach(struct sfp *sfp) -@@ -2001,6 +2018,11 @@ static int sfp_probe(struct platform_dev +@@ -2084,6 +2101,11 @@ static int sfp_probe(struct platform_dev sfp->state |= SFP_F_RATE_SELECT; sfp_set_state(sfp, sfp->state); sfp_module_tx_disable(sfp); diff --git a/target/linux/generic/backport-5.4/735-v5.5-net-sfp-allow-sfp-to-probe-slow-to-initialise-GPON-m.patch b/target/linux/generic/backport-5.4/735-v5.5-net-sfp-allow-sfp-to-probe-slow-to-initialise-GPON-m.patch index 6cbd0864f7..ab1ae753d7 100644 --- a/target/linux/generic/backport-5.4/735-v5.5-net-sfp-allow-sfp-to-probe-slow-to-initialise-GPON-m.patch +++ b/target/linux/generic/backport-5.4/735-v5.5-net-sfp-allow-sfp-to-probe-slow-to-initialise-GPON-m.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 -@@ -165,9 +165,12 @@ static const enum gpiod_flags gpio_flags +@@ -167,9 +167,12 @@ static const enum gpiod_flags gpio_flags * The SFF-8472 specifies t_serial ("Time from power on until module is * ready for data transmission over the two wire serial bus.") as 300ms. */ @@ -35,7 +35,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* SFP modules appear to always have their PHY configured for bus address * 0x56 (which with mdio-i2c, translates to a PHY address of 22). -@@ -202,6 +205,8 @@ struct sfp { +@@ -204,6 +207,8 @@ struct sfp { struct delayed_work timeout; struct mutex sm_mutex; /* Protects state machine */ unsigned char sm_mod_state; @@ -44,7 +44,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> unsigned char sm_dev_state; unsigned short sm_state; unsigned int sm_retries; -@@ -1392,7 +1397,7 @@ static int sfp_sm_mod_hpower(struct sfp +@@ -1457,7 +1462,7 @@ static int sfp_sm_mod_hpower(struct sfp return 0; } @@ -53,7 +53,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> { /* SFP module inserted - read I2C data */ struct sfp_eeprom_id id; -@@ -1402,7 +1407,8 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -1467,7 +1472,8 @@ static int sfp_sm_mod_probe(struct sfp * ret = sfp_read(sfp, false, 0, &id, sizeof(id)); if (ret < 0) { @@ -63,7 +63,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return -EAGAIN; } -@@ -1549,8 +1555,11 @@ static void sfp_sm_module(struct sfp *sf +@@ -1614,8 +1620,11 @@ static void sfp_sm_module(struct sfp *sf switch (sfp->sm_mod_state) { default: @@ -76,7 +76,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> break; case SFP_MOD_PROBE: -@@ -1558,10 +1567,19 @@ static void sfp_sm_module(struct sfp *sf +@@ -1623,10 +1632,19 @@ static void sfp_sm_module(struct sfp *sf if (event != SFP_E_TIMEOUT) break; @@ -99,7 +99,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } if (err < 0) { sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0); -@@ -1596,7 +1614,7 @@ static void sfp_sm_module(struct sfp *sf +@@ -1661,7 +1679,7 @@ static void sfp_sm_module(struct sfp *sf sfp_module_remove(sfp->sfp_bus); sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0); } else { diff --git a/target/linux/generic/backport-5.4/736-v5.5-net-sfp-allow-modules-with-slow-diagnostics-to-probe.patch b/target/linux/generic/backport-5.4/736-v5.5-net-sfp-allow-modules-with-slow-diagnostics-to-probe.patch index fe1e6c4822..e6c1fd71d8 100644 --- a/target/linux/generic/backport-5.4/736-v5.5-net-sfp-allow-modules-with-slow-diagnostics-to-probe.patch +++ b/target/linux/generic/backport-5.4/736-v5.5-net-sfp-allow-modules-with-slow-diagnostics-to-probe.patch @@ -27,7 +27,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -216,6 +216,8 @@ struct sfp { +@@ -218,6 +218,8 @@ struct sfp { #if IS_ENABLED(CONFIG_HWMON) struct sfp_diag diag; @@ -36,7 +36,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> struct device *hwmon_dev; char *hwmon_name; #endif -@@ -1094,29 +1096,27 @@ static const struct hwmon_chip_info sfp_ +@@ -1159,29 +1161,27 @@ static const struct hwmon_chip_info sfp_ .info = sfp_hwmon_info, }; @@ -81,7 +81,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> for (i = 0; sfp->hwmon_name[i]; i++) if (hwmon_is_bad_char(sfp->hwmon_name[i])) -@@ -1126,18 +1126,52 @@ static int sfp_hwmon_insert(struct sfp * +@@ -1191,18 +1191,52 @@ static int sfp_hwmon_insert(struct sfp * sfp->hwmon_name, sfp, &sfp_hwmon_chip_info, NULL); @@ -135,7 +135,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #else static int sfp_hwmon_insert(struct sfp *sfp) { -@@ -1147,6 +1181,15 @@ static int sfp_hwmon_insert(struct sfp * +@@ -1212,6 +1246,15 @@ static int sfp_hwmon_insert(struct sfp * static void sfp_hwmon_remove(struct sfp *sfp) { } @@ -151,7 +151,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #endif /* Helpers */ -@@ -1483,10 +1526,6 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -1548,10 +1591,6 @@ static int sfp_sm_mod_probe(struct sfp * if (ret < 0) return ret; @@ -162,7 +162,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return 0; } -@@ -1635,6 +1674,15 @@ static void sfp_sm_module(struct sfp *sf +@@ -1700,6 +1739,15 @@ static void sfp_sm_module(struct sfp *sf case SFP_MOD_ERROR: break; } @@ -178,7 +178,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } static void sfp_sm_main(struct sfp *sfp, unsigned int event) -@@ -1936,6 +1984,8 @@ static struct sfp *sfp_alloc(struct devi +@@ -2001,6 +2049,8 @@ static struct sfp *sfp_alloc(struct devi INIT_DELAYED_WORK(&sfp->poll, sfp_poll); INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout); @@ -187,7 +187,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> return sfp; } -@@ -1943,6 +1993,8 @@ static void sfp_cleanup(void *data) +@@ -2008,6 +2058,8 @@ static void sfp_cleanup(void *data) { struct sfp *sfp = data; diff --git a/target/linux/generic/backport-5.4/737-v5.5-net-phy-add-core-phylib-sfp-support.patch b/target/linux/generic/backport-5.4/737-v5.5-net-phy-add-core-phylib-sfp-support.patch index 9b34d40a0f..7835d3f19f 100644 --- a/target/linux/generic/backport-5.4/737-v5.5-net-phy-add-core-phylib-sfp-support.patch +++ b/target/linux/generic/backport-5.4/737-v5.5-net-phy-add-core-phylib-sfp-support.patch @@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c -@@ -30,6 +30,7 @@ +@@ -23,6 +23,7 @@ #include <linux/ethtool.h> #include <linux/phy.h> #include <linux/phy_led_triggers.h> @@ -24,38 +24,38 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> #include <linux/workqueue.h> #include <linux/mdio.h> #include <linux/io.h> -@@ -871,6 +872,9 @@ void phy_stop(struct phy_device *phydev) - if (phy_interrupt_is_valid(phydev)) - phy_disable_interrupts(phydev); +@@ -841,6 +842,9 @@ void phy_stop(struct phy_device *phydev) + + mutex_lock(&phydev->lock); + if (phydev->sfp_bus) + sfp_upstream_stop(phydev->sfp_bus); + phydev->state = PHY_HALTED; - out_unlock: -@@ -899,6 +903,9 @@ void phy_start(struct phy_device *phydev + mutex_unlock(&phydev->lock); +@@ -903,6 +907,9 @@ void phy_state_machine(struct work_struc - mutex_lock(&phydev->lock); + old_state = phydev->state; + if (phydev->sfp_bus) + sfp_upstream_start(phydev->sfp_bus); + switch (phydev->state) { - case PHY_STARTING: - phydev->state = PHY_PENDING; + case PHY_DOWN: + case PHY_READY: --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c -@@ -31,6 +31,7 @@ - #include <linux/ethtool.h> +@@ -27,6 +27,7 @@ + #include <linux/bitmap.h> #include <linux/phy.h> #include <linux/phy_led_triggers.h> +#include <linux/sfp.h> #include <linux/mdio.h> #include <linux/io.h> #include <linux/uaccess.h> -@@ -944,6 +945,65 @@ void phy_attached_print(struct phy_devic - EXPORT_SYMBOL(phy_attached_print); +@@ -1178,6 +1179,65 @@ phy_standalone_show(struct device *dev, + static DEVICE_ATTR_RO(phy_standalone); /** + * phy_sfp_attach - attach the SFP bus to the PHY upstream network device @@ -120,9 +120,9 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> * phy_attach_direct - attach a network device to a given PHY device pointer * @dev: network device to attach * @phydev: Pointer to phy_device to attach -@@ -1016,6 +1076,9 @@ int phy_attach_direct(struct net_device - phydev->attached_dev = dev; - dev->phydev = phydev; +@@ -1254,6 +1314,9 @@ int phy_attach_direct(struct net_device + dev->phydev = phydev; + } + if (phydev->sfp_bus_attached) + dev->sfp_bus = phydev->sfp_bus; @@ -130,7 +130,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* Some Ethernet drivers try to connect to a PHY device before * calling register_netdevice() -> netdev_register_kobject() and * does the dev->dev.kobj initialization. Here we only check for -@@ -1950,6 +2013,9 @@ static int phy_remove(struct device *dev +@@ -2282,6 +2345,9 @@ static int phy_remove(struct device *dev phydev->state = PHY_DOWN; mutex_unlock(&phydev->lock); @@ -142,7 +142,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/include/linux/phy.h +++ b/include/linux/phy.h -@@ -184,6 +184,8 @@ static inline const char *phy_modes(phy_ +@@ -203,6 +203,8 @@ static inline const char *phy_modes(phy_ struct device; struct phylink; @@ -151,16 +151,16 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> struct sk_buff; /* -@@ -382,6 +384,8 @@ struct phy_c45_device_ids { +@@ -342,6 +344,8 @@ struct phy_c45_device_ids { + * dev_flags: Device-specific flags used by the PHY driver. * irq: IRQ number of the PHY's interrupt (-1 if none) * phy_timer: The timer for handling the state machine - * phy_queue: A work_queue for the phy_mac_interrupt + * sfp_bus_attached: flag indicating whether the SFP bus has been attached + * sfp_bus: SFP bus attached to this PHY's fiber port * attached_dev: The attached enet driver's device instance ptr * adjust_link: Callback for the enet controller to respond to * changes in the link state. -@@ -471,6 +475,9 @@ struct phy_device { +@@ -432,6 +436,9 @@ struct phy_device { struct mutex lock; @@ -170,7 +170,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> struct phylink *phylink; struct net_device *attached_dev; -@@ -1031,6 +1038,10 @@ int phy_suspend(struct phy_device *phyde +@@ -1020,6 +1027,10 @@ int phy_suspend(struct phy_device *phyde int phy_resume(struct phy_device *phydev); int __phy_resume(struct phy_device *phydev); int phy_loopback(struct phy_device *phydev, bool enable); diff --git a/target/linux/generic/backport-5.4/738-v5.5-net-phy-marvell10g-add-SFP-support.patch b/target/linux/generic/backport-5.4/738-v5.5-net-phy-marvell10g-add-SFP-support.patch index a67431ce5c..40a666a3f2 100644 --- a/target/linux/generic/backport-5.4/738-v5.5-net-phy-marvell10g-add-SFP-support.patch +++ b/target/linux/generic/backport-5.4/738-v5.5-net-phy-marvell10g-add-SFP-support.patch @@ -19,15 +19,15 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c -@@ -25,6 +25,7 @@ +@@ -26,6 +26,7 @@ #include <linux/hwmon.h> #include <linux/marvell_phy.h> #include <linux/phy.h> +#include <linux/sfp.h> - enum { - MV_PMA_BOOT = 0xc050, -@@ -219,6 +220,28 @@ static int mv3310_hwmon_probe(struct phy + #define MV_PHY_ALASKA_NBT_QUIRK_MASK 0xfffffffe + #define MV_PHY_ALASKA_NBT_QUIRK_REV (MARVELL_PHY_ID_88X3310 | 0xa) +@@ -206,6 +207,28 @@ static int mv3310_hwmon_probe(struct phy } #endif @@ -56,7 +56,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> static int mv3310_probe(struct phy_device *phydev) { struct mv3310_priv *priv; -@@ -249,7 +272,7 @@ static int mv3310_probe(struct phy_devic +@@ -236,7 +259,7 @@ static int mv3310_probe(struct phy_devic if (ret) return ret; diff --git a/target/linux/generic/backport-5.4/739-v5.5-net-phylink-update-to-use-phy_support_asym_pause.patch b/target/linux/generic/backport-5.4/739-v5.5-net-phylink-update-to-use-phy_support_asym_pause.patch index 15db0abc96..84a8214ca5 100644 --- a/target/linux/generic/backport-5.4/739-v5.5-net-phylink-update-to-use-phy_support_asym_pause.patch +++ b/target/linux/generic/backport-5.4/739-v5.5-net-phylink-update-to-use-phy_support_asym_pause.patch @@ -12,20 +12,19 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c -@@ -678,12 +678,6 @@ static int phylink_bringup_phy(struct ph - u32 advertising; +@@ -718,11 +718,6 @@ static int phylink_bringup_phy(struct ph + __ETHTOOL_DECLARE_LINK_MODE_MASK(supported); int ret; - memset(&config, 0, sizeof(config)); -- ethtool_convert_legacy_u32_to_link_mode(supported, phy->supported); -- ethtool_convert_legacy_u32_to_link_mode(config.advertising, -- phy->advertising); +- linkmode_copy(supported, phy->supported); +- linkmode_copy(config.advertising, phy->advertising); - config.interface = pl->link_config.interface; - /* * This is the new way of dealing with flow control for PHYs, * as described by Timur Tabi in commit 529ed1275263 ("net: phy: -@@ -691,10 +685,13 @@ static int phylink_bringup_phy(struct ph +@@ -730,10 +725,12 @@ static int phylink_bringup_phy(struct ph * using our validate call to the MAC, we rely upon the MAC * clearing the bits from both supported and advertising fields. */ @@ -36,9 +35,8 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> + phy_support_asym_pause(phy); + + memset(&config, 0, sizeof(config)); -+ ethtool_convert_legacy_u32_to_link_mode(supported, phy->supported); -+ ethtool_convert_legacy_u32_to_link_mode(config.advertising, -+ phy->advertising); ++ linkmode_copy(supported, phy->supported); ++ linkmode_copy(config.advertising, phy->advertising); + config.interface = pl->link_config.interface; ret = phylink_validate(pl, supported, &config); diff --git a/target/linux/generic/backport-5.4/740-v5.5-net-phy-avoid-matching-all-ones-clause-45-PHY-IDs.patch b/target/linux/generic/backport-5.4/740-v5.5-net-phy-avoid-matching-all-ones-clause-45-PHY-IDs.patch deleted file mode 100644 index 81f161e9b1..0000000000 --- a/target/linux/generic/backport-5.4/740-v5.5-net-phy-avoid-matching-all-ones-clause-45-PHY-IDs.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 1be8018db381200c24854e0c299206c557f76fe0 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Mon, 11 Nov 2019 11:58:09 +0000 -Subject: [PATCH 638/660] net: phy: avoid matching all-ones clause 45 PHY IDs - -We currently match clause 45 PHYs using any ID read from a MMD marked -as present in the "Devices in package" registers 5 and 6. However, -this is incorrect. 45.2 says: - - "The definition of the term package is vendor specific and could be - a chip, module, or other similar entity." - -so a package could be more or less than the whole PHY - a PHY could be -made up of several modules instantiated onto a single chip such as the -Marvell 88x3310, or some of the MMDs could be disabled according to -chip configuration, such as the Broadcom 84881. - -In the case of Broadcom 84881, the "Devices in package" registers -contain 0xc000009b, meaning that there is a PHYXS present in the -package, but all registers in MMD 4 return 0xffff. This leads to our -matching code incorrectly binding this PHY to one of our generic PHY -drivers. - -This patch changes the way we determine whether to attempt to match a -MMD identifier, or use it to request a module - if the identifier is -all-ones, then we skip over it. When reading the identifiers, we -initialise phydev->c45_ids.device_ids to all-ones, only reading the -device ID if the "Devices in package" registers indicates we should. - -This avoids the generic drivers incorrectly matching on a PHY ID of -0xffffffff. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phy_device.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - ---- a/drivers/net/phy/phy_device.c -+++ b/drivers/net/phy/phy_device.c -@@ -335,7 +335,7 @@ static int phy_bus_match(struct device * - - if (phydev->is_c45) { - for (i = 1; i < num_ids; i++) { -- if (!(phydev->c45_ids.devices_in_package & (1 << i))) -+ if (phydev->c45_ids.device_ids[i] == 0xffffffff) - continue; - - if ((phydrv->phy_id & phydrv->phy_id_mask) == -@@ -623,10 +623,13 @@ static int get_phy_id(struct mii_bus *bu - */ - struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) - { -- struct phy_c45_device_ids c45_ids = {0}; -+ struct phy_c45_device_ids c45_ids; - u32 phy_id = 0; - int r; - -+ c45_ids.devices_in_package = 0; -+ memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids)); -+ - r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids); - if (r) - return ERR_PTR(r); diff --git a/target/linux/generic/backport-5.4/741-v5.5-net-phylink-fix-link-mode-modification-in-PHY-mode.patch b/target/linux/generic/backport-5.4/741-v5.5-net-phylink-fix-link-mode-modification-in-PHY-mode.patch deleted file mode 100644 index 596ecc8272..0000000000 --- a/target/linux/generic/backport-5.4/741-v5.5-net-phylink-fix-link-mode-modification-in-PHY-mode.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 4c9633f75dc35abe1b9261e0415d77802f35741d Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Tue, 5 Nov 2019 11:58:00 +0000 -Subject: [PATCH 639/660] net: phylink: fix link mode modification in PHY mode - -Modifying the link settings via phylink_ethtool_ksettings_set() and -phylink_ethtool_set_pauseparam() didn't always work as intended for -PHY based setups, as calling phylink_mac_config() would result in the -unresolved configuration being committed to the MAC, rather than the -configuration with the speed and duplex setting. - -This would work fine if the update caused the link to renegotiate, -but if no settings have changed, phylib won't trigger a renegotiation -cycle, and the MAC will be left incorrectly configured. - -Avoid calling phylink_mac_config() unless we are using an inband mode -in phylink_ethtool_ksettings_set(), and use phy_set_asym_pause() as -introduced in 4.20 to set the PHY settings in -phylink_ethtool_set_pauseparam(). - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phylink.c | 24 ++++++++++++++++-------- - 1 file changed, 16 insertions(+), 8 deletions(-) - ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -1210,7 +1210,13 @@ int phylink_ethtool_ksettings_set(struct - pl->link_config.duplex = our_kset.base.duplex; - pl->link_config.an_enabled = our_kset.base.autoneg != AUTONEG_DISABLE; - -- if (!test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state)) { -+ /* If we have a PHY, phylib will call our link state function if the -+ * mode has changed, which will trigger a resolve and update the MAC -+ * configuration. For a fixed link, this isn't able to change any -+ * parameters, which just leaves inband mode. -+ */ -+ if (pl->link_an_mode == MLO_AN_INBAND && -+ !test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state)) { - phylink_mac_config(pl, &pl->link_config); - phylink_mac_an_restart(pl); - } -@@ -1290,14 +1296,16 @@ int phylink_ethtool_set_pauseparam(struc - if (pause->tx_pause) - config->pause |= MLO_PAUSE_TX; - -- if (!test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state)) { -+ /* If we have a PHY, phylib will call our link state function if the -+ * mode has changed, which will trigger a resolve and update the MAC -+ * configuration. -+ */ -+ if (pl->phydev) { -+ phy_set_asym_pause(pl->phydev, pause->rx_pause, -+ pause->tx_pause); -+ } else if (!test_bit(PHYLINK_DISABLE_STOPPED, -+ &pl->phylink_disable_state)) { - switch (pl->link_an_mode) { -- case MLO_AN_PHY: -- /* Silently mark the carrier down, and then trigger a resolve */ -- netif_carrier_off(pl->netdev); -- phylink_run_resolve(pl); -- break; -- - case MLO_AN_FIXED: - /* Should we allow fixed links to change against the config? */ - phylink_resolve_flow(pl, config); diff --git a/target/linux/generic/backport-5.4/742-v5.5-net-sfp-add-support-for-module-quirks.patch b/target/linux/generic/backport-5.4/742-v5.5-net-sfp-add-support-for-module-quirks.patch index 5068bd468c..46c56a655a 100644 --- a/target/linux/generic/backport-5.4/742-v5.5-net-sfp-add-support-for-module-quirks.patch +++ b/target/linux/generic/backport-5.4/742-v5.5-net-sfp-add-support-for-module-quirks.patch @@ -13,7 +13,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 -@@ -9,6 +9,12 @@ +@@ -10,6 +10,12 @@ #include "sfp.h" @@ -26,7 +26,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /** * struct sfp_bus - internal representation of a sfp bus */ -@@ -21,6 +27,7 @@ struct sfp_bus { +@@ -22,6 +28,7 @@ struct sfp_bus { const struct sfp_socket_ops *socket_ops; struct device *sfp_dev; struct sfp *sfp; @@ -34,7 +34,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> const struct sfp_upstream_ops *upstream_ops; void *upstream; -@@ -30,6 +37,46 @@ struct sfp_bus { +@@ -31,6 +38,46 @@ struct sfp_bus { bool started; }; @@ -81,7 +81,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 -@@ -233,6 +280,9 @@ void sfp_parse_support(struct sfp_bus *b +@@ -234,6 +281,9 @@ void sfp_parse_support(struct sfp_bus *b phylink_set(modes, 1000baseX_Full); } @@ -91,7 +91,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> bitmap_or(support, support, modes, __ETHTOOL_LINK_MODE_MASK_NBITS); phylink_set(support, Autoneg); -@@ -609,6 +659,8 @@ int sfp_module_insert(struct sfp_bus *bu +@@ -610,6 +660,8 @@ int sfp_module_insert(struct sfp_bus *bu const struct sfp_upstream_ops *ops = sfp_get_upstream_ops(bus); int ret = 0; @@ -100,7 +100,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> if (ops && ops->module_insert) ret = ops->module_insert(bus->upstream, id); -@@ -622,6 +674,8 @@ void sfp_module_remove(struct sfp_bus *b +@@ -623,6 +675,8 @@ void sfp_module_remove(struct sfp_bus *b if (ops && ops->module_remove) ops->module_remove(bus->upstream); diff --git a/target/linux/generic/backport-5.4/743-v5.5-net-sfp-add-some-quirks-for-GPON-modules.patch b/target/linux/generic/backport-5.4/743-v5.5-net-sfp-add-some-quirks-for-GPON-modules.patch index 10c34881d8..0b085ff094 100644 --- a/target/linux/generic/backport-5.4/743-v5.5-net-sfp-add-some-quirks-for-GPON-modules.patch +++ b/target/linux/generic/backport-5.4/743-v5.5-net-sfp-add-some-quirks-for-GPON-modules.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 -@@ -37,7 +37,32 @@ struct sfp_bus { +@@ -38,7 +38,32 @@ struct sfp_bus { bool started; }; diff --git a/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch b/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch index 163d8072e6..6e3c87a7e4 100644 --- a/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch +++ b/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch @@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -199,7 +199,10 @@ struct sfp { +@@ -201,7 +201,10 @@ struct sfp { struct gpio_desc *gpio[GPIO_MAX]; int gpio_irq[GPIO_MAX]; @@ -27,7 +27,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> unsigned int state; struct delayed_work poll; struct delayed_work timeout; -@@ -393,24 +396,90 @@ static int sfp_i2c_configure(struct sfp +@@ -395,24 +398,90 @@ static int sfp_i2c_configure(struct sfp } /* Interface */ @@ -126,7 +126,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } static unsigned int sfp_check(void *buf, size_t len) -@@ -1342,11 +1411,6 @@ static void sfp_sm_fault(struct sfp *sfp +@@ -1407,11 +1476,6 @@ static void sfp_sm_fault(struct sfp *sfp } } @@ -138,7 +138,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> static void sfp_sm_probe_for_phy(struct sfp *sfp) { /* Setting the serdes link mode is guesswork: there's no -@@ -1509,7 +1573,7 @@ static int sfp_sm_mod_probe(struct sfp * +@@ -1574,7 +1638,7 @@ static int sfp_sm_mod_probe(struct sfp * (int)sizeof(id.ext.datecode), id.ext.datecode); /* Check whether we support this module */ @@ -147,7 +147,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> dev_err(sfp->dev, "module is not supported - phys id 0x%02x 0x%02x\n", sfp->id.base.phys_id, sfp->id.base.phys_ext_id); -@@ -1699,6 +1763,7 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1764,6 +1828,7 @@ static void sfp_sm_main(struct sfp *sfp, if (sfp->mod_phy) sfp_sm_phy_detach(sfp); sfp_module_tx_disable(sfp); @@ -155,7 +155,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> sfp_sm_next(sfp, SFP_S_DOWN, 0); return; } -@@ -1710,7 +1775,10 @@ static void sfp_sm_main(struct sfp *sfp, +@@ -1775,7 +1840,10 @@ static void sfp_sm_main(struct sfp *sfp, sfp->sm_dev_state != SFP_DEV_UP) break; @@ -167,7 +167,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> /* Initialise the fault clearance retries */ sfp->sm_retries = 5; -@@ -1966,7 +2034,10 @@ static void sfp_poll(struct work_struct +@@ -2031,7 +2099,10 @@ static void sfp_poll(struct work_struct struct sfp *sfp = container_of(work, struct sfp, poll.work); sfp_check_state(sfp); @@ -179,15 +179,15 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> } static struct sfp *sfp_alloc(struct device *dev) -@@ -2010,7 +2081,6 @@ static int sfp_probe(struct platform_dev - { +@@ -2076,7 +2147,6 @@ static int sfp_probe(struct platform_dev const struct sff_data *sff; + struct i2c_adapter *i2c; struct sfp *sfp; - bool poll = false; int err, i; sfp = sfp_alloc(&pdev->dev); -@@ -2100,7 +2170,7 @@ static int sfp_probe(struct platform_dev +@@ -2183,7 +2253,7 @@ static int sfp_probe(struct platform_dev sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]); if (!sfp->gpio_irq[i]) { @@ -196,7 +196,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> continue; } -@@ -2112,11 +2182,11 @@ static int sfp_probe(struct platform_dev +@@ -2195,11 +2265,11 @@ static int sfp_probe(struct platform_dev dev_name(sfp->dev), sfp); if (err) { sfp->gpio_irq[i] = 0; diff --git a/target/linux/generic/config-5.4 b/target/linux/generic/config-5.4 index 6cb4f927a0..45322e6915 100644 --- a/target/linux/generic/config-5.4 +++ b/target/linux/generic/config-5.4 @@ -50,6 +50,7 @@ CONFIG_32BIT=y # CONFIG_AD5764 is not set # CONFIG_AD5791 is not set # CONFIG_AD5933 is not set +# CONFIG_AD7124 is not set # CONFIG_AD7150 is not set # CONFIG_AD7152 is not set # CONFIG_AD7192 is not set @@ -60,14 +61,18 @@ CONFIG_32BIT=y # CONFIG_AD7303 is not set # CONFIG_AD7476 is not set # CONFIG_AD7606 is not set +# CONFIG_AD7606_IFACE_PARALLEL is not set +# CONFIG_AD7606_IFACE_SPI is not set # CONFIG_AD7746 is not set # CONFIG_AD7766 is not set +# CONFIG_AD7768_1 is not set # CONFIG_AD7780 is not set # CONFIG_AD7791 is not set # CONFIG_AD7793 is not set # CONFIG_AD7816 is not set # CONFIG_AD7887 is not set # CONFIG_AD7923 is not set +# CONFIG_AD7949 is not set # CONFIG_AD799X is not set # CONFIG_AD8366 is not set # CONFIG_AD8801 is not set @@ -81,7 +86,9 @@ CONFIG_32BIT=y # CONFIG_ADE7759 is not set # CONFIG_ADE7854 is not set # CONFIG_ADF4350 is not set +# CONFIG_ADF4371 is not set # CONFIG_ADFS_FS is not set +# CONFIG_ADIN_PHY is not set # CONFIG_ADIS16060 is not set # CONFIG_ADIS16080 is not set # CONFIG_ADIS16130 is not set @@ -94,6 +101,7 @@ CONFIG_32BIT=y # CONFIG_ADIS16240 is not set # CONFIG_ADIS16260 is not set # CONFIG_ADIS16400 is not set +# CONFIG_ADIS16460 is not set # CONFIG_ADIS16480 is not set # CONFIG_ADJD_S311 is not set # CONFIG_ADM6996_PHY is not set @@ -102,6 +110,8 @@ CONFIG_32BIT=y CONFIG_ADVISE_SYSCALLS=y # CONFIG_ADXL345_I2C is not set # CONFIG_ADXL345_SPI is not set +# CONFIG_ADXL372_I2C is not set +# CONFIG_ADXL372_SPI is not set # CONFIG_ADXRS450 is not set CONFIG_AEABI=y # CONFIG_AFE4403 is not set @@ -132,6 +142,7 @@ CONFIG_ALLOW_DEV_COREDUMP=y # CONFIG_ALTERA_STAPL is not set # CONFIG_ALTERA_TSE is not set # CONFIG_ALX is not set +# CONFIG_AL_FIC is not set # CONFIG_AM2315 is not set # CONFIG_AM335X_PHY_USB is not set # CONFIG_AMBA_PL08X is not set @@ -440,6 +451,7 @@ CONFIG_ATM_CLIP_NO_ICMP=y # CONFIG_BACKLIGHT_APPLE is not set # CONFIG_BACKLIGHT_ARCXCNN is not set # CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_CLASS_DEVICE is not set # CONFIG_BACKLIGHT_GENERIC is not set # CONFIG_BACKLIGHT_GPIO is not set # CONFIG_BACKLIGHT_LCD_SUPPORT is not set @@ -506,6 +518,7 @@ CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set CONFIG_BINFMT_SCRIPT=y CONFIG_BITREVERSE=y +# CONFIG_BLK_CGROUP_IOCOST is not set # CONFIG_BLK_CGROUP_IOLATENCY is not set # CONFIG_BLK_CMDLINE_PARSER is not set # CONFIG_BLK_CPQ_CISS_DA is not set @@ -683,6 +696,7 @@ CONFIG_BT_BNEP_PROTO_FILTER=y # CONFIG_BT_HCIBTUART is not set # CONFIG_BT_HCIBTUSB is not set # CONFIG_BT_HCIBTUSB_AUTOSUSPEND is not set +# CONFIG_BT_HCIBTUSB_MTK is not set # CONFIG_BT_HCIBTUSB_RTL is not set # CONFIG_BT_HCIDTL1 is not set # CONFIG_BT_HCIUART is not set @@ -700,6 +714,7 @@ CONFIG_BT_HCIUART_H4=y # CONFIG_BT_LE is not set # CONFIG_BT_LEDS is not set # CONFIG_BT_MRVL is not set +# CONFIG_BT_MTKSDIO is not set # CONFIG_BT_MTKUART is not set # CONFIG_BT_RFCOMM is not set CONFIG_BT_RFCOMM_TTY=y @@ -721,6 +736,8 @@ CONFIG_CACHE_L2X0_PMU=y # CONFIG_CAN_GW is not set # CONFIG_CAN_HI311X is not set # CONFIG_CAN_IFI_CANFD is not set +# CONFIG_CAN_J1939 is not set +# CONFIG_CAN_KVASER_PCIEFD is not set # CONFIG_CAN_MCBA_USB is not set # CONFIG_CAN_M_CAN is not set # CONFIG_CAN_PEAK_PCIEFD is not set @@ -751,8 +768,11 @@ CONFIG_CARDBUS=y # CONFIG_CB710_CORE is not set # CONFIG_CC10001_ADC is not set # CONFIG_CCS811 is not set +CONFIG_CC_CAN_LINK=y +CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y CONFIG_CC_HAS_STACKPROTECTOR_NONE=y +CONFIG_CC_HAS_WARN_MAYBE_UNINITIALIZED=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # CONFIG_CDROM_PKTCDVD is not set @@ -776,6 +796,7 @@ CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_ISP1704 is not set # CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_LT3651 is not set # CONFIG_CHARGER_LTC3651 is not set # CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_MAX8903 is not set @@ -783,6 +804,7 @@ CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CHARGER_SBS is not set # CONFIG_CHARGER_SMB347 is not set # CONFIG_CHARGER_TWL4030 is not set +# CONFIG_CHARGER_UCS1002 is not set # CONFIG_CHASH_SELFTEST is not set # CONFIG_CHASH_STATS is not set # CONFIG_CHECKPOINT_RESTORE is not set @@ -837,6 +859,7 @@ CONFIG_CMDLINE="" # CONFIG_COMMON_CLK_CDCE706 is not set # CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_COMMON_CLK_CS2000_CP is not set +# CONFIG_COMMON_CLK_FIXED_MMIO is not set # CONFIG_COMMON_CLK_IPROC is not set # CONFIG_COMMON_CLK_MAX9485 is not set # CONFIG_COMMON_CLK_NXP is not set @@ -845,6 +868,7 @@ CONFIG_CMDLINE="" # CONFIG_COMMON_CLK_PXA is not set # CONFIG_COMMON_CLK_QCOM is not set # CONFIG_COMMON_CLK_SI514 is not set +# CONFIG_COMMON_CLK_SI5341 is not set # CONFIG_COMMON_CLK_SI5351 is not set # CONFIG_COMMON_CLK_SI544 is not set # CONFIG_COMMON_CLK_SI570 is not set @@ -870,6 +894,7 @@ CONFIG_CONSTRUCTORS=y # CONFIG_CORESIGHT is not set # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set # CONFIG_CORTINA_PHY is not set +# CONFIG_COUNTER is not set # CONFIG_CPA_DEBUG is not set # CONFIG_CPU_DCACHE_DISABLE is not set # CONFIG_CPU_FREQ is not set @@ -909,6 +934,7 @@ CONFIG_CROSS_COMPILE="" # CONFIG_CROSS_MEMORY_ATTACH is not set CONFIG_CRYPTO=y # CONFIG_CRYPTO_842 is not set +# CONFIG_CRYPTO_ADIANTUM is not set # CONFIG_CRYPTO_AEAD is not set # CONFIG_CRYPTO_AEGIS128 is not set # CONFIG_CRYPTO_AEGIS128L is not set @@ -953,9 +979,11 @@ CONFIG_CRYPTO_BLKCIPHER2=y # CONFIG_CRYPTO_DEV_ATMEL_AUTHENC is not set # CONFIG_CRYPTO_DEV_ATMEL_ECC is not set # CONFIG_CRYPTO_DEV_ATMEL_SHA is not set +# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set # CONFIG_CRYPTO_DEV_ATMEL_TDES is not set # CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set # CONFIG_CRYPTO_DEV_CCP is not set +# CONFIG_CRYPTO_DEV_CCP_DEBUGFS is not set # CONFIG_CRYPTO_DEV_CCREE is not set # CONFIG_CRYPTO_DEV_FSL_CAAM is not set # CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set @@ -987,6 +1015,8 @@ CONFIG_CRYPTO_BLKCIPHER2=y # CONFIG_CRYPTO_ECB is not set # CONFIG_CRYPTO_ECDH is not set # CONFIG_CRYPTO_ECHAINIV is not set +# CONFIG_CRYPTO_ECRDSA is not set +# CONFIG_CRYPTO_ESSIV is not set # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_FIPS is not set # CONFIG_CRYPTO_GCM is not set @@ -999,6 +1029,8 @@ CONFIG_CRYPTO_BLKCIPHER2=y # CONFIG_CRYPTO_JITTERENTROPY is not set # CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_KHAZAD is not set +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_ARC4=y # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set @@ -1016,6 +1048,7 @@ CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y # CONFIG_CRYPTO_MORUS640 is not set # CONFIG_CRYPTO_MORUS640_SSE2 is not set # CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_OFB is not set # CONFIG_CRYPTO_PCBC is not set # CONFIG_CRYPTO_PCOMP is not set # CONFIG_CRYPTO_PCOMP2 is not set @@ -1040,6 +1073,8 @@ CONFIG_CRYPTO_PCRYPT=y # CONFIG_CRYPTO_SM3 is not set # CONFIG_CRYPTO_SM4 is not set # CONFIG_CRYPTO_SPECK is not set +# CONFIG_CRYPTO_STATS is not set +# CONFIG_CRYPTO_STREEBOG is not set # CONFIG_CRYPTO_TEA is not set # CONFIG_CRYPTO_TEST is not set # CONFIG_CRYPTO_TGR192 is not set @@ -1055,6 +1090,7 @@ CONFIG_CRYPTO_PCRYPT=y # CONFIG_CRYPTO_WP512 is not set # CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_XXHASH is not set # CONFIG_CRYPTO_ZLIB is not set # CONFIG_CRYPTO_ZSTD is not set # CONFIG_CS5535_MFGPT is not set @@ -1086,6 +1122,7 @@ CONFIG_DEBUG_FS=y # CONFIG_DEBUG_HIGHMEM is not set # CONFIG_DEBUG_ICEDCC is not set # CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_INFO_BTF is not set # CONFIG_DEBUG_INFO_DWARF4 is not set CONFIG_DEBUG_INFO_REDUCED=y # CONFIG_DEBUG_INFO_SPLIT is not set @@ -1101,6 +1138,7 @@ CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_MISC is not set # CONFIG_DEBUG_MUTEXES is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_NX_TEST is not set @@ -1111,6 +1149,7 @@ CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_PER_CPU_MAPS is not set # CONFIG_DEBUG_PINCTRL is not set # CONFIG_DEBUG_PI_LIST is not set +# CONFIG_DEBUG_PLIST is not set # CONFIG_DEBUG_PREEMPT is not set # CONFIG_DEBUG_RODATA_TEST is not set # CONFIG_DEBUG_RSEQ is not set @@ -1177,6 +1216,7 @@ CONFIG_DEVPORT=y # CONFIG_DL2K is not set # CONFIG_DLM is not set # CONFIG_DM9000 is not set +# CONFIG_DMABUF_SELFTESTS is not set # CONFIG_DMADEVICES is not set # CONFIG_DMADEVICES_DEBUG is not set # CONFIG_DMARD06 is not set @@ -1192,8 +1232,10 @@ CONFIG_DEVPORT=y # CONFIG_DMA_SHARED_BUFFER is not set # CONFIG_DMA_VIRT_OPS is not set # CONFIG_DM_CACHE is not set +# CONFIG_DM_CLONE is not set # CONFIG_DM_DEBUG is not set # CONFIG_DM_DELAY is not set +# CONFIG_DM_DUST is not set # CONFIG_DM_ERA is not set # CONFIG_DM_FLAKEY is not set # CONFIG_DM_INTEGRITY is not set @@ -1218,6 +1260,7 @@ CONFIG_DOUBLEFAULT=y # CONFIG_DP83867_PHY is not set # CONFIG_DP83TC811_PHY is not set # CONFIG_DPOT_DAC is not set +# CONFIG_DPS310 is not set CONFIG_DQL=y # CONFIG_DRAGONRISE_FF is not set # CONFIG_DRM is not set @@ -1227,6 +1270,7 @@ CONFIG_DQL=y # CONFIG_DRM_AMDGPU_SI is not set # CONFIG_DRM_AMDGPU_USERPTR is not set # CONFIG_DRM_AMD_ACP is not set +# CONFIG_DRM_AMD_DC_DCN2_0 is not set # CONFIG_DRM_ANALOGIX_ANX78XX is not set # CONFIG_DRM_ARCPGU is not set # CONFIG_DRM_ARMADA is not set @@ -1334,6 +1378,8 @@ CONFIG_DUMMY_CONSOLE_ROWS=25 # CONFIG_DW_AXI_DMAC is not set # CONFIG_DW_DMAC is not set # CONFIG_DW_DMAC_PCI is not set +# CONFIG_DW_EDMA is not set +# CONFIG_DW_EDMA_PCIE is not set # CONFIG_DW_WATCHDOG is not set # CONFIG_DYNAMIC_DEBUG is not set # CONFIG_E100 is not set @@ -1352,6 +1398,7 @@ CONFIG_DUMMY_CONSOLE_ROWS=25 # CONFIG_EEPROM_AT24 is not set # CONFIG_EEPROM_AT25 is not set # CONFIG_EEPROM_DIGSY_MTC_CFG is not set +# CONFIG_EEPROM_EE1004 is not set # CONFIG_EEPROM_IDT_89HPESX is not set # CONFIG_EEPROM_LEGACY is not set # CONFIG_EEPROM_MAX6875 is not set @@ -1381,6 +1428,7 @@ CONFIG_EPOLL=y CONFIG_ETHERNET=y # CONFIG_ETHOC is not set CONFIG_EVENTFD=y +# CONFIG_EXFAT_FS is not set CONFIG_EXPERT=y CONFIG_EXPORTFS=y # CONFIG_EXPORTFS_BLOCK_OPS is not set @@ -1397,9 +1445,11 @@ CONFIG_EXT4_USE_FOR_EXT2=y # CONFIG_EXTCON_ADC_JACK is not set # CONFIG_EXTCON_ARIZONA is not set # CONFIG_EXTCON_AXP288 is not set +# CONFIG_EXTCON_FSA9480 is not set # CONFIG_EXTCON_GPIO is not set # CONFIG_EXTCON_INTEL_INT3496 is not set # CONFIG_EXTCON_MAX3355 is not set +# CONFIG_EXTCON_PTN5150 is not set # CONFIG_EXTCON_QCOM_SPMI_MISC is not set # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set @@ -1543,6 +1593,7 @@ CONFIG_FB_NOTIFY=y # CONFIG_FENCE_TRACE is not set # CONFIG_FHANDLE is not set CONFIG_FIB_RULES=y +# CONFIG_FIELDBUS_DEV is not set CONFIG_FILE_LOCKING=y # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_FIREWIRE is not set @@ -1557,6 +1608,7 @@ CONFIG_FLATMEM_MANUAL=y CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_FM10K is not set # CONFIG_FMC is not set +# CONFIG_FONT_TER16x32 is not set # CONFIG_FORCEDETH is not set CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_FORTIFY_SOURCE=y @@ -1578,6 +1630,7 @@ CONFIG_FSNOTIFY=y # CONFIG_FS_DAX is not set # CONFIG_FS_ENCRYPTION is not set # CONFIG_FS_POSIX_ACL is not set +# CONFIG_FS_VERITY is not set # CONFIG_FTGMAC100 is not set # CONFIG_FTL is not set # CONFIG_FTMAC100 is not set @@ -1598,8 +1651,10 @@ CONFIG_FUTEX=y CONFIG_FUTEX_PI=y # CONFIG_FW_CFG_SYSFS is not set CONFIG_FW_LOADER=y +# CONFIG_FW_LOADER_COMPRESS is not set CONFIG_FW_LOADER_USER_HELPER=y CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +# CONFIG_FXAS21002C is not set CONFIG_GACT_PROB=y # CONFIG_GADGET_UAC1 is not set # CONFIG_GAMEPORT is not set @@ -1642,8 +1697,10 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_AMD8111 is not set # CONFIG_GPIO_AMDPT is not set +# CONFIG_GPIO_AMD_FCH is not set # CONFIG_GPIO_BCM_KONA is not set # CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_CADENCE is not set # CONFIG_GPIO_CS5535 is not set # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_EM is not set @@ -1653,6 +1710,7 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_GPIO_MM is not set # CONFIG_GPIO_GRGPIO is not set +# CONFIG_GPIO_GW_PLD is not set # CONFIG_GPIO_HLWD is not set # CONFIG_GPIO_ICH is not set # CONFIG_GPIO_IT87 is not set @@ -1676,6 +1734,7 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GPIO_PL061 is not set # CONFIG_GPIO_RCAR is not set # CONFIG_GPIO_RDC321X is not set +# CONFIG_GPIO_SAMA5D2_PIOBU is not set # CONFIG_GPIO_SCH is not set # CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SX150X is not set @@ -1698,6 +1757,7 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512 # CONFIG_GS_FPGABOOT is not set # CONFIG_GTP is not set # CONFIG_GUP_BENCHMARK is not set +# CONFIG_HABANA_AI is not set # CONFIG_HAMACHI is not set # CONFIG_HAMRADIO is not set # CONFIG_HAPPYMEAL is not set @@ -1738,6 +1798,8 @@ CONFIG_HAVE_STACKPROTECTOR=y # CONFIG_HDMI_LPE_AUDIO is not set # CONFIG_HDQ_MASTER_OMAP is not set # CONFIG_HEADERS_CHECK is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_HEADER_TEST is not set # CONFIG_HERMES is not set # CONFIG_HFSPLUS_FS is not set # CONFIG_HFSPLUS_FS_POSIX_ACL is not set @@ -1766,6 +1828,7 @@ CONFIG_HAVE_STACKPROTECTOR=y # CONFIG_HID_CORSAIR is not set # CONFIG_HID_COUGAR is not set # CONFIG_HID_CP2112 is not set +# CONFIG_HID_CREATIVE_SB0540 is not set # CONFIG_HID_CYPRESS is not set # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_ELAN is not set @@ -1793,7 +1856,9 @@ CONFIG_HAVE_STACKPROTECTOR=y # CONFIG_HID_LOGITECH is not set # CONFIG_HID_LOGITECH_DJ is not set # CONFIG_HID_LOGITECH_HIDPP is not set +# CONFIG_HID_MACALLY is not set # CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MALTRON is not set # CONFIG_HID_MAYFLASH is not set # CONFIG_HID_MICROSOFT is not set # CONFIG_HID_MONTEREY is not set @@ -1827,8 +1892,10 @@ CONFIG_HAVE_STACKPROTECTOR=y # CONFIG_HID_TIVO is not set # CONFIG_HID_TOPSEED is not set # CONFIG_HID_TWINHAN is not set +# CONFIG_HID_U2FZERO is not set # CONFIG_HID_UCLOGIC is not set # CONFIG_HID_UDRAW_PS3 is not set +# CONFIG_HID_VIEWSONIC is not set # CONFIG_HID_WACOM is not set # CONFIG_HID_WALTOP is not set # CONFIG_HID_WIIMOTE is not set @@ -1862,6 +1929,7 @@ CONFIG_HPET_MMAP_DEFAULT=y # CONFIG_HPFS_FS is not set # CONFIG_HP_ILO is not set # CONFIG_HP_WIRELESS is not set +# CONFIG_HSA_AMD is not set # CONFIG_HSI is not set # CONFIG_HSR is not set # CONFIG_HTC_EGPIO is not set @@ -1947,6 +2015,7 @@ CONFIG_HZ_100=y # CONFIG_I2C_IMG is not set # CONFIG_I2C_ISCH is not set # CONFIG_I2C_ISMT is not set +# CONFIG_I2C_JZ4780 is not set # CONFIG_I2C_MLXCPLD is not set # CONFIG_I2C_MPC is not set # CONFIG_I2C_MUX is not set @@ -1961,6 +2030,7 @@ CONFIG_HZ_100=y # CONFIG_I2C_MV64XXX is not set # CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NOMADIK is not set +# CONFIG_I2C_NVIDIA_GPU is not set # CONFIG_I2C_OCORES is not set # CONFIG_I2C_OCTEON is not set # CONFIG_I2C_PARPORT is not set @@ -1989,6 +2059,7 @@ CONFIG_HZ_100=y # CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set # CONFIG_I2C_XILINX is not set +# CONFIG_I3C is not set # CONFIG_I40E is not set # CONFIG_I40EVF is not set # CONFIG_I6300ESB_WDT is not set @@ -2022,6 +2093,7 @@ CONFIG_HZ_100=y # CONFIG_IFB is not set # CONFIG_IGB is not set # CONFIG_IGBVF is not set +# CONFIG_IGC is not set # CONFIG_IIO is not set # CONFIG_IIO_BUFFER_CB is not set # CONFIG_IIO_BUFFER_HW_CONSUMER is not set @@ -2044,6 +2116,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_IIO_SYSFS_TRIGGER is not set # CONFIG_IKCONFIG is not set # CONFIG_IKCONFIG_PROC is not set +# CONFIG_IKHEADERS is not set # CONFIG_IMAGE_CMDLINE_HACK is not set # CONFIG_IMGPDC_WDT is not set # CONFIG_IMG_MDC_DMA is not set @@ -2076,7 +2149,18 @@ CONFIG_INET=y # CONFIG_INET_XFRM_TUNNEL is not set # CONFIG_INFINIBAND is not set # CONFIG_INFTL is not set +# CONFIG_INGENIC_ADC is not set +# CONFIG_INGENIC_CGU_JZ4725B is not set +# CONFIG_INGENIC_CGU_JZ4740 is not set +# CONFIG_INGENIC_CGU_JZ4770 is not set +# CONFIG_INGENIC_CGU_JZ4780 is not set +# CONFIG_INGENIC_TCU_CLK is not set +# CONFIG_INGENIC_TCU_IRQ is not set +# CONFIG_INGENIC_TIMER is not set CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_INIT_STACK_NONE=y # CONFIG_INLINE_READ_LOCK is not set # CONFIG_INLINE_READ_LOCK_BH is not set # CONFIG_INLINE_READ_LOCK_IRQ is not set @@ -2128,6 +2212,7 @@ CONFIG_INOTIFY_USER=y # CONFIG_INPUT_GPIO_DECODER is not set # CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set # CONFIG_INPUT_GPIO_TILT_POLLED is not set +# CONFIG_INPUT_GPIO_VIBRA is not set # CONFIG_INPUT_IDEAPAD_SLIDEBAR is not set # CONFIG_INPUT_IMS_PCU is not set # CONFIG_INPUT_JOYDEV is not set @@ -2143,6 +2228,7 @@ CONFIG_INPUT_MISC=y # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_MPU3050 is not set +# CONFIG_INPUT_MSM_VIBRATOR is not set # CONFIG_INPUT_PALMAS_PWRBUTTON is not set # CONFIG_INPUT_PCF8574 is not set # CONFIG_INPUT_PCSPKR is not set @@ -2187,6 +2273,7 @@ CONFIG_INPUT_MISC=y # CONFIG_INTEL_TH is not set # CONFIG_INTEL_VBTN is not set # CONFIG_INTEL_XWAY_PHY is not set +# CONFIG_INTERCONNECT is not set # CONFIG_INTERVAL_TREE_TEST is not set # CONFIG_INV_MPU6050_I2C is not set # CONFIG_INV_MPU6050_IIO is not set @@ -2197,6 +2284,7 @@ CONFIG_INPUT_MISC=y CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_NOOP=y CONFIG_IO_STRICT_DEVMEM=y +# CONFIG_IO_URING is not set # CONFIG_IP17XX_PHY is not set # CONFIG_IP6_NF_FILTER is not set # CONFIG_IP6_NF_IPTABLES is not set @@ -2390,6 +2478,7 @@ CONFIG_KERNFS=y # CONFIG_KEYBOARD_ADC is not set # CONFIG_KEYBOARD_ADP5588 is not set # CONFIG_KEYBOARD_ADP5589 is not set +# CONFIG_KEYBOARD_APPLESPI is not set # CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_BCM is not set # CONFIG_KEYBOARD_CAP11XX is not set @@ -2407,6 +2496,7 @@ CONFIG_KERNFS=y # CONFIG_KEYBOARD_OMAP4 is not set # CONFIG_KEYBOARD_OPENCORES is not set # CONFIG_KEYBOARD_PXA27x is not set +# CONFIG_KEYBOARD_QT1050 is not set # CONFIG_KEYBOARD_QT1070 is not set # CONFIG_KEYBOARD_QT2160 is not set # CONFIG_KEYBOARD_SAMSUNG is not set @@ -2422,6 +2512,7 @@ CONFIG_KERNFS=y # CONFIG_KEYBOARD_TWL4030 is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYS is not set +# CONFIG_KEYS_REQUEST_CACHE is not set # CONFIG_KEY_DH_OPERATIONS is not set # CONFIG_KGDB is not set # CONFIG_KMEMCHECK is not set @@ -2453,6 +2544,7 @@ CONFIG_KUSER_HELPERS=y # CONFIG_LATTICE_ECP3_CONFIG is not set CONFIG_LBDAF=y # CONFIG_LCD_AMS369FG06 is not set +# CONFIG_LCD_CLASS_DEVICE is not set # CONFIG_LCD_HX8357 is not set # CONFIG_LCD_ILI922X is not set # CONFIG_LCD_ILI9320 is not set @@ -2468,6 +2560,7 @@ CONFIG_LBDAF=y CONFIG_LDISC_AUTOLOAD=y # CONFIG_LDM_PARTITION is not set CONFIG_LD_DEAD_CODE_DATA_ELIMINATION=y +# CONFIG_LEDS_AN30259A is not set # CONFIG_LEDS_APU is not set # CONFIG_LEDS_BCM6328 is not set # CONFIG_LEDS_BCM6358 is not set @@ -2483,6 +2576,7 @@ CONFIG_LEDS_CLASS=y # CONFIG_LEDS_IS31FL319X is not set # CONFIG_LEDS_IS31FL32XX is not set # CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3532 is not set # CONFIG_LEDS_LM355x is not set # CONFIG_LEDS_LM3642 is not set # CONFIG_LEDS_LM3692X is not set @@ -2504,11 +2598,14 @@ CONFIG_LEDS_CLASS=y # CONFIG_LEDS_PCA963X is not set # CONFIG_LEDS_PWM is not set # CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_SPI_BYTE is not set # CONFIG_LEDS_SYSCON is not set # CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TI_LMU_COMMON is not set # CONFIG_LEDS_TLC591XX is not set CONFIG_LEDS_TRIGGERS=y # CONFIG_LEDS_TRIGGER_ACTIVITY is not set +# CONFIG_LEDS_TRIGGER_AUDIO is not set # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set # CONFIG_LEDS_TRIGGER_CAMERA is not set # CONFIG_LEDS_TRIGGER_CPU is not set @@ -2521,6 +2618,7 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=y CONFIG_LEDS_TRIGGER_NETDEV=y # CONFIG_LEDS_TRIGGER_ONESHOT is not set # CONFIG_LEDS_TRIGGER_PANIC is not set +# CONFIG_LEDS_TRIGGER_PATTERN is not set CONFIG_LEDS_TRIGGER_TIMER=y # CONFIG_LEDS_TRIGGER_TRANSIENT is not set # CONFIG_LEDS_USER is not set @@ -2555,6 +2653,7 @@ CONFIG_LOCALVERSION="" CONFIG_LOCKDEP_SUPPORT=y CONFIG_LOCKD_V4=y # CONFIG_LOCKUP_DETECTOR is not set +# CONFIG_LOCK_EVENT_COUNTS is not set # CONFIG_LOCK_STAT is not set # CONFIG_LOCK_TORTURE_TEST is not set # CONFIG_LOGFS is not set @@ -2570,6 +2669,8 @@ CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 # CONFIG_LPC_SCH is not set # CONFIG_LP_CONSOLE is not set # CONFIG_LSI_ET1011C_PHY is not set +CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity" +# CONFIG_LTC1660 is not set # CONFIG_LTC2471 is not set # CONFIG_LTC2485 is not set # CONFIG_LTC2497 is not set @@ -2628,8 +2729,11 @@ CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 # CONFIG_MAX1363 is not set # CONFIG_MAX30100 is not set # CONFIG_MAX30102 is not set +# CONFIG_MAX31856 is not set # CONFIG_MAX44000 is not set +# CONFIG_MAX44009 is not set # CONFIG_MAX517 is not set +# CONFIG_MAX5432 is not set # CONFIG_MAX5481 is not set # CONFIG_MAX5487 is not set # CONFIG_MAX5821 is not set @@ -2637,11 +2741,14 @@ CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 # CONFIG_MAX9611 is not set # CONFIG_MAXIM_THERMOCOUPLE is not set CONFIG_MAY_USE_DEVLINK=y +# CONFIG_MB1232 is not set # CONFIG_MC3230 is not set # CONFIG_MCB is not set # CONFIG_MCP320X is not set # CONFIG_MCP3422 is not set +# CONFIG_MCP3911 is not set # CONFIG_MCP4018 is not set +# CONFIG_MCP41010 is not set # CONFIG_MCP4131 is not set # CONFIG_MCP4531 is not set # CONFIG_MCP4725 is not set @@ -2652,6 +2759,7 @@ CONFIG_MAY_USE_DEVLINK=y # CONFIG_MDIO_BITBANG is not set # CONFIG_MDIO_BUS_MUX_GPIO is not set # CONFIG_MDIO_BUS_MUX_MMIOREG is not set +# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set # CONFIG_MDIO_DEVICE is not set # CONFIG_MDIO_HISI_FEMAC is not set # CONFIG_MDIO_MSCC_MIIM is not set @@ -2721,6 +2829,7 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_MADERA is not set # CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77620 is not set +# CONFIG_MFD_MAX77650 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX77843 is not set @@ -2752,6 +2861,7 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SMSC is not set +# CONFIG_MFD_STMFX is not set # CONFIG_MFD_STMPE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_T7L66XB is not set @@ -2775,6 +2885,7 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_MFD_TPS65912_SPI is not set # CONFIG_MFD_TPS68470 is not set # CONFIG_MFD_TPS80031 is not set +# CONFIG_MFD_TQMX86 is not set # CONFIG_MFD_VIPERBOARD is not set # CONFIG_MFD_VX855 is not set # CONFIG_MFD_WL1273_CORE is not set @@ -2801,12 +2912,14 @@ CONFIG_MII=y # CONFIG_MIPS_CDMM is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MIPS_FPU_EMULATOR is not set +# CONFIG_MIPS_FP_SUPPORT is not set # CONFIG_MIPS_GENERIC is not set # CONFIG_MIPS_MALTA is not set # CONFIG_MIPS_O32_FP64_SUPPORT is not set # CONFIG_MIPS_PARAVIRT is not set # CONFIG_MIPS_PLATFORM_DEVICES is not set # CONFIG_MIPS_SEAD3 is not set +# CONFIG_MISC_ALCOR_PCI is not set CONFIG_MISC_FILESYSTEMS=y # CONFIG_MISC_RTSX_PCI is not set # CONFIG_MISC_RTSX_USB is not set @@ -2846,17 +2959,20 @@ CONFIG_MMC_BLOCK_MINORS=8 # CONFIG_MMC_CQHCI is not set # CONFIG_MMC_DEBUG is not set # CONFIG_MMC_DW is not set +# CONFIG_MMC_JZ4740 is not set # CONFIG_MMC_MTK is not set # CONFIG_MMC_MVSDIO is not set # CONFIG_MMC_S3C is not set # CONFIG_MMC_SDHCI is not set # CONFIG_MMC_SDHCI_ACPI is not set +# CONFIG_MMC_SDHCI_AM654 is not set # CONFIG_MMC_SDHCI_BCM_KONA is not set # CONFIG_MMC_SDHCI_CADENCE is not set # CONFIG_MMC_SDHCI_F_SDH30 is not set # CONFIG_MMC_SDHCI_IPROC is not set # CONFIG_MMC_SDHCI_MSM is not set # CONFIG_MMC_SDHCI_OF_ARASAN is not set +# CONFIG_MMC_SDHCI_OF_ASPEED is not set # CONFIG_MMC_SDHCI_OF_AT91 is not set # CONFIG_MMC_SDHCI_OF_DWCMSHC is not set # CONFIG_MMC_SDHCI_OF_ESDHC is not set @@ -2877,6 +2993,7 @@ CONFIG_MMC_BLOCK_MINORS=8 # CONFIG_MMIOTRACE is not set CONFIG_MMU=y CONFIG_MODULES=y +# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set # CONFIG_MODULE_COMPRESS is not set # CONFIG_MODULE_FORCE_LOAD is not set # CONFIG_MODULE_FORCE_UNLOAD is not set @@ -2896,6 +3013,7 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MOUSE_PS2_SENTELIC is not set # CONFIG_MOUSE_SYNAPTICS_I2C is not set # CONFIG_MOUSE_SYNAPTICS_USB is not set +# CONFIG_MOXTET is not set # CONFIG_MPL115 is not set # CONFIG_MPL115_I2C is not set # CONFIG_MPL115_SPI is not set @@ -2937,6 +3055,7 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y # CONFIG_MTD_DOCG3 is not set CONFIG_MTD_GEN_PROBE=y # CONFIG_MTD_GPIO_ADDR is not set +# CONFIG_MTD_HYPERBUS is not set # CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_JEDECPROBE is not set # CONFIG_MTD_LATCH_ADDR is not set @@ -2975,6 +3094,7 @@ CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xff108018 # CONFIG_MTD_NAND_ECC is not set # CONFIG_MTD_NAND_ECC_BCH is not set # CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set # CONFIG_MTD_NAND_FSL_ELBC is not set # CONFIG_MTD_NAND_FSL_IFC is not set # CONFIG_MTD_NAND_FSL_UPM is not set @@ -2987,6 +3107,7 @@ CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_MPC5121_NFC is not set # CONFIG_MTD_NAND_MTK is not set # CONFIG_MTD_NAND_MXC is not set +# CONFIG_MTD_NAND_MXIC is not set # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_NDFC is not set # CONFIG_MTD_NAND_NUC900 is not set @@ -3015,12 +3136,16 @@ CONFIG_MTD_OF_PARTS=y # CONFIG_MTD_PHRAM is not set # CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_PHYSMAP_COMPAT is not set +# CONFIG_MTD_PHYSMAP_GEMINI is not set +# CONFIG_MTD_PHYSMAP_GPIO_ADDR is not set CONFIG_MTD_PHYSMAP_OF=y # CONFIG_MTD_PHYSMAP_OF_GEMINI is not set # CONFIG_MTD_PHYSMAP_OF_VERSATILE is not set +# CONFIG_MTD_PHYSMAP_VERSATILE is not set # CONFIG_MTD_PLATRAM is not set # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_RAM is not set +# CONFIG_MTD_RAW_NAND is not set CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 # CONFIG_MTD_REDBOOT_PARTS is not set # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set @@ -3175,10 +3300,12 @@ CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NET_9P is not set # CONFIG_NET_ACT_BPF is not set # CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_ACT_CT is not set # CONFIG_NET_ACT_GACT is not set # CONFIG_NET_ACT_IFE is not set # CONFIG_NET_ACT_IPT is not set # CONFIG_NET_ACT_MIRRED is not set +# CONFIG_NET_ACT_MPLS is not set # CONFIG_NET_ACT_NAT is not set # CONFIG_NET_ACT_PEDIT is not set # CONFIG_NET_ACT_POLICE is not set @@ -3209,8 +3336,11 @@ CONFIG_NET_CORE=y # CONFIG_NET_DROP_MONITOR is not set # CONFIG_NET_DSA is not set # CONFIG_NET_DSA_BCM_SF2 is not set +# CONFIG_NET_DSA_LANTIQ_GSWIP is not set # CONFIG_NET_DSA_LEGACY is not set # CONFIG_NET_DSA_LOOP is not set +# CONFIG_NET_DSA_MICROCHIP_KSZ8795 is not set +# CONFIG_NET_DSA_MICROCHIP_KSZ9477 is not set # CONFIG_NET_DSA_MT7530 is not set # CONFIG_NET_DSA_MV88E6060 is not set # CONFIG_NET_DSA_MV88E6123_61_65 is not set @@ -3221,11 +3351,24 @@ CONFIG_NET_CORE=y # CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set # CONFIG_NET_DSA_QCA8K is not set # CONFIG_NET_DSA_REALTEK_SMI is not set +# CONFIG_NET_DSA_SJA1105 is not set # CONFIG_NET_DSA_SMSC_LAN9303_I2C is not set # CONFIG_NET_DSA_SMSC_LAN9303_MDIO is not set +# CONFIG_NET_DSA_TAG_8021Q is not set +# CONFIG_NET_DSA_TAG_BRCM is not set +# CONFIG_NET_DSA_TAG_BRCM_PREPEND is not set # CONFIG_NET_DSA_TAG_DSA is not set # CONFIG_NET_DSA_TAG_EDSA is not set +# CONFIG_NET_DSA_TAG_GSWIP is not set +# CONFIG_NET_DSA_TAG_KSZ is not set +# CONFIG_NET_DSA_TAG_LAN9303 is not set +# CONFIG_NET_DSA_TAG_MTK is not set +# CONFIG_NET_DSA_TAG_QCA is not set +# CONFIG_NET_DSA_TAG_SJA1105 is not set +# CONFIG_NET_DSA_TAG_TRAILER is not set # CONFIG_NET_DSA_VITESSE_VSC73XX is not set +# CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM is not set +# CONFIG_NET_DSA_VITESSE_VSC73XX_SPI is not set # CONFIG_NET_EMATCH is not set # CONFIG_NET_EMATCH_CANID is not set # CONFIG_NET_EMATCH_CMP is not set @@ -3288,11 +3431,13 @@ CONFIG_NET_SCH_FQ_CODEL=y # CONFIG_NET_SCH_SFB is not set # CONFIG_NET_SCH_SFQ is not set # CONFIG_NET_SCH_SKBPRIO is not set +# CONFIG_NET_SCH_TAPRIO is not set # CONFIG_NET_SCH_TBF is not set # CONFIG_NET_SCH_TEQL is not set # CONFIG_NET_SCTPPROBE is not set # CONFIG_NET_SWITCHDEV is not set # CONFIG_NET_TCPPROBE is not set +# CONFIG_NET_TC_SKB_EXT is not set # CONFIG_NET_TEAM is not set # CONFIG_NET_TULIP is not set # CONFIG_NET_UDP_TUNNEL is not set @@ -3324,6 +3469,7 @@ CONFIG_NET_VENDOR_EZCHIP=y CONFIG_NET_VENDOR_FARADAY=y CONFIG_NET_VENDOR_FREESCALE=y CONFIG_NET_VENDOR_FUJITSU=y +CONFIG_NET_VENDOR_GOOGLE=y CONFIG_NET_VENDOR_HISILICON=y CONFIG_NET_VENDOR_HP=y CONFIG_NET_VENDOR_HUAWEI=y @@ -3343,6 +3489,7 @@ CONFIG_NET_VENDOR_NI=y CONFIG_NET_VENDOR_NVIDIA=y CONFIG_NET_VENDOR_OKI=y CONFIG_NET_VENDOR_PACKET_ENGINES=y +CONFIG_NET_VENDOR_PENSANDO=y CONFIG_NET_VENDOR_QLOGIC=y CONFIG_NET_VENDOR_QUALCOMM=y CONFIG_NET_VENDOR_RDC=y @@ -3401,10 +3548,13 @@ CONFIG_NFS_V3=y # CONFIG_NFT_RT is not set # CONFIG_NFT_SET_BITMAP is not set # CONFIG_NFT_SOCKET is not set +# CONFIG_NFT_SYNPROXY is not set # CONFIG_NFT_TPROXY is not set # CONFIG_NFT_TUNNEL is not set +# CONFIG_NFT_XFRM is not set # CONFIG_NF_CONNTRACK is not set # CONFIG_NF_CONNTRACK_AMANDA is not set +# CONFIG_NF_CONNTRACK_BRIDGE is not set # CONFIG_NF_CONNTRACK_EVENTS is not set # CONFIG_NF_CONNTRACK_FTP is not set # CONFIG_NF_CONNTRACK_H323 is not set @@ -3471,6 +3621,7 @@ CONFIG_NF_TABLES_NETDEV=y # CONFIG_NIC7018_WDT is not set # CONFIG_NILFS2_FS is not set # CONFIG_NIU is not set +# CONFIG_NI_XGE_MANAGEMENT_ENET is not set CONFIG_NLATTR=y # CONFIG_NLMON is not set # CONFIG_NLM_XLP_BOARD is not set @@ -3527,6 +3678,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_MAC_TURKISH is not set # CONFIG_NLS_UTF8 is not set CONFIG_NMI_LOG_BUF_SHIFT=13 +# CONFIG_NOA1305 is not set # CONFIG_NOP_USB_XCEIV is not set # CONFIG_NORTEL_HERMES is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set @@ -3542,16 +3694,19 @@ CONFIG_NMI_LOG_BUF_SHIFT=13 # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_NTP_PPS is not set +# CONFIG_NULL_TTY is not set # CONFIG_NVM is not set # CONFIG_NVMEM is not set # CONFIG_NVMEM_BCM_OCOTP is not set # CONFIG_NVMEM_IMX_OCOTP is not set +# CONFIG_NVMEM_SYSFS is not set # CONFIG_NVME_FC is not set # CONFIG_NVME_TARGET is not set # CONFIG_NVRAM is not set # CONFIG_NV_TCO is not set # CONFIG_NXP_STB220 is not set # CONFIG_NXP_STB225 is not set +# CONFIG_NXP_TJA11XX_PHY is not set # CONFIG_N_GSM is not set # CONFIG_OABI_COMPAT is not set # CONFIG_OBS600 is not set @@ -3583,6 +3738,7 @@ CONFIG_OVERLAY_FS_XINO_AUTO=y # CONFIG_PA12203001 is not set CONFIG_PACKET=y # CONFIG_PACKET_DIAG is not set +# CONFIG_PACKING is not set # CONFIG_PAGE_EXTENSION is not set # CONFIG_PAGE_OWNER is not set # CONFIG_PAGE_POISONING is not set @@ -3743,10 +3899,16 @@ CONFIG_PCI_SYSCALL=y # CONFIG_PHONET is not set # CONFIG_PHYLIB is not set # CONFIG_PHYS_ADDR_T_64BIT is not set +# CONFIG_PHY_CADENCE_DP is not set +# CONFIG_PHY_CADENCE_DPHY is not set +# CONFIG_PHY_CADENCE_SIERRA is not set # CONFIG_PHY_CPCAP_USB is not set # CONFIG_PHY_EXYNOS_DP_VIDEO is not set # CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +# CONFIG_PHY_FSL_IMX8MQ_USB is not set # CONFIG_PHY_MAPPHONE_MDM6600 is not set +# CONFIG_PHY_MIXEL_MIPI_DPHY is not set +# CONFIG_PHY_OCELOT_SERDES is not set # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_PHY_QCOM_DWC3 is not set @@ -3766,9 +3928,12 @@ CONFIG_PINCONF=y # CONFIG_PINCTRL_EXYNOS is not set # CONFIG_PINCTRL_EXYNOS5440 is not set # CONFIG_PINCTRL_ICELAKE is not set +# CONFIG_PINCTRL_INGENIC is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MSM8X74 is not set +# CONFIG_PINCTRL_OCELOT is not set CONFIG_PINCTRL_SINGLE=y +# CONFIG_PINCTRL_STMFX is not set # CONFIG_PINCTRL_SX150X is not set CONFIG_PINMUX=y # CONFIG_PKCS7_MESSAGE_PARSER is not set @@ -3839,6 +4004,7 @@ CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_PRINTK=y +# CONFIG_PRINTK_CALLER is not set CONFIG_PRINTK_NMI=y CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 # CONFIG_PRINTK_TIME is not set @@ -3860,12 +4026,14 @@ CONFIG_PROC_SYSCTL=y # CONFIG_PROVE_RCU_REPEATEDLY is not set # CONFIG_PSAMPLE is not set # CONFIG_PSB6970_PHY is not set +# CONFIG_PSI is not set # CONFIG_PSTORE is not set # CONFIG_PTP_1588_CLOCK is not set # CONFIG_PTP_1588_CLOCK_IXP46X is not set # CONFIG_PTP_1588_CLOCK_KVM is not set # CONFIG_PTP_1588_CLOCK_PCH is not set # CONFIG_PUBLIC_KEY_ALGO_RSA is not set +# CONFIG_PVPANIC is not set # CONFIG_PWM is not set # CONFIG_PWM_FSL_FTM is not set # CONFIG_PWM_PCA9685 is not set @@ -3917,9 +4085,11 @@ CONFIG_PWRSEQ_SIMPLE=y # CONFIG_RADIO_TRUST is not set # CONFIG_RADIO_TYPHOON is not set # CONFIG_RADIO_ZOLTRIX is not set +# CONFIG_RAID6_PQ_BENCHMARK is not set # CONFIG_RAID_ATTRS is not set # CONFIG_RALINK is not set # CONFIG_RANDOM32_SELFTEST is not set +# CONFIG_RANDOM_TRUST_BOOTLOADER is not set # CONFIG_RANDOM_TRUST_CPU is not set # CONFIG_RAPIDIO is not set # CONFIG_RAS is not set @@ -3953,6 +4123,7 @@ CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 # CONFIG_READABLE_ASM is not set # CONFIG_REALTEK_PHY is not set # CONFIG_REDWOOD is not set +# CONFIG_REED_SOLOMON_TEST is not set # CONFIG_REFCOUNT_FULL is not set # CONFIG_REGMAP is not set # CONFIG_REGMAP_I2C is not set @@ -3982,13 +4153,16 @@ CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 # CONFIG_REGULATOR_MAX8660 is not set # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_MCP16502 is not set # CONFIG_REGULATOR_MT6311 is not set # CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_PV88060 is not set # CONFIG_REGULATOR_PV88080 is not set # CONFIG_REGULATOR_PV88090 is not set # CONFIG_REGULATOR_PWM is not set +# CONFIG_REGULATOR_SLG51000 is not set # CONFIG_REGULATOR_SY8106A is not set +# CONFIG_REGULATOR_SY8824X is not set # CONFIG_REGULATOR_TI_ABB is not set # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set @@ -4048,12 +4222,14 @@ CONFIG_RFKILL=y # CONFIG_RTC_CLASS is not set # CONFIG_RTC_DEBUG is not set # CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABEOZ9 is not set # CONFIG_RTC_DRV_ABX80X is not set # CONFIG_RTC_DRV_ARMADA38X is not set # CONFIG_RTC_DRV_AU1XXX is not set # CONFIG_RTC_DRV_BQ32K is not set # CONFIG_RTC_DRV_BQ4802 is not set -CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_CADENCE is not set +# CONFIG_RTC_DRV_CMOS is not set # CONFIG_RTC_DRV_DS1286 is not set # CONFIG_RTC_DRV_DS1302 is not set # CONFIG_RTC_DRV_DS1305 is not set @@ -4114,6 +4290,7 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_RS5C348 is not set # CONFIG_RTC_DRV_RS5C372 is not set # CONFIG_RTC_DRV_RTC7301 is not set +# CONFIG_RTC_DRV_RV3028 is not set # CONFIG_RTC_DRV_RV3029C2 is not set # CONFIG_RTC_DRV_RV8803 is not set # CONFIG_RTC_DRV_RX4581 is not set @@ -4122,6 +4299,7 @@ CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_RX8025 is not set # CONFIG_RTC_DRV_RX8581 is not set # CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_SD3078 is not set # CONFIG_RTC_DRV_SNVS is not set # CONFIG_RTC_DRV_STK17TA8 is not set # CONFIG_RTC_DRV_SUN6I is not set @@ -4232,6 +4410,7 @@ CONFIG_SCSI_DMA=y # CONFIG_SCSI_EATA is not set # CONFIG_SCSI_ESAS2R is not set # CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_FDOMAIN_PCI is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GENERIC_NCR5380 is not set @@ -4257,6 +4436,7 @@ CONFIG_SCSI_MOD=y # CONFIG_SCSI_MVSAS is not set # CONFIG_SCSI_MVSAS_DEBUG is not set # CONFIG_SCSI_MVUMI is not set +# CONFIG_SCSI_MYRB is not set # CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NETLINK is not set # CONFIG_SCSI_NSP32 is not set @@ -4294,6 +4474,7 @@ CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_SECURITYFS is not set CONFIG_SECURITY_DMESG_RESTRICT=y CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_SENSIRION_SGP30 is not set # CONFIG_SENSORS_ABITUGURU is not set # CONFIG_SENSORS_ABITUGURU3 is not set # CONFIG_SENSORS_ACPI_POWER is not set @@ -4321,6 +4502,7 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_AMC6821 is not set # CONFIG_SENSORS_APDS990X is not set # CONFIG_SENSORS_APPLESMC is not set +# CONFIG_SENSORS_AS370 is not set # CONFIG_SENSORS_ASB100 is not set # CONFIG_SENSORS_ASC7621 is not set # CONFIG_SENSORS_ASPEED is not set @@ -4361,9 +4543,13 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_INA209 is not set # CONFIG_SENSORS_INA2XX is not set # CONFIG_SENSORS_INA3221 is not set +# CONFIG_SENSORS_INSPUR_IPSPS is not set # CONFIG_SENSORS_IR35221 is not set +# CONFIG_SENSORS_IR38064 is not set +# CONFIG_SENSORS_IRPS5401 is not set # CONFIG_SENSORS_ISL29018 is not set # CONFIG_SENSORS_ISL29028 is not set +# CONFIG_SENSORS_ISL68137 is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_JC42 is not set # CONFIG_SENSORS_K10TEMP is not set @@ -4430,6 +4616,9 @@ CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_SENSORS_PMBUS is not set # CONFIG_SENSORS_POWR1220 is not set # CONFIG_SENSORS_PWM_FAN is not set +# CONFIG_SENSORS_PXE1610 is not set +# CONFIG_SENSORS_RM3100_I2C is not set +# CONFIG_SENSORS_RM3100_SPI is not set # CONFIG_SENSORS_SCH5627 is not set # CONFIG_SENSORS_SCH5636 is not set # CONFIG_SENSORS_SCH56XX_COMMON is not set @@ -4512,6 +4701,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_DEV_BUS is not set CONFIG_SERIAL_EARLYCON=y # CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not set +# CONFIG_SERIAL_FSL_LINFLEXUART is not set # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set # CONFIG_SERIAL_IFX6X60 is not set @@ -4526,6 +4716,7 @@ CONFIG_SERIAL_EARLYCON=y # CONFIG_SERIAL_SC16IS7XX is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SH_SCI is not set +# CONFIG_SERIAL_SIFIVE is not set # CONFIG_SERIAL_STM32 is not set # CONFIG_SERIAL_ST_ASC is not set # CONFIG_SERIAL_TIMBERDALE is not set @@ -4560,6 +4751,7 @@ CONFIG_SERIAL_EARLYCON=y # CONFIG_SG_POOL is not set # CONFIG_SG_SPLIT is not set CONFIG_SHMEM=y +# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set # CONFIG_SH_ETH is not set # CONFIG_SH_TIMER_CMT is not set # CONFIG_SH_TIMER_MTU2 is not set @@ -4674,6 +4866,7 @@ CONFIG_SND_DRIVERS=y # CONFIG_SND_GUSEXTREME is not set # CONFIG_SND_GUSMAX is not set # CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDA_INTEL_DETECT_DMIC is not set CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 CONFIG_SND_HDA_PREALLOC_SIZE=64 # CONFIG_SND_HDSP is not set @@ -4693,6 +4886,7 @@ CONFIG_SND_HDA_PREALLOC_SIZE=64 # CONFIG_SND_INTERWAVE is not set # CONFIG_SND_INTERWAVE_STB is not set # CONFIG_SND_ISA is not set +# CONFIG_SND_JZ4740_SOC_I2S is not set # CONFIG_SND_KIRKWOOD_SOC is not set # CONFIG_SND_KORG1212 is not set # CONFIG_SND_LAYLA20 is not set @@ -4758,6 +4952,7 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_ADAU1761_SPI is not set # CONFIG_SND_SOC_ADAU7002 is not set # CONFIG_SND_SOC_AK4104 is not set +# CONFIG_SND_SOC_AK4118 is not set # CONFIG_SND_SOC_AK4458 is not set # CONFIG_SND_SOC_AK4554 is not set # CONFIG_SND_SOC_AK4613 is not set @@ -4766,6 +4961,7 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_AK5558 is not set # CONFIG_SND_SOC_ALC5623 is not set # CONFIG_SND_SOC_AMD_ACP is not set +# CONFIG_SND_SOC_AMD_ACP3x is not set # CONFIG_SND_SOC_AU1XAUDIO is not set # CONFIG_SND_SOC_AU1XPSC is not set # CONFIG_SND_SOC_BD28623 is not set @@ -4774,6 +4970,7 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_CS35L33 is not set # CONFIG_SND_SOC_CS35L34 is not set # CONFIG_SND_SOC_CS35L35 is not set +# CONFIG_SND_SOC_CS35L36 is not set # CONFIG_SND_SOC_CS4265 is not set # CONFIG_SND_SOC_CS4270 is not set # CONFIG_SND_SOC_CS4271 is not set @@ -4786,8 +4983,10 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_CS42L73 is not set # CONFIG_SND_SOC_CS42XX8_I2C is not set # CONFIG_SND_SOC_CS43130 is not set +# CONFIG_SND_SOC_CS4341 is not set # CONFIG_SND_SOC_CS4349 is not set # CONFIG_SND_SOC_CS53L30 is not set +# CONFIG_SND_SOC_CX2072X is not set # CONFIG_SND_SOC_DIO2125 is not set # CONFIG_SND_SOC_ES7134 is not set # CONFIG_SND_SOC_ES7241 is not set @@ -4798,7 +4997,9 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_EUKREA_TLV320 is not set # CONFIG_SND_SOC_FSL_ASOC_CARD is not set # CONFIG_SND_SOC_FSL_ASRC is not set +# CONFIG_SND_SOC_FSL_AUDMIX is not set # CONFIG_SND_SOC_FSL_ESAI is not set +# CONFIG_SND_SOC_FSL_MICFIL is not set # CONFIG_SND_SOC_FSL_SAI is not set # CONFIG_SND_SOC_FSL_SPDIF is not set # CONFIG_SND_SOC_FSL_SSI is not set @@ -4810,6 +5011,7 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_IMX_SPDIF is not set # CONFIG_SND_SOC_IMX_WM8962 is not set # CONFIG_SND_SOC_INNO_RK3036 is not set +# CONFIG_SND_SOC_INTEL_APL is not set # CONFIG_SND_SOC_INTEL_BAYTRAIL is not set # CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH is not set # CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH is not set @@ -4821,20 +5023,31 @@ CONFIG_SND_PROC_FS=y # CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH is not set # CONFIG_SND_SOC_INTEL_BYT_MAX98090_MACH is not set # CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH is not set +# CONFIG_SND_SOC_INTEL_CFL is not set # CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH is not set # CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH is not set # CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH is not set # CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH is not set +# CONFIG_SND_SOC_INTEL_CML_H is not set +# CONFIG_SND_SOC_INTEL_CML_LP is not set +# CONFIG_SND_SOC_INTEL_CNL is not set +# CONFIG_SND_SOC_INTEL_GLK is not set # CONFIG_SND_SOC_INTEL_HASWELL is not set +# CONFIG_SND_SOC_INTEL_KBL is not set # CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH is not set # CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH is not set +# CONFIG_SND_SOC_INTEL_SKL is not set # CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH is not set # CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH is not set # CONFIG_SND_SOC_INTEL_SKL_RT286_MACH is not set # CONFIG_SND_SOC_INTEL_SKYLAKE is not set # CONFIG_SND_SOC_INTEL_SST is not set CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y +# CONFIG_SND_SOC_JZ4725B_CODEC is not set +# CONFIG_SND_SOC_JZ4740_CODEC is not set # CONFIG_SND_SOC_MAX9759 is not set +# CONFIG_SND_SOC_MAX98088 is not set +# CONFIG_SND_SOC_MAX98357A is not set # CONFIG_SND_SOC_MAX98373 is not set # CONFIG_SND_SOC_MAX98504 is not set # CONFIG_SND_SOC_MAX9860 is not set @@ -4847,9 +5060,12 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set # CONFIG_SND_SOC_MT2701 is not set # CONFIG_SND_SOC_MT6351 is not set +# CONFIG_SND_SOC_MT6358 is not set # CONFIG_SND_SOC_MT8173 is not set +# CONFIG_SND_SOC_MTK_BTCVSD is not set # CONFIG_SND_SOC_NAU8540 is not set # CONFIG_SND_SOC_NAU8810 is not set +# CONFIG_SND_SOC_NAU8822 is not set # CONFIG_SND_SOC_NAU8824 is not set # CONFIG_SND_SOC_PCM1681 is not set # CONFIG_SND_SOC_PCM1789_I2C is not set @@ -4858,17 +5074,21 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_PCM179X_SPI is not set # CONFIG_SND_SOC_PCM186X_I2C is not set # CONFIG_SND_SOC_PCM186X_SPI is not set +# CONFIG_SND_SOC_PCM3060_I2C is not set +# CONFIG_SND_SOC_PCM3060_SPI is not set # CONFIG_SND_SOC_PCM3168A_I2C is not set # CONFIG_SND_SOC_PCM3168A_SPI is not set # CONFIG_SND_SOC_PCM512x_I2C is not set # CONFIG_SND_SOC_PCM512x_SPI is not set # CONFIG_SND_SOC_QCOM is not set +# CONFIG_SND_SOC_RK3328 is not set # CONFIG_SND_SOC_RT5616 is not set # CONFIG_SND_SOC_RT5631 is not set # CONFIG_SND_SOC_RT5677_SPI is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set # CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set +# CONFIG_SND_SOC_SOF_TOPLEVEL is not set # CONFIG_SND_SOC_SPDIF is not set # CONFIG_SND_SOC_SSM2305 is not set # CONFIG_SND_SOC_SSM2602_I2C is not set @@ -4894,6 +5114,7 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_TS3A227E is not set # CONFIG_SND_SOC_TSCS42XX is not set # CONFIG_SND_SOC_TSCS454 is not set +# CONFIG_SND_SOC_UDA1334 is not set # CONFIG_SND_SOC_WM8510 is not set # CONFIG_SND_SOC_WM8523 is not set # CONFIG_SND_SOC_WM8524 is not set @@ -4911,11 +5132,15 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y # CONFIG_SND_SOC_WM8804_I2C is not set # CONFIG_SND_SOC_WM8804_SPI is not set # CONFIG_SND_SOC_WM8903 is not set +# CONFIG_SND_SOC_WM8904 is not set # CONFIG_SND_SOC_WM8960 is not set # CONFIG_SND_SOC_WM8962 is not set # CONFIG_SND_SOC_WM8974 is not set # CONFIG_SND_SOC_WM8978 is not set # CONFIG_SND_SOC_WM8985 is not set +# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set +# CONFIG_SND_SOC_XILINX_I2S is not set +# CONFIG_SND_SOC_XILINX_SPDIF is not set # CONFIG_SND_SOC_XTFPGA_I2S is not set # CONFIG_SND_SOC_ZX_AUD96P22 is not set # CONFIG_SND_SONICVIBES is not set @@ -5002,6 +5227,9 @@ CONFIG_SND_X86=y # CONFIG_SPI_MEM is not set # CONFIG_SPI_MPC52xx is not set # CONFIG_SPI_MPC52xx_PSC is not set +# CONFIG_SPI_MTK_QUADSPI is not set +# CONFIG_SPI_MXIC is not set +# CONFIG_SPI_NXP_FLEXSPI is not set # CONFIG_SPI_OCTEON is not set # CONFIG_SPI_OC_TINY is not set # CONFIG_SPI_ORION is not set @@ -5012,6 +5240,7 @@ CONFIG_SND_X86=y # CONFIG_SPI_ROCKCHIP is not set # CONFIG_SPI_S3C64XX is not set # CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_SIFIVE is not set # CONFIG_SPI_SLAVE is not set # CONFIG_SPI_SPIDEV is not set # CONFIG_SPI_THUNDERX is not set @@ -5024,6 +5253,7 @@ CONFIG_SND_X86=y # CONFIG_SPI_ZYNQMP_GQSPI is not set CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_SPMI is not set +# CONFIG_SPS30 is not set CONFIG_SQUASHFS=y # CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set # CONFIG_SQUASHFS_DECOMP_MULTI is not set @@ -5092,6 +5322,7 @@ CONFIG_STRIP_ASM_SYMS=y # CONFIG_SUNGEM is not set # CONFIG_SUNRPC is not set # CONFIG_SUNRPC_DEBUG is not set +CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y # CONFIG_SUNRPC_GSS is not set # CONFIG_SUNXI_SRAM is not set # CONFIG_SUN_PARTITION is not set @@ -5180,6 +5411,7 @@ CONFIG_TCP_CONG_CUBIC=y # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set # CONFIG_TEST_BITFIELD is not set # CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_BLACKHOLE_DEV is not set # CONFIG_TEST_BPF is not set # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_HASH is not set @@ -5189,17 +5421,23 @@ CONFIG_TCP_CONG_CUBIC=y # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_LKM is not set +# CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_MEMINIT is not set # CONFIG_TEST_OVERFLOW is not set # CONFIG_TEST_POWER is not set # CONFIG_TEST_PRINTF is not set # CONFIG_TEST_RHASHTABLE is not set # CONFIG_TEST_SORT is not set +# CONFIG_TEST_STACKINIT is not set # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_STRSCPY is not set # CONFIG_TEST_SYSCTL is not set # CONFIG_TEST_UDELAY is not set # CONFIG_TEST_USER_COPY is not set # CONFIG_TEST_UUID is not set +# CONFIG_TEST_VMALLOC is not set +# CONFIG_TEST_XARRAY is not set CONFIG_TEXTSEARCH=y # CONFIG_TEXTSEARCH_BM is not set # CONFIG_TEXTSEARCH_FSM is not set @@ -5214,6 +5452,7 @@ CONFIG_TEXTSEARCH=y # CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set # CONFIG_THERMAL_GOV_USER_SPACE is not set # CONFIG_THERMAL_HWMON is not set +# CONFIG_THERMAL_MMIO is not set # CONFIG_THERMAL_STATISTICS is not set # CONFIG_THERMAL_WRITABLE_TRIPS is not set # CONFIG_THINKPAD_ACPI is not set @@ -5231,6 +5470,13 @@ CONFIG_TICK_ONESHOT=y # CONFIG_TIMB_DMA is not set CONFIG_TIMERFD=y # CONFIG_TIMER_STATS is not set +# CONFIG_TINYDRM_HX8357D is not set +# CONFIG_TINYDRM_ILI9225 is not set +# CONFIG_TINYDRM_ILI9341 is not set +# CONFIG_TINYDRM_MI0283QT is not set +# CONFIG_TINYDRM_REPAPER is not set +# CONFIG_TINYDRM_ST7586 is not set +# CONFIG_TINYDRM_ST7735R is not set CONFIG_TINY_RCU=y # CONFIG_TIPC is not set # CONFIG_TI_ADC081C is not set @@ -5241,15 +5487,20 @@ CONFIG_TINY_RCU=y # CONFIG_TI_ADC128S052 is not set # CONFIG_TI_ADC161S626 is not set # CONFIG_TI_ADS1015 is not set +# CONFIG_TI_ADS124S08 is not set # CONFIG_TI_ADS7950 is not set +# CONFIG_TI_ADS8344 is not set # CONFIG_TI_ADS8688 is not set # CONFIG_TI_AM335X_ADC is not set # CONFIG_TI_CPSW is not set # CONFIG_TI_CPSW_ALE is not set +# CONFIG_TI_CPSW_PHY_SEL is not set # CONFIG_TI_CPTS is not set # CONFIG_TI_DAC082S085 is not set # CONFIG_TI_DAC5571 is not set +# CONFIG_TI_DAC7311 is not set # CONFIG_TI_DAC7512 is not set +# CONFIG_TI_DAC7612 is not set # CONFIG_TI_DAVINCI_CPDMA is not set # CONFIG_TI_DAVINCI_MDIO is not set # CONFIG_TI_ST is not set @@ -5313,6 +5564,7 @@ CONFIG_TMPFS_XATTR=y # CONFIG_TOUCHSCREEN_INEXIO is not set # CONFIG_TOUCHSCREEN_IPAQ_MICRO is not set # CONFIG_TOUCHSCREEN_IPROC is not set +# CONFIG_TOUCHSCREEN_IQS5XX is not set # CONFIG_TOUCHSCREEN_LPC32XX is not set # CONFIG_TOUCHSCREEN_MAX11801 is not set # CONFIG_TOUCHSCREEN_MC13783 is not set @@ -5427,6 +5679,7 @@ CONFIG_TTY=y # CONFIG_TYPHOON is not set # CONFIG_UACCESS_WITH_MEMCPY is not set # CONFIG_UBIFS_ATIME_SUPPORT is not set +# CONFIG_UBIFS_FS_AUTHENTICATION is not set # CONFIG_UBIFS_FS_ENCRYPTION is not set CONFIG_UBIFS_FS_FORMAT4=y # CONFIG_UBIFS_FS_SECURITY is not set @@ -5435,6 +5688,7 @@ CONFIG_UBIFS_FS_FORMAT4=y # CONFIG_UCB1400_CORE is not set # CONFIG_UCSI is not set # CONFIG_UDF_FS is not set +# CONFIG_UDMABUF is not set CONFIG_UEVENT_HELPER=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" # CONFIG_UFS_FS is not set @@ -5443,6 +5697,7 @@ CONFIG_UID16=y # CONFIG_UIO is not set # CONFIG_ULTRA is not set # CONFIG_ULTRIX_PARTITION is not set +# CONFIG_UNICODE is not set # CONFIG_UNISYSSPAR is not set # CONFIG_UNISYS_VISORBUS is not set CONFIG_UNIX=y @@ -5469,14 +5724,17 @@ CONFIG_USB_AN2720=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARMLINUX=y # CONFIG_USB_ATM is not set +CONFIG_USB_AUTOSUSPEND_DELAY=2 # CONFIG_USB_BDC_UDC is not set CONFIG_USB_BELKIN=y # CONFIG_USB_C67X00_HCD is not set # CONFIG_USB_CATC is not set # CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_CDNS3 is not set # CONFIG_USB_CHAOSKEY is not set # CONFIG_USB_CHIPIDEA is not set # CONFIG_USB_CONFIGFS is not set +# CONFIG_USB_CONN_GPIO is not set # CONFIG_USB_CXACRU is not set # CONFIG_USB_CYPRESS_CY7C63 is not set # CONFIG_USB_CYTHERM is not set @@ -5631,6 +5889,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=2 # CONFIG_USB_MXS_PHY is not set # CONFIG_USB_NET2272 is not set # CONFIG_USB_NET2280 is not set +# CONFIG_USB_NET_AQC111 is not set # CONFIG_USB_NET_AX88179_178A is not set # CONFIG_USB_NET_AX8817X is not set # CONFIG_USB_NET_CDCETHER is not set @@ -5808,8 +6067,10 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_U_SERIAL_CONSOLE is not set # CONFIG_V4L_MEM2MEM_DRIVERS is not set # CONFIG_V4L_TEST_DRIVERS is not set +# CONFIG_VALIDATE_FS_PARSER is not set # CONFIG_VBOXGUEST is not set # CONFIG_VCNL4000 is not set +# CONFIG_VCNL4035 is not set # CONFIG_VDSO is not set # CONFIG_VEML6070 is not set # CONFIG_VETH is not set @@ -5833,6 +6094,7 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_VIDEO_ADV7393 is not set # CONFIG_VIDEO_ADV_DEBUG is not set # CONFIG_VIDEO_AK881X is not set +# CONFIG_VIDEO_ASPEED is not set # CONFIG_VIDEO_BT819 is not set # CONFIG_VIDEO_BT848 is not set # CONFIG_VIDEO_BT856 is not set @@ -5877,6 +6139,7 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_VIDEO_OV7670 is not set # CONFIG_VIDEO_OV772X is not set # CONFIG_VIDEO_OV7740 is not set +# CONFIG_VIDEO_OV9640 is not set # CONFIG_VIDEO_PVRUSB2 is not set # CONFIG_VIDEO_RJ54N1 is not set # CONFIG_VIDEO_SAA6588 is not set @@ -5921,6 +6184,7 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # CONFIG_VIDEO_ZORAN is not set # CONFIG_VIRTIO_BALLOON is not set # CONFIG_VIRTIO_BLK_SCSI is not set +# CONFIG_VIRTIO_FS is not set # CONFIG_VIRTIO_INPUT is not set CONFIG_VIRTIO_MENU=y # CONFIG_VIRTIO_MMIO is not set @@ -5930,6 +6194,7 @@ CONFIG_VIRTIO_MENU=y # CONFIG_VIRT_DRIVERS is not set CONFIG_VIRT_TO_BUS=y # CONFIG_VITESSE_PHY is not set +# CONFIG_VL53L0X_I2C is not set # CONFIG_VL6180 is not set CONFIG_VLAN_8021Q=y # CONFIG_VLAN_8021Q_GVRP is not set @@ -5961,6 +6226,7 @@ CONFIG_VMSPLIT_3G=y # CONFIG_W1_MASTER_DS2490 is not set # CONFIG_W1_MASTER_GPIO is not set # CONFIG_W1_MASTER_MATROX is not set +# CONFIG_W1_MASTER_SGI is not set # CONFIG_W1_SLAVE_BQ27000 is not set # CONFIG_W1_SLAVE_DS2405 is not set # CONFIG_W1_SLAVE_DS2406 is not set @@ -5970,6 +6236,7 @@ CONFIG_VMSPLIT_3G=y # CONFIG_W1_SLAVE_DS2431 is not set # CONFIG_W1_SLAVE_DS2433 is not set # CONFIG_W1_SLAVE_DS2438 is not set +# CONFIG_W1_SLAVE_DS250X is not set # CONFIG_W1_SLAVE_DS2760 is not set # CONFIG_W1_SLAVE_DS2780 is not set # CONFIG_W1_SLAVE_DS2781 is not set @@ -5988,6 +6255,7 @@ CONFIG_WATCHDOG=y # CONFIG_WATCHDOG_CORE is not set CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y # CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 # CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set # CONFIG_WATCHDOG_SYSFS is not set # CONFIG_WD80x3 is not set @@ -6060,8 +6328,10 @@ CONFIG_XFRM=y # CONFIG_XILINX_EMACLITE is not set # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_XILINX_LL_TEMAC is not set +# CONFIG_XILINX_SDFEC is not set # CONFIG_XILINX_VCU is not set # CONFIG_XILINX_WATCHDOG is not set +# CONFIG_XILINX_XADC is not set # CONFIG_XILINX_ZYNQMP_DMA is not set # CONFIG_XILLYBUS is not set # CONFIG_XIL_AXIS_FIFO is not set diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 5ace4e0b15..031efe6181 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -2487,7 +2487,9 @@ ar8xxx_phy_read_status(struct phy_device *phydev) struct switch_port_link link; /* check for switch port link changes */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) if (phydev->state == PHY_CHANGELINK) +#endif ar8xxx_check_link_states(priv); if (phydev->mdio.addr != 0) @@ -2628,6 +2630,14 @@ found: priv->use_count++; if (phydev->mdio.addr == 0) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) + linkmode_zero(phydev->supported); + if (ar8xxx_has_gige(priv)) + linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, phydev->supported); + else + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, phydev->supported); + linkmode_copy(phydev->advertising, phydev->supported); +#else if (ar8xxx_has_gige(priv)) { phydev->supported = SUPPORTED_1000baseT_Full; phydev->advertising = ADVERTISED_1000baseT_Full; @@ -2635,6 +2645,7 @@ found: phydev->supported = SUPPORTED_100baseT_Full; phydev->advertising = ADVERTISED_100baseT_Full; } +#endif if (priv->chip->config_at_probe) { priv->phy = phydev; @@ -2645,8 +2656,14 @@ found: } } else { if (ar8xxx_has_gige(priv)) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) + linkmode_zero(phydev->supported); + linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, phydev->supported); + linkmode_copy(phydev->advertising, phydev->supported); +#else phydev->supported |= SUPPORTED_1000baseT_Full; phydev->advertising |= ADVERTISED_1000baseT_Full; +#endif } if (priv->chip->phy_rgmii_set) priv->chip->phy_rgmii_set(priv, phydev); diff --git a/target/linux/generic/hack-5.4/204-module_strip.patch b/target/linux/generic/hack-5.4/204-module_strip.patch index 41bb021e71..d37dfd4f98 100644 --- a/target/linux/generic/hack-5.4/204-module_strip.patch +++ b/target/linux/generic/hack-5.4/204-module_strip.patch @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -160,6 +160,7 @@ extern void cleanup_module(void); +@@ -157,6 +157,7 @@ extern void cleanup_module(void); /* Generic info of form tag = "info" */ #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info) @@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* For userspace: you can also call me... */ #define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias) -@@ -203,12 +204,12 @@ extern void cleanup_module(void); +@@ -216,12 +217,12 @@ extern void cleanup_module(void); * Author(s), use "Name <email>" or just "Name", for multiple * authors use multiple MODULE_AUTHOR() statements/lines. */ @@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* Creates an alias so file2alias.c can find device table. */ #define MODULE_DEVICE_TABLE(type, name) \ extern typeof(name) __mod_##type##__##name##_device_table \ -@@ -235,7 +236,9 @@ extern typeof(name) __mod_##type##__##na +@@ -248,7 +249,9 @@ extern typeof(name) __mod_##type##__##na */ #if defined(MODULE) || !defined(CONFIG_SYSFS) @@ -48,19 +48,19 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +#define MODULE_VERSION(_version) __MODULE_INFO_DISABLED(version) #else #define MODULE_VERSION(_version) \ - static struct module_version_attribute ___modver_attr = { \ -@@ -257,7 +260,7 @@ extern typeof(name) __mod_##type##__##na + MODULE_INFO(version, _version); \ +@@ -271,7 +274,7 @@ extern typeof(name) __mod_##type##__##na /* Optional firmware file (or files) needed by the module * format is simply firmware file name. Multiple firmware * files require multiple MODULE_FIRMWARE() specifiers */ -#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) +#define MODULE_FIRMWARE(_firmware) MODULE_INFO_STRIP(firmware, _firmware) - struct notifier_block; + #define MODULE_IMPORT_NS(ns) MODULE_INFO(import_ns, #ns) --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h -@@ -17,6 +17,16 @@ +@@ -20,10 +20,24 @@ /* Chosen so that structs with an unsigned long line up. */ #define MAX_PARAM_PREFIX_LEN (64 - sizeof(unsigned long)) @@ -74,20 +74,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +#define __MODULE_INFO_STRIP(tag, name, info) __MODULE_INFO(tag, name, info) +#endif + - #ifdef MODULE ++#ifdef MODULE #define __MODULE_INFO(tag, name, info) \ static const char __UNIQUE_ID(name)[] \ -@@ -24,8 +34,7 @@ static const char __UNIQUE_ID(name)[] - = __stringify(tag) "=" info - #else /* !MODULE */ - /* This struct is here for syntactic coherency, it is not used */ --#define __MODULE_INFO(tag, name, info) \ -- struct __UNIQUE_ID(name) {} + __used __attribute__((section(".modinfo"), unused, aligned(1))) \ + = __MODULE_INFO_PREFIX __stringify(tag) "=" info ++#else +#define __MODULE_INFO(tag, name, info) __MODULE_INFO_DISABLED(name) - #endif ++#endif + #define __MODULE_PARM_TYPE(name, _type) \ __MODULE_INFO(parmtype, name##type, #name ":" _type) -@@ -33,7 +42,7 @@ static const char __UNIQUE_ID(name)[] +@@ -31,7 +45,7 @@ static const char __UNIQUE_ID(name)[] /* One for each parameter, describing how to use it. Some files do multiple of these per line, so can't just use MODULE_INFO. */ #define MODULE_PARM_DESC(_parm, desc) \ @@ -98,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/init/Kconfig +++ b/init/Kconfig -@@ -1997,6 +1997,13 @@ config TRIM_UNUSED_KSYMS +@@ -2233,6 +2233,13 @@ config TRIM_UNUSED_KSYMS If unsure, or if you need to build out-of-tree modules, say N. @@ -114,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> config MODULES_TREE_LOOKUP --- a/kernel/module.c +++ b/kernel/module.c -@@ -3029,9 +3029,11 @@ static int setup_load_info(struct load_i +@@ -3107,9 +3107,11 @@ static int setup_load_info(struct load_i static int check_modinfo(struct module *mod, struct load_info *info, int flags) { @@ -127,7 +125,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (flags & MODULE_INIT_IGNORE_VERMAGIC) modmagic = NULL; -@@ -3052,6 +3054,7 @@ static int check_modinfo(struct module * +@@ -3130,6 +3132,7 @@ static int check_modinfo(struct module * mod->name); add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK); } @@ -137,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c -@@ -1983,7 +1983,9 @@ static void read_symbols(const char *mod +@@ -2051,7 +2051,9 @@ static void read_symbols(const char *mod symname = remove_dot(info.strtab + sym->st_name); handle_modversions(mod, &info, sym, symname); @@ -145,9 +143,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> handle_moddevtable(mod, &info, sym, symname); +#endif } - if (!is_vmlinux(modname) || vmlinux_section_warnings) - check_sec_ref(mod, modname, &info); -@@ -2146,8 +2148,10 @@ static void add_header(struct buffer *b, + + /* Apply symbol namespaces from __kstrtabns_<symbol> entries. */ +@@ -2265,8 +2267,10 @@ static void add_header(struct buffer *b, buf_printf(b, "\n"); buf_printf(b, "BUILD_SALT;\n"); buf_printf(b, "\n"); @@ -157,8 +155,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +#endif buf_printf(b, "\n"); buf_printf(b, "__visible struct module __this_module\n"); - buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n"); -@@ -2164,8 +2168,10 @@ static void add_header(struct buffer *b, + buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n"); +@@ -2283,8 +2287,10 @@ static void add_header(struct buffer *b, static void add_intree_flag(struct buffer *b, int is_intree) { @@ -169,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } /* Cannot check for assembler */ -@@ -2178,8 +2184,10 @@ static void add_retpoline(struct buffer +@@ -2297,8 +2303,10 @@ static void add_retpoline(struct buffer static void add_staging_flag(struct buffer *b, const char *name) { @@ -180,7 +178,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } /** -@@ -2278,11 +2286,13 @@ static void add_depends(struct buffer *b +@@ -2382,11 +2390,13 @@ static void add_depends(struct buffer *b static void add_srcversion(struct buffer *b, struct module *mod) { @@ -194,10 +192,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } static void write_if_changed(struct buffer *b, const char *fname) -@@ -2519,7 +2529,9 @@ int main(int argc, char **argv) +@@ -2656,7 +2666,9 @@ int main(int argc, char **argv) add_staging_flag(&buf, mod->name); err |= add_versions(&buf, mod); - add_depends(&buf, mod, modules); + add_depends(&buf, mod); +#ifndef CONFIG_MODULE_STRIPPED add_moddevtable(&buf, mod); +#endif diff --git a/target/linux/generic/hack-5.4/207-disable-modorder.patch b/target/linux/generic/hack-5.4/207-disable-modorder.patch deleted file mode 100644 index f47da3f24e..0000000000 --- a/target/linux/generic/hack-5.4/207-disable-modorder.patch +++ /dev/null @@ -1,44 +0,0 @@ -From c9ef4ab0f54356ee9f91d9676ea0ec123840ddc7 Mon Sep 17 00:00:00 2001 -From: Felix Fietkau <nbd@nbd.name> -Date: Fri, 7 Jul 2017 16:57:33 +0200 -Subject: kernel: do not build modules.order - -It is not needed for anything on the system and skipping this saves some -build time, especially in cases where there is nothing to do. - -lede-commit: afc1675833a7bf5df094f59f7250369520646d04 -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - Makefile | 2 -- - scripts/Makefile.build | 2 +- - 2 files changed, 1 insertion(+), 3 deletions(-) - ---- a/Makefile -+++ b/Makefile -@@ -1232,7 +1232,6 @@ all: modules - - PHONY += modules - modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin -- $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order - @$(kecho) ' Building modules, stage 2.'; - $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost - -@@ -1261,7 +1260,6 @@ _modinst_: - rm -f $(MODLIB)/build ; \ - ln -s $(CURDIR) $(MODLIB)/build ; \ - fi -- @cp -f $(objtree)/modules.order $(MODLIB)/ - @cp -f $(objtree)/modules.builtin $(MODLIB)/ - $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst - ---- a/scripts/Makefile.build -+++ b/scripts/Makefile.build -@@ -78,7 +78,7 @@ modorder-target := $(obj)/modules.order - # We keep a list of all modules in $(MODVERDIR) - - __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \ -- $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \ -+ $(if $(KBUILD_MODULES),$(obj-m)) \ - $(subdir-ym) $(always) - @: - diff --git a/target/linux/generic/hack-5.4/214-spidev_h_portability.patch b/target/linux/generic/hack-5.4/214-spidev_h_portability.patch index 093f600c85..415e9a423c 100644 --- a/target/linux/generic/hack-5.4/214-spidev_h_portability.patch +++ b/target/linux/generic/hack-5.4/214-spidev_h_portability.patch @@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/uapi/linux/spi/spidev.h +++ b/include/uapi/linux/spi/spidev.h -@@ -113,7 +113,7 @@ struct spi_ioc_transfer { +@@ -117,7 +117,7 @@ struct spi_ioc_transfer { /* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */ #define SPI_MSGSIZE(N) \ diff --git a/target/linux/generic/hack-5.4/220-gc_sections.patch b/target/linux/generic/hack-5.4/220-gc_sections.patch index 77422e821b..fbac74c111 100644 --- a/target/linux/generic/hack-5.4/220-gc_sections.patch +++ b/target/linux/generic/hack-5.4/220-gc_sections.patch @@ -19,45 +19,19 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> include/asm-generic/vmlinux.lds.h | 63 ++++++++++++++++++++------------------- 7 files changed, 55 insertions(+), 51 deletions(-) ---- a/Makefile -+++ b/Makefile -@@ -294,6 +294,11 @@ else - scripts/Kbuild.include: ; - include scripts/Kbuild.include - -+ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION -+KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections -+LDFLAGS_vmlinux += --gc-sections -+endif -+ - # Read KERNELRELEASE from include/config/kernel.release (if it exists) - KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) - KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) -@@ -782,11 +787,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH - KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) - endif - --ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION --KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections --LDFLAGS_vmlinux += --gc-sections --endif -- - # arch Makefile may override CC so keep this after arch Makefile is included - NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) - --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -98,6 +98,7 @@ config ARM +@@ -111,6 +111,7 @@ config ARM select HAVE_UID16 select HAVE_VIRT_CPU_ACCOUNTING_GEN select IRQ_FORCED_THREADING + select HAVE_LD_DEAD_CODE_DATA_ELIMINATION select MODULES_USE_ELF_REL select NEED_DMA_MAP_STATE - select NO_BOOTMEM + select OF_EARLY_FLATTREE if OF --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile -@@ -106,6 +106,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y) +@@ -107,6 +107,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y) ORIG_CFLAGS := $(KBUILD_CFLAGS) KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) endif @@ -160,33 +134,3 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> } \ . = __stubs_start + SIZEOF(.stubs); \ __stubs_end = .; \ ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -43,6 +43,7 @@ config MIPS - select HAVE_ARCH_TRANSPARENT_HUGEPAGE if CPU_SUPPORTS_HUGEPAGES && 64BIT - select HAVE_CBPF_JIT if (!64BIT && !CPU_MICROMIPS) - select HAVE_EBPF_JIT if (64BIT && !CPU_MICROMIPS) -+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION - select HAVE_CONTEXT_TRACKING - select HAVE_COPY_THREAD_TLS - select HAVE_C_RECORDMCOUNT ---- a/arch/mips/kernel/vmlinux.lds.S -+++ b/arch/mips/kernel/vmlinux.lds.S -@@ -72,7 +72,7 @@ SECTIONS - /* Exception table for data bus errors */ - __dbe_table : { - __start___dbe_table = .; -- *(__dbe_table) -+ KEEP(*(__dbe_table)) - __stop___dbe_table = .; - } - -@@ -123,7 +123,7 @@ SECTIONS - . = ALIGN(4); - .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) { - __mips_machines_start = .; -- *(.mips.machines.init) -+ KEEP(*(.mips.machines.init)) - __mips_machines_end = .; - } - diff --git a/target/linux/generic/hack-5.4/221-module_exports.patch b/target/linux/generic/hack-5.4/221-module_exports.patch index cd5ae5830c..a0b7903ecf 100644 --- a/target/linux/generic/hack-5.4/221-module_exports.patch +++ b/target/linux/generic/hack-5.4/221-module_exports.patch @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* Align . to a 8 byte boundary equals to maximum function alignment. */ #define ALIGN_FUNCTION() . = ALIGN(8) -@@ -372,14 +382,14 @@ +@@ -405,14 +415,14 @@ /* Kernel symbol table: Normal symbols */ \ __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ __start___ksymtab = .; \ @@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> __stop___ksymtab_gpl = .; \ } \ \ -@@ -441,7 +451,7 @@ +@@ -474,7 +484,7 @@ \ /* Kernel symbol table: strings */ \ __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } \ \ /* __*init sections */ \ -@@ -841,6 +851,8 @@ +@@ -865,6 +875,8 @@ EXIT_TEXT \ EXIT_DATA \ EXIT_CALL \ @@ -64,12 +64,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + SYMTAB_DISCARD_GPL \ *(.discard) \ *(.discard.*) \ - } + *(.modinfo) \ --- a/include/linux/export.h +++ b/include/linux/export.h -@@ -74,12 +74,19 @@ struct kernel_symbol { - }; - #endif +@@ -98,18 +98,26 @@ struct kernel_symbol { + + #else +#ifdef MODULE +#define __EXPORT_SUFFIX(sym) @@ -77,20 +77,28 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +#define __EXPORT_SUFFIX(sym) "+" #sym +#endif + - /* For every exported symbol, place a struct in the __ksymtab section */ - #define ___EXPORT_SYMBOL(sym, sec) \ + #define ___export_symbol_common(sym, sec) \ extern typeof(sym) sym; \ - __CRC_SYMBOL(sym, sec) \ + __CRC_SYMBOL(sym, sec); \ static const char __kstrtab_##sym[] \ - __attribute__((section("__ksymtab_strings"), used, aligned(1))) \ + __attribute__((section("__ksymtab_strings" \ + __EXPORT_SUFFIX(sym)), used, aligned(1))) \ - = #sym; \ - __KSYMTAB_ENTRY(sym, sec) + = #sym \ + + /* For every exported symbol, place a struct in the __ksymtab section */ + #define ___EXPORT_SYMBOL_NS(sym, sec, ns) \ + ___export_symbol_common(sym, sec); \ + static const char __kstrtabns_##sym[] \ +- __attribute__((section("__ksymtab_strings"), used, aligned(1))) \ ++ __attribute__((section("__ksymtab_strings" \ ++ __EXPORT_SUFFIX(sym)), used, aligned(1))) \ + = #ns; \ + __KSYMTAB_ENTRY_NS(sym, sec) --- a/scripts/Makefile.build +++ b/scripts/Makefile.build -@@ -408,7 +408,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $( +@@ -362,7 +362,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $( # Linker scripts preprocessor (.lds.S -> .lds) # --------------------------------------------------------------------------- quiet_cmd_cpp_lds_S = LDS $@ diff --git a/target/linux/generic/hack-5.4/230-openwrt_lzma_options.patch b/target/linux/generic/hack-5.4/230-openwrt_lzma_options.patch index 1e945cd4c1..c63d9d276c 100644 --- a/target/linux/generic/hack-5.4/230-openwrt_lzma_options.patch +++ b/target/linux/generic/hack-5.4/230-openwrt_lzma_options.patch @@ -23,15 +23,15 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org> { {0x02, 0x21}, "lz4", unlz4 }, --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib -@@ -325,7 +325,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) +@@ -342,7 +342,7 @@ quiet_cmd_bzip2 = BZIP2 $@ + # --------------------------------------------------------------------------- quiet_cmd_lzma = LZMA $@ - cmd_lzma = (cat $(filter-out FORCE,$^) | \ -- lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \ -+ lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \ - (rm -f $@ ; false) +- cmd_lzma = { cat $(real-prereqs) | lzma -9; $(size_append); } > $@ ++ cmd_lzma = { cat $(real-prereqs) | lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so; $(size_append); } > $@ quiet_cmd_lzo = LZO $@ + cmd_lzo = { cat $(real-prereqs) | lzop -9; $(size_append); } > $@ --- a/usr/gen_initramfs_list.sh +++ b/usr/gen_initramfs_list.sh @@ -229,7 +229,7 @@ cpio_list= diff --git a/target/linux/generic/hack-5.4/250-netfilter_depends.patch b/target/linux/generic/hack-5.4/250-netfilter_depends.patch index cb744bd8ab..512e58efcf 100644 --- a/target/linux/generic/hack-5.4/250-netfilter_depends.patch +++ b/target/linux/generic/hack-5.4/250-netfilter_depends.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -241,7 +241,6 @@ config NF_CONNTRACK_FTP +@@ -240,7 +240,6 @@ config NF_CONNTRACK_FTP config NF_CONNTRACK_H323 tristate "H.323 protocol support" @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> depends on NETFILTER_ADVANCED help H.323 is a VoIP signalling protocol from ITU-T. As one of the most -@@ -1077,7 +1076,6 @@ config NETFILTER_XT_TARGET_SECMARK +@@ -1100,7 +1099,6 @@ config NETFILTER_XT_TARGET_SECMARK config NETFILTER_XT_TARGET_TCPMSS tristate '"TCPMSS" target support' diff --git a/target/linux/generic/hack-5.4/251-sound_kconfig.patch b/target/linux/generic/hack-5.4/251-sound_kconfig.patch index 2cfc2fab3a..bcc6e5476b 100644 --- a/target/linux/generic/hack-5.4/251-sound_kconfig.patch +++ b/target/linux/generic/hack-5.4/251-sound_kconfig.patch @@ -43,8 +43,8 @@ Signed-off-by: John Crispin <john@phrozen.org> select CRYPTO_BLKCIPHER2 select CRYPTO_ALGAPI -@@ -64,7 +64,7 @@ config CRYPTO_BLKCIPHER2 - select CRYPTO_WORKQUEUE +@@ -63,7 +63,7 @@ config CRYPTO_BLKCIPHER2 + select CRYPTO_RNG2 config CRYPTO_HASH - tristate @@ -52,7 +52,7 @@ Signed-off-by: John Crispin <john@phrozen.org> select CRYPTO_HASH2 select CRYPTO_ALGAPI -@@ -73,7 +73,7 @@ config CRYPTO_HASH2 +@@ -72,7 +72,7 @@ config CRYPTO_HASH2 select CRYPTO_ALGAPI2 config CRYPTO_RNG @@ -73,7 +73,7 @@ Signed-off-by: John Crispin <john@phrozen.org> bool --- a/drivers/ssb/Kconfig +++ b/drivers/ssb/Kconfig -@@ -28,6 +28,7 @@ config SSB_SPROM +@@ -29,6 +29,7 @@ config SSB_SPROM config SSB_BLOCKIO bool depends on SSB @@ -81,7 +81,7 @@ Signed-off-by: John Crispin <john@phrozen.org> config SSB_PCIHOST_POSSIBLE bool -@@ -48,7 +49,7 @@ config SSB_PCIHOST +@@ -49,7 +50,7 @@ config SSB_PCIHOST config SSB_B43_PCI_BRIDGE bool depends on SSB_PCIHOST @@ -92,7 +92,7 @@ Signed-off-by: John Crispin <john@phrozen.org> bool --- a/lib/Kconfig +++ b/lib/Kconfig -@@ -377,16 +377,16 @@ config BCH_CONST_T +@@ -402,16 +402,16 @@ config BCH_CONST_T # Textsearch support is select'ed if needed # config TEXTSEARCH @@ -115,7 +115,7 @@ Signed-off-by: John Crispin <john@phrozen.org> bool --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -10,7 +10,7 @@ config NETFILTER_INGRESS +@@ -11,7 +11,7 @@ config NETFILTER_INGRESS infrastructure. config NETFILTER_NETLINK @@ -126,14 +126,15 @@ Signed-off-by: John Crispin <john@phrozen.org> bool --- a/net/wireless/Kconfig +++ b/net/wireless/Kconfig -@@ -1,5 +1,5 @@ +@@ -1,6 +1,6 @@ + # SPDX-License-Identifier: GPL-2.0-only config WIRELESS_EXT - bool + bool "Wireless extensions" config WEXT_CORE def_bool y -@@ -11,10 +11,10 @@ config WEXT_PROC +@@ -12,10 +12,10 @@ config WEXT_PROC depends on WEXT_CORE config WEXT_SPY @@ -146,7 +147,7 @@ Signed-off-by: John Crispin <john@phrozen.org> config CFG80211 tristate "cfg80211 - wireless configuration API" -@@ -202,7 +202,7 @@ config CFG80211_WEXT_EXPORT +@@ -203,7 +203,7 @@ config CFG80211_WEXT_EXPORT endif # CFG80211 config LIB80211 @@ -155,29 +156,29 @@ Signed-off-by: John Crispin <john@phrozen.org> default n help This options enables a library of common routines used -@@ -211,13 +211,16 @@ config LIB80211 +@@ -212,16 +212,16 @@ config LIB80211 Drivers should select this themselves if needed. config LIB80211_CRYPT_WEP - tristate + tristate "LIB80211_CRYPT_WEP" -+ select LIB80211 + select CRYPTO_LIB_ARC4 config LIB80211_CRYPT_CCMP - tristate + tristate "LIB80211_CRYPT_CCMP" -+ select LIB80211 + select CRYPTO_AES + select CRYPTO_CCM config LIB80211_CRYPT_TKIP - tristate + tristate "LIB80211_CRYPT_TKIP" -+ select LIB80211 + select CRYPTO_LIB_ARC4 config LIB80211_DEBUG - bool "lib80211 debugging messages" --- a/sound/core/Kconfig +++ b/sound/core/Kconfig -@@ -16,7 +16,7 @@ config SND_DMAENGINE_PCM +@@ -17,7 +17,7 @@ config SND_DMAENGINE_PCM tristate config SND_HWDEP @@ -186,7 +187,7 @@ Signed-off-by: John Crispin <john@phrozen.org> config SND_SEQ_DEVICE tristate -@@ -26,7 +26,7 @@ config SND_RAWMIDI +@@ -27,7 +27,7 @@ config SND_RAWMIDI select SND_SEQ_DEVICE if SND_SEQUENCER != n config SND_COMPRESS_OFFLOAD diff --git a/target/linux/generic/hack-5.4/259-regmap_dynamic.patch b/target/linux/generic/hack-5.4/259-regmap_dynamic.patch index ec4636dbee..9950f156d3 100644 --- a/target/linux/generic/hack-5.4/259-regmap_dynamic.patch +++ b/target/linux/generic/hack-5.4/259-regmap_dynamic.patch @@ -18,14 +18,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> # subsystems should select the appropriate symbols. config REGMAP -- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ) +- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SCCB || REGMAP_I3C) select IRQ_DOMAIN if REGMAP_IRQ - bool + tristate config REGCACHE_COMPRESSED select LZO_COMPRESS -@@ -18,6 +17,7 @@ config REGMAP_AC97 +@@ -18,38 +17,49 @@ config REGMAP_AC97 config REGMAP_I2C tristate @@ -33,7 +33,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> depends on I2C config REGMAP_SLIMBUS -@@ -26,20 +26,26 @@ config REGMAP_SLIMBUS + tristate ++ select REGMAP + depends on SLIMBUS config REGMAP_SPI tristate @@ -42,13 +44,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> depends on SPI config REGMAP_SPMI -+ select REGMAP tristate ++ select REGMAP depends on SPMI config REGMAP_W1 -+ select REGMAP tristate ++ select REGMAP depends on W1 config REGMAP_MMIO @@ -56,10 +58,23 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + select REGMAP config REGMAP_IRQ -+ select REGMAP bool ++ select REGMAP config REGMAP_SOUNDWIRE + tristate ++ select REGMAP + depends on SOUNDWIRE + + config REGMAP_SCCB + tristate ++ select REGMAP + depends on I2C + + config REGMAP_I3C + tristate ++ select REGMAP + depends on I3C --- a/drivers/base/regmap/Makefile +++ b/drivers/base/regmap/Makefile @@ -2,10 +2,14 @@ @@ -83,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> obj-$(CONFIG_REGMAP_SLIMBUS) += regmap-slimbus.o --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c -@@ -13,6 +13,7 @@ +@@ -9,6 +9,7 @@ #include <linux/device.h> #include <linux/slab.h> #include <linux/export.h> @@ -91,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #include <linux/mutex.h> #include <linux/err.h> #include <linux/of.h> -@@ -3039,3 +3040,5 @@ static int __init regmap_initcall(void) +@@ -3124,3 +3125,5 @@ static int __init regmap_initcall(void) return 0; } postcore_initcall(regmap_initcall); @@ -99,7 +114,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +MODULE_LICENSE("GPL"); --- a/include/linux/regmap.h +++ b/include/linux/regmap.h -@@ -187,7 +187,7 @@ struct reg_sequence { +@@ -185,7 +185,7 @@ struct reg_sequence { pollret ?: ((cond) ? 0 : -ETIMEDOUT); \ }) diff --git a/target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch b/target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch index f11f45437f..c9caa2733a 100644 --- a/target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch +++ b/target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/crypto/Kconfig +++ b/crypto/Kconfig -@@ -144,13 +144,13 @@ config CRYPTO_MANAGER +@@ -120,13 +120,13 @@ config CRYPTO_MANAGER cbc(aes). config CRYPTO_MANAGER2 @@ -35,17 +35,27 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> config CRYPTO_USER tristate "Userspace cryptographic algorithm configuration" -@@ -163,7 +163,6 @@ config CRYPTO_USER +@@ -136,8 +136,6 @@ config CRYPTO_USER + Userspace configuration for cryptographic instantiations such as + cbc(aes). + +-if CRYPTO_MANAGER2 +- config CRYPTO_MANAGER_DISABLE_TESTS bool "Disable run-time self tests" default y -- depends on CRYPTO_MANAGER2 - help +@@ -145,6 +143,8 @@ config CRYPTO_MANAGER_DISABLE_TESTS Disable run-time self tests that normally take place at algorithm registration. + ++if CRYPTO_MANAGER2 ++ + config CRYPTO_MANAGER_EXTRA_TESTS + bool "Enable extra run-time crypto self tests" + depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS --- a/crypto/algboss.c +++ b/crypto/algboss.c -@@ -247,8 +247,12 @@ static int cryptomgr_schedule_test(struc +@@ -242,8 +242,12 @@ static int cryptomgr_schedule_test(struc type = alg->cra_flags; /* Do not test internal algorithms. */ diff --git a/target/linux/generic/hack-5.4/260-lib-arc4-unhide.patch b/target/linux/generic/hack-5.4/260-lib-arc4-unhide.patch new file mode 100644 index 0000000000..b518ee2c37 --- /dev/null +++ b/target/linux/generic/hack-5.4/260-lib-arc4-unhide.patch @@ -0,0 +1,15 @@ +This makes it possible to select CONFIG_CRYPTO_LIB_ARC4 directly. We +need this to be able to compile this into the kernel and make use of it +from backports. + +--- a/crypto/Kconfig ++++ b/crypto/Kconfig +@@ -1151,7 +1151,7 @@ config CRYPTO_ANUBIS + <http://www.larc.usp.br/~pbarreto/AnubisPage.html> + + config CRYPTO_LIB_ARC4 +- tristate ++ tristate "ARC4 cipher library" + + config CRYPTO_ARC4 + tristate "ARC4 cipher algorithm" diff --git a/target/linux/generic/hack-5.4/280-rfkill-stubs.patch b/target/linux/generic/hack-5.4/280-rfkill-stubs.patch index 7bb7d26b90..2e48aea1cf 100644 --- a/target/linux/generic/hack-5.4/280-rfkill-stubs.patch +++ b/target/linux/generic/hack-5.4/280-rfkill-stubs.patch @@ -37,7 +37,7 @@ Signed-off-by: John Crispin <john@phrozen.org> ifneq ($(CONFIG_DCB),) --- a/net/rfkill/Kconfig +++ b/net/rfkill/Kconfig -@@ -1,7 +1,11 @@ +@@ -2,7 +2,11 @@ # # RF switch subsystem configuration # @@ -50,7 +50,7 @@ Signed-off-by: John Crispin <john@phrozen.org> tristate "RF switch subsystem support" help Say Y here if you want to have control over RF switches -@@ -13,19 +17,19 @@ menuconfig RFKILL +@@ -14,19 +18,19 @@ menuconfig RFKILL # LED trigger support config RFKILL_LEDS bool @@ -75,7 +75,7 @@ Signed-off-by: John Crispin <john@phrozen.org> help --- a/net/rfkill/Makefile +++ b/net/rfkill/Makefile -@@ -4,5 +4,5 @@ +@@ -5,5 +5,5 @@ rfkill-y += core.o rfkill-$(CONFIG_RFKILL_INPUT) += input.o diff --git a/target/linux/generic/hack-5.4/290-nvmem-make-CONFIG_NVMEM-tristate-again.patch b/target/linux/generic/hack-5.4/290-nvmem-make-CONFIG_NVMEM-tristate-again.patch index ad45dc9168..4b4d6438dc 100644 --- a/target/linux/generic/hack-5.4/290-nvmem-make-CONFIG_NVMEM-tristate-again.patch +++ b/target/linux/generic/hack-5.4/290-nvmem-make-CONFIG_NVMEM-tristate-again.patch @@ -14,7 +14,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig -@@ -1,5 +1,5 @@ +@@ -1,6 +1,6 @@ + # SPDX-License-Identifier: GPL-2.0-only menuconfig NVMEM - bool "NVMEM Support" + tristate "NVMEM Support" @@ -23,7 +24,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig -@@ -71,6 +71,7 @@ config OF_IRQ +@@ -72,6 +72,7 @@ config OF_IRQ config OF_NET depends on NETDEVICES diff --git a/target/linux/generic/hack-5.4/300-MIPS-r4k_cache-use-more-efficient-cache-blast.patch b/target/linux/generic/hack-5.4/300-MIPS-r4k_cache-use-more-efficient-cache-blast.patch index c07ccf9474..aed08a5ec9 100644 --- a/target/linux/generic/hack-5.4/300-MIPS-r4k_cache-use-more-efficient-cache-blast.patch +++ b/target/linux/generic/hack-5.4/300-MIPS-r4k_cache-use-more-efficient-cache-blast.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- --- a/arch/mips/include/asm/r4kcache.h +++ b/arch/mips/include/asm/r4kcache.h -@@ -683,16 +683,48 @@ static inline void prot##extra##blast_## +@@ -617,14 +617,46 @@ static inline void prot##extra##blast_## unsigned long end) \ { \ unsigned long lsize = cpu_##desc##_line_size(); \ @@ -26,8 +26,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + unsigned long aend = (end + lsize - 1) & ~(lsize - 1); \ + int lines = (aend - addr) / lsize; \ \ - __##pfx##flush_prologue \ - \ - while (1) { \ + while (lines >= 8) { \ + prot##cache_op(hitop, addr); \ @@ -62,5 +60,5 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - break; \ - addr += lsize; \ } \ - \ - __##pfx##flush_epilogue \ + } + diff --git a/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch b/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch index da7d1fdbe0..a6daf1bdbf 100644 --- a/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch +++ b/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig -@@ -1144,6 +1144,10 @@ config SYNC_R4K +@@ -1156,6 +1156,10 @@ config SYNC_R4K config MIPS_MACHINE def_bool n @@ -25,7 +25,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> +++ b/arch/mips/kernel/head.S @@ -79,6 +79,12 @@ FEXPORT(__kernel_entry) j kernel_entry - #endif + #endif /* CONFIG_BOOT_RAW */ +#ifdef CONFIG_IMAGE_CMDLINE_HACK + .ascii "CMDLINE:" diff --git a/target/linux/generic/hack-5.4/321-powerpc_crtsavres_prereq.patch b/target/linux/generic/hack-5.4/321-powerpc_crtsavres_prereq.patch index 26c385f011..8591705eae 100644 --- a/target/linux/generic/hack-5.4/321-powerpc_crtsavres_prereq.patch +++ b/target/linux/generic/hack-5.4/321-powerpc_crtsavres_prereq.patch @@ -16,7 +16,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com> --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile -@@ -60,20 +60,6 @@ machine-$(CONFIG_PPC64) += 64 +@@ -61,20 +61,6 @@ machine-$(CONFIG_PPC64) += 64 machine-$(CONFIG_CPU_LITTLE_ENDIAN) += le UTS_MACHINE := $(subst $(space),,$(machine-y)) @@ -24,7 +24,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com> -ifdef CONFIG_PPC32 -KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o -else --KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/powerpc/kernel/module.lds +-KBUILD_LDS_MODULE += $(srctree)/arch/powerpc/kernel/module.lds -ifeq ($(call ld-ifversion, -ge, 225000000, y),y) -# Have the linker provide sfpr if possible. -# There is a corresponding test in arch/powerpc/lib/Makefile diff --git a/target/linux/generic/hack-5.4/550-loop-Report-EOPNOTSUPP-properly.patch b/target/linux/generic/hack-5.4/550-loop-Report-EOPNOTSUPP-properly.patch index 023de0078d..479513bf54 100644 --- a/target/linux/generic/hack-5.4/550-loop-Report-EOPNOTSUPP-properly.patch +++ b/target/linux/generic/hack-5.4/550-loop-Report-EOPNOTSUPP-properly.patch @@ -18,7 +18,7 @@ Reviewed-by: Bart Van Assche <bvanassche@acm.org> --- a/drivers/block/loop.c +++ b/drivers/block/loop.c -@@ -460,7 +460,7 @@ static void lo_complete_rq(struct reques +@@ -461,7 +461,7 @@ static void lo_complete_rq(struct reques if (!cmd->use_aio || cmd->ret < 0 || cmd->ret == blk_rq_bytes(rq) || req_op(rq) != REQ_OP_READ) { if (cmd->ret < 0) @@ -27,7 +27,7 @@ Reviewed-by: Bart Van Assche <bvanassche@acm.org> goto end_io; } -@@ -1904,7 +1904,10 @@ static void loop_handle_cmd(struct loop_ +@@ -1950,7 +1950,10 @@ static void loop_handle_cmd(struct loop_ failed: /* complete non-aio request */ if (!cmd->use_aio || ret) { diff --git a/target/linux/generic/hack-5.4/551-loop-Better-discard-support-for-block-devices.patch b/target/linux/generic/hack-5.4/551-loop-Better-discard-support-for-block-devices.patch index ac393e5f13..38091290aa 100644 --- a/target/linux/generic/hack-5.4/551-loop-Better-discard-support-for-block-devices.patch +++ b/target/linux/generic/hack-5.4/551-loop-Better-discard-support-for-block-devices.patch @@ -28,7 +28,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> --- a/drivers/block/loop.c +++ b/drivers/block/loop.c -@@ -426,11 +426,12 @@ static int lo_fallocate(struct loop_devi +@@ -427,11 +427,12 @@ static int lo_fallocate(struct loop_devi * information. */ struct file *file = lo->lo_backing_file; @@ -42,7 +42,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> ret = -EOPNOTSUPP; goto out; } -@@ -863,6 +864,21 @@ static void loop_config_discard(struct l +@@ -862,6 +863,21 @@ static void loop_config_discard(struct l struct file *file = lo->lo_backing_file; struct inode *inode = file->f_mapping->host; struct request_queue *q = lo->lo_queue; @@ -64,7 +64,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> /* * We use punch hole to reclaim the free space used by the -@@ -870,22 +886,24 @@ static void loop_config_discard(struct l +@@ -869,22 +885,24 @@ static void loop_config_discard(struct l * encryption is enabled, because it may give an attacker * useful information. */ diff --git a/target/linux/generic/hack-5.4/640-bridge-only-accept-EAP-locally.patch b/target/linux/generic/hack-5.4/640-bridge-only-accept-EAP-locally.patch index f77a1965ca..a713aa3cff 100644 --- a/target/linux/generic/hack-5.4/640-bridge-only-accept-EAP-locally.patch +++ b/target/linux/generic/hack-5.4/640-bridge-only-accept-EAP-locally.patch @@ -12,7 +12,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com> --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c -@@ -108,10 +108,14 @@ int br_handle_frame_finish(struct net *n +@@ -103,10 +103,14 @@ int br_handle_frame_finish(struct net *n } } @@ -30,7 +30,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com> if (IS_ENABLED(CONFIG_INET) && --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h -@@ -337,6 +337,8 @@ struct net_bridge { +@@ -345,6 +345,8 @@ struct net_bridge { u16 group_fwd_mask; u16 group_fwd_mask_required; @@ -41,7 +41,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com> bridge_id bridge_id; --- a/net/bridge/br_sysfs_br.c +++ b/net/bridge/br_sysfs_br.c -@@ -170,6 +170,30 @@ static ssize_t group_fwd_mask_store(stru +@@ -166,6 +166,30 @@ static ssize_t group_fwd_mask_store(stru } static DEVICE_ATTR_RW(group_fwd_mask); @@ -72,7 +72,7 @@ Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com> static ssize_t priority_show(struct device *d, struct device_attribute *attr, char *buf) { -@@ -810,6 +834,7 @@ static struct attribute *bridge_attrs[] +@@ -851,6 +875,7 @@ static struct attribute *bridge_attrs[] &dev_attr_ageing_time.attr, &dev_attr_stp_state.attr, &dev_attr_group_fwd_mask.attr, diff --git a/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch b/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch index a4f246d112..f5ca1bef6e 100644 --- a/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch +++ b/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch @@ -109,7 +109,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> __u8 invert; --- a/net/netfilter/xt_connmark.c +++ b/net/netfilter/xt_connmark.c -@@ -36,12 +36,13 @@ MODULE_ALIAS("ipt_connmark"); +@@ -24,12 +24,13 @@ MODULE_ALIAS("ipt_connmark"); MODULE_ALIAS("ip6t_connmark"); static unsigned int @@ -124,7 +124,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> ct = nf_ct_get(skb, &ctinfo); if (ct == NULL) -@@ -49,12 +50,24 @@ connmark_tg_shift(struct sk_buff *skb, c +@@ -37,12 +38,24 @@ connmark_tg_shift(struct sk_buff *skb, c switch (info->mode) { case XT_CONNMARK_SET: @@ -154,7 +154,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> if (ct->mark != newmark) { ct->mark = newmark; nf_conntrack_event_cache(IPCT_MARK, ct); -@@ -93,20 +106,36 @@ static unsigned int +@@ -81,20 +94,36 @@ static unsigned int connmark_tg(struct sk_buff *skb, const struct xt_action_param *par) { const struct xt_connmark_tginfo1 *info = par->targinfo; @@ -193,7 +193,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> return connmark_tg_shift(skb, info); } -@@ -177,6 +206,16 @@ static struct xt_target connmark_tg_reg[ +@@ -165,6 +194,16 @@ static struct xt_target connmark_tg_reg[ .targetsize = sizeof(struct xt_connmark_tginfo2), .destroy = connmark_tg_destroy, .me = THIS_MODULE, diff --git a/target/linux/generic/hack-5.4/647-netfilter-flow-acct.patch b/target/linux/generic/hack-5.4/647-netfilter-flow-acct.patch index fd8a871113..920514f11f 100644 --- a/target/linux/generic/hack-5.4/647-netfilter-flow-acct.patch +++ b/target/linux/generic/hack-5.4/647-netfilter-flow-acct.patch @@ -1,6 +1,6 @@ --- a/include/net/netfilter/nf_flow_table.h +++ b/include/net/netfilter/nf_flow_table.h -@@ -163,6 +163,8 @@ struct nf_flow_table_hw { +@@ -158,6 +158,8 @@ struct nf_flow_table_hw { int nf_flow_table_hw_register(const struct nf_flow_table_hw *offload); void nf_flow_table_hw_unregister(const struct nf_flow_table_hw *offload); @@ -11,15 +11,15 @@ #define MODULE_ALIAS_NF_FLOWTABLE(family) \ --- a/net/netfilter/nf_flow_table_core.c +++ b/net/netfilter/nf_flow_table_core.c -@@ -11,6 +11,7 @@ - #include <net/netfilter/nf_conntrack.h> +@@ -13,6 +13,7 @@ #include <net/netfilter/nf_conntrack_core.h> + #include <net/netfilter/nf_conntrack_l4proto.h> #include <net/netfilter/nf_conntrack_tuple.h> +#include <net/netfilter/nf_conntrack_acct.h> struct flow_offload_entry { struct flow_offload flow; -@@ -149,6 +150,22 @@ void flow_offload_free(struct flow_offlo +@@ -164,6 +165,22 @@ void flow_offload_free(struct flow_offlo } EXPORT_SYMBOL_GPL(flow_offload_free); @@ -44,7 +44,7 @@ const struct flow_offload_tuple *tuple = data; --- a/net/netfilter/nf_flow_table_ip.c +++ b/net/netfilter/nf_flow_table_ip.c -@@ -11,6 +11,7 @@ +@@ -12,6 +12,7 @@ #include <net/ip6_route.h> #include <net/neighbour.h> #include <net/netfilter/nf_flow_table.h> @@ -52,7 +52,7 @@ /* For layer 4 checksum field offset. */ #include <linux/tcp.h> #include <linux/udp.h> -@@ -267,6 +268,7 @@ nf_flow_offload_ip_hook(void *priv, stru +@@ -295,6 +296,7 @@ nf_flow_offload_ip_hook(void *priv, stru skb->dev = outdev; nexthop = rt_nexthop(rt, flow->tuplehash[!dir].tuple.src_v4.s_addr); skb_dst_set_noref(skb, &rt->dst); @@ -60,7 +60,7 @@ neigh_xmit(NEIGH_ARP_TABLE, outdev, &nexthop, skb); return NF_STOLEN; -@@ -487,6 +489,7 @@ nf_flow_offload_ipv6_hook(void *priv, st +@@ -524,6 +526,7 @@ nf_flow_offload_ipv6_hook(void *priv, st skb->dev = outdev; nexthop = rt6_nexthop(rt, &flow->tuplehash[!dir].tuple.src_v6); skb_dst_set_noref(skb, &rt->dst); diff --git a/target/linux/generic/hack-5.4/650-netfilter-add-xt_OFFLOAD-target.patch b/target/linux/generic/hack-5.4/650-netfilter-add-xt_OFFLOAD-target.patch index 55247bc2a3..3a9d64dd4a 100644 --- a/target/linux/generic/hack-5.4/650-netfilter-add-xt_OFFLOAD-target.patch +++ b/target/linux/generic/hack-5.4/650-netfilter-add-xt_OFFLOAD-target.patch @@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/ipv4/netfilter/Kconfig +++ b/net/ipv4/netfilter/Kconfig -@@ -63,8 +63,6 @@ config NF_TABLES_ARP +@@ -56,8 +56,6 @@ config NF_TABLES_ARP help This option enables the ARP support for nf_tables. @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> config NF_FLOW_TABLE_IPV4 tristate "Netfilter flow table IPv4 module" depends on NF_FLOW_TABLE -@@ -73,6 +71,8 @@ config NF_FLOW_TABLE_IPV4 +@@ -66,6 +64,8 @@ config NF_FLOW_TABLE_IPV4 To compile it as a module, choose M here. @@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> depends on !NF_CONNTRACK || NF_CONNTRACK --- a/net/ipv6/netfilter/Kconfig +++ b/net/ipv6/netfilter/Kconfig -@@ -80,7 +80,6 @@ config NFT_FIB_IPV6 +@@ -45,7 +45,6 @@ config NFT_FIB_IPV6 multicast or blackhole. endif # NF_TABLES_IPV6 @@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> config NF_FLOW_TABLE_IPV6 tristate "Netfilter flow table IPv6 module" -@@ -90,6 +89,8 @@ config NF_FLOW_TABLE_IPV6 +@@ -55,6 +54,8 @@ config NF_FLOW_TABLE_IPV6 To compile it as a module, choose M here. @@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> depends on !NF_CONNTRACK || NF_CONNTRACK --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -693,8 +693,6 @@ config NFT_FIB_NETDEV +@@ -702,8 +702,6 @@ config NFT_FIB_NETDEV endif # NF_TABLES_NETDEV @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> config NF_FLOW_TABLE_INET tristate "Netfilter flow table mixed IPv4/IPv6 module" depends on NF_FLOW_TABLE -@@ -703,11 +701,12 @@ config NF_FLOW_TABLE_INET +@@ -712,11 +710,12 @@ config NF_FLOW_TABLE_INET To compile it as a module, choose M here. @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> help This option adds the flow table core infrastructure. -@@ -996,6 +995,15 @@ config NETFILTER_XT_TARGET_NOTRACK +@@ -1005,6 +1004,15 @@ config NETFILTER_XT_TARGET_NOTRACK depends on NETFILTER_ADVANCED select NETFILTER_XT_TARGET_CT @@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o --- /dev/null +++ b/net/netfilter/xt_FLOWOFFLOAD.c -@@ -0,0 +1,422 @@ +@@ -0,0 +1,427 @@ +/* + * Copyright (C) 2018 Felix Fietkau <nbd@nbd.name> + * @@ -143,6 +143,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + return NF_ACCEPT; +} + ++int nf_flow_table_iterate(struct nf_flowtable *flow_table, ++ void (*iter)(struct flow_offload *flow, void *data), ++ void *data); ++ +static int +xt_flowoffload_create_hook(struct net_device *dev) +{ @@ -240,11 +244,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + struct flow_offload_tuple *tuple = &flow->tuplehash[0].tuple; + struct xt_flowoffload_hook *hook; + bool *found = data; ++ struct rtable *rt = (struct rtable *)tuple->dst_cache; + + spin_lock_bh(&hooks_lock); + hlist_for_each_entry(hook, &hooks, list) { + if (hook->ops.dev->ifindex != tuple->iifidx && -+ hook->ops.dev->ifindex != tuple->oifidx) ++ hook->ops.dev->ifindex != rt->dst.dev->ifindex) + continue; + + hook->used = true; @@ -483,7 +488,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + kfree(hook); + } + -+ nf_flow_table_cleanup(dev_net(dev), dev); ++ nf_flow_table_cleanup(dev); + + return NOTIFY_DONE; +} @@ -523,7 +528,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +module_exit(xt_flowoffload_tg_exit); --- a/net/netfilter/nf_flow_table_core.c +++ b/net/netfilter/nf_flow_table_core.c -@@ -6,7 +6,6 @@ +@@ -7,7 +7,6 @@ #include <linux/netdevice.h> #include <net/ip.h> #include <net/ip6_route.h> @@ -531,6 +536,24 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #include <net/netfilter/nf_flow_table.h> #include <net/netfilter/nf_conntrack.h> #include <net/netfilter/nf_conntrack_core.h> +@@ -338,8 +337,7 @@ flow_offload_lookup(struct nf_flowtable + } + EXPORT_SYMBOL_GPL(flow_offload_lookup); + +-static int +-nf_flow_table_iterate(struct nf_flowtable *flow_table, ++int nf_flow_table_iterate(struct nf_flowtable *flow_table, + void (*iter)(struct flow_offload *flow, void *data), + void *data) + { +@@ -372,6 +370,7 @@ nf_flow_table_iterate(struct nf_flowtabl + + return err; + } ++EXPORT_SYMBOL_GPL(nf_flow_table_iterate); + + static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data) + { --- /dev/null +++ b/include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h @@ -0,0 +1,17 @@ @@ -551,3 +574,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +}; + +#endif /* _XT_FLOWOFFLOAD_H */ +--- a/include/net/netfilter/nf_flow_table.h ++++ b/include/net/netfilter/nf_flow_table.h +@@ -128,6 +128,10 @@ static inline void flow_offload_dead(str + flow->flags |= FLOW_OFFLOAD_DYING; + } + ++int nf_flow_table_iterate(struct nf_flowtable *flow_table, ++ void (*iter)(struct flow_offload *flow, void *data), ++ void *data); ++ + int nf_flow_snat_port(const struct flow_offload *flow, + struct sk_buff *skb, unsigned int thoff, + u8 protocol, enum flow_offload_tuple_dir dir); diff --git a/target/linux/generic/hack-5.4/651-wireless_mesh_header.patch b/target/linux/generic/hack-5.4/651-wireless_mesh_header.patch index 965b431d01..b134e6c6c0 100644 --- a/target/linux/generic/hack-5.4/651-wireless_mesh_header.patch +++ b/target/linux/generic/hack-5.4/651-wireless_mesh_header.patch @@ -11,7 +11,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org> --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -140,8 +140,8 @@ static inline bool dev_xmit_complete(int +@@ -136,8 +136,8 @@ static inline bool dev_xmit_complete(int #if defined(CONFIG_HYPERV_NET) # define LL_MAX_HEADER 128 diff --git a/target/linux/generic/hack-5.4/660-fq_codel_defaults.patch b/target/linux/generic/hack-5.4/660-fq_codel_defaults.patch index 42698c6451..968ce12599 100644 --- a/target/linux/generic/hack-5.4/660-fq_codel_defaults.patch +++ b/target/linux/generic/hack-5.4/660-fq_codel_defaults.patch @@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c -@@ -474,7 +474,11 @@ static int fq_codel_init(struct Qdisc *s +@@ -462,7 +462,11 @@ static int fq_codel_init(struct Qdisc *s sch->limit = 10*1024; q->flows_cnt = 1024; diff --git a/target/linux/generic/hack-5.4/661-use_fq_codel_by_default.patch b/target/linux/generic/hack-5.4/661-use_fq_codel_by_default.patch index 2778377de7..e8d456dde8 100644 --- a/target/linux/generic/hack-5.4/661-use_fq_codel_by_default.patch +++ b/target/linux/generic/hack-5.4/661-use_fq_codel_by_default.patch @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h -@@ -487,12 +487,13 @@ extern struct Qdisc_ops noop_qdisc_ops; +@@ -569,12 +569,13 @@ extern struct Qdisc_ops noop_qdisc_ops; extern struct Qdisc_ops pfifo_fast_ops; extern struct Qdisc_ops mq_qdisc_ops; extern struct Qdisc_ops noqueue_qdisc_ops; @@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct Qdisc_class_common { --- a/net/sched/Kconfig +++ b/net/sched/Kconfig -@@ -3,8 +3,9 @@ +@@ -4,8 +4,9 @@ # menuconfig NET_SCHED @@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> device, it has to decide which ones to send first, which ones to --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c -@@ -2162,7 +2162,7 @@ static int __init pktsched_init(void) +@@ -2271,7 +2271,7 @@ static int __init pktsched_init(void) return err; } @@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> register_qdisc(&pfifo_head_drop_qdisc_ops); --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c -@@ -714,7 +714,7 @@ static const struct Qdisc_class_ops fq_c +@@ -702,7 +702,7 @@ static const struct Qdisc_class_ops fq_c .walk = fq_codel_walk, }; @@ -64,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> .cl_ops = &fq_codel_class_ops, .id = "fq_codel", .priv_size = sizeof(struct fq_codel_sched_data), -@@ -729,6 +729,7 @@ static struct Qdisc_ops fq_codel_qdisc_o +@@ -717,6 +717,7 @@ static struct Qdisc_ops fq_codel_qdisc_o .dump_stats = fq_codel_dump_stats, .owner = THIS_MODULE, }; @@ -74,7 +74,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c -@@ -35,7 +35,7 @@ +@@ -32,7 +32,7 @@ #include <net/xfrm.h> /* Qdisc to use by default */ @@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> EXPORT_SYMBOL(default_qdisc_ops); /* Main transmission queue. */ -@@ -1025,7 +1025,7 @@ static void attach_one_default_qdisc(str +@@ -1034,12 +1034,12 @@ static void attach_one_default_qdisc(str void *_unused) { struct Qdisc *qdisc; @@ -92,3 +92,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (dev->priv_flags & IFF_NO_QUEUE) ops = &noqueue_qdisc_ops; + else if(dev->type == ARPHRD_CAN) +- ops = &pfifo_fast_ops; ++ ops = &fq_codel_qdisc_ops; + + qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL); + if (!qdisc) { diff --git a/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch b/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch index e49507a590..149a923dcb 100644 --- a/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch +++ b/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c -@@ -612,207 +612,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea +@@ -594,211 +594,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea .owner = THIS_MODULE, }; @@ -49,14 +49,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - - err = skb_array_produce(q, skb); - -- if (unlikely(err)) -- return qdisc_drop_cpu(skb, qdisc, to_free); +- if (unlikely(err)) { +- if (qdisc_is_percpu_stats(qdisc)) +- return qdisc_drop_cpu(skb, qdisc, to_free); +- else +- return qdisc_drop(skb, qdisc, to_free); +- } - -- qdisc_qstats_atomic_qlen_inc(qdisc); -- /* Note: skb can not be used after skb_array_produce(), -- * so we better not use qdisc_qstats_cpu_backlog_inc() -- */ -- this_cpu_add(qdisc->cpu_qstats->backlog, pkt_len); +- qdisc_update_stats_at_enqueue(qdisc, pkt_len); - return NET_XMIT_SUCCESS; -} - @@ -75,9 +75,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - skb = __skb_array_consume(q); - } - if (likely(skb)) { -- qdisc_qstats_cpu_backlog_dec(qdisc, skb); -- qdisc_bstats_cpu_update(qdisc, skb); -- qdisc_qstats_atomic_qlen_dec(qdisc); +- qdisc_update_stats_at_dequeue(qdisc, skb); +- } else { +- WRITE_ONCE(qdisc->empty, true); - } - - return skb; @@ -117,10 +117,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - kfree_skb(skb); - } - -- for_each_possible_cpu(i) { -- struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i); +- if (qdisc_is_percpu_stats(qdisc)) { +- for_each_possible_cpu(i) { +- struct gnet_stats_queue *q; - -- q->backlog = 0; +- q = per_cpu_ptr(qdisc->cpu_qstats, i); +- q->backlog = 0; +- q->qlen = 0; +- } - } -} - @@ -215,6 +219,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> -}; -EXPORT_SYMBOL(pfifo_fast_ops); - - static struct lock_class_key qdisc_tx_busylock; - static struct lock_class_key qdisc_running_key; - + struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue, + const struct Qdisc_ops *ops, + struct netlink_ext_ack *extack) diff --git a/target/linux/generic/hack-5.4/700-swconfig_switch_drivers.patch b/target/linux/generic/hack-5.4/700-swconfig_switch_drivers.patch index ebfcfe81c7..b1b7ce7d04 100644 --- a/target/linux/generic/hack-5.4/700-swconfig_switch_drivers.patch +++ b/target/linux/generic/hack-5.4/700-swconfig_switch_drivers.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig -@@ -209,6 +209,89 @@ config LED_TRIGGER_PHY +@@ -249,6 +249,89 @@ config LED_TRIGGER_PHY for any speed known to the PHY. @@ -123,9 +123,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +obj-$(CONFIG_RTL8367_PHY) += rtl8367.o +obj-$(CONFIG_RTL8367B_PHY) += rtl8367b.o + + obj-$(CONFIG_MDIO_ASPEED) += mdio-aspeed.o obj-$(CONFIG_MDIO_BCM_IPROC) += mdio-bcm-iproc.o obj-$(CONFIG_MDIO_BCM_UNIMAC) += mdio-bcm-unimac.o - obj-$(CONFIG_MDIO_BITBANG) += mdio-bitbang.o --- a/include/linux/platform_data/b53.h +++ b/include/linux/platform_data/b53.h @@ -29,6 +29,9 @@ struct b53_platform_data { diff --git a/target/linux/generic/hack-5.4/702-phy_add_aneg_done_function.patch b/target/linux/generic/hack-5.4/702-phy_add_aneg_done_function.patch index a0e6484be8..0f4dab3460 100644 --- a/target/linux/generic/hack-5.4/702-phy_add_aneg_done_function.patch +++ b/target/linux/generic/hack-5.4/702-phy_add_aneg_done_function.patch @@ -1,6 +1,6 @@ --- a/include/linux/phy.h +++ b/include/linux/phy.h -@@ -555,6 +555,12 @@ struct phy_driver { +@@ -522,6 +522,12 @@ struct phy_driver { /* Determines the negotiated speed and duplex */ int (*read_status)(struct phy_device *phydev); @@ -15,9 +15,9 @@ --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c -@@ -1577,6 +1577,9 @@ int genphy_update_link(struct phy_device - { - int status; +@@ -1822,6 +1822,9 @@ int genphy_update_link(struct phy_device + if (bmcr & BMCR_ANRESTART) + goto done; + if (phydev->drv && phydev->drv->update_link) + return phydev->drv->update_link(phydev); diff --git a/target/linux/generic/hack-5.4/721-phy_packets.patch b/target/linux/generic/hack-5.4/721-phy_packets.patch index 1ad7d46764..89f113a1c8 100644 --- a/target/linux/generic/hack-5.4/721-phy_packets.patch +++ b/target/linux/generic/hack-5.4/721-phy_packets.patch @@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -1514,6 +1514,7 @@ enum netdev_priv_flags { +@@ -1544,6 +1544,7 @@ enum netdev_priv_flags { IFF_FAILOVER_SLAVE = 1<<28, IFF_L3MDEV_RX_HANDLER = 1<<29, IFF_LIVE_RENAME_OK = 1<<30, @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> }; #define IFF_802_1Q_VLAN IFF_802_1Q_VLAN -@@ -1546,6 +1547,7 @@ enum netdev_priv_flags { +@@ -1576,6 +1577,7 @@ enum netdev_priv_flags { #define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE #define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER #define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK @@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** * struct net_device - The DEVICE structure. -@@ -1846,6 +1848,11 @@ struct net_device { +@@ -1877,6 +1879,11 @@ struct net_device { const struct tlsdev_ops *tlsdev_ops; #endif @@ -43,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> const struct header_ops *header_ops; unsigned int flags; -@@ -1928,6 +1935,10 @@ struct net_device { +@@ -1959,6 +1966,10 @@ struct net_device { struct mpls_dev __rcu *mpls_ptr; #endif @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> */ --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -2547,6 +2547,10 @@ static inline int pskb_trim(struct sk_bu +@@ -2665,6 +2665,10 @@ static inline int pskb_trim(struct sk_bu return (len < skb->len) ? __pskb_trim(skb, len) : 0; } @@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** * pskb_trim_unique - remove end from a paged unique (not cloned) buffer * @skb: buffer to alter -@@ -2678,16 +2682,6 @@ static inline struct sk_buff *dev_alloc_ +@@ -2796,16 +2800,6 @@ static inline struct sk_buff *dev_alloc_ } @@ -86,7 +86,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { --- a/net/Kconfig +++ b/net/Kconfig -@@ -25,6 +25,12 @@ menuconfig NET +@@ -26,6 +26,12 @@ menuconfig NET if NET @@ -101,8 +101,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> help --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -3253,10 +3253,20 @@ static int xmit_one(struct sk_buff *skb, - if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) +@@ -3194,10 +3194,20 @@ static int xmit_one(struct sk_buff *skb, + if (dev_nit_active(dev)) dev_queue_xmit_nit(skb, dev); - len = skb->len; @@ -128,15 +128,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -63,6 +63,7 @@ - #include <linux/errqueue.h> +@@ -60,6 +60,7 @@ #include <linux/prefetch.h> #include <linux/if_vlan.h> + #include <linux/mpls.h> +#include <linux/if.h> #include <net/protocol.h> #include <net/dst.h> -@@ -503,6 +504,22 @@ skb_fail: +@@ -540,6 +541,22 @@ skb_fail: } EXPORT_SYMBOL(__napi_alloc_skb); @@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c -@@ -172,6 +172,12 @@ __be16 eth_type_trans(struct sk_buff *sk +@@ -171,6 +171,12 @@ __be16 eth_type_trans(struct sk_buff *sk const struct ethhdr *eth; skb->dev = dev; diff --git a/target/linux/generic/hack-5.4/773-bgmac-add-srab-switch.patch b/target/linux/generic/hack-5.4/773-bgmac-add-srab-switch.patch index 3b4781657e..89e0df4606 100644 --- a/target/linux/generic/hack-5.4/773-bgmac-add-srab-switch.patch +++ b/target/linux/generic/hack-5.4/773-bgmac-add-srab-switch.patch @@ -32,7 +32,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> #include <linux/bcm47xx_nvram.h> #include <linux/phy.h> #include <linux/phy_fixed.h> -@@ -1409,6 +1410,17 @@ static const struct ethtool_ops bgmac_et +@@ -1407,6 +1408,17 @@ static const struct ethtool_ops bgmac_et .set_link_ksettings = phy_ethtool_set_link_ksettings, }; @@ -50,7 +50,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> /************************************************** * MII **************************************************/ -@@ -1540,6 +1552,14 @@ int bgmac_enet_probe(struct bgmac *bgmac +@@ -1538,6 +1550,14 @@ int bgmac_enet_probe(struct bgmac *bgmac net_dev->hw_features = net_dev->features; net_dev->vlan_features = net_dev->features; @@ -65,7 +65,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> err = register_netdev(bgmac->net_dev); if (err) { dev_err(bgmac->dev, "Cannot register net device\n"); -@@ -1562,6 +1582,10 @@ EXPORT_SYMBOL_GPL(bgmac_enet_probe); +@@ -1560,6 +1580,10 @@ EXPORT_SYMBOL_GPL(bgmac_enet_probe); void bgmac_enet_remove(struct bgmac *bgmac) { diff --git a/target/linux/generic/hack-5.4/901-debloat_sock_diag.patch b/target/linux/generic/hack-5.4/901-debloat_sock_diag.patch index 639f76d309..aec1d58fa7 100644 --- a/target/linux/generic/hack-5.4/901-debloat_sock_diag.patch +++ b/target/linux/generic/hack-5.4/901-debloat_sock_diag.patch @@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/Kconfig +++ b/net/Kconfig -@@ -98,6 +98,9 @@ source "net/netlabel/Kconfig" +@@ -100,6 +100,9 @@ source "net/netlabel/Kconfig" endif # if INET @@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> neighbour.o rtnetlink.o utils.o link_watch.o filter.o \ - sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \ + dev_ioctl.o tso.o sock_reuseport.o \ - fib_notifier.o xdp.o + fib_notifier.o xdp.o flow_offload.o +obj-$(CONFIG_SOCK_DIAG) += sock_diag.o obj-y += net-sysfs.o @@ -42,7 +42,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> obj-$(CONFIG_PROC_FS) += net-procfs.o --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -490,6 +490,18 @@ discard_and_relse: +@@ -140,6 +140,7 @@ + + static DEFINE_MUTEX(proto_list_mutex); + static LIST_HEAD(proto_list); ++static atomic64_t cookie_gen; + + static void sock_inuse_add(struct net *net, int val); + +@@ -539,6 +540,18 @@ discard_and_relse: } EXPORT_SYMBOL(__sk_receive_skb); @@ -53,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + + if (res) + return res; -+ res = atomic64_inc_return(&sock_net(sk)->cookie_gen); ++ res = atomic64_inc_return(&cookie_gen); + atomic64_cmpxchg(&sk->sk_cookie, 0, res); + } +} @@ -61,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie) { struct dst_entry *dst = __sk_dst_get(sk); -@@ -1603,9 +1615,11 @@ static void __sk_free(struct sock *sk) +@@ -1746,9 +1759,11 @@ static void __sk_free(struct sock *sk) if (likely(sk->sk_net_refcnt)) sock_inuse_add(sock_net(sk), -1); @@ -75,10 +83,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/core/sock_diag.c +++ b/net/core/sock_diag.c -@@ -20,18 +20,6 @@ static int (*inet_rcv_compat)(struct sk_ +@@ -19,19 +19,6 @@ static const struct sock_diag_handler *s + static int (*inet_rcv_compat)(struct sk_buff *skb, struct nlmsghdr *nlh); static DEFINE_MUTEX(sock_diag_table_mutex); static struct workqueue_struct *broadcast_wq; - +-static atomic64_t cookie_gen; +- -u64 sock_gen_cookie(struct sock *sk) -{ - while (1) { @@ -86,17 +96,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - - if (res) - return res; -- res = atomic64_inc_return(&sock_net(sk)->cookie_gen); +- res = atomic64_inc_return(&cookie_gen); - atomic64_cmpxchg(&sk->sk_cookie, 0, res); - } -} -- + int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie) { - u64 res; --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig -@@ -425,6 +425,7 @@ config INET_XFRM_MODE_BEET +@@ -399,6 +399,7 @@ config INET_TUNNEL config INET_DIAG tristate "INET: socket monitoring interface" @@ -106,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> Support for INET (TCP, DCCP, etc) socket monitoring interface used by --- a/net/netlink/Kconfig +++ b/net/netlink/Kconfig -@@ -4,6 +4,7 @@ +@@ -5,6 +5,7 @@ config NETLINK_DIAG tristate "NETLINK: socket monitoring interface" @@ -116,7 +125,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> Support for NETLINK socket monitoring interface used by the ss tool. --- a/net/packet/Kconfig +++ b/net/packet/Kconfig -@@ -18,6 +18,7 @@ config PACKET +@@ -19,6 +19,7 @@ config PACKET config PACKET_DIAG tristate "Packet: sockets monitoring interface" depends on PACKET @@ -126,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> Support for PF_PACKET sockets monitoring interface used by the ss tool. --- a/net/unix/Kconfig +++ b/net/unix/Kconfig -@@ -22,6 +22,7 @@ config UNIX +@@ -28,6 +28,7 @@ config UNIX_SCM config UNIX_DIAG tristate "UNIX: socket monitoring interface" depends on UNIX diff --git a/target/linux/generic/hack-5.4/902-debloat_proc.patch b/target/linux/generic/hack-5.4/902-debloat_proc.patch index 1442cee8bb..880aea0a85 100644 --- a/target/linux/generic/hack-5.4/902-debloat_proc.patch +++ b/target/linux/generic/hack-5.4/902-debloat_proc.patch @@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/fs/locks.c +++ b/fs/locks.c -@@ -2786,6 +2786,8 @@ static const struct seq_operations locks +@@ -2961,6 +2961,8 @@ static const struct seq_operations locks static int __init proc_locks_init(void) { @@ -40,18 +40,21 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> return 0; --- a/fs/proc/Kconfig +++ b/fs/proc/Kconfig -@@ -97,3 +97,8 @@ config PROC_CHILDREN - +@@ -100,6 +100,11 @@ config PROC_CHILDREN Say Y if you are running any user-space software which takes benefit from this interface. For example, rkt is such a piece of software. -+ + +config PROC_STRIPPED + default n + depends on EXPERT + bool "Strip non-essential /proc functionality to reduce code size" ++ + config PROC_PID_ARCH_STATUS + def_bool n + depends on PROC_FS --- a/fs/proc/consoles.c +++ b/fs/proc/consoles.c -@@ -93,6 +93,9 @@ static const struct seq_operations conso +@@ -92,6 +92,9 @@ static const struct seq_operations conso static int __init proc_consoles_init(void) { @@ -97,7 +100,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> proc_mkdir("tty/ldisc", NULL); /* Preserved: it's userspace visible */ --- a/include/net/snmp.h +++ b/include/net/snmp.h -@@ -123,6 +123,21 @@ struct linux_xfrm_mib { +@@ -118,6 +118,21 @@ struct linux_xfrm_mib { #define DECLARE_SNMP_STAT(type, name) \ extern __typeof__(type) __percpu *name @@ -119,7 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #define __SNMP_INC_STATS(mib, field) \ __this_cpu_inc(mib->mibs[field]) -@@ -153,8 +168,9 @@ struct linux_xfrm_mib { +@@ -148,8 +163,9 @@ struct linux_xfrm_mib { __this_cpu_add(ptr[basefield##OCTETS], addend); \ } while (0) @@ -132,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> do { \ --- a/ipc/msg.c +++ b/ipc/msg.c -@@ -1292,6 +1292,9 @@ void __init msg_init(void) +@@ -1317,6 +1317,9 @@ void __init msg_init(void) { msg_init_ns(&init_ipc_ns); @@ -189,7 +192,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c -@@ -333,6 +333,9 @@ void register_irq_proc(unsigned int irq, +@@ -319,6 +319,9 @@ void register_irq_proc(unsigned int irq, void __maybe_unused *irqp = (void *)(unsigned long) irq; char name [MAX_NAMELEN]; @@ -199,7 +202,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!root_irq_dir || (desc->irq_data.chip == &no_irq_chip)) return; -@@ -386,6 +389,9 @@ void unregister_irq_proc(unsigned int ir +@@ -372,6 +375,9 @@ void unregister_irq_proc(unsigned int ir { char name [MAX_NAMELEN]; @@ -209,7 +212,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!root_irq_dir || !desc->dir) return; #ifdef CONFIG_SMP -@@ -424,6 +430,9 @@ void init_irq_proc(void) +@@ -410,6 +416,9 @@ void init_irq_proc(void) unsigned int irq; struct irq_desc *desc; @@ -221,7 +224,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!root_irq_dir) --- a/kernel/time/timer_list.c +++ b/kernel/time/timer_list.c -@@ -375,6 +375,8 @@ static int __init init_timer_list_procfs +@@ -370,6 +370,8 @@ static int __init init_timer_list_procfs { struct proc_dir_entry *pe; @@ -232,7 +235,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!pe) --- a/mm/vmalloc.c +++ b/mm/vmalloc.c -@@ -2749,6 +2749,8 @@ static const struct seq_operations vmall +@@ -3549,6 +3549,8 @@ static const struct seq_operations vmall static int __init proc_vmalloc_init(void) { @@ -243,7 +246,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> &vmalloc_op, --- a/mm/vmstat.c +++ b/mm/vmstat.c -@@ -1972,10 +1972,12 @@ void __init init_mm_internals(void) +@@ -1988,10 +1988,12 @@ void __init init_mm_internals(void) start_shepherd_timer(); #endif #ifdef CONFIG_PROC_FS @@ -261,7 +264,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/8021q/vlanproc.c +++ b/net/8021q/vlanproc.c -@@ -96,6 +96,9 @@ void vlan_proc_cleanup(struct net *net) +@@ -93,6 +93,9 @@ void vlan_proc_cleanup(struct net *net) { struct vlan_net *vn = net_generic(net, vlan_net_id); @@ -271,7 +274,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (vn->proc_vlan_conf) remove_proc_entry(name_conf, vn->proc_vlan_dir); -@@ -115,6 +118,9 @@ int __net_init vlan_proc_init(struct net +@@ -112,6 +115,9 @@ int __net_init vlan_proc_init(struct net { struct vlan_net *vn = net_generic(net, vlan_net_id); @@ -327,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -3486,6 +3486,8 @@ static __net_initdata struct pernet_oper +@@ -3603,6 +3603,8 @@ static __net_initdata struct pernet_oper static int __init proto_init(void) { @@ -338,7 +341,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c -@@ -2717,11 +2717,13 @@ static const struct seq_operations fib_r +@@ -2844,11 +2844,13 @@ static const struct seq_operations fib_r int __net_init fib_proc_init(struct net *net) { @@ -354,7 +357,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> fib_triestat_seq_show, NULL)) goto out2; -@@ -2732,17 +2734,21 @@ int __net_init fib_proc_init(struct net +@@ -2859,17 +2861,21 @@ int __net_init fib_proc_init(struct net return 0; out3: @@ -382,7 +385,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c -@@ -524,5 +524,8 @@ static __net_initdata struct pernet_oper +@@ -522,5 +522,8 @@ static __net_initdata struct pernet_oper int __init ip_misc_proc_init(void) { @@ -393,7 +396,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } --- a/net/ipv4/route.c +++ b/net/ipv4/route.c -@@ -411,6 +411,9 @@ static struct pernet_operations ip_rt_pr +@@ -408,6 +408,9 @@ static struct pernet_operations ip_rt_pr static int __init ip_rt_proc_init(void) { diff --git a/target/linux/generic/hack-5.4/904-debloat_dma_buf.patch b/target/linux/generic/hack-5.4/904-debloat_dma_buf.patch index 3cbafc701e..a9a250fe40 100644 --- a/target/linux/generic/hack-5.4/904-debloat_dma_buf.patch +++ b/target/linux/generic/hack-5.4/904-debloat_dma_buf.patch @@ -13,48 +13,48 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/drivers/base/Kconfig +++ b/drivers/base/Kconfig -@@ -172,7 +172,7 @@ config SOC_BUS +@@ -179,7 +179,7 @@ config SOC_BUS source "drivers/base/regmap/Kconfig" config DMA_SHARED_BUFFER - bool + tristate default n - select ANON_INODES select IRQ_WORK + help --- a/drivers/dma-buf/Makefile +++ b/drivers/dma-buf/Makefile -@@ -1,3 +1,7 @@ --obj-y := dma-buf.o dma-fence.o dma-fence-array.o reservation.o seqno-fence.o +@@ -1,9 +1,13 @@ + # SPDX-License-Identifier: GPL-2.0-only +-obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \ +- dma-resv.o seqno-fence.o -obj-$(CONFIG_SYNC_FILE) += sync_file.o -obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o +-obj-$(CONFIG_UDMABUF) += udmabuf.o +obj-$(CONFIG_DMA_SHARED_BUFFER) := dma-shared-buffer.o + -+dma-buf-objs-y := dma-buf.o dma-fence.o dma-fence-array.o reservation.o seqno-fence.o -+dma-buf-objs-$(CONFIG_SYNC_FILE) += sync_file.o ++dma-buf-objs-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \ ++ dma-resv.o seqno-fence.o ++dma-buf-objs-$(CONFIG_SYNC_FILE) += sync_file.o +dma-buf-objs-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o ++dma-buf-objs-$(CONFIG_UDMABUF) += udmabuf.o + +dma-shared-buffer-objs := $(dma-buf-objs-y) + + dmabuf_selftests-y := \ + selftest.o \ --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c -@@ -34,6 +34,7 @@ - #include <linux/poll.h> - #include <linux/reservation.h> - #include <linux/mm.h> -+#include <linux/module.h> - - #include <uapi/linux/dma-buf.h> - -@@ -1159,4 +1160,5 @@ static void __exit dma_buf_deinit(void) - { +@@ -1297,4 +1297,5 @@ static void __exit dma_buf_deinit(void) dma_buf_uninit_debugfs(); + kern_unmount(dma_buf_mnt); } -__exitcall(dma_buf_deinit); +module_exit(dma_buf_deinit); +MODULE_LICENSE("GPL"); --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -2129,6 +2129,7 @@ int wake_up_state(struct task_struct *p, +@@ -2673,6 +2673,7 @@ int wake_up_state(struct task_struct *p, { return try_to_wake_up(p, state, 0); } @@ -62,3 +62,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* * Perform scheduler related setup for a newly forked process p. +--- a/fs/d_path.c ++++ b/fs/d_path.c +@@ -307,6 +307,7 @@ char *dynamic_dname(struct dentry *dentr + buffer += buflen - sz; + return memcpy(buffer, temp, sz); + } ++EXPORT_SYMBOL_GPL(dynamic_dname); + + char *simple_dname(struct dentry *dentry, char *buffer, int buflen) + { diff --git a/target/linux/generic/hack-5.4/911-kobject_add_broadcast_uevent.patch b/target/linux/generic/hack-5.4/911-kobject_add_broadcast_uevent.patch index 06b94117c1..52453e5ce3 100644 --- a/target/linux/generic/hack-5.4/911-kobject_add_broadcast_uevent.patch +++ b/target/linux/generic/hack-5.4/911-kobject_add_broadcast_uevent.patch @@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #ifdef CONFIG_UEVENT_HELPER /* path to the userspace helper executed on an event */ extern char uevent_helper[]; -@@ -244,4 +246,7 @@ int kobject_synth_uevent(struct kobject +@@ -245,4 +247,7 @@ int kobject_synth_uevent(struct kobject __printf(2, 3) int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...); @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #endif /* _KOBJECT_H_ */ --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c -@@ -688,6 +688,43 @@ int add_uevent_var(struct kobj_uevent_en +@@ -690,6 +690,43 @@ int add_uevent_var(struct kobj_uevent_en EXPORT_SYMBOL_GPL(add_uevent_var); #if defined(CONFIG_NET) diff --git a/target/linux/generic/hack-5.4/930-crashlog.patch b/target/linux/generic/hack-5.4/930-crashlog.patch deleted file mode 100644 index bb16f22915..0000000000 --- a/target/linux/generic/hack-5.4/930-crashlog.patch +++ /dev/null @@ -1,338 +0,0 @@ -From 6b1ab74a9917012d0c559edc4ed299d9228ac89f Mon Sep 17 00:00:00 2001 -From: Felix Fietkau <nbd@nbd.name> -Date: Sat, 8 Jul 2017 08:26:47 +0200 -Subject: kernel: add the new 'crashlog' feature - -this tries to store kernel oops/panic logs in a fixed location in RAM to -recover them available to user space using debugfs - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - include/linux/crashlog.h | 17 ++++ - init/Kconfig | 4 + - kernel/Makefile | 1 + - kernel/crashlog.c | 213 +++++++++++++++++++++++++++++++++++++++++++++++ - kernel/module.c | 3 + - mm/bootmem.c | 2 + - mm/memblock.c | 5 ++ - 7 files changed, 245 insertions(+) - create mode 100644 include/linux/crashlog.h - create mode 100644 kernel/crashlog.c - ---- /dev/null -+++ b/include/linux/crashlog.h -@@ -0,0 +1,17 @@ -+#ifndef __CRASHLOG_H -+#define __CRASHLOG_H -+ -+#ifdef CONFIG_CRASHLOG -+void crashlog_init_bootmem(struct bootmem_data *bdata); -+void crashlog_init_memblock(phys_addr_t addr, phys_addr_t size); -+#else -+static inline void crashlog_init_bootmem(struct bootmem_data *bdata) -+{ -+} -+ -+static inline void crashlog_init_memblock(phys_addr_t addr, phys_addr_t size) -+{ -+} -+#endif -+ -+#endif ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -1049,6 +1049,10 @@ config RELAY - - If unsure, say N. - -+config CRASHLOG -+ bool "Crash logging" -+ depends on (!NO_BOOTMEM || HAVE_MEMBLOCK) -+ - config BLK_DEV_INITRD - bool "Initial RAM filesystem and RAM disk (initramfs/initrd) support" - help ---- a/kernel/Makefile -+++ b/kernel/Makefile -@@ -114,6 +114,7 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o - obj-$(CONFIG_HAS_IOMEM) += iomem.o - obj-$(CONFIG_ZONE_DEVICE) += memremap.o - obj-$(CONFIG_RSEQ) += rseq.o -+obj-$(CONFIG_CRASHLOG) += crashlog.o - - $(obj)/configs.o: $(obj)/config_data.h - ---- /dev/null -+++ b/kernel/crashlog.c -@@ -0,0 +1,213 @@ -+/* -+ * Crash information logger -+ * Copyright (C) 2010 Felix Fietkau <nbd@nbd.name> -+ * -+ * Based on ramoops.c -+ * Copyright (C) 2010 Marco Stornelli <marco.stornelli@gmail.com> -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * version 2 as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -+ * 02110-1301 USA -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/bootmem.h> -+#include <linux/memblock.h> -+#include <linux/debugfs.h> -+#include <linux/crashlog.h> -+#include <linux/kmsg_dump.h> -+#include <linux/module.h> -+#include <linux/pfn.h> -+#include <linux/vmalloc.h> -+#include <asm/io.h> -+ -+#define CRASHLOG_PAGES 4 -+#define CRASHLOG_SIZE (CRASHLOG_PAGES * PAGE_SIZE) -+#define CRASHLOG_MAGIC 0xa1eedead -+ -+/* -+ * Start the log at 1M before the end of RAM, as some boot loaders like -+ * to use the end of the RAM for stack usage and other things -+ * If this fails, fall back to using the last part. -+ */ -+#define CRASHLOG_OFFSET (1024 * 1024) -+ -+struct crashlog_data { -+ u32 magic; -+ u32 len; -+ u8 data[]; -+}; -+ -+static struct debugfs_blob_wrapper crashlog_blob; -+static unsigned long crashlog_addr = 0; -+static struct crashlog_data *crashlog_buf; -+static struct kmsg_dumper dump; -+static bool first = true; -+ -+extern struct list_head *crashlog_modules; -+ -+static bool crashlog_set_addr(phys_addr_t addr, phys_addr_t size) -+{ -+ /* Limit to lower 64 MB to avoid highmem */ -+ phys_addr_t limit = 64 * 1024 * 1024; -+ -+ if (crashlog_addr) -+ return false; -+ -+ if (addr > limit) -+ return false; -+ -+ if (addr + size > limit) -+ size = limit - addr; -+ -+ crashlog_addr = addr; -+ -+ if (addr + size > CRASHLOG_OFFSET) -+ crashlog_addr += size - CRASHLOG_OFFSET; -+ -+ return true; -+} -+ -+#ifndef CONFIG_NO_BOOTMEM -+void __init crashlog_init_bootmem(bootmem_data_t *bdata) -+{ -+ phys_addr_t start, end; -+ -+ start = PFN_PHYS(bdata->node_low_pfn); -+ end = PFN_PHYS(bdata->node_min_pfn); -+ if (!crashlog_set_addr(start, end - start)) -+ return; -+ -+ if (reserve_bootmem(crashlog_addr, CRASHLOG_SIZE, BOOTMEM_EXCLUSIVE) < 0) { -+ printk("Crashlog failed to allocate RAM at address 0x%lx\n", -+ crashlog_addr); -+ crashlog_addr = 0; -+ } -+} -+#endif -+ -+#ifdef CONFIG_HAVE_MEMBLOCK -+void __init_memblock crashlog_init_memblock(phys_addr_t addr, phys_addr_t size) -+{ -+ if (!crashlog_set_addr(addr, size)) -+ return; -+ -+ if (memblock_reserve(crashlog_addr, CRASHLOG_SIZE)) { -+ printk("Crashlog failed to allocate RAM at address 0x%lx\n", -+ crashlog_addr); -+ crashlog_addr = 0; -+ } -+} -+#endif -+ -+static void __init crashlog_copy(void) -+{ -+ if (crashlog_buf->magic != CRASHLOG_MAGIC) -+ return; -+ -+ if (!crashlog_buf->len || crashlog_buf->len > -+ CRASHLOG_SIZE - sizeof(*crashlog_buf)) -+ return; -+ -+ crashlog_blob.size = crashlog_buf->len; -+ crashlog_blob.data = kmemdup(crashlog_buf->data, -+ crashlog_buf->len, GFP_KERNEL); -+ -+ debugfs_create_blob("crashlog", 0700, NULL, &crashlog_blob); -+} -+ -+static int get_maxlen(void) -+{ -+ return CRASHLOG_SIZE - sizeof(*crashlog_buf) - crashlog_buf->len; -+} -+ -+static void crashlog_printf(const char *fmt, ...) -+{ -+ va_list args; -+ int len = get_maxlen(); -+ -+ if (!len) -+ return; -+ -+ va_start(args, fmt); -+ crashlog_buf->len += vscnprintf( -+ &crashlog_buf->data[crashlog_buf->len], -+ len, fmt, args); -+ va_end(args); -+} -+ -+static void crashlog_do_dump(struct kmsg_dumper *dumper, -+ enum kmsg_dump_reason reason) -+{ -+ struct timeval tv; -+ struct module *m; -+ char *buf; -+ size_t len; -+ -+ if (!first) -+ crashlog_printf("\n===================================\n"); -+ -+ do_gettimeofday(&tv); -+ crashlog_printf("Time: %lu.%lu\n", -+ (long)tv.tv_sec, (long)tv.tv_usec); -+ -+ if (first) { -+ crashlog_printf("Modules:"); -+ list_for_each_entry(m, crashlog_modules, list) { -+ crashlog_printf("\t%s@%p+%x", m->name, -+ m->core_layout.base, m->core_layout.size, -+ m->init_layout.base, m->init_layout.size); -+ } -+ crashlog_printf("\n"); -+ first = false; -+ } -+ -+ buf = (char *)&crashlog_buf->data[crashlog_buf->len]; -+ -+ kmsg_dump_get_buffer(dumper, true, buf, get_maxlen(), &len); -+ -+ crashlog_buf->len += len; -+} -+ -+ -+int __init crashlog_init_fs(void) -+{ -+ struct page *pages[CRASHLOG_PAGES]; -+ pgprot_t prot; -+ int i; -+ -+ if (!crashlog_addr) { -+ printk("No memory allocated for crashlog\n"); -+ return -ENOMEM; -+ } -+ -+ printk("Crashlog allocated RAM at address 0x%lx\n", (unsigned long) crashlog_addr); -+ for (i = 0; i < CRASHLOG_PAGES; i++) -+ pages[i] = pfn_to_page((crashlog_addr >> PAGE_SHIFT) + i); -+ -+ prot = pgprot_writecombine(PAGE_KERNEL); -+ crashlog_buf = vmap(pages, CRASHLOG_PAGES, VM_MAP, prot); -+ -+ crashlog_copy(); -+ -+ crashlog_buf->magic = CRASHLOG_MAGIC; -+ crashlog_buf->len = 0; -+ -+ dump.max_reason = KMSG_DUMP_OOPS; -+ dump.dump = crashlog_do_dump; -+ kmsg_dump_register(&dump); -+ -+ return 0; -+} -+module_init(crashlog_init_fs); ---- a/kernel/module.c -+++ b/kernel/module.c -@@ -251,6 +251,9 @@ static void mod_update_bounds(struct mod - #ifdef CONFIG_KGDB_KDB - struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */ - #endif /* CONFIG_KGDB_KDB */ -+#ifdef CONFIG_CRASHLOG -+struct list_head *crashlog_modules = &modules; -+#endif - - static void module_assert_mutex(void) - { ---- a/mm/bootmem.c -+++ b/mm/bootmem.c -@@ -15,6 +15,7 @@ - #include <linux/export.h> - #include <linux/kmemleak.h> - #include <linux/range.h> -+#include <linux/crashlog.h> - #include <linux/bug.h> - #include <linux/io.h> - #include <linux/bootmem.h> -@@ -215,6 +216,7 @@ static unsigned long __init free_all_boo - if (!bdata->node_bootmem_map) - return 0; - -+ crashlog_init_bootmem(bdata); - map = bdata->node_bootmem_map; - start = bdata->node_min_pfn; - end = bdata->node_low_pfn; ---- a/mm/memblock.c -+++ b/mm/memblock.c -@@ -21,6 +21,7 @@ - #include <linux/seq_file.h> - #include <linux/memblock.h> - #include <linux/bootmem.h> -+#include <linux/crashlog.h> - - #include <asm/sections.h> - #include <linux/io.h> -@@ -547,6 +548,8 @@ static void __init_memblock memblock_ins - memblock_set_region_node(rgn, nid); - type->cnt++; - type->total_size += size; -+ if (type == &memblock.memory) -+ crashlog_init_memblock(base, size); - } - - /** -@@ -586,6 +589,8 @@ int __init_memblock memblock_add_range(s - type->regions[0].flags = flags; - memblock_set_region_node(&type->regions[0], nid); - type->total_size = size; -+ if (type == &memblock.memory) -+ crashlog_init_memblock(base, size); - return 0; - } - repeat: 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 = ¶ms->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(); |