kernel: add support for kernel 5.4
authorKoen Vandeputte <koen.vandeputte@ncentric.com>
Mon, 25 Nov 2019 15:08:31 +0000 (16:08 +0100)
committerKoen Vandeputte <koen.vandeputte@ncentric.com>
Fri, 28 Feb 2020 16:50:45 +0000 (17:50 +0100)
The following patches were removed because they are integrated in the upstream kernel 5.4:
 * backport-5.4/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch
 * backport-5.4/048-v4.21-mtd-improve-calculating-partition-boundaries-when-ch.patch
 * backport-5.4/080-v5.1-0001-bcma-keep-a-direct-pointer-to-the-struct-device.patch
 * backport-5.4/080-v5.1-0002-bcma-use-dev_-printing-functions.patch
 * backport-5.4/095-Allow-class-e-address-assignment-via-ifconfig-ioctl.patch
 * backport-5.4/101-arm-cns3xxx-use-actual-size-reads-for-PCIe.patch
 * backport-5.4/200-v5.2-usb-dwc2-Set-lpm-mode-parameters-depend-on-HW-configuration.patch
 * backport-5.4/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch
 * backport-5.4/380-v5.3-net-sched-Introduce-act_ctinfo-action.patch
 * backport-5.4/450-v5.0-mtd-spinand-winbond-Add-support-for-W25N01GV.patch
 * backport-5.4/451-v5.0-mtd-spinand-Add-initial-support-for-Toshiba-TC58CVG2.patch
 * backport-5.4/452-v5.0-mtd-spinand-add-support-for-GigaDevice-GD5FxGQ4xA.patch
 * backport-5.4/455-v5.1-mtd-spinand-Add-support-for-all-Toshiba-Memory-produ.patch
 * backport-5.4/456-v5.1-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UExxG.patch
 * backport-5.4/460-v5.0-mtd-spi-nor-Add-support-for-mx25u12835f.patch
 * backport-5.4/460-v5.3-mtd-spinand-Define-macros-for-page-read-ops-with-thr.patch
 * backport-5.4/461-v5.3-mtd-spinand-Add-support-for-two-byte-device-IDs.patch
 * backport-5.4/462-v5.3-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UFxxG.patch
 * backport-5.4/463-v5.3-mtd-spinand-Add-initial-support-for-Paragon-PN26G0xA.patch
 * backport-5.4/700-v5.1-net-phylink-only-call-mac_config-during-resolve-when.patch
 * backport-5.4/701-v5.2-net-phylink-ensure-inband-AN-works-correctly.patch
 * backport-5.4/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch
 * backport-5.4/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch
 * backport-5.4/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch
 * backport-5.4/705-v5.1-net-phy-provide-full-set-of-accessor-functions-to-MM.patch
 * backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch
 * backport-5.4/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch
 * backport-5.4/708-v5.3-net-phylink-remove-netdev-from-phylink-mii-ioctl-emu.patch
 * backport-5.4/709-v5.3-net-phylink-support-for-link-gpio-interrupt.patch
 * backport-5.4/710-v5.3-net-phy-allow-Clause-45-access-via-mii-ioctl.patch
 * backport-5.4/711-v5.3-net-sfp-add-mandatory-attach-detach-methods-for-sfp-.patch
 * backport-5.4/712-v5.3-net-sfp-remove-sfp-bus-use-of-netdevs.patch
 * backport-5.4/713-v5.2-net-phylink-avoid-reducing-support-mask.patch
 * backport-5.4/714-v5.3-net-sfp-Stop-SFP-polling-and-interrupt-handling-duri.patch
 * backport-5.4/715-v5.3-net-phylink-don-t-start-and-stop-SGMII-PHYs-in-SFP-m.patch
 * backport-5.4/740-v5.5-net-phy-avoid-matching-all-ones-clause-45-PHY-IDs.patch
 * backport-5.4/741-v5.5-net-phylink-fix-link-mode-modification-in-PHY-mode.patch
 * pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch
 * pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch
 * pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch
 * pending-5.4/220-optimize_inlining.patch
 * pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch
 * pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch
 * pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch
 * pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch

Some bigger changes were done to this feature and we did not port this patch yet:
 * hack-5.4/207-disable-modorder.patch

This depends on BOOTMEM which was removed from the kernel, this needs some bigger changes:
 * hack-5.4/930-crashlog.patch

A different version of the FPU disable patch was merged upstream, OpenWrt needs some adaptations.
 * pending-5.4/304-mips_disable_fpu.patch

- no crashlog support yet as a required file got deleted upstream
- Removed patch below, which is now seen as a recursive dependency [1]
- Removed patch below due to build error [2]
- fix still required to avoid identical function def [3]
- Fixes included from Blocktrron
- Fixes included from Chunkeey
- Fix included from nbd regarding "dst leak in Flow Offload"

[1] target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch
[2] target/linux/generic/hack-5.4/207-disable-modorder.patch
[3] target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch

Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Signed-off-by: David Bauer <mail@david-bauer.net>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Signed-off-by: Robert Marko <robimarko@gmail.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
216 files changed:
include/kernel-version.mk
target/linux/generic/backport-5.4/011-kbuild-export-SUBARCH.patch
target/linux/generic/backport-5.4/020-backport_netfilter_rtcache.patch
target/linux/generic/backport-5.4/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch [deleted file]
target/linux/generic/backport-5.4/048-v4.21-mtd-improve-calculating-partition-boundaries-when-ch.patch [deleted file]
target/linux/generic/backport-5.4/080-v5.1-0001-bcma-keep-a-direct-pointer-to-the-struct-device.patch [deleted file]
target/linux/generic/backport-5.4/080-v5.1-0002-bcma-use-dev_-printing-functions.patch [deleted file]
target/linux/generic/backport-5.4/095-Allow-class-e-address-assignment-via-ifconfig-ioctl.patch [deleted file]
target/linux/generic/backport-5.4/101-arm-cns3xxx-use-actual-size-reads-for-PCIe.patch [deleted file]
target/linux/generic/backport-5.4/200-v5.2-usb-dwc2-Set-lpm-mode-parameters-depend-on-HW-configuration.patch [deleted file]
target/linux/generic/backport-5.4/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch [deleted file]
target/linux/generic/backport-5.4/343-netfilter-nft_flow_offload-handle-netdevice-events-f.patch
target/linux/generic/backport-5.4/370-netfilter-nf_flow_table-fix-offloaded-connection-tim.patch
target/linux/generic/backport-5.4/371-netfilter-nf_flow_table-fix-up-ct-state-of-flows-aft.patch
target/linux/generic/backport-5.4/380-v5.3-net-sched-Introduce-act_ctinfo-action.patch [deleted file]
target/linux/generic/backport-5.4/450-v5.0-mtd-spinand-winbond-Add-support-for-W25N01GV.patch [deleted file]
target/linux/generic/backport-5.4/451-v5.0-mtd-spinand-Add-initial-support-for-Toshiba-TC58CVG2.patch [deleted file]
target/linux/generic/backport-5.4/452-v5.0-mtd-spinand-add-support-for-GigaDevice-GD5FxGQ4xA.patch [deleted file]
target/linux/generic/backport-5.4/455-v5.1-mtd-spinand-Add-support-for-all-Toshiba-Memory-produ.patch [deleted file]
target/linux/generic/backport-5.4/456-v5.1-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UExxG.patch [deleted file]
target/linux/generic/backport-5.4/460-v5.0-mtd-spi-nor-Add-support-for-mx25u12835f.patch [deleted file]
target/linux/generic/backport-5.4/460-v5.3-mtd-spinand-Define-macros-for-page-read-ops-with-thr.patch [deleted file]
target/linux/generic/backport-5.4/461-v5.3-mtd-spinand-Add-support-for-two-byte-device-IDs.patch [deleted file]
target/linux/generic/backport-5.4/462-v5.3-mtd-spinand-Add-support-for-GigaDevice-GD5F1GQ4UFxxG.patch [deleted file]
target/linux/generic/backport-5.4/463-v5.3-mtd-spinand-Add-initial-support-for-Paragon-PN26G0xA.patch [deleted file]
target/linux/generic/backport-5.4/700-v5.1-net-phylink-only-call-mac_config-during-resolve-when.patch [deleted file]
target/linux/generic/backport-5.4/701-v5.2-net-phylink-ensure-inband-AN-works-correctly.patch [deleted file]
target/linux/generic/backport-5.4/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch [deleted file]
target/linux/generic/backport-5.4/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch [deleted file]
target/linux/generic/backport-5.4/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch [deleted file]
target/linux/generic/backport-5.4/705-v5.1-net-phy-provide-full-set-of-accessor-functions-to-MM.patch [deleted file]
target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch [deleted file]
target/linux/generic/backport-5.4/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch [deleted file]
target/linux/generic/backport-5.4/708-v5.3-net-phylink-remove-netdev-from-phylink-mii-ioctl-emu.patch [deleted file]
target/linux/generic/backport-5.4/709-v5.3-net-phylink-support-for-link-gpio-interrupt.patch [deleted file]
target/linux/generic/backport-5.4/710-v5.3-net-phy-allow-Clause-45-access-via-mii-ioctl.patch [deleted file]
target/linux/generic/backport-5.4/711-v5.3-net-sfp-add-mandatory-attach-detach-methods-for-sfp-.patch [deleted file]
target/linux/generic/backport-5.4/712-v5.3-net-sfp-remove-sfp-bus-use-of-netdevs.patch [deleted file]
target/linux/generic/backport-5.4/713-v5.2-net-phylink-avoid-reducing-support-mask.patch [deleted file]
target/linux/generic/backport-5.4/714-v5.3-net-sfp-Stop-SFP-polling-and-interrupt-handling-duri.patch [deleted file]
target/linux/generic/backport-5.4/715-v5.3-net-phylink-don-t-start-and-stop-SGMII-PHYs-in-SFP-m.patch [deleted file]
target/linux/generic/backport-5.4/716-v5.4-net-sfp-move-fwnode-parsing-into-sfp-bus-layer.patch
target/linux/generic/backport-5.4/717-v5.5-net-sfp-rework-upstream-interface.patch
target/linux/generic/backport-5.4/718-v5.5-net-sfp-fix-sfp_bus_put-kernel-documentation.patch
target/linux/generic/backport-5.4/720-v5.5-net-sfp-move-sfp-sub-state-machines-into-separate-fu.patch
target/linux/generic/backport-5.4/721-v5.5-net-sfp-move-tx-disable-on-device-down-to-main-state.patch
target/linux/generic/backport-5.4/722-v5.5-net-sfp-rename-sfp_sm_ins_next-as-sfp_sm_mod_next.patch
target/linux/generic/backport-5.4/723-v5.5-net-sfp-handle-module-remove-outside-state-machine.patch
target/linux/generic/backport-5.4/724-v5.5-net-sfp-rename-T_PROBE_WAIT-to-T_SERIAL.patch
target/linux/generic/backport-5.4/725-v5.5-net-sfp-parse-SFP-power-requirement-earlier.patch
target/linux/generic/backport-5.4/726-v5.5-net-sfp-avoid-power-switch-on-address-change-modules.patch
target/linux/generic/backport-5.4/727-v5.5-net-sfp-control-TX_DISABLE-and-phy-only-from-main-st.patch
target/linux/generic/backport-5.4/728-v5.5-net-sfp-split-the-PHY-probe-from-sfp_sm_mod_init.patch
target/linux/generic/backport-5.4/729-v5.5-net-sfp-eliminate-mdelay-from-PHY-probe.patch
target/linux/generic/backport-5.4/730-v5.5-net-sfp-allow-fault-processing-to-transition-to-othe.patch
target/linux/generic/backport-5.4/731-v5.5-net-sfp-ensure-TX_FAULT-has-deasserted-before-probin.patch
target/linux/generic/backport-5.4/732-v5.5-net-sfp-track-upstream-s-attachment-state-in-state-m.patch
target/linux/generic/backport-5.4/733-v5.5-net-sfp-split-power-mode-switching-from-probe.patch
target/linux/generic/backport-5.4/734-v5.5-net-sfp-move-module-insert-reporting-out-of-probe.patch
target/linux/generic/backport-5.4/735-v5.5-net-sfp-allow-sfp-to-probe-slow-to-initialise-GPON-m.patch
target/linux/generic/backport-5.4/736-v5.5-net-sfp-allow-modules-with-slow-diagnostics-to-probe.patch
target/linux/generic/backport-5.4/737-v5.5-net-phy-add-core-phylib-sfp-support.patch
target/linux/generic/backport-5.4/738-v5.5-net-phy-marvell10g-add-SFP-support.patch
target/linux/generic/backport-5.4/739-v5.5-net-phylink-update-to-use-phy_support_asym_pause.patch
target/linux/generic/backport-5.4/740-v5.5-net-phy-avoid-matching-all-ones-clause-45-PHY-IDs.patch [deleted file]
target/linux/generic/backport-5.4/741-v5.5-net-phylink-fix-link-mode-modification-in-PHY-mode.patch [deleted file]
target/linux/generic/backport-5.4/742-v5.5-net-sfp-add-support-for-module-quirks.patch
target/linux/generic/backport-5.4/743-v5.5-net-sfp-add-some-quirks-for-GPON-modules.patch
target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch
target/linux/generic/config-5.4
target/linux/generic/files/drivers/net/phy/ar8216.c
target/linux/generic/hack-5.4/204-module_strip.patch
target/linux/generic/hack-5.4/207-disable-modorder.patch [deleted file]
target/linux/generic/hack-5.4/214-spidev_h_portability.patch
target/linux/generic/hack-5.4/220-gc_sections.patch
target/linux/generic/hack-5.4/221-module_exports.patch
target/linux/generic/hack-5.4/230-openwrt_lzma_options.patch
target/linux/generic/hack-5.4/250-netfilter_depends.patch
target/linux/generic/hack-5.4/251-sound_kconfig.patch
target/linux/generic/hack-5.4/259-regmap_dynamic.patch
target/linux/generic/hack-5.4/260-crypto_test_dependencies.patch
target/linux/generic/hack-5.4/260-lib-arc4-unhide.patch [new file with mode: 0644]
target/linux/generic/hack-5.4/280-rfkill-stubs.patch
target/linux/generic/hack-5.4/290-nvmem-make-CONFIG_NVMEM-tristate-again.patch
target/linux/generic/hack-5.4/300-MIPS-r4k_cache-use-more-efficient-cache-blast.patch
target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch
target/linux/generic/hack-5.4/321-powerpc_crtsavres_prereq.patch
target/linux/generic/hack-5.4/550-loop-Report-EOPNOTSUPP-properly.patch
target/linux/generic/hack-5.4/551-loop-Better-discard-support-for-block-devices.patch
target/linux/generic/hack-5.4/640-bridge-only-accept-EAP-locally.patch
target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch
target/linux/generic/hack-5.4/647-netfilter-flow-acct.patch
target/linux/generic/hack-5.4/650-netfilter-add-xt_OFFLOAD-target.patch
target/linux/generic/hack-5.4/651-wireless_mesh_header.patch
target/linux/generic/hack-5.4/660-fq_codel_defaults.patch
target/linux/generic/hack-5.4/661-use_fq_codel_by_default.patch
target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch
target/linux/generic/hack-5.4/700-swconfig_switch_drivers.patch
target/linux/generic/hack-5.4/702-phy_add_aneg_done_function.patch
target/linux/generic/hack-5.4/721-phy_packets.patch
target/linux/generic/hack-5.4/773-bgmac-add-srab-switch.patch
target/linux/generic/hack-5.4/901-debloat_sock_diag.patch
target/linux/generic/hack-5.4/902-debloat_proc.patch
target/linux/generic/hack-5.4/904-debloat_dma_buf.patch
target/linux/generic/hack-5.4/911-kobject_add_broadcast_uevent.patch
target/linux/generic/hack-5.4/930-crashlog.patch [deleted file]
target/linux/generic/pending-5.4/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch
target/linux/generic/pending-5.4/103-MIPS-perf-ath79-Fix-perfcount-IRQ-assignment.patch [deleted file]
target/linux/generic/pending-5.4/110-ehci_hcd_ignore_oc.patch
target/linux/generic/pending-5.4/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch
target/linux/generic/pending-5.4/130-add-linux-spidev-compatible-si3210.patch
target/linux/generic/pending-5.4/131-spi-use-gpio_set_value_cansleep-for-setting-chipsele.patch [deleted file]
target/linux/generic/pending-5.4/132-spi-spi-gpio-fix-crash-when-num-chipselects-is-0.patch [deleted file]
target/linux/generic/pending-5.4/150-bridge_allow_receiption_on_disabled_port.patch
target/linux/generic/pending-5.4/180-net-phy-at803x-add-support-for-AT8032.patch
target/linux/generic/pending-5.4/201-extra_optimization.patch
target/linux/generic/pending-5.4/203-kallsyms_uncompressed.patch
target/linux/generic/pending-5.4/205-backtrace_module_info.patch
target/linux/generic/pending-5.4/220-optimize_inlining.patch [deleted file]
target/linux/generic/pending-5.4/240-remove-unsane-filenames-from-deps_initramfs-list.patch
target/linux/generic/pending-5.4/261-enable_wilink_platform_without_drivers.patch
target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch
target/linux/generic/pending-5.4/302-mips_no_branch_likely.patch
target/linux/generic/pending-5.4/304-mips_disable_fpu.patch [deleted file]
target/linux/generic/pending-5.4/305-mips_module_reloc.patch
target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch
target/linux/generic/pending-5.4/310-arm_module_unresolved_weak_sym.patch
target/linux/generic/pending-5.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch
target/linux/generic/pending-5.4/332-arc-add-OWRTDTB-section.patch
target/linux/generic/pending-5.4/333-arc-enable-unaligned-access-in-kernel-mode.patch
target/linux/generic/pending-5.4/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch [deleted file]
target/linux/generic/pending-5.4/342-powerpc-Enable-kernel-XZ-compression-option-on-PPC_8.patch
target/linux/generic/pending-5.4/400-mtd-add-rootfs-split-support.patch
target/linux/generic/pending-5.4/401-mtd-add-support-for-different-partition-parser-types.patch
target/linux/generic/pending-5.4/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
target/linux/generic/pending-5.4/403-mtd-hook-mtdsplit-to-Kbuild.patch
target/linux/generic/pending-5.4/404-mtd-add-more-helper-functions.patch
target/linux/generic/pending-5.4/411-mtd-partial_eraseblock_write.patch
target/linux/generic/pending-5.4/412-mtd-partial_eraseblock_unlock.patch
target/linux/generic/pending-5.4/419-mtd-redboot-add-of_match_table-with-DT-binding.patch
target/linux/generic/pending-5.4/420-mtd-redboot_space.patch
target/linux/generic/pending-5.4/430-mtd-add-myloader-partition-parser.patch
target/linux/generic/pending-5.4/431-mtd-bcm47xxpart-check-for-bad-blocks-when-calculatin.patch
target/linux/generic/pending-5.4/432-mtd-bcm47xxpart-detect-T_Meter-partition.patch
target/linux/generic/pending-5.4/440-block2mtd_init.patch
target/linux/generic/pending-5.4/441-block2mtd_probe.patch
target/linux/generic/pending-5.4/450-mtd-spi-nor-allow-NOR-driver-to-write-fewer-bytes-th.patch
target/linux/generic/pending-5.4/460-mtd-cfi_cmdset_0002-no-erase_suspend.patch
target/linux/generic/pending-5.4/461-mtd-cfi_cmdset_0002-add-buffer-write-cmd-timeout.patch
target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch
target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch
target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch
target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch [deleted file]
target/linux/generic/pending-5.4/476-mtd-spi-nor-add-eon-en25q128.patch
target/linux/generic/pending-5.4/477-mtd-add-spi-nor-add-mx25u3235f.patch [deleted file]
target/linux/generic/pending-5.4/479-mtd-spi-nor-add-eon-en25qh64.patch [deleted file]
target/linux/generic/pending-5.4/479-mtd-spi-nor-add-xtx-xt25f128b.patch
target/linux/generic/pending-5.4/480-mtd-set-rootfs-to-be-root-dev.patch
target/linux/generic/pending-5.4/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
target/linux/generic/pending-5.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch
target/linux/generic/pending-5.4/492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch
target/linux/generic/pending-5.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch
target/linux/generic/pending-5.4/494-mtd-ubi-add-EOF-marker-support.patch
target/linux/generic/pending-5.4/495-mtd-core-add-get_mtd_device_by_node.patch
target/linux/generic/pending-5.4/497-mtd-mtdconcat-add-dt-driver-for-concat-devices.patch
target/linux/generic/pending-5.4/530-jffs2_make_lzma_available.patch
target/linux/generic/pending-5.4/532-jffs2_eofdetect.patch
target/linux/generic/pending-5.4/553-ubifs-Add-option-to-create-UBI-FS-version-4-on-empty.patch
target/linux/generic/pending-5.4/600-netfilter_conntrack_flush.patch
target/linux/generic/pending-5.4/610-netfilter_match_bypass_default_checks.patch
target/linux/generic/pending-5.4/611-netfilter_match_bypass_default_table.patch
target/linux/generic/pending-5.4/612-netfilter_match_reduce_memory_access.patch
target/linux/generic/pending-5.4/613-netfilter_optional_tcp_window_check.patch
target/linux/generic/pending-5.4/616-net_optimize_xfrm_calls.patch
target/linux/generic/pending-5.4/620-net_sched-codel-do-not-defer-queue-length-update.patch
target/linux/generic/pending-5.4/630-packet_socket_type.patch
target/linux/generic/pending-5.4/640-netfilter-nf_flow_table-add-hardware-offload-support.patch
target/linux/generic/pending-5.4/641-netfilter-nf_flow_table-support-hw-offload-through-v.patch
target/linux/generic/pending-5.4/642-net-8021q-support-hardware-flow-table-offload.patch
target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch
target/linux/generic/pending-5.4/644-net-pppoe-support-hardware-flow-table-offload.patch
target/linux/generic/pending-5.4/645-netfilter-nf_flow_table-rework-hardware-offload-time.patch
target/linux/generic/pending-5.4/646-netfilter-nf_flow_table-rework-private-driver-data.patch
target/linux/generic/pending-5.4/655-increase_skb_pad.patch
target/linux/generic/pending-5.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
target/linux/generic/pending-5.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
target/linux/generic/pending-5.4/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch
target/linux/generic/pending-5.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch
target/linux/generic/pending-5.4/703-phy-add-detach-callback-to-struct-phy_driver.patch
target/linux/generic/pending-5.4/735-net-phy-at803x-fix-at8033-sgmii-mode.patch
target/linux/generic/pending-5.4/739-net-avoid-tx-fault-with-Nokia-GPON-module.patch
target/linux/generic/pending-5.4/740-net-sfp-remove-incomplete-100BASE-FX-and-100BASE-LX-.patch
target/linux/generic/pending-5.4/741-net-sfp-derive-interface-mode-from-ethtool-link-mode.patch
target/linux/generic/pending-5.4/742-net-sfp-add-more-extended-compliance-codes.patch
target/linux/generic/pending-5.4/743-net-sfp-add-module-start-stop-upstream-notifications.patch
target/linux/generic/pending-5.4/744-net-sfp-move-phy_start-phy_stop-to-phylink.patch
target/linux/generic/pending-5.4/745-net-mdio-i2c-add-support-for-Clause-45-accesses.patch
target/linux/generic/pending-5.4/746-net-phylink-re-split-__phylink_connect_phy.patch
target/linux/generic/pending-5.4/747-net-phylink-support-Clause-45-PHYs-on-SFP-modules.patch
target/linux/generic/pending-5.4/748-net-phylink-split-link_an_mode-configured-and-curren.patch
target/linux/generic/pending-5.4/749-net-phylink-split-phylink_sfp_module_insert.patch
target/linux/generic/pending-5.4/750-net-phylink-delay-MAC-configuration-for-copper-SFP-m.patch
target/linux/generic/pending-5.4/751-net-phylink-make-Broadcom-BCM84881-based-SFPs-work.patch
target/linux/generic/pending-5.4/752-net-phy-add-Broadcom-BCM84881-PHY-driver.patch
target/linux/generic/pending-5.4/753-net-sfp-add-support-for-Clause-45-PHYs.patch
target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch
target/linux/generic/pending-5.4/755-net-sfp-fix-hwmon.patch
target/linux/generic/pending-5.4/756-net-sfp-use-a-definition-for-the-fault-recovery-atte.patch
target/linux/generic/pending-5.4/757-net-sfp-rename-sm_retries.patch
target/linux/generic/pending-5.4/758-net-sfp-error-handling-for-phy-probe.patch
target/linux/generic/pending-5.4/759-net-sfp-re-attempt-probing-for-phy.patch
target/linux/generic/pending-5.4/810-pci_disable_common_quirks.patch
target/linux/generic/pending-5.4/811-pci_disable_usb_common_quirks.patch
target/linux/generic/pending-5.4/834-ledtrig-libata.patch
target/linux/generic/pending-5.4/920-mangle_bootargs.patch

index 453f6bff9bb21671d4e59cf67f514cb0d1d1a7fc..6b469051fe93ec8c5641aea7bde103cab177dbd1 100644 (file)
@@ -8,9 +8,11 @@ endif
 
 LINUX_VERSION-4.14 = .171
 LINUX_VERSION-4.19 = .106
+LINUX_VERSION-5.4 = .22
 
 LINUX_KERNEL_HASH-4.14.171 = 4fe02489e4b4a187eccf0ef87df6100534c9d485e76d876b1fa247c7635332a0
 LINUX_KERNEL_HASH-4.19.106 = 63c8bd76a9b282e18112f8ff9e3fd41e3d1df9f9b7248ea1a370b05a827e9cda
+LINUX_KERNEL_HASH-5.4.22 = 661bcb8d7e390dcc28e53795485e648f2bdc9b697b731459cc2bcc9ceb4a7d1a
 
 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
 sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
index a42c72044622a812cf3229f59ebfc75d902ad21c..f39e876436863005605cd058f59a089349102211 100644 (file)
@@ -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
  
index c02b8f39e01bad534ba1960390310f6a2fdb0d31..7b1aab9accb95ba6efd22ccd0c84d2bbb3234206 100644 (file)
@@ -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 (file)
index d587c9e..0000000
+++ /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 (file)
index 0229627..0000000
+++ /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 (file)
index cc32aee..0000000
+++ /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 (file)
index 7ce8ba8..0000000
+++ /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 (file)
index bf6d9ac..0000000
+++ /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 (file)
index 2b33843..0000000
+++ /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 (file)
index ed4aadf..0000000
+++ /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 (file)
index 7c574fd..0000000
+++ /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 */
index 577f2d3df6dc756039497813dd224f6f3c5cc8a6..501f42d88e2b70051c0922216767626dda162816 100644 (file)
@@ -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;
 -}
index 7c10f6f1897e1bab8fa3679ecfb9573084d2ad4a..4edcbe169171146f0d2138387adce68af7165c74 100644 (file)
@@ -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);
+ }
index 2e25066499736f56690345f6cb79b2539d6a7ee0..383641dfb72fa8132a415c6b15fd9d4bb13fad17 100644 (file)
@@ -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 (file)
index a680402..0000000
+++ /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 (file)
index 2024577..0000000
+++ /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 (file)
index ed42f00..0000000
+++ /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[] = {
-       &macronix_spinand_manufacturer,
-       &micron_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 (file)
index 4e6f18a..0000000
+++ /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,
-       &macronix_spinand_manufacturer,
-       &micron_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 (file)
index aad82dc..0000000
+++ /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 (file)
index 8e48deb..0000000
+++ /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 (file)
index 1bdf35b..0000000
+++ /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 (file)
index c28ae1d..0000000
+++ /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 (file)
index fcbecbb..0000000
+++ /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 (file)
index 06d87ba..0000000
+++ /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 (file)
index 17b8e77..0000000
+++ /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,
-       &macronix_spinand_manufacturer,
-       &micron_spinand_manufacturer,
-+      &paragon_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 = &paragon_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 (file)
index 0e272ea..0000000
+++ /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 (file)
index 746aca2..0000000
+++ /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 (file)
index 3ada516..0000000
+++ /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 (file)
index 4ad3bf6..0000000
+++ /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 (file)
index 00ef6b7..0000000
+++ /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 (file)
index 9a587ad..0000000
+++ /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 (file)
index dddfcc2..0000000
+++ /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 (file)
index 6d47fa9..0000000
+++ /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 (file)
index 1c3f1cc..0000000
+++ /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 (file)
index 84a1c85..0000000
+++ /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 (file)
index 3a601c6..0000000
+++ /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 (file)
index 74dc39f..0000000
+++ /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 (file)
index 8f0c37e..0000000
+++ /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 (file)
index 3aa8d9e..0000000
+++ /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 (file)
index 0509950..0000000
+++ /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 (file)
index 94fb2fb..0000000
+++ /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);
index 27ab78f3eebf8c6d1f7a72a9d81d3ebf647dbd2b..858c584c056bc1b65a8f63fd5f5022b1fcfe3dee 100644 (file)
@@ -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
  }
  
  /**
index f7dd187c162d31104f19feee9d2f626abb937044..f3454851bfe93b40c2d250c8043159058ab4993c 100644 (file)
@@ -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();
  
index 59d2ce588c40d3995e8c1609373e084b32e6307c..13dc5216f96770b028bd8c5bdc3bb491c569e8a1 100644 (file)
@@ -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
index 2f90b004387a87b36f9753ca8527f5dec32485d5..e4ca85b6e2d7d5b9b065221aa17a7002177bb11e 100644 (file)
@@ -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;
        }
index 5b3caaf0fd6688afc70fd10024426641e73cdbcd..71021c8f4eded7a57c38f80ce702a6188e30de6b 100644 (file)
@@ -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);
index ed84e76fdf4764482754d8ac18d8c50ae2e1c03a..2974586b13027e80a23502508bd5198d76426c05 100644 (file)
@@ -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);
index 542aeaea772763d599bd81b7829a4d8578b8e21c..62cdb8a6ce671a5739f2231e425447e31849ba72 100644 (file)
@@ -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:
index e0c35feea3c7ea0dfdda977a3523c6d64d992ba0..780e7d7876cd51ac42624a742e2e5df6b3efda19 100644 (file)
@@ -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);
index 0b358f86d23b5d14d5f75a67fc09ba5e47cff9cd..df5ef9f79e03bacb85eb28f4101ad20f381a1a68 100644 (file)
@@ -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));
index 2ddd4c4d02699a1e6e94a32b349c92854d390838..5237f5505545dfb1e686b3d1da2c15d072fc98bf 100644 (file)
@@ -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;
  
index 0eac6abb88a05337f756ff73cd53db4173f1f5f0..eebcac639f33049034248da9496f419bddebf0f0 100644 (file)
@@ -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:
index 7830b9268f9d2f3c18b050b440427a81011e606f..92df26c6a2ae17d1b0fc4301c787e2a46c835d93 100644 (file)
@@ -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 &&
index 5dc92bd10e3589afd47a743babc2cefcdf40871b..e26a7276d372d18f603f2092bdcb13d4451b283c 100644 (file)
@@ -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)
index 6e34e6cc0f94fc55328be6537f0e4cd0af4f2086..d45b0618bdb899c9f94e890833716e11b2682e30 100644 (file)
@@ -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) {
index 03415fb6e7780937812e56bd0efd6b91f9f9cf34..acca29be8757d870b9c4555e9a50e4ec28927eea 100644 (file)
@@ -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:
index 5ee44dbf0c372ec40ef63bb9f627f5133bebd098..714d783c4efc96cfa69b903203729cf4b3deed80 100644 (file)
@@ -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)
  {
index 06b3cb54284cd0b12c5f68eb0c84594bada9d1cb..f645e441910daf59ea5c68bb8ca496408054ee1d 100644 (file)
@@ -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:
index 26b6a6b0e4a15cfba8b9a7023df60f69cbb7507a..e49bde27e3257f609d21ec0deada59e235f73396 100644 (file)
@@ -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);
index 6cbd0864f73dd7de4052323f98ca200c61bdca0c..ab1ae753d7120618b205eeb4a4703aaf6a7acfcf 100644 (file)
@@ -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 {
index fe1e6c48223d78783a1e007816d4df32af66e597..e6c1fd71d8b053af11bc383d303595edf5774c2f 100644 (file)
@@ -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;
  
index 9b34d40a0ff3c2ab073c7bbecba6ff9da86dc336..7835d3f19ffc9db751686d65fa040c04dfd9f5e7 100644 (file)
@@ -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);
index a67431ce5c13c004a963fa63855c4678b1178c90..40a666a3f2ab5bc00592e6fd0a1d53d5a2ddd310 100644 (file)
@@ -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;
  
index 15db0abc969ff4d39a18fca5420fba09b53c5991..84a8214ca5215dbd426481c60b6ce86e0ac4587a 100644 (file)
@@ -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 (file)
index 81f161e..0000000
+++ /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 (file)
index 596ecc8..0000000
+++ /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);
index 5068bd468c12192015a2cbd133426d6e11cac711..46c56a655aca4a469bcf2cb3dcc877616afefcd5 100644 (file)
@@ -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);
index 10c34881d81575536ceee395b9ae1bce445d5193..0b085ff09471b35dc2d8249f5aed21dc8095a943 100644 (file)
@@ -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;
  };
  
index 163d8072e6b9b726e90d507afaab4a0630c373a6..6e3c87a7e4e9e2ccab14eaf88e2bbab477c3b826 100644 (file)
@@ -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;
index 6cb4f927a0f242498aa2154c360b9df4296878b8..45322e6915589e4b9d6856cdf68870f66fe0f879 100644 (file)
@@ -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
index 5ace4e0b15c82e3f948a410443a575f3f7b8e477..031efe61816c9b7bc3d01671bcb4f1e44c40dd48 100644 (file)
@@ -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);
index 41bb021e71979fc0a11dfc1d8daa71649b865618..d37dfd4f98a7e6db6b78ef33c1971aa9be0b5c8d 100644 (file)
@@ -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 (file)
index f47da3f..0000000
+++ /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)
-       @:
index 093f600c854fc458d5cbf9819788b9026d76b68d..415e9a423c642ddeb842c564f58941974909defc 100644 (file)
@@ -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) \
index 77422e821bd715688f89d9441d47050cbd7a7f5e..fbac74c11128333b8ed11ac785a8a92a4b0bd21d 100644 (file)
@@ -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 = .;
-       }
index cd5ae5830c5f392425e0efc6e6ad1336a1f4f88c..a0b7903ecf7f19078efd82ced64ce708a29b7345 100644 (file)
@@ -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     $@
index 1e945cd4c13d7a524b52d557ba1efdc8cacc0715..c63d9d276c87a55e29df1b10b92f2b3dccbf4579 100644 (file)
@@ -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=
index cb744bd8abfdc2c355d22a5691c8423576a14cb3..512e58efcf119a881c7d9c9a6d144c744d145a3e 100644 (file)
@@ -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'
index 2cfc2fab3a1e42a755315f39aeefe73d9b8025a6..bcc6e5476b1807032409668311aa72794928623a 100644 (file)
@@ -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
index ec4636dbeec007e7feacacecd2b87c8cd8817bd7..9950f156d36a8c7b23fb533e0f9374d090ccfff9 100644 (file)
@@ -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); \
  })
  
index f11f45437f9d5b7912c6a4f4786ea1d5d9cd76fc..c9caa2733ac462b495dcb5b97c2cd8a665a7bc53 100644 (file)
@@ -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 (file)
index 0000000..b518ee2
--- /dev/null
@@ -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"
index 7bb7d26b90585ceddd79e67570a96e3a78b7dc03..2e48aea1cfb8c736db0cc510ed310b9c788d15c5 100644 (file)
@@ -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
index ad45dc9168542d7f3b1ecc6e86f11e4274760c0b..4b4d6438dc7590e7c4f6f3d15f5b42aaef161ecd 100644 (file)
@@ -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
index c07ccf9474e0e9947f97ce68c9eeee0b02204ace..aed08a5ec9d86fbbf4f3f83527b5395916057c24 100644 (file)
@@ -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                                         \
+ }
index da7d1fdbe028597b9013668dd2f14dc75503eb41..a6daf1bdbf355977c27d4c33b7fab506d8ce398b 100644 (file)
@@ -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:"
index 26c385f011404d24b5d2b34b6a3d7ddd0d751935..8591705eaea2c5e3b07a7225b97e023baf5d9a3c 100644 (file)
@@ -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
index 023de0078d40adb228f7db2cd86eb578534e912d..479513bf546d4ff91d5d564dec9bb0e4ae798a5f 100644 (file)
@@ -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) {
index ac393e5f133089050c985a9187be2a4f25714f1b..38091290aa25378994e8462939d1b1707829ed21 100644 (file)
@@ -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.
         */
index f77a1965ca3bf4848d8b10f7d8981a2a0c5f7e28..a713aa3cffac2c0c9ceeba69032c6a4cb656e4b1 100644 (file)
@@ -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,
index a4f246d1127e561bd5c31fb6d6f777bd1dd11a0d..f5ca1bef6eca64e3917c589f57801d0ea34538fe 100644 (file)
@@ -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,
index fd8a871113ed48532cc7c78ed0657fbfaaeecbd4..920514f11f1c5a0cdbcd9124e6cd244acc2f36de 100644 (file)
@@ -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);
  
  #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);
index 55247bc2a375707fcc13e680962bdbeb202e35c8..3a9d64dd4a93e71816257fd789945cfb5b7e9738 100644 (file)
@@ -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);
index 965b431d0113b97c55fff360576e8024753d310a..b134e6c6c030d1843552bd5094a56d79d40f3baa 100644 (file)
@@ -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
index 42698c645192d48441b0757531044e25a32e9fe0..968ce1259967e7fcd04186c3ff9fad08e2baca7b 100644 (file)
@@ -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;
index 2778377de70da9ff9998e5a102a580afc8675ee8..e8d456dde86418aa602bfec158ba03467351a7d3 100644 (file)
@@ -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) {
index e49507a5904472a6ed5cbf753b8cc84d94927c76..149a923dcb42b9bc664c0e393018ef08916217a5 100644 (file)
@@ -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)
index ebfcfe81c722b5d68739b28abe3cea98b10b256b..b1b7ce7d04c478e616e3229fe125bb3e2a5a9cdb 100644 (file)
@@ -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 {
index a0e6484be8f3a2402fe0b7133182b56cdfdfb01c..0f4dab34603fc1f32d78289055e2a845eaf31b54 100644 (file)
@@ -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);
index 1ad7d46764540fcd2f50e75074eddfbc26e47551..89f113a1c872c50a9029c76a44bd8b8a207fbc01 100644 (file)
@@ -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;
index 3b4781657ee592eadce9bc9559a95833a12a20b5..89e0df460671a18f4a3bae3484120be9a4299933 100644 (file)
@@ -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)
  {
index 639f76d3091f04c559a1901f47f17e158efec413..aec1d58fa7a6d175dc236e22518997f8a0c53ef6 100644 (file)
@@ -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
index 1442cee8bb96e3920b499c1100bfe8e3431636e4..880aea0a85a163363378f48673d7973c132a8a5b 100644 (file)
@@ -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)
  {
index 3cbafc701e9083d8a667d1bd1441f78e27087c85..a9a250fe403b62c20112182767b932093b89e40d 100644 (file)
@@ -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)
+ {
index 06b94117c111b927c4a9c9992b0e59087096d2c7..52453e5ce3a01ede0e20c5801e9f35be3386ac3c 100644 (file)
@@ -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 (file)
index bb16f22..0000000
+++ /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:
index be9ceebc3a5d25a039b8b5089cf772af14137352..33eb34c913ea4a81017f3512ccc935b91f7fc61d 100644 (file)
@@ -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 (file)
index 6b74c7d..0000000
+++ /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);
index cad00b5527b01f4e6b9d9ce6e27b0c84d48f5bc0..3e48a3b597d6884f56dcae30bfd6bc6ac76429d6 100644 (file)
@@ -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;
index ec541a865c81039bf55075bad4967d6c7eb4ff8b..c7aa37ec81dd232aa0b74b113884be31e0b22e9e 100644 (file)
@@ -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)
index 3a42182c973f13c3df8cd03f7425056a868af43f..152d48d4cd75a71b4e6ce22c3c59865f8ed71006 100644 (file)
@@ -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 (file)
index bd5ed6f..0000000
+++ /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 (file)
index ed94f93..0000000
+++ /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);
index 583c34a448298b1dba23c561825b7126d6415c14..c63268ece9584d10f3d6ea766e4e88343ff04732 100644 (file)
@@ -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))
index e496301e4e30b8d8b8c4d7cbefb4cac7d2df6cdd..9b8828244294038e01bfc0d85d2be243c9c8364e 100644 (file)
@@ -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 },
index cafccd42c93bdf54ba4722f5c38362d49b1973ab..79a01ed53250b223851781412c8a5d987fd748db 100644 (file)
@@ -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
index 9230279fcaae6ac42074c97255395b71e695fc19..28fde77cda642c5581d8a80a887f1ae5f7506b15 100644 (file)
@@ -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
  
index 5671173d453d3d9852f679a0e200e8bffef6a06a..857db9a9307cf36e661e3d7e4860b418558d8d31 100644 (file)
@@ -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 (file)
index ae03270..0000000
+++ /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
index c0dfe49c9bfe03080e00de696b6843684746a9bd..7d890d3e8bb1063d50cb298b252bb91c2ed8c723 100644 (file)
@@ -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)
index 9955ab3c0b38c1ebb724c4e6725ec6cf575ccb0c..c4cf2cceb7b7118cabea0abb6a9b26fd07399433 100644 (file)
@@ -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"
index e19cec1400d76a6af19d1d281f93567f15547521..f6fdabe60816a9b7529a67a0f5367608da680fc5 100644 (file)
@@ -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
  
index 6192c417d3df50f81008cc816e36e363d79d1110..bf1b489111d89fde73b2d368636b626ee49d51f9 100644 (file)
@@ -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 (file)
index 332bb71..0000000
+++ /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__ */
index a8e4e78c91e4689e5577a4e3abbb2ee7b4b86092..40a219f5d22493637ad99e195724685cd122a314 100644 (file)
@@ -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);
        }
index e73cfd61b39373e8e6e4a1d32ecdf6cbe44d881b..4e6b7b5cd3a18a0ced5e0a62397d097ed8dec365 100644 (file)
@@ -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
index bc9f0a4c4dc244a8d6e0256edccb76d36bc0c6d8..24807f78d3fef7ea183be95c3de586df30383d7e 100644 (file)
@@ -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;
                }
  
index 44d85b5b86e2a2888c10fd4d072841fc11c88ce8..a182684c16e37ef57704557ee2b7dbd745edf054 100644 (file)
@@ -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
  
index ec89547726e4ca77832d59a45e2dc00569628074..2c48eb7f133a63bdc31c03d242c80ed51d705d28 100644 (file)
@@ -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;
  
index 4e0265aef5b395ace8cd5cc93c13426e0e9ba11c..1848a84cc4970f0f60983e1f45d5580b00c27c49 100644 (file)
@@ -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 (file)
index 07a6da4..0000000
+++ /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)
index 035a84b1e49062c029fb5252ad22702cd3a91fc7..26b8a8ce178a4f7475cfddb7572134dcec5f8612 100644 (file)
@@ -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
index bc783deb409d9ec6c84817d0169c456895943672..83a4ed39a32cd38f2c34c9e526643218e36379f0 100644 (file)
@@ -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;
                }
  
index a59659cda6a9d7cd68251ff676283a71660a6aff..f471c623768bce53d58e9dacbb5c4b43e5cf38da 100644 (file)
@@ -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_
        }
  }
  
index 58d2e445745416302f3cbdfd638b3dbef14d4c93..afe3ec77563e2dec101d4310c3626bc5f575c056 100644 (file)
@@ -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;
  
index 60cf043e9ba9b0f2b617b01069bfca791aad5282..5d868fffa8bb7c34c68013ad0ba9efc26a3bee18 100644 (file)
@@ -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
index e404ec1fb273f71a018855e4264622b2fc72d717..454a37fc22e1a9c1e0d8052f119fbf36adb0828a 100644 (file)
@@ -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;
  }
  
index bf9822fda83c6af4285df43e767f06d73e645a20..f2a187df30f114be673f5f4ee2bfa60290800bc6 100644 (file)
@@ -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 */
index a54603a0f893800b32ccac5c1e37a6ad8af551c4..348fb9a842ceccf2b3fd24a3f0fdc303d9953f51 100644 (file)
@@ -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);
index fbf9a0553cc59882fe551a4320c1fbe15b65f183..8358a307cd8eab9b374ff2be49d02dd93c254ef1 100644 (file)
@@ -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);
index 85fbe0512d614ea26ced30c2c12ab053ec154925..a2cf8389898d7297e5f3f986e7d5379be91e6ae0 100644 (file)
@@ -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;
  
index bd49893dd852b334b5343022eb3a98cecefd15b9..f66da83924d29641dbee9a57c3786875fe2965ad 100644 (file)
@@ -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
index d54c284c343b5c71040d9b76b485ea0d870fd684..2ea59cd872004c22d69b9c40ab4923161d62bcb7 100644 (file)
@@ -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";
index a6d0828b995f34526116452ded440c72b1f3f4cb..852654d924a8ceb15f7d8967bd19e93e7044eb2f 100644 (file)
@@ -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;
                }
index b8ec11f3dd0776a79c4257e9d2494e0a34b9eeac..d88c226233a96ea5ea6ce45050fce9b5cc77d2f8 100644 (file)
@@ -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);
index 7e974e01ed90467f26dfaa59ced41b0146c42c64..cba17a57f3f61161b67d575649b9817973ac3cad 100644 (file)
@@ -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);
index 6981c6d9433938b2ef382d2084f4bef274ba1d70..a84af43a298aa186b89a1025cb34406272805a85 100644 (file)
@@ -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:
index 88d386302aa67c290b12ebbf1dba2595dafa122c..2595e096bb58865ebb9fe08ce8251335bad70f57 100644 (file)
@@ -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:
index 1b07791ecafd8adb9dee035aef68307152103f4d..cf9fdabd71a2de5785c0e3a40ee02964aee4796e 100644 (file)
@@ -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);
index 0c5d6cfa63e479765707d7bee2ceefc8fef986b3..24d2d4567d7ba727abd9c11b78d629b613e02bed 100644 (file)
@@ -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;
index fb6ae7df7b307f2ce7ff1ce6f7ecca1be6c0d3e5..c5db43b5e632ca9d9b5c4d0550935f8ab2a57a1a 100644 (file)
@@ -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;
index 12d785856a4e178d2e5641e9b6392b92cdd43632..d3e587ff97dd5e29ead16eb7c37f5e701c7a2400 100644 (file)
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/drivers/mtd/spi-nor/Kconfig
 +++ b/drivers/mtd/spi-nor/Kconfig
-@@ -39,6 +39,17 @@ config SPI_ASPEED_SMC
+@@ -34,6 +34,17 @@ config SPI_ASPEED_SMC
          and support for the SPI flash memory controller (SPI) for
          the host firmware. The implementation only supports SPI NOR.
  
@@ -34,23 +34,46 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +        Any flash chip larger than the size specified in this option will
 +        not use 4K sectors.
 +
- config SPI_ATMEL_QUADSPI
-       tristate "Atmel Quad SPI Controller"
-       depends on ARCH_AT91 || (ARM && COMPILE_TEST && !ARCH_EBSA110)
+ config SPI_CADENCE_QUADSPI
+       tristate "Cadence Quad SPI controller"
+       depends on OF && (ARM || ARM64 || COMPILE_TEST)
 --- a/drivers/mtd/spi-nor/spi-nor.c
 +++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -2649,10 +2649,12 @@ static int spi_nor_select_erase(struct s
+@@ -4464,6 +4464,7 @@ static void spi_nor_info_init_params(str
+       struct spi_nor_erase_map *map = &params->erase_map;
+       const struct flash_info *info = nor->info;
+       struct device_node *np = spi_nor_get_flash_node(nor);
++      struct mtd_info *mtd = &nor->mtd;
+       u8 i, erase_mask;
  
- #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
-       /* prefer "small sector" erase if possible */
--      if (info->flags & SECT_4K) {
-+      if ((info->flags & SECT_4K) && (mtd->size <=
-+          CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
-               nor->erase_opcode = SPINOR_OP_BE_4K;
-               mtd->erasesize = 4096;
--      } else if (info->flags & SECT_4K_PMC) {
-+      } else if ((info->flags & SECT_4K_PMC) && (mtd->size <=
+       /* Initialize legacy flash parameters and settings. */
+@@ -4527,6 +4528,21 @@ static void spi_nor_info_init_params(str
+        */
+       erase_mask = 0;
+       i = 0;
++#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
++      if ((info->flags & SECT_4K_PMC) && (mtd->size <=
 +                 CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
-               nor->erase_opcode = SPINOR_OP_BE_4K_PMC;
-               mtd->erasesize = 4096;
-       } else
++              erase_mask |= BIT(i);
++              spi_nor_set_erase_type(&map->erase_type[i], 4096u,
++                                     SPINOR_OP_BE_4K_PMC);
++              i++;
++      } else if ((info->flags & SECT_4K) && (mtd->size <=
++          CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
++              erase_mask |= BIT(i);
++              spi_nor_set_erase_type(&map->erase_type[i], 4096u,
++                                     SPINOR_OP_BE_4K);
++              i++;
++      }
++#else
+       if (info->flags & SECT_4K_PMC) {
+               erase_mask |= BIT(i);
+               spi_nor_set_erase_type(&map->erase_type[i], 4096u,
+@@ -4538,6 +4554,7 @@ static void spi_nor_info_init_params(str
+                                      SPINOR_OP_BE_4K);
+               i++;
+       }
++#endif
+       erase_mask |= BIT(i);
+       spi_nor_set_erase_type(&map->erase_type[i], info->sector_size,
+                              SPINOR_OP_SE);
diff --git a/target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch b/target/linux/generic/pending-5.4/475-mtd-spi-nor-Add-Winbond-w25q128jv-support.patch
deleted file mode 100644 (file)
index 72c4470..0000000
+++ /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) },
index 69ac17ce4c04a999ed0fb6d3a8305197f5b93a6f..d35530492a5d1bf37d14008b9df96b057c501e1f 100644 (file)
@@ -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 (file)
index 0648b12..0000000
+++ /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 (file)
index 6bb7754..0000000
+++ /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) },
index 664837928b65b78360e0c2162c3581a39defcc71..0c58f29d5b1ae4ed262207b830fa57e8b6786e83 100644 (file)
@@ -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) },
index dce0432fac130ddfd397fb5e0ad8c44edb72f6a7..3907ac2368f9e7de60d069a0331a7b306050155b 100644 (file)
@@ -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:
index 79d18d036fedfd1681b4f98e6f9ebe06a09f103e..b21daea4f0c1bbdf9bd8882be3184806020f8a57 100644 (file)
@@ -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)
                }
        }
  
index cb2d52561013a242faa0ae2bc0303a11ee7797a2..61fcbac92ef7488219d7a137168583c4cf3e09c8 100644 (file)
@@ -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();
  
index b76e83e4a37db174396650290578c0a259e77120..aa61f4ae8d0de11da7ca8629b5409a3ca1a3ae8f 100644 (file)
@@ -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
index 1bb53ada7fc9ef7ff2f256f80c1308a48809b574..2dff46807e27addd83bac882c7b4bf8522495c33 100644 (file)
@@ -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);
index e38f11e592ef376339b094a519cda5ccaa30c384..57f5fcceba8c455c87d7a7ef2667695d80f8fc5c 100644 (file)
@@ -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;
index 1446ca2abc3a33b085b7f3db582a0165b11abd16..3a118e38febca44ded721b3e4a6c98ed9a3dfb92 100644 (file)
@@ -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);
index 6584e22882e5df5eef3582eb4f70cf5b21f12fc5..4d7598cc7cb154bbe63d8ce2dce58be2ccfca278 100644 (file)
@@ -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 @@
index f28186a40c37505380f922568a2ff31bcf2101f4..0b6718912d285a068ac918f1a35bab91662be7ea 100644 (file)
@@ -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/
index e9952c6d84528f30f914217864ee0cd74c62a13f..df4ab9b754fb3ca373503f8ed109cd8826c41801 100644 (file)
@@ -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;
        }
  
index 02c9b4c0fa7a444baa1101703ca87c7f9dedfc4d..e726274ca2a20e4314a6e4e042b864c7111b613d 100644 (file)
@@ -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);
index fa32f88e17929f6585560c0651cf4bfb0c141212..14d3a37a8ccb2d0a1512c488abf7ae7bd62a0998 100644 (file)
@@ -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;
  
index 169114682590dd546311bf5a4572a99d29143b5f..703ac8215e3966c4d759d92946c0c6882507d2ae 100644 (file)
@@ -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;
index ba976b0751c88fe22f87899b3b62e00bb9f30acf..baf738a8d20898b8a0080c08fed0b8d17dc89069 100644 (file)
@@ -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);
  
index cd6fcf8e74de69e33e98e91569e3d5bb274c463a..79da6778b684a56094bcddd334daa9660181d946 100644 (file)
@@ -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;
  
index 634218dfc318bf2fb4c0907e1b6f639d0684a9b2..5ad13883e77c814e7fa5f196a73b5624472df83f 100644 (file)
@@ -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 */
index 6a5801027c6eda02160ce95f871d6e65e20b3124..952bf690d87321a3f753f7b80f53d6b3227b6ef2 100644 (file)
@@ -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;
  
index 457c812841d8ff29a2ef6240c613040d78e3262f..ca85b8a98caa7343c05a7dbab309d3c0b0111fc1 100644 (file)
@@ -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);
index 25f44b466ae3d5a18bb5d35fd7acd8902147e147..80c891a6301f4e5e1013c745f211bbc79dec6f66 100644 (file)
@@ -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;
  };
  
index f0946e8dd21e3355765e111332530ee20cd66b5f..b36b64f13a6713fa7ec3175fa9c9865750987f0a 100644 (file)
@@ -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;
  
index 87ff634793e326cf7bb36d184b329ba3c175a009..ea87d18e23954f8057a0893601eb9b49cd4ec133 100644 (file)
@@ -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 {
        };
  };
  
index 7547c14beded64e44f4aede63f10ec108ccbd533..d67cad715931061da245aaa765933995b7286d0a 100644 (file)
@@ -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,
index 8b09fabf12223f7d04bbd1be01705cf174979494..13394899bb2e47484356b4844e5c4c0223cc0557 100644 (file)
@@ -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,
  };
  
index 26d46ec0058a8bb7f6d8f1079b5d1168cad36e01..32f75ca759cf8b1109a3ec63b1e120160735fe2e 100644 (file)
@@ -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);
index bfb7a9c190e7746752ec7f84c8a981a6647d6e39..3c44c2927313f929011ed521eb834d2eb40795de 100644 (file)
@@ -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)
index f94d7ad3014c2abd5a1439021163a7a2eb7c2c27..159ad8a0aaf64c77d52450437942f03a63ef060e 100644 (file)
@@ -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;
index 94e325b0ccb6919611212c94590b8eff4d5fd202..4fd40c65f5f8706a2117b1912f6fa83591ac129b 100644 (file)
@@ -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
index 8b7594e9cf6db23d453267ff59d46fc05613514d..702199242dc87c6b74c4e956a9ebaa8aff50d02b 100644 (file)
@@ -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 },
index c35aca8a1830b1115dac9df648ab7cecb6a71c60..022537da705c0f30733208e99817721d6448825d 100644 (file)
@@ -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);
index 85adfedc9488b2f5d21952d0dd337dd8b3ca72f6..a92d8ec4c1e2b9b47f24b5a90e591b5db0ff09fc 100644 (file)
@@ -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
  };
  
index 61cc4e830a3b5bd72e603dac6b5777348254e92e..b1b166a194a1ebd09aed8cd6fd841742675e1588 100644 (file)
@@ -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
index 13f564059019839b210f876ed5f677c08d46fbc9..b02febefd8402a0331c1c91fcb113a946057f372 100644 (file)
@@ -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)
  {
index 1c180b225b17c8a246450bfd5e6c71d43dbba51c..7b1989021772f302839595cc50263744ce5a0b59 100644 (file)
@@ -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
index 5c00b8781f0c78eb086e60c5796f86896dd6d68b..795743057ab2b06a9aecafd0e47101dd907d9af7 100644 (file)
@@ -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
index b540e1dbc16638aa2a9e23b1806526cd6731fb9e..627d33e2ea59b44a7775f715b70a2aa1aae2ede5 100644 (file)
@@ -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);
index 304d9b40bd40cfb9a6649ce0d3cb0cbd79ce8c03..4de63058275813716c9a2a9c5d85b4a6327c5903 100644 (file)
@@ -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)
  {
index f20b66eae716fad756b9f307097ee022152b5020..8158c78b0ea4062e2666cc7dfffcdb21971fe89a 100644 (file)
@@ -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;
  
index 4ca0ded55dc9322f6a46c7d1b3fd9652e9a23d60..0ddca287b91ebbf261a839a0be1b54c56fbefda2 100644 (file)
@@ -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)
  {
index c0c3e9e57e70f0ebbdb5d5be920b174789808ef1..44de1b2a320dad5d04ee5f137cb20410719ba895 100644 (file)
@@ -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);
index a646fcd409ea5e1807110d00a9bf9a449dd6d373..e88a81df2d6ca624301db7cce4a7b11bf3bce8f0 100644 (file)
@@ -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;
index 9a4bb5bb78a1549ab0fc85c9e7bf33b9156107aa..761a94b3d43556761e647b7cd49fcdf192a352e4 100644 (file)
@@ -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;
index c74a56c575cad1411b9008e49b981ca1157aec2a..d547a18d6e57bf476182a9ef7f15bdfd055d9cc1 100644 (file)
@@ -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;
index 2cea118c82b44bb938389105555f92331b7cc46a..673de1005a213898936f5b7fff8f7b7fd2ff36ed 100644 (file)
@@ -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;
index f30d37f0c62ca3fce8ccd08e58ff4afada955837..eaf21dbc87c4794d1718e8630b6656ed8ff40dff 100644 (file)
@@ -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);
        }
  
index 87d70d1434b831872a342604373e74860a0c6e75..b840d71c43db29c887a4af36a2ae33ce391117a7 100644 (file)
@@ -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;
  }
  
index 358b9a10829d2c8c977050c62f1fa6783bdfdcb0..667170a39811a31dbe34166437a48c63a5942e84 100644 (file)
@@ -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);
  
  /**
index 1724d445b7087191fce2e359d024800c7ab46953..d58304410a0d907f7b856899aeeec6b83f93934d 100644 (file)
@@ -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;
  
index a69cf397aa8b619fd1cc063e77d1d370b64d1e48..8929f1f19ec22162af8e3ac18f6f83f9f3dad69c 100644 (file)
@@ -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,
index ea2677084153194470095768fcf9cd9e7a3071e6..338ddc3761fbbdb0558c133e1f19439c01e23eea 100644 (file)
@@ -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;
        }
  
index 55fabafa8154a9249b2d87face1e4554c90b0ebe..d5f3645025d269e3ed1986cae14a7acdf4b5f994 100644 (file)
@@ -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);
  
index d003df4e134f694980404da78f4405c5ccff9d5b..8bfe37bf4cec571976284e9734ef390789d1632c 100644 (file)
@@ -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;
        }
index 8362f73f4681b3c84427b7efb1592c414462cb98..47d807813a4c135d07503be092c72941729719a9 100644 (file)
@@ -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 */
index c6f43729da06697665cb159277c5788acfe7a2a9..0ca73c9266a4ca9dd26d8baeda5a7c2d75f069a5 100644 (file)
@@ -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 */
index 8191e622a137bc7d2682fc8c39bbef2ccd9aff46..b0bb905fec1fa9622049c8456d7afda3a743af3e 100644 (file)
@@ -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.
                         */
index 46d987344fa446c69164981fe4206bba6b397ded..d122bc7c62cdfeae5233054d902558eea5b0a17d 100644 (file)
@@ -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) {
index c8c28b51755398371ee0e6ffd7b82d2cd0cf06f5..f4b887d475cc2585739d5b50fcd5426f040f924e 100644 (file)
@@ -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);
  
index 848aecaa870f86c32f8a54f664327a1a136e7b05..6e4584c8a1433dc94704e8da27323aac18948a95 100644 (file)
@@ -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);
  
index f1dc0e5995485096c1648cef444d730eabf9e0e6..1d4334e5f92b4a24ba4f46c2d5ac48ee00f9455a 100644 (file)
@@ -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
index 0750ab77c21030dcc0b3905639dd4088ca2d68eb..77947cac8f0268c6b710ead3bbacbb41206c10c6 100644 (file)
@@ -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();