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-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-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)))))))
 
 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
 
 --- a/Makefile
 +++ b/Makefile
-@@ -432,8 +432,8 @@ KBUILD_LDFLAGS :=
+@@ -471,8 +471,9 @@ KBUILD_LDFLAGS :=
  GCC_PLUGINS_CFLAGS :=
  CLANG_FLAGS :=
  
  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
 +}
 --- 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'.
  
  
          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
        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
 +
  # 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
  # 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 @@
 --- /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
 
 --- 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);
  
  }
  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;
 +
 +      if (event != NETDEV_DOWN)
 +              return NOTIFY_DONE;
 +
-+      nf_flow_table_cleanup(dev_net(dev), dev);
++      nf_flow_table_cleanup(dev);
 +
 +      return NOTIFY_DONE;
 +}
 +
 +      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
  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,
  };
  
        .owner          = THIS_MODULE,
  };
  
@@ -60,7 +60,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
 -      if (event != NETDEV_DOWN)
 -              return NOTIFY_DONE;
 -
 -      if (event != NETDEV_DOWN)
 -              return NOTIFY_DONE;
 -
--      nf_flow_table_cleanup(dev_net(dev), dev);
+-      nf_flow_table_cleanup(dev);
 -
 -      return NOTIFY_DONE;
 -}
 -
 -      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
 
 --- 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;
  }
  
        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);
  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++;
                        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
                                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,
  };
  
        .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,
        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))) {
        rhashtable_walk_start(&hti);
  
        while ((tuplehash = rhashtable_walk_next(&hti))) {
-+              bool teardown;
 +
                if (IS_ERR(tuplehash)) {
 +
                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
 
 --- 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);
  
 +      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
 
 --- 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)
  {
  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;
 -
 -              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);
 +      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;
        }
  
                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
  }
 --- 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>
  #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>
  
  #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
 
 --- 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;
  
        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);
 +      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;
  
  
        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)
  {
   */
  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
  
 --- 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);
  }
  
        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)
  {
  
  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;
                }
        }
                                return ret;
                }
        }
@@ -88,7 +88,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
        return 0;
  }
  
        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,
   *
   * 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.
   */
   *            %-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;
  {
        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);
  
        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;
  
        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();
  
        }
        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
 
 --- 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
  
  /**
   * 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
 
 --- 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");
  }
  
        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) {
        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;
        }
                }
                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 ||
        /* 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);
                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;
        }
  
                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;
        }
        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
 
 --- 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:
                break;
  
        case SFP_DEV_UP:
@@ -31,7 +31,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
                break;
        }
  }
                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);
                        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
 
 --- 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);
  }
  
        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;
                            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);
        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);
                }
                        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) {
  
        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 */
                        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);
        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
 
 --- 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)
  {
   */
  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) {
        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:
                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)
                        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:
                /* 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
 
 --- 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.
   *
   * 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)
  
  #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)
  {
   */
  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);
        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
 
 --- 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;
        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;
  #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);
  }
  
                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)) !=
  
        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.
                 */
                 * 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));
                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",
        }
  
        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:
        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");
  
                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;
        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));
        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
 
 --- 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;
  
        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
 
 --- 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);
  
  
        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;
  
        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:
  
        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
 
 --- 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);
  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.
        /* 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 &&
        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
 
 --- 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,
        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,
        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",
  
  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",
        [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,
  };
  
        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)
  #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
  
   */
  #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);
  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;
  
        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");
        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)
  {
  
  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 ||
        /* 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:
        /* 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;
  
                }
                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)
                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
 
 --- 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);
  }
  
                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,
  {
        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");
  
                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)
  
        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;
                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);
        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);
                } 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) {
  
        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
 
 --- 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,
        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,
        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",
        [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",
        [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;
  
                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
                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:
                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
 
 --- 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,
  
        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,
        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,
  
        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,
        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[] = {
  }
  
  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",
  };
        [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",
  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",
        [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];
  
        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;
        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");
  }
  
        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;
        }
                        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)
  {
   */
  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;
  
                        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));
  
                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",
        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)
  {
  
  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
 
 --- 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,
        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,
  
        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",
        [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",
  };
        [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;
  }
  
        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)
  }
  
  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;
  
        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)
  }
  
  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)
  {
   */
  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;
        }
                        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:
                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
 
 --- 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,
        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,
  
        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",
  
  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)
  };
  
  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;
  
        if (ret < 0)
                return ret;
  
@@ -67,7 +67,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  
        sfp_hwmon_remove(sfp);
  
  
        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 */
        }
  
        /* Handle device detach globally */
@@ -83,7 +83,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
                return;
        }
  
                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:
                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;
  
                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;
                }
  
                        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;
                /* 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);
        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:
                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);
  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)
  }
  
  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);
                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
 
 --- 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.
   */
   * 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).
  
  /* 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;
        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;
        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;
  }
  
        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;
  {
        /* 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) {
  
        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;
        }
  
                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:
  
        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:
                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;
  
                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);
                }
                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 {
                                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
 
 --- 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;
  
  #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
        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,
  };
  
        .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]))
  
        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);
                                                         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)
  {
  #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)
  {
  }
  static void sfp_hwmon_remove(struct sfp *sfp)
  {
  }
@@ -151,7 +151,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  #endif
  
  /* Helpers */
  #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;
  
        if (ret < 0)
                return ret;
  
@@ -162,7 +162,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
        return 0;
  }
  
        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;
        }
        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)
  }
  
  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);
  
        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;
  }
  
        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;
  
  {
        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
 
 --- 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>
  #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>
  #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;
  
  
 +      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) {
  
 +      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
 --- 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>
  #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
  
  /**
 + * 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
   * 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;
  
 +      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
        /* 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);
  
        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
  
 --- 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;
  
  struct device;
  struct phylink;
@@ -151,16 +151,16 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  struct sk_buff;
  
  /*
  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
   * 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.
 + * 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;
  
  
        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;
  
        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);
  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
 
 --- 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>
  
  #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
  
  }
  #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;
  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;
  
        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
 
 --- 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));
        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:
 -      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.
         */
         * 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));
 +      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);
 +      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
 
 --- 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"
  
  
  #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
   */
  /**
   * 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;
        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;
  
        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;
  };
  
        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
  /**
   * 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);
        }
  
                        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);
        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;
  
        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);
  
        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);
  
        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
 
 --- 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;
  };
  
        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
 
 --- 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];
  
        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;
        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 */
  }
  
  /* 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)
  }
  
  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
  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 */
                 (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);
                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);
                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;
        }
                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;
  
                    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;
  
                /* 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);
        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)
  }
  
  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;
        const struct sff_data *sff;
+       struct i2c_adapter *i2c;
        struct sfp *sfp;
 -      bool poll = false;
        int err, i;
  
        sfp = sfp_alloc(&pdev->dev);
        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]) {
  
                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;
                }
  
                        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;
                                                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_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
 # 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_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_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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 # 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_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
 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_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
 # 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_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
 # 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_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
 # 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_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
 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_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_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
 # 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_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
 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_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
 # 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_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
 # 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_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_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
 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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_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
 # 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_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
 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_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
 # 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_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
 # 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_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_MAX44000 is not set
+# CONFIG_MAX44009 is not set
 # CONFIG_MAX517 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
 # 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_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_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_MCP4018 is not set
+# CONFIG_MCP41010 is not set
 # CONFIG_MCP4131 is not set
 # CONFIG_MCP4531 is not set
 # CONFIG_MCP4725 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 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_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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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 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
 # 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_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
 # 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_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_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_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
 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_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_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
 # 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_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_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
 # 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_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_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_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 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
 # 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_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_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
 # 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_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
 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_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
 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_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_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 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
 # 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_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
 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_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
 # 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_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_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_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
 # 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_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
 # 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_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_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_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
 # 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_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_MCP23S08 is not set
 # CONFIG_PINCTRL_MSM8X74 is not set
+# CONFIG_PINCTRL_OCELOT is not set
 CONFIG_PINCTRL_SINGLE=y
 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
 # 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_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
 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_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_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
 # 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_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_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
 # 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_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
 # 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_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_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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 # 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_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_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
 # 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_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
 # 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_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_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_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_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_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_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
 # 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_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_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_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
 # 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_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_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_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
 # 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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 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_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
 # 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_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
 # 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_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_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_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_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
 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_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
 # 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_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
 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_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_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_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_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_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
 # 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_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
 # 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_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
 # 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_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
 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_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
 # 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_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_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_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
 # 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_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
 # 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_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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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
 # 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_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_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
 # 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 */
        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)
        if (phydev->state == PHY_CHANGELINK)
+#endif
                ar8xxx_check_link_states(priv);
 
        if (phydev->mdio.addr != 0)
                ar8xxx_check_link_states(priv);
 
        if (phydev->mdio.addr != 0)
@@ -2628,6 +2630,14 @@ found:
        priv->use_count++;
 
        if (phydev->mdio.addr == 0) {
        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;
                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;
                }
                        phydev->supported = SUPPORTED_100baseT_Full;
                        phydev->advertising = ADVERTISED_100baseT_Full;
                }
+#endif
 
                if (priv->chip->config_at_probe) {
                        priv->phy = phydev;
 
                if (priv->chip->config_at_probe) {
                        priv->phy = phydev;
@@ -2645,8 +2656,14 @@ found:
                }
        } else {
                if (ar8xxx_has_gige(priv)) {
                }
        } 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;
                        phydev->supported |= SUPPORTED_1000baseT_Full;
                        phydev->advertising |= ADVERTISED_1000baseT_Full;
+#endif
                }
                if (priv->chip->phy_rgmii_set)
                        priv->chip->phy_rgmii_set(priv, phydev);
                }
                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
 
 --- 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)
  
  /* 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)
  
  /* 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.
   */
   * 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             \
  /* 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)
   */
  
  #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)                                      \
 +#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)
  
  /* 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
  
 --- 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))
  
  /* 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
 +
 +#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)[]                                   \
  #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)
 +#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)
  #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) \
  /* 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
  
 --- 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.
  
  
          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
  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)
  {
  
  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;
  
        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);
        }
                                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
  
 --- 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);
                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
        }
                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");
        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");
 +#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)
  {
  
  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 */
  }
  
  /* 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)
  {
  
  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)
  {
  
  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)
  }
  
  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_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
 +#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
 
 --- 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) \
  
  /* 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(-)
 
  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
 --- 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 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
 --- 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
  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 = .;                                                \
        }                                                               \
        . = __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)
  
  /* 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 = .;                                  \
        /* 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 = .;                               \
        }                                                               \
                                                                        \
                __stop___ksymtab_gpl = .;                               \
        }                                                               \
                                                                        \
-@@ -441,7 +451,7 @@
+@@ -474,7 +484,7 @@
                                                                        \
        /* Kernel symbol table: strings */                              \
          __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {       \
                                                                        \
        /* 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 */                                          \
        }                                                               \
                                                                        \
        /* __*init sections */                                          \
-@@ -841,6 +851,8 @@
+@@ -865,6 +875,8 @@
        EXIT_TEXT                                                       \
        EXIT_DATA                                                       \
        EXIT_CALL                                                       \
        EXIT_TEXT                                                       \
        EXIT_DATA                                                       \
        EXIT_CALL                                                       \
@@ -64,12 +64,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +      SYMTAB_DISCARD_GPL                                              \
        *(.discard)                                                     \
        *(.discard.*)                                                   \
 +      SYMTAB_DISCARD_GPL                                              \
        *(.discard)                                                     \
        *(.discard.*)                                                   \
-       }
+       *(.modinfo)                                                     \
 --- a/include/linux/export.h
 +++ b/include/linux/export.h
 --- 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)
  
 +#ifdef MODULE
 +#define __EXPORT_SUFFIX(sym)
@@ -77,20 +77,28 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +#define __EXPORT_SUFFIX(sym) "+" #sym
 +#endif
 +
 +#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;                                         \
        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)))                     \
        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
  
 --- 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     $@
  # 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
        { {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    $@
  
  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     $@
  
  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=
 --- 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
 
 --- 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"
  
  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
        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'
  
  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
  
        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
  
  config CRYPTO_HASH
 -      tristate
@@ -52,7 +52,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
        select CRYPTO_HASH2
        select CRYPTO_ALGAPI
  
        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
        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
        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
  config SSB_BLOCKIO
        bool
        depends on SSB
@@ -81,7 +81,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
  
  config SSB_PCIHOST_POSSIBLE
        bool
  
  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
  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
        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
  # 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
        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
          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
        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
  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
        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"
  
  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
  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
        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"
          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"
  
  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"
  
  config LIB80211_CRYPT_TKIP
 -      tristate
 +      tristate "LIB80211_CRYPT_TKIP"
-+      select LIB80211
+       select CRYPTO_LIB_ARC4
  
  config LIB80211_DEBUG
  
  config LIB80211_DEBUG
-       bool "lib80211 debugging messages"
 --- a/sound/core/Kconfig
 +++ b/sound/core/Kconfig
 --- 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
        tristate
  
  config SND_HWDEP
@@ -186,7 +187,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
  
  config SND_SEQ_DEVICE
        tristate
  
  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
        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
  # 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
        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
  
  config REGMAP_I2C
        tristate
@@ -33,7 +33,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        depends on I2C
  
  config REGMAP_SLIMBUS
        depends on I2C
  
  config REGMAP_SLIMBUS
-@@ -26,20 +26,26 @@ config REGMAP_SLIMBUS
+       tristate
++      select REGMAP
+       depends on SLIMBUS
  
  config REGMAP_SPI
        tristate
  
  config REGMAP_SPI
        tristate
@@ -42,13 +44,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        depends on SPI
  
  config REGMAP_SPMI
        depends on SPI
  
  config REGMAP_SPMI
-+      select REGMAP
        tristate
        tristate
++      select REGMAP
        depends on SPMI
  
  config REGMAP_W1
        depends on SPMI
  
  config REGMAP_W1
-+      select REGMAP
        tristate
        tristate
++      select REGMAP
        depends on W1
  
  config REGMAP_MMIO
        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
  
  config REGMAP_IRQ
-+      select REGMAP
        bool
        bool
++      select REGMAP
  
  config REGMAP_SOUNDWIRE
  
  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 @@
 --- 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
  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>
  #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>
  #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);
        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
 +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); \
  })
  
        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
 
 --- 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
          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"
  
  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
  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.
          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
 --- 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. */
        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
  ifneq ($(CONFIG_DCB),)
 --- a/net/rfkill/Kconfig
 +++ b/net/rfkill/Kconfig
-@@ -1,7 +1,11 @@
+@@ -2,7 +2,11 @@
  #
  # RF switch subsystem configuration
  #
  #
  # 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
        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
  # 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
        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
  
  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
 
 --- 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"
  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
  
 --- 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
  
  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
 ---
 --- 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();                 \
                                                    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;                              \
                                                                        \
 +      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);                            \
 -      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;                                          \
        }                                                               \
 -                      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
 
 --- 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
  
  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
 +++ 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:"
  
 +#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
 
 --- 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))
  
  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
 -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
 -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
 
 --- 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)
        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;
        }
  
                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) {
   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
 
 --- 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;
         * information.
         */
        struct file *file = lo->lo_backing_file;
@@ -42,7 +42,7 @@ Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
                ret = -EOPNOTSUPP;
                goto out;
        }
                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;
        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
  
        /*
         * 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.
         */
         * 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
 
 --- 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
        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;
  
        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
        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);
  
  }
  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)
  {
  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,
        &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
        __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
  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)
  
        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:
  
        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);
                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;
  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);
  }
  
        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,
                .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
 --- 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);
  
  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
  #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_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;
  #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);
  
  }
  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
        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>
  #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>
  /* 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);
        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;
        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);
        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
 
 --- 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.
  
        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
  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.
  
  
          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
        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
          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"
  
  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.
  
  
          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
        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
  
  
  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
  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.
  
  
          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.
  
        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
  
        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
  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>
 + *
 +/*
 + * Copyright (C) 2018 Felix Fietkau <nbd@nbd.name>
 + *
@@ -143,6 +143,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +      return NF_ACCEPT;
 +}
 +
 +      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)
 +{
 +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 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 &&
 +
 +      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;
 +                      continue;
 +
 +              hook->used = true;
@@ -483,7 +488,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +              kfree(hook);
 +      }
 +
 +              kfree(hook);
 +      }
 +
-+      nf_flow_table_cleanup(dev_net(dev), dev);
++      nf_flow_table_cleanup(dev);
 +
 +      return NOTIFY_DONE;
 +}
 +
 +      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
 +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>
  #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>
  #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 @@
 --- /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 */
 +};
 +
 +#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
 
 --- 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
  
  #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
 
 --- 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;
  
        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
 
 --- 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;
  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
  struct Qdisc_class_common {
 --- a/net/sched/Kconfig
 +++ b/net/sched/Kconfig
-@@ -3,8 +3,9 @@
+@@ -4,8 +4,9 @@
  #
  
  menuconfig NET_SCHED
  #
  
  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
          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;
        }
  
                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
        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,
  };
  
        .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),
        .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,
  };
        .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
  {
 --- 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 */
  #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. */
  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;
                                     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;
  
        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
 
 --- 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,
  };
  
        .owner          =       THIS_MODULE,
  };
  
@@ -49,14 +49,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -
 -      err = skb_array_produce(q, skb);
 -
 -
 -      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;
 -}
 -
 -      return NET_XMIT_SUCCESS;
 -}
 -
@@ -75,9 +75,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -              skb = __skb_array_consume(q);
 -      }
 -      if (likely(skb)) {
 -              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;
 -      }
 -
 -      return skb;
@@ -117,10 +117,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -                      kfree_skb(skb);
 -      }
 -
 -                      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);
 -
 -};
 -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
 
 --- 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.
  
  
                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_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_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 {
 --- 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
 --- 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);
  
        /* 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
  
 --- 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);
  
 +      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
 
 --- 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,
        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
  };
  
  #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
  #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.
  
  /**
   *    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
  
        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;
        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
  
        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
   */
 --- 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;
  }
  
        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
  /**
   *    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
  {
 --- a/net/Kconfig
 +++ b/net/Kconfig
-@@ -25,6 +25,12 @@ menuconfig NET
+@@ -26,6 +26,12 @@ menuconfig NET
  
  if 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
        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;
                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
  }
 --- 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/prefetch.h>
  #include <linux/if_vlan.h>
+ #include <linux/mpls.h>
 +#include <linux/if.h>
  
  #include <net/protocol.h>
  #include <net/dst.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);
  
  }
  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
  {
 --- 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;
        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>
  #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,
  };
  
        .set_link_ksettings     = phy_ethtool_set_link_ksettings,
  };
  
@@ -50,7 +50,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
  /**************************************************
   * MII
   **************************************************/
  /**************************************************
   * 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;
  
        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");
        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)
  {
  
  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
 
 --- 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
  
  
  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 \
                        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
  
 +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
  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);
  
  }
  EXPORT_SYMBOL(__sk_receive_skb);
  
@@ -53,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +
 +              if (res)
 +                      return res;
 +
 +              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);
 +      }
 +}
 +              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);
  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);
  
        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
  
 --- 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 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) {
 -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;
 -
 -              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);
 -      }
 -}
 -              atomic64_cmpxchg(&sk->sk_cookie, 0, res);
 -      }
 -}
--
  int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie)
  {
  int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie)
  {
-       u64 res;
 --- a/net/ipv4/Kconfig
 +++ b/net/ipv4/Kconfig
 --- 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"
  
  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
          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"
  
  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
          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
  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
          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
  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
 
 --- 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)
  {
  
  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
        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.
          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_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
 --- 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)
  {
  
  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
        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
  
  #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])
  
  #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)
  
                __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
        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);
  
  {
        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
  }
 --- 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];
  
        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;
  
        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];
  
  {
        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
        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;
  
        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
        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;
  
  {
        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
        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)
  {
  
  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
                                &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
        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
  
 --- 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);
  
  {
        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);
  
        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);
  
  {
        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
  
 --- 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)
  {
  
  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
  
 --- 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)
  {
  
  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;
  
                        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:
        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
  
 --- 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)
  {
  
  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
  }
 --- 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)
  {
  
  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
 
 --- 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
  source "drivers/base/regmap/Kconfig"
  
  config DMA_SHARED_BUFFER
 -      bool
 +      tristate
        default n
-       select ANON_INODES
        select IRQ_WORK
        select IRQ_WORK
+       help
 --- a/drivers/dma-buf/Makefile
 +++ b/drivers/dma-buf/Makefile
 --- 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_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
 +
 +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_SW_SYNC)                += sw_sync.o sync_debug.o
++dma-buf-objs-$(CONFIG_UDMABUF)                += udmabuf.o
 +
 +dma-shared-buffer-objs :=  $(dma-buf-objs-y)
 +
 +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
 --- 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();
        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
  }
 -__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);
  }
  {
        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.
  
  /*
   * 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[];
  #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, ...);
  
  __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
  #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)
  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
 
 --- 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;
  
        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
                        /*
 --- 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;
                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
 
 --- 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)
                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
 
 --- 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" },
        {},
  };
 +      { .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
 
 --- 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)
  {
  /* 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 */
        __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) {
  
  forward:
        switch (p->state) {
@@ -41,5 +41,5 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +              break;
 +
        case BR_STATE_FORWARDING:
 +              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
 
 --- 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
  
  #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");
  
  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
        /*
 -       * 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,
        .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,
 +      .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,
 +      .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);
  } };
  
  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 },
  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
 
 --- 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)
  
  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
  
  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
 
 --- 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
  
          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
  
 --- 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.
         */
         * 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++;
        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)
  {
   */
  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
         * 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;
  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;
  
  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);
  
  
        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++) {
        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;
  
  {
        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];
        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;
  
  {
        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--) {
        /* 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;
                                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
                }
 --- 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
  
                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
 
 --- 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;
                    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')
  #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);
  #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]",
 +      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
 
 --- 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
  
        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:
 -$(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
  # 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)
 -$(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
 
 --- 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"
  
  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
 ---
 --- 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
  
  config ARCH_MAY_HAVE_PC_FDC
        bool
  
@@ -19,7 +19,7 @@ Acked-by: Rob Landley <rob@landley.net>
  config CEVT_BCM1480
        bool
  
  config CEVT_BCM1480
        bool
  
-@@ -2969,6 +2966,18 @@ choice
+@@ -3040,6 +3037,18 @@ choice
                bool "Extend builtin kernel arguments with bootloader arguments"
  endchoice
  
                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
 
 --- 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.
  #
  # 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
 
 --- 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
  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
  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);
  
  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)
  
  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;
  }
  
        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);
        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)) {
        }
  
        if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
@@ -332,7 +332,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        return 0;
  }
  
        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);
        }
                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
  
 -         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
  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
 
 --- 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;
                }
  
                        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
 
 --- 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/delay.h>
+ #include <linux/libfdt.h>
  
 +#include <asm/bootinfo.h>
  #include <asm/cacheflush.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"
  
 +#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;
  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)
 +{
  
 +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;
  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
        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);
  
        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 =
        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 =
  
        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;
        }
        } 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
  
        /*
         * 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 +
  #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
 +#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>
  #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
        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
  #endif
        /* jump to kexec_start_address */
        j               s1
@@ -251,7 +240,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
  
  #ifdef CONFIG_SMP
  /*
  
  #ifdef CONFIG_SMP
  /*
-@@ -184,9 +185,15 @@ kexec_indirection_page:
+@@ -182,9 +183,15 @@ kexec_indirection_page:
        PTR             0
        .size           kexec_indirection_page, PTRSIZE
  
        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
 
 --- a/arch/arc/kernel/head.S
 +++ b/arch/arc/kernel/head.S
-@@ -59,6 +59,16 @@
+@@ -61,6 +61,16 @@
  #endif
  .endm
  
  #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
  ;----------------------------------------------------------------
 --- 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) {
  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");
        }
                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
        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;
  
  
        . = 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
 
 --- 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 */
        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
 
 --- 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_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
        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
 
 --- a/drivers/mtd/Kconfig
 +++ b/drivers/mtd/Kconfig
-@@ -11,6 +11,23 @@ menuconfig MTD
+@@ -12,6 +12,23 @@ menuconfig MTD
  
  if 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
        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>
  #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);
  
  /* 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;
  };
  
        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.
  /*
   * 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;
  
        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;
        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);
  
  }
  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
  /*
   * 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;
                }
  
                        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
 
 --- 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);
  };
  
  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
  
  /*
   * 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);
  
  }
  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
  #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
 
 --- 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)
  {
  
  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)
  }
  
  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;
  
        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
 
 --- 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"
  
        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
  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_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
 
 --- 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);
  
  }
  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
  {
 --- 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;
  }
  
                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
 
 --- 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"
  
  #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);
  /* 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;
  {
        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);
  
        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;
  
                instr->fail_addr -= part->offset;
        instr->addr -= part->offset;
  
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        return ret;
  }
  
        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 */
        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
 
 --- 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);
  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>
 ---
 
 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" },
 +      { .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(-)
 
  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;
  
  #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
 
 --- 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
  
  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"
  
  #
  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
 
 --- 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;
  
        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)
  {
  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";
        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(+)
 
  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 */
  #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
  #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;
                }
                                             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:
        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;
        /* 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;
        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);
  
        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) {
                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;
                }
        }
                        return 0;
                }
        }
@@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        return 0;
  }
  
        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);
  
  
  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
 
 --- 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;
        /* 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;
        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);
  
        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) {
                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");
  
        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;
        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);
  
  
  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
 
 --- 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);
  
                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;
  
 -              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
 
 --- 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:
                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
  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);
  
        /* 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
 
 --- 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 ||
         */
        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
 
 --- 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 ||
            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
 
 --- 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.
  
          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.
 +
 +        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
 --- 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)) {
 +                 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
 
 --- 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) },
        { "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) },
        { "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
 
 --- 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) },
        /* 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
 
 --- 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/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/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);
           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;
  
 +
        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
 
 --- 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;
  }
  
        return mtd;
  }
  
@@ -82,7 +82,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  static int __init ubi_init(void)
  {
        int err, i, k;
  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
 
 --- 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;
  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();
  
         */
        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
 
 --- a/init/do_mounts.c
 +++ b/init/do_mounts.c
-@@ -427,7 +427,28 @@ retry:
+@@ -460,7 +460,28 @@ retry:
  out:
        put_page(page);
  }
  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
  #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
                        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
 
 --- 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>
  #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"
  
  #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);
        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
 
 --- 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
  }
  
  #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
  /**
   * 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;
        }
  
                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
                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;
        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
 
 --- 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);
  
  }
  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
        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);
  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
 
 --- 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
  
 +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_SPI_NOR)     += spi-nor/
  obj-$(CONFIG_MTD_UBI)         += ubi/
+ obj-$(CONFIG_MTD_HYPERBUS)    += hyperbus/
 +
 +# Composite drivers must be loaded last
 +
 +# Composite drivers must be loaded last
-+obj-y         += composite/
++obj-y                         += composite/
 --- /dev/null
 +++ b/drivers/mtd/composite/Kconfig
 @@ -0,0 +1,12 @@
 --- /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
 
 --- 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.
  
          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
 +}
 --- 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);
  
        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
  #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"
  
  
  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))
  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/
  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;
  
                if (ret < 0)
                        goto out;
-@@ -561,6 +567,17 @@ full_scan:
+@@ -564,6 +570,17 @@ full_scan:
                        return err;
        }
  
                        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
 
 --- 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.
  
          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
 +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.
 +        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
 --- 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;
        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_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);
        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>
  #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;
  }
  
        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,
  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;
  
        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
  #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;
  
  {
        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,
        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;
  }
  
        return true;
  }
  
@@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static bool
  ip_checkentry(const struct ipt_ip *ip)
  {
  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;
  
        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;
  
        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;
        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))
  
        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;
                }
  
                        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) {
                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;
        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
 
 --- 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;
  }
  
        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,
  /* 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 */
        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.
        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);
  
        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
 
 --- 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;
  
        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
 
 --- 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>
  
  #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. */
  /* "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;
  
        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.
         */
        /*
         * 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];
                 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
                 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,
 +      },
 +              .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
 
 --- 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;
  
        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
        }
 --- 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
  
 +      /* 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))
        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);
        }
        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 */
  
  
  /* 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_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
  
  #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;
  {
        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
  
        /*
         *      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;
         */
  
        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
  
        /*
         *      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.
         */
  
         *      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)))
                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;
  
        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;
  
        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);
  
        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;
  
        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;
        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;
  
        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;
        }
                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;
        }
        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;
        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
                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;
        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;
  };
  
 +      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
 
 --- 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;
 +
  
 +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
  /*
   * 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);
   *
   * 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
   * 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);
        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
        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;
  };
  
        struct module                   *owner;
  };
  
@@ -77,7 +77,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  };
  
  enum flow_offload_tuple_dir {
  };
  
  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
  #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];
  
  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);
  
  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
  
 --- 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)
   * @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,
   */
  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,
        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
  #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.
  
  
          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
  
  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
  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)
 +{
  
 +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,
  
        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);
  
        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);
  }
  
        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);
  
  }
  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,
        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);
  {
        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);
  }
  
 +              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);
  
  }
  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);
  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);
        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);
        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
 +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;
  
        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;
        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;
        }
  
        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)
        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),
            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;
  
 +          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
 --- 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;
  
        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
 
 --- 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,
  
  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);
   *
   * 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);
   *    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);
        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
        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
 
 --- 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 <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
 +#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"
  #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;
  }
  
        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,
  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_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,
        .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
 
 --- 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>
  #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"
  
  #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,
  };
  
        .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
 
 --- 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>
  
  #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"
  
  /*
  #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);
  }
  
                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
  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>
  
  #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>
  #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);
  }
  
        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
  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);
        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
 
 --- 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
  #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
        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
 
 --- 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;
  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
 
 --- 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
   * 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
        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
   */
  
  #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");
  
  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);
  }
  
        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)
  {
  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) &&
        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;
        }
  
                        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) &&
        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;
  
        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];
  }
        }
        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);
  
        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
        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);
  
  }
  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,
  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));
  
        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);
        __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;
  }
  
        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
  /**
   * 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;
  {
        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;
        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));
  
        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;
  
        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;
        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;
        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;
        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));
  }
  
        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;
  }
  
        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)
  {
  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]);
  
        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[],
  }
  
  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)
  {
  
  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) +
        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) +
                nla_total_size(0) +
                /* IFLA_IPTUN_FWMARK */
                nla_total_size(4) +
@@ -451,7 +452,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
                0;
  }
  
                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;
  {
        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) ||
  
        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) ||
            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) ||
        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 },
        [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
 
 --- 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;
        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
  
 --- 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        */
        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
  
 --- 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,
        },
                .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
  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",
        [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
  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:
        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
        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;
                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
        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;
                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
                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);
  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,
  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),
  };
  
        .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),
  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,
        [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,
        [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;
                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:
        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);
  }
  
        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.
   */
  /*
   *    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 ||
        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)
                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);
  #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
                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);
                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
        }
                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 =
 +      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)
 +      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);
 +      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
        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:
  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);
  #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_policy_failed_entry);
+       kfree(net->ipv6.ip6_blk_hole_entry);
  #endif
        dst_entries_destroy(&net->ipv6.ip6_dst_ops);
  #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);
        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
  #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
  
  #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
   */
 --- a/include/uapi/linux/rtnetlink.h
 +++ b/include/uapi/linux/rtnetlink.h
-@@ -232,6 +232,8 @@ enum {
+@@ -239,6 +239,8 @@ enum {
        __RTN_MAX
  };
  
        __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
 
 --- 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;
  
        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
  #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
  #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
        __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;
  
        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;
  
        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);
  }
  
                                           &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,
  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;
  
        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);
        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);
  
  
        __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);
  
        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;
        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
        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);
  
  }
  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
  /**
   * 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;
 +              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 @@
 --- 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/phy.h>
  #include <linux/export.h>
+ #include <linux/device.h>
 +#include <linux/mtd/mtd.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);
  
  {
        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)
  }
  
 +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
  /**
   * 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.
   * 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
 + *
 + * 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)
  {
  */
  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
 
 --- 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) {
        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
 --- 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
  
 +      /*
 +       * 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
 
 --- 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
  #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;
  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;
 +      }
  
 +                      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
 
 --- 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,
  };
  
        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
  
  /* 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;
  
        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;
  
  #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;
  
        if (ret < 0)
                return ret;
  
@@ -60,7 +60,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
        return 0;
  }
  
        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) {
                        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
                        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) {
  
        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);
                         */
                        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);
        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;
  
                }
                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);
        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
 
 --- 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;
  
        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
        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)
  {
  
  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
 
 --- 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);
        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
                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) {
  
        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
 --- 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
  /**
   * 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) ||
                                     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;
  
        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
 
 --- 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) {
  
        /* 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:
                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) {
        }
  
        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",
        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 */
         */
        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);
        }
                    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) ||
            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
        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)
  {
  
  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;
  }
  
               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)
  {
  
  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
 
 --- 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);
  
  }
  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
        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,
        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,
        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",
  
  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",
        [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);
                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);
                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);
                         * 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
 
 --- 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;
  }
  
        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;
  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,
        .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
        .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)
  {
  
  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);
        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;
        }
  
        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
 
 --- 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];
  {
        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);
        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;
        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
 
 --- 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;
  }
  
        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))))
        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;
  
        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)
  {
   */
  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);
  
  }
  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;
  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
 
 --- 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)
  }
  
 -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);
  {
        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)
 -      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;
        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);
  
        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;
  
        if (ret < 0)
                return ret;
  
@@ -54,7 +54,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
        if (ret)
                phy_detach(phy);
  
        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;
  
        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);
  
        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;
  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);
  
        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"))
  
        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) {
            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;
                        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;
                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:
  
                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,
  }
  
  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 {
        } 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);
                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);
        }
  
                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);
                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);
        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)
  {
  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;
  
                     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 */
        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;
  
             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) {
                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;
        }
                        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
         */
        /* 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);
                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();
  
        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 */
  
        /* 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);
  
        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) {
                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);
        }
                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);
                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);
  
  
        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
        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.
                 */
                /* 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;
                    (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 */
                __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;
                        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.
         */
         * 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);
            !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)) {
                                   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);
                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;
  
        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);
        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)
  {
  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;
  
        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);
        }
  
                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
 
 --- 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;
  }
  
        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;
        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;
        }
  
                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) {
 -
        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) {
        }
  
        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;
        }
  
                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)
  
        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);
        }
  
                linkmode_copy(pl->link_config.advertising, config.advertising);
        }
  
@@ -90,13 +90,13 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  
                changed = true;
  
  
                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;
  }
  
        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>
 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
 
 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.
 
 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: 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
 
 --- 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;
  };
  
 +      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;
  }
  
        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)
  {
                              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;
        }
  
 -      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))
  
        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;
                                     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)
  }
  
  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. */
        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)
  }
  
  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;
  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;
  
 +      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);
 +
 +       */
 +      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 */
 +      /* 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;
 +
 +      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
  
 --- 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;
  }
  
        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
  /**
   * 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);
  
  /**
  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>
 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
 
 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.
 
 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: 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
 
 --- 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);
  }
  
        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;
  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;
  
        /*
        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;
  
 +      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 */
 +              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;
  
        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>
 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.
 
 
 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: 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/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
  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"
          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.
 +
 +      ---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
        ---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
  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
  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.
 +// 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;
 +}
 +
 +      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;
 +
 +      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;
 +              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)
 +}
 +
 +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;
 +
 +      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,
 +      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)
 +{
 +
 +static int bcm84881_read_status(struct phy_device *phydev)
 +{
-+      bool autoneg_complete;
 +      unsigned int mode;
 +      int bmsr, val;
 +
 +      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;
 +
 +      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);
 +      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->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;
 +
 +      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;
 +              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;
 +
 +              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);
 +
 +              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",
 +              .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,
 +              .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,
 +              .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
 
 --- 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;
  }
  
        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;
        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;
        }
  
                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);
        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)
  }
  
  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;
        }
  
                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
 
 --- 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);
  
  
        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
 
 --- 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;
                }
  
                        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:
                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;
        }
        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
 
 --- 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)
  
  #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.
  /* 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 */
                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
  
                /* 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,
                         * 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.
                } 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 */
                        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
 
 --- 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;
        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;
  
        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)
  {
  
  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);
                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 */
                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
  
                /* 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,
                         * 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.
                } 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 */
                        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
 
 --- 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;
  }
  
        sfp->mod_phy = NULL;
  }
  
@@ -19,7 +19,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  {
        struct phy_device *phy;
        int err;
  {
        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");
        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);
        }
  
        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);
                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)
  }
  
  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.
   */
   * 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)
  }
  
  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.
                         */
        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
 
 --- 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,
        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,
        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",
        [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",
        [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
  
  #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.
  /* 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;
        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;
  
        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);
        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);
        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;
  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 &&
  
        /* 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) {
                        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
 
 --- 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.
  
            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
  
 --- 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);
  
  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"
  /*
   * 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);
  
  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
  /*
   * 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);
  
  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
  /*
   * 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);
  
  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;
  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);
  
  }
  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.
  /*
   * 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;
  }
        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;
  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);
  }
  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)
 +#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);
  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;
 @@ -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;
 +}
 +{
 +      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
  #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);
  
  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
 
 --- 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.
  
  
          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
        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;
  }
  
        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
  /**
   *    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;
        }
                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;
  
        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
        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;
        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);
  
                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;
        }
                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;
        }
                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
                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>
  #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
  
  /*
   * 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
  #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
 
 --- 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.
  
          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
        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
  
  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
  /*
   * 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();
 +      mangle_bootargs(command_line);
        setup_command_line(command_line);
        setup_nr_cpu_ids();