From 5c2ba3f6ef501f38ec9e27b95c18c994e2d2d521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Wed, 5 Nov 2025 16:26:58 +0100 Subject: [PATCH 1/8] Upgrade kernel to 6.18 --- board/aarch32/linux_defconfig | 107 ++-- board/aarch64/linux_defconfig | 94 ++- board/x86_64/linux_defconfig | 80 ++- configs/aarch32_defconfig | 2 +- configs/aarch32_minimal_defconfig | 2 +- configs/aarch64_defconfig | 3 +- configs/aarch64_minimal_defconfig | 5 +- configs/x86_64_defconfig | 6 +- configs/x86_64_minimal_defconfig | 2 +- doc/ChangeLog.md | 3 +- ...dsa-mv88e6xxx-Add-LED-infrastructure.patch | 310 ---------- ...-mv88e6xxx-Add-LED-support-for-6393X.patch | 358 ------------ ...t-log-level-for-unauthorized-devices.patch | 45 -- ...g-Support-firmware-loading-on-88X33.patch} | 23 +- ...g-Fix-power-up-when-strapped-to-sta.patch} | 17 +- ...vell10g-Add-LED-support-for-88X3310.patch} | 21 +- ...g-Support-LEDs-tied-to-a-single-med.patch} | 15 +- ...hy-Do-not-resume-PHY-when-attaching.patch} | 17 +- ...classifying-unknown-multicast-as-mr.patch} | 96 +-- ...-router-ports-when-forwarding-L2-mu.patch} | 16 +- ...elay-for-applying-strict-multicast-.patch} | 54 +- ...entiate-MDB-additions-from-modifica.patch} | 33 +- ...e-tlv-Let-device-probe-even-when-TL.patch} | 13 +- ...-r8153b-support-for-link-activity-L.patch} | 16 +- ...k-mt7986a-rename-BPi-R3-ports-to-ma.patch} | 18 +- ...Add-a-timing-for-the-Raspberry-Pi-7.patch} | 22 +- ...chscreen-edt-ft5x06-Add-polled-mode.patch} | 39 +- ...6xxx-Fix-timeout-on-waiting-for-PPU.patch} | 17 +- ...-Improve-indirect-register-access-p.patch} | 17 +- ...-Honor-ports-being-managed-via-in-b.patch} | 19 +- ...-Limit-rsvd2cpu-policy-to-user-port.patch} | 19 +- ...se-tag-priority-as-initial-skb-prio.patch} | 13 +- ...DB-memberships-whose-L2-addresses-o.patch} | 13 +- ...-EtherType-based-priority-overrides.patch} | 26 +- ...-Support-EtherType-based-priority-o.patch} | 77 +-- ...-mv88e6xxx-Add-mqprio-qdisc-support.patch} | 23 +- ...-Use-VLAN-prio-over-IP-when-both-ar.patch} | 19 +- ...e6xxx-Trap-locally-terminated-VLANs.patch} | 35 +- ...-collapse-disabled-state-into-block.patch} | 16 +- ...-Only-activate-LAG-offloading-when-.patch} | 25 +- ...-mv88e6xxx-Add-LED-support-for-6393X.patch | 550 ++++++++++++++++++ patches/linux/linux.hash | 2 +- .../dts/.claude/settings.local.json | 9 + 43 files changed, 1272 insertions(+), 1025 deletions(-) delete mode 100644 patches/linux/6.12.65/0005-net-dsa-mv88e6xxx-Add-LED-infrastructure.patch delete mode 100644 patches/linux/6.12.65/0006-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch delete mode 100644 patches/linux/6.12.65/0024-usb-core-adjust-log-level-for-unauthorized-devices.patch rename patches/linux/{6.12.65/0014-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch => 6.18.5/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch} (90%) rename patches/linux/{6.12.65/0015-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch => 6.18.5/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch} (77%) rename patches/linux/{6.12.65/0016-net-phy-marvell10g-Add-LED-support-for-88X3310.patch => 6.18.5/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch} (96%) rename patches/linux/{6.12.65/0017-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch => 6.18.5/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch} (86%) rename patches/linux/{6.12.65/0018-net-phy-Do-not-resume-PHY-when-attaching.patch => 6.18.5/0005-net-phy-Do-not-resume-PHY-when-attaching.patch} (69%) rename patches/linux/{6.12.65/0019-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch => 6.18.5/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch} (71%) rename patches/linux/{6.12.65/0020-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch => 6.18.5/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch} (72%) rename patches/linux/{6.12.65/0021-net-bridge-drop-delay-for-applying-strict-multicast-.patch => 6.18.5/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch} (78%) rename patches/linux/{6.12.65/0022-net-bridge-Differentiate-MDB-additions-from-modifica.patch => 6.18.5/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch} (80%) rename patches/linux/{6.12.65/0023-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch => 6.18.5/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch} (84%) rename patches/linux/{6.12.65/0027-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch => 6.18.5/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch} (74%) rename patches/linux/{6.12.65/0028-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch => 6.18.5/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch} (78%) rename patches/linux/{6.12.65/0029-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch => 6.18.5/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch} (84%) rename patches/linux/{6.12.65/0030-input-touchscreen-edt-ft5x06-Add-polled-mode.patch => 6.18.5/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch} (79%) rename patches/linux/{6.12.65/0001-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch => 6.18.5/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch} (68%) rename patches/linux/{6.12.65/0002-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch => 6.18.5/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch} (94%) rename patches/linux/{6.12.65/0003-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch => 6.18.5/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch} (68%) rename patches/linux/{6.12.65/0004-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch => 6.18.5/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch} (86%) rename patches/linux/{6.12.65/0007-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch => 6.18.5/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch} (82%) rename patches/linux/{6.12.65/0008-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch => 6.18.5/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch} (89%) rename patches/linux/{6.12.65/0009-net-dsa-Support-EtherType-based-priority-overrides.patch => 6.18.5/0021-net-dsa-Support-EtherType-based-priority-overrides.patch} (79%) rename patches/linux/{6.12.65/0010-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch => 6.18.5/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch} (85%) rename patches/linux/{6.12.65/0011-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch => 6.18.5/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch} (89%) rename patches/linux/{6.12.65/0012-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch => 6.18.5/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch} (83%) rename patches/linux/{6.12.65/0013-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch => 6.18.5/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch} (84%) rename patches/linux/{6.12.65/0025-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch => 6.18.5/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch} (75%) rename patches/linux/{6.12.65/0026-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch => 6.18.5/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch} (86%) create mode 100644 patches/linux/6.18.5/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch create mode 100644 src/board/raspberry-pi-4/dts/.claude/settings.local.json diff --git a/board/aarch32/linux_defconfig b/board/aarch32/linux_defconfig index 933daea60..d5358edea 100644 --- a/board/aarch32/linux_defconfig +++ b/board/aarch32/linux_defconfig @@ -31,14 +31,11 @@ CONFIG_SCHED_AUTOGROUP=y CONFIG_BLK_DEV_INITRD=y CONFIG_KALLSYMS_ALL=y CONFIG_PROFILING=y -CONFIG_KEXEC=y CONFIG_ARCH_MULTI_V6=y -CONFIG_ARCH_MULTI_V7=y CONFIG_ARCH_VIRT=y CONFIG_ARCH_BCM=y CONFIG_ARCH_BCM2835=y CONFIG_SMP=y -CONFIG_NR_CPUS=4 CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y @@ -47,7 +44,6 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPUFREQ_DT=y CONFIG_ARM_RASPBERRYPI_CPUFREQ=y -CONFIG_AEABI=y CONFIG_VFP=y CONFIG_NEON=y CONFIG_KERNEL_MODE_NEON=y @@ -78,7 +74,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_NET_FOU_IP_TUNNELS=y CONFIG_IPV6_SIT=m @@ -94,12 +89,31 @@ CONFIG_BRIDGE_NETFILTER=y CONFIG_NETFILTER_NETLINK_QUEUE=y CONFIG_NETFILTER_NETLINK_LOG=y CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_PROCFS=y CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_AMANDA=y CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +CONFIG_NF_CONNTRACK_SNMP=y +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +CONFIG_NF_CONNTRACK_SIP=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NF_CT_NETLINK_TIMEOUT=y +CONFIG_NF_CT_NETLINK_HELPER=y +CONFIG_NETFILTER_NETLINK_GLUE_CT=y CONFIG_NF_TABLES=y CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_NUMGEN=y CONFIG_NFT_CT=m +CONFIG_NFT_FLOW_OFFLOAD=y CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m @@ -108,15 +122,22 @@ CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=y CONFIG_NFT_REJECT=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB_INET=y CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m +CONFIG_NFT_TPROXY=y +CONFIG_NFT_SYNPROXY=y CONFIG_NFT_DUP_NETDEV=m CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=y CONFIG_NFT_REJECT_NETDEV=m +CONFIG_NF_FLOW_TABLE_INET=y +CONFIG_NF_FLOW_TABLE=y CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m CONFIG_NETFILTER_XT_TARGET_LOG=m CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m @@ -133,29 +154,58 @@ CONFIG_NETFILTER_XT_MATCH_MAC=m CONFIG_NETFILTER_XT_MATCH_MARK=m CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_IP_SET=y +CONFIG_IP_SET_BITMAP_IP=y +CONFIG_IP_SET_BITMAP_IPMAC=y +CONFIG_IP_SET_BITMAP_PORT=y +CONFIG_IP_SET_HASH_IP=y +CONFIG_IP_SET_HASH_IPMARK=y +CONFIG_IP_SET_HASH_IPPORT=y +CONFIG_IP_SET_HASH_IPPORTIP=y +CONFIG_IP_SET_HASH_IPPORTNET=y +CONFIG_IP_SET_HASH_IPMAC=y +CONFIG_IP_SET_HASH_MAC=y +CONFIG_IP_SET_HASH_NETPORTNET=y +CONFIG_IP_SET_HASH_NET=y +CONFIG_IP_SET_HASH_NETNET=y +CONFIG_IP_SET_HASH_NETPORT=y +CONFIG_IP_SET_HASH_NETIFACE=y +CONFIG_IP_SET_LIST_SET=y +CONFIG_NFT_DUP_IPV4=y +CONFIG_NFT_FIB_IPV4=y +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_LOG_ARP=y +CONFIG_NF_LOG_IPV4=y CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_SYNPROXY=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_NFT_DUP_IPV6=y +CONFIG_NFT_FIB_IPV6=y CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_SRH=m CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_RAW=m -CONFIG_IP6_NF_NAT=m -CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_TARGET_NPT=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m CONFIG_NF_CONNTRACK_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m CONFIG_BRIDGE_EBT_802_3=m CONFIG_BRIDGE_EBT_ARP=m CONFIG_BRIDGE_EBT_IP=m @@ -194,16 +244,16 @@ CONFIG_NET_MPLS_GSO=y CONFIG_MPLS_ROUTING=m CONFIG_MPLS_IPTUNNEL=m CONFIG_NET_PKTGEN=y -# CONFIG_WIRELESS is not set +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_RFKILL=y CONFIG_NET_9P=y CONFIG_NET_9P_VIRTIO=y CONFIG_LWTUNNEL=y CONFIG_PCI=y CONFIG_PCIEPORTBUS=y CONFIG_PCI_IOV=y -CONFIG_PCI_AARDVARK=y CONFIG_PCI_HOST_GENERIC=y -CONFIG_PCIE_ARMADA_8K=y CONFIG_UEVENT_HELPER=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_DEVTMPFS=y @@ -221,7 +271,6 @@ CONFIG_BLK_DEV_NVME=y CONFIG_SRAM=y CONFIG_EEPROM_AT24=y # CONFIG_SCSI_PROC_FS is not set -CONFIG_SCSI=y CONFIG_BLK_DEV_SD=y CONFIG_SCSI_SAS_LIBSAS=y CONFIG_SCSI_SAS_ATA=y @@ -230,7 +279,6 @@ CONFIG_ATA=y CONFIG_SATA_AHCI=y CONFIG_SATA_MOBILE_LPM_POLICY=0 CONFIG_SATA_AHCI_PLATFORM=y -CONFIG_AHCI_MVEBU=y CONFIG_PATA_OF_PLATFORM=y CONFIG_MD=y CONFIG_BLK_DEV_DM=y @@ -258,8 +306,6 @@ CONFIG_SMSC911X=y CONFIG_USB_LAN78XX=y CONFIG_USB_USBNET=y CONFIG_USB_NET_SMSC95XX=y -CONFIG_BRCMFMAC=m -CONFIG_ZD1211RW=m CONFIG_INPUT_MOUSEDEV=m CONFIG_INPUT_EVDEV=y CONFIG_INPUT_TOUCHSCREEN=y @@ -273,22 +319,19 @@ CONFIG_SERIAL_8250_BCM2835AUX=y CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_DEV_BUS=y -CONFIG_TTY_PRINTK=y -CONFIG_HVC_DRIVER=y CONFIG_VIRTIO_CONSOLE=y CONFIG_I2C_CHARDEV=y CONFIG_I2C_BCM2835=m CONFIG_SPI=y CONFIG_SPI_BCM2835=y CONFIG_SPI_BCM2835AUX=y -CONFIG_GPIO_SYSFS=y CONFIG_SENSORS_RASPBERRYPI_HWMON=m CONFIG_THERMAL=y CONFIG_BCM2711_THERMAL=y CONFIG_BCM2835_THERMAL=m CONFIG_WATCHDOG=y -CONFIG_BCM2835_WDT=y CONFIG_I6300ESB_WDT=y +CONFIG_BCM2835_WDT=y CONFIG_MFD_SYSCON=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y @@ -296,12 +339,12 @@ CONFIG_REGULATOR_GPIO=y CONFIG_MEDIA_SUPPORT=y CONFIG_DRM=y CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_SIMPLEDRM=y CONFIG_DRM_PANEL_SIMPLE=m CONFIG_DRM_TOSHIBA_TC358762=m CONFIG_DRM_V3D=m CONFIG_DRM_VC4=m CONFIG_DRM_VC4_HDMI_CEC=y -CONFIG_DRM_SIMPLEDRM=y CONFIG_FB=y CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_SOUND=y @@ -343,7 +386,6 @@ CONFIG_VIRTIO_INPUT=y CONFIG_VIRTIO_MMIO=y CONFIG_STAGING=y CONFIG_SND_BCM2835=m -CONFIG_VIDEO_BCM2835=m CONFIG_CLK_RASPBERRYPI=y CONFIG_MAILBOX=y CONFIG_BCM2835_MBOX=y @@ -352,8 +394,6 @@ CONFIG_RASPBERRYPI_POWER=y CONFIG_PWM=y CONFIG_PWM_BCM2835=y CONFIG_EXT2_FS=y -CONFIG_EXT3_FS=y -CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_BTRFS_FS=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FANOTIFY=y @@ -376,8 +416,6 @@ CONFIG_NLS_ISO8859_1=y CONFIG_NLS_UTF8=y CONFIG_CRYPTO_CCM=y CONFIG_CRYPTO_GCM=y -# CONFIG_XZ_DEC_ARM is not set -# CONFIG_XZ_DEC_ARMTHUMB is not set CONFIG_DMA_CMA=y CONFIG_CMA_SIZE_MBYTES=32 CONFIG_PRINTK_TIME=y @@ -389,14 +427,11 @@ CONFIG_PANIC_ON_OOPS=y CONFIG_PANIC_TIMEOUT=20 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y CONFIG_HARDLOCKUP_DETECTOR=y -CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY=y CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y CONFIG_WQ_WATCHDOG=y CONFIG_WQ_CPU_INTENSIVE_REPORT=y CONFIG_TEST_LOCKUP=m -# CONFIG_SCHED_DEBUG is not set # CONFIG_RCU_TRACE is not set CONFIG_FUNCTION_TRACER=y -# CONFIG_STRICT_DEVMEM is not set CONFIG_MEMTEST=y diff --git a/board/aarch64/linux_defconfig b/board/aarch64/linux_defconfig index 67252d707..54f230660 100644 --- a/board/aarch64/linux_defconfig +++ b/board/aarch64/linux_defconfig @@ -39,7 +39,6 @@ CONFIG_ARM64_ERRATUM_1286807=y CONFIG_ARM64_ERRATUM_1542419=y CONFIG_ARM64_ERRATUM_2441009=y CONFIG_ARM64_VA_BITS_48=y -CONFIG_SCHED_MC=y CONFIG_NR_CPUS=64 CONFIG_COMPAT=y # CONFIG_SUSPEND is not set @@ -52,7 +51,6 @@ CONFIG_ARM_ARMADA_37XX_CPUFREQ=y CONFIG_ARM_ARMADA_8K_CPUFREQ=y CONFIG_ACPI=y CONFIG_KPROBES=y -CONFIG_JUMP_LABEL=y # CONFIG_GCC_PLUGINS is not set CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y @@ -79,7 +77,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_NET_FOU_IP_TUNNELS=y CONFIG_IPV6_SIT=m @@ -95,12 +92,31 @@ CONFIG_BRIDGE_NETFILTER=y CONFIG_NETFILTER_NETLINK_QUEUE=y CONFIG_NETFILTER_NETLINK_LOG=y CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_PROCFS=y CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_AMANDA=y CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +CONFIG_NF_CONNTRACK_SNMP=y +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +CONFIG_NF_CONNTRACK_SIP=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NF_CT_NETLINK_TIMEOUT=y +CONFIG_NF_CT_NETLINK_HELPER=y +CONFIG_NETFILTER_NETLINK_GLUE_CT=y CONFIG_NF_TABLES=y CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_NUMGEN=y CONFIG_NFT_CT=m +CONFIG_NFT_FLOW_OFFLOAD=y CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m @@ -109,15 +125,23 @@ CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=y CONFIG_NFT_REJECT=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB_INET=y CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m +CONFIG_NFT_TPROXY=y +CONFIG_NFT_SYNPROXY=y CONFIG_NFT_DUP_NETDEV=m CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=y CONFIG_NFT_REJECT_NETDEV=m +CONFIG_NF_FLOW_TABLE_INET=y +CONFIG_NF_FLOW_TABLE=y +CONFIG_NETFILTER_XTABLES_LEGACY=y CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m CONFIG_NETFILTER_XT_TARGET_LOG=m CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m @@ -134,29 +158,69 @@ CONFIG_NETFILTER_XT_MATCH_MAC=m CONFIG_NETFILTER_XT_MATCH_MARK=m CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_IP_SET=y +CONFIG_IP_SET_BITMAP_IP=y +CONFIG_IP_SET_BITMAP_IPMAC=y +CONFIG_IP_SET_BITMAP_PORT=y +CONFIG_IP_SET_HASH_IP=y +CONFIG_IP_SET_HASH_IPMARK=y +CONFIG_IP_SET_HASH_IPPORT=y +CONFIG_IP_SET_HASH_IPPORTIP=y +CONFIG_IP_SET_HASH_IPPORTNET=y +CONFIG_IP_SET_HASH_IPMAC=y +CONFIG_IP_SET_HASH_MAC=y +CONFIG_IP_SET_HASH_NETPORTNET=y +CONFIG_IP_SET_HASH_NET=y +CONFIG_IP_SET_HASH_NETNET=y +CONFIG_IP_SET_HASH_NETPORT=y +CONFIG_IP_SET_HASH_NETIFACE=y +CONFIG_IP_SET_LIST_SET=y +CONFIG_NFT_DUP_IPV4=y +CONFIG_NFT_FIB_IPV4=y +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_LOG_ARP=y +CONFIG_NF_LOG_IPV4=y CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m CONFIG_IP_NF_NAT=m CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_NFT_DUP_IPV6=y +CONFIG_NFT_FIB_IPV6=y CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_SRH=m +CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_NAT=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m CONFIG_NF_CONNTRACK_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m CONFIG_BRIDGE_EBT_802_3=m CONFIG_BRIDGE_EBT_ARP=m CONFIG_BRIDGE_EBT_IP=m @@ -412,7 +476,6 @@ CONFIG_ARM_SBSA_WATCHDOG=y CONFIG_ARMADA_37XX_WATCHDOG=y CONFIG_I6300ESB_WDT=y CONFIG_MFD_MAX77620=y -CONFIG_MFD_SEC_CORE=y CONFIG_MFD_ROHM_BD718XX=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y @@ -421,7 +484,6 @@ CONFIG_REGULATOR_GPIO=y CONFIG_REGULATOR_MAX77620=y CONFIG_REGULATOR_PCA9450=y CONFIG_REGULATOR_QCOM_SPMI=y -CONFIG_REGULATOR_S2MPS11=y # CONFIG_HID_GENERIC is not set # CONFIG_HID_A4TECH is not set # CONFIG_HID_APPLE is not set @@ -431,7 +493,6 @@ CONFIG_REGULATOR_S2MPS11=y # CONFIG_HID_CYPRESS is not set # CONFIG_HID_EZKEY is not set # CONFIG_HID_KENSINGTON is not set -# CONFIG_HID_LOGITECH is not set # CONFIG_HID_MICROSOFT is not set # CONFIG_HID_MONTEREY is not set CONFIG_USB_ULPI_BUS=y @@ -453,7 +514,6 @@ CONFIG_USB_CHIPIDEA_UDC=y CONFIG_USB_CHIPIDEA_HOST=y CONFIG_USB_ISP1760=y CONFIG_USB_HSIC_USB3503=m -CONFIG_NOP_USB_XCEIV=y CONFIG_USB_ULPI=y CONFIG_USB_GADGET=y CONFIG_USB_SNP_UDC_PLAT=y @@ -487,7 +547,6 @@ CONFIG_LEDS_TRIGGER_NETDEV=y CONFIG_RTC_CLASS=y CONFIG_RTC_DRV_MAX77686=y CONFIG_RTC_DRV_PCF8523=y -CONFIG_RTC_DRV_S5M=y CONFIG_RTC_DRV_DS3232=y CONFIG_RTC_DRV_EFI=y CONFIG_RTC_DRV_PL031=y @@ -502,7 +561,6 @@ CONFIG_VIRTIO_INPUT=y CONFIG_VIRTIO_MMIO=y # CONFIG_SURFACE_PLATFORMS is not set CONFIG_COMMON_CLK_CS2000_CP=y -CONFIG_COMMON_CLK_S2MPS11=y CONFIG_COMMON_CLK_XGENE=y CONFIG_COMMON_CLK_BD718XX=y CONFIG_MAILBOX=y @@ -519,7 +577,7 @@ CONFIG_PHY_SAMSUNG_USB2=y CONFIG_NVMEM_LAYOUT_ONIE_TLV=y CONFIG_MUX_MMIO=y CONFIG_EXT2_FS=y -CONFIG_EXT3_FS=y +CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_BTRFS_FS=y CONFIG_BTRFS_FS_POSIX_ACL=y @@ -546,8 +604,6 @@ CONFIG_CRYPTO_CCM=m CONFIG_CRYPTO_ECHAINIV=y CONFIG_CRYPTO_ANSI_CPRNG=y CONFIG_CRYPTO_GHASH_ARM64_CE=y -CONFIG_CRYPTO_SHA1_ARM64_CE=y -CONFIG_CRYPTO_SHA2_ARM64_CE=y CONFIG_CRYPTO_AES_ARM64_CE_CCM=y CONFIG_DMA_CMA=y CONFIG_CMA_SIZE_MBYTES=0 @@ -561,13 +617,11 @@ CONFIG_PANIC_ON_OOPS=y CONFIG_PANIC_TIMEOUT=20 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y CONFIG_HARDLOCKUP_DETECTOR=y -CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY=y CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y CONFIG_WQ_WATCHDOG=y CONFIG_WQ_CPU_INTENSIVE_REPORT=y CONFIG_TEST_LOCKUP=m -# CONFIG_SCHED_DEBUG is not set # CONFIG_RCU_TRACE is not set CONFIG_FUNCTION_TRACER=y # CONFIG_STRICT_DEVMEM is not set diff --git a/board/x86_64/linux_defconfig b/board/x86_64/linux_defconfig index 4451a6834..3c9fd667e 100644 --- a/board/x86_64/linux_defconfig +++ b/board/x86_64/linux_defconfig @@ -53,7 +53,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_NET_FOU_IP_TUNNELS=y CONFIG_IPV6_SIT=m @@ -69,12 +68,31 @@ CONFIG_BRIDGE_NETFILTER=y CONFIG_NETFILTER_NETLINK_QUEUE=y CONFIG_NETFILTER_NETLINK_LOG=y CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_PROCFS=y CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_AMANDA=y CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +CONFIG_NF_CONNTRACK_SNMP=y +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +CONFIG_NF_CONNTRACK_SIP=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NF_CT_NETLINK_TIMEOUT=y +CONFIG_NF_CT_NETLINK_HELPER=y +CONFIG_NETFILTER_NETLINK_GLUE_CT=y CONFIG_NF_TABLES=y CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_NUMGEN=y CONFIG_NFT_CT=m +CONFIG_NFT_FLOW_OFFLOAD=y CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m @@ -83,15 +101,23 @@ CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=y CONFIG_NFT_REJECT=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB_INET=y CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m +CONFIG_NFT_TPROXY=y +CONFIG_NFT_SYNPROXY=y CONFIG_NFT_DUP_NETDEV=m CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=y CONFIG_NFT_REJECT_NETDEV=m +CONFIG_NF_FLOW_TABLE_INET=y +CONFIG_NF_FLOW_TABLE=y +CONFIG_NETFILTER_XTABLES_LEGACY=y CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m CONFIG_NETFILTER_XT_TARGET_LOG=m CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m @@ -108,29 +134,69 @@ CONFIG_NETFILTER_XT_MATCH_MAC=m CONFIG_NETFILTER_XT_MATCH_MARK=m CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_IP_SET=y +CONFIG_IP_SET_BITMAP_IP=y +CONFIG_IP_SET_BITMAP_IPMAC=y +CONFIG_IP_SET_BITMAP_PORT=y +CONFIG_IP_SET_HASH_IP=y +CONFIG_IP_SET_HASH_IPMARK=y +CONFIG_IP_SET_HASH_IPPORT=y +CONFIG_IP_SET_HASH_IPPORTIP=y +CONFIG_IP_SET_HASH_IPPORTNET=y +CONFIG_IP_SET_HASH_IPMAC=y +CONFIG_IP_SET_HASH_MAC=y +CONFIG_IP_SET_HASH_NETPORTNET=y +CONFIG_IP_SET_HASH_NET=y +CONFIG_IP_SET_HASH_NETNET=y +CONFIG_IP_SET_HASH_NETPORT=y +CONFIG_IP_SET_HASH_NETIFACE=y +CONFIG_IP_SET_LIST_SET=y +CONFIG_NFT_DUP_IPV4=y +CONFIG_NFT_FIB_IPV4=y +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_LOG_ARP=y +CONFIG_NF_LOG_IPV4=y CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m CONFIG_IP_NF_NAT=m CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_NFT_DUP_IPV6=y +CONFIG_NFT_FIB_IPV6=y CONFIG_IP6_NF_IPTABLES=m CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_SRH=m +CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_NAT=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m CONFIG_NF_CONNTRACK_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m CONFIG_BRIDGE_EBT_802_3=m CONFIG_BRIDGE_EBT_ARP=m CONFIG_BRIDGE_EBT_IP=m diff --git a/configs/aarch32_defconfig b/configs/aarch32_defconfig index 2dad00f40..bf1988b21 100644 --- a/configs/aarch32_defconfig +++ b/configs/aarch32_defconfig @@ -29,7 +29,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.65" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.5" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/linux_defconfig" BR2_LINUX_KERNEL_INSTALL_TARGET=y diff --git a/configs/aarch32_minimal_defconfig b/configs/aarch32_minimal_defconfig index ce580c695..93d273c80 100644 --- a/configs/aarch32_minimal_defconfig +++ b/configs/aarch32_minimal_defconfig @@ -29,7 +29,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.58" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.5" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch32/linux_defconfig" BR2_LINUX_KERNEL_INSTALL_TARGET=y diff --git a/configs/aarch64_defconfig b/configs/aarch64_defconfig index 4db4a74f9..80838e8b2 100644 --- a/configs/aarch64_defconfig +++ b/configs/aarch64_defconfig @@ -27,7 +27,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.65" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.5" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig" BR2_LINUX_KERNEL_INSTALL_TARGET=y @@ -38,7 +38,6 @@ BR2_PACKAGE_STRESS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y -BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW=y BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169=y BR2_PACKAGE_DBUS_CXX=y BR2_PACKAGE_DBUS_GLIB=y diff --git a/configs/aarch64_minimal_defconfig b/configs/aarch64_minimal_defconfig index 1d621fab6..3e9f665a5 100644 --- a/configs/aarch64_minimal_defconfig +++ b/configs/aarch64_minimal_defconfig @@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.65" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.5" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig" BR2_LINUX_KERNEL_INSTALL_TARGET=y @@ -37,9 +37,6 @@ BR2_PACKAGE_STRESS_NG=y BR2_PACKAGE_SYSREPO_GROUP="sys-cli" BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y -BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y -BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW=y -BR2_PACKAGE_LINUX_FIRMWARE_RTL_8169=y BR2_PACKAGE_DBUS_CXX=y BR2_PACKAGE_DBUS_GLIB=y BR2_PACKAGE_DBUS_TRIGGERD=y diff --git a/configs/x86_64_defconfig b/configs/x86_64_defconfig index c8c61399a..d037fb936 100644 --- a/configs/x86_64_defconfig +++ b/configs/x86_64_defconfig @@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.65" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.5" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig" BR2_LINUX_KERNEL_INSTALL_TARGET=y @@ -51,7 +51,6 @@ BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y -BR2_PACKAGE_PYTHON3=y BR2_PACKAGE_PYTHON_GUNICORN=y BR2_PACKAGE_LIBSSH_OPENSSL=y BR2_PACKAGE_LIBSSH2=y @@ -71,7 +70,6 @@ BR2_PACKAGE_CONNTRACK_TOOLS=y BR2_PACKAGE_DNSMASQ=y BR2_PACKAGE_ETHTOOL=y BR2_PACKAGE_FPING=y -BR2_PACKAGE_FIREWALL=y BR2_PACKAGE_FRR=y # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set BR2_PACKAGE_IPERF3=y @@ -84,7 +82,6 @@ BR2_PACKAGE_MTR=y BR2_PACKAGE_NETCALC=y BR2_PACKAGE_NETCAT_OPENBSD=y BR2_PACKAGE_NETSNMP=y -BR2_PACKAGE_NFTABLES=y BR2_PACKAGE_NGINX=y BR2_PACKAGE_NGINX_HTTP_SSL_MODULE=y BR2_PACKAGE_NGINX_HTTP_V2_MODULE=y @@ -163,6 +160,7 @@ BR2_PACKAGE_FINIT_RTC_DATE="2024-11-04 10:54:00" BR2_PACKAGE_FINIT_RTC_FILE="/var/lib/misc/rtc" BR2_PACKAGE_FINIT_PLUGIN_TTY=y BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y +BR2_PACKAGE_FIREWALL=y BR2_PACKAGE_IITO=y BR2_PACKAGE_KEYACK=y BR2_PACKAGE_KLISH_PLUGIN_INFIX=y diff --git a/configs/x86_64_minimal_defconfig b/configs/x86_64_minimal_defconfig index c821286e4..4a414e792 100644 --- a/configs/x86_64_minimal_defconfig +++ b/configs/x86_64_minimal_defconfig @@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.65" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.5" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig" BR2_LINUX_KERNEL_INSTALL_TARGET=y diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index 303f23fb9..ec4e63126 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -20,10 +20,11 @@ All notable changes to the project are documented in this file. > - WiFi Access Point (AP) mode support with multi-SSID capability > - RIPv2 routing support > - WireGuard support +> - New major version of linux kernel 6.18, previous 6.12 ### Changes -- Upgrade Linux kernel to 6.12.65 (LTS) +- Upgrade Linux kernel to 6.18.5 (LTS) - Upgrade libyang to 4.2.2 - Upgrade sysrepo to 4.2.10 - Upgrade netopeer2 (NETCONF) to 2.7.0 diff --git a/patches/linux/6.12.65/0005-net-dsa-mv88e6xxx-Add-LED-infrastructure.patch b/patches/linux/6.12.65/0005-net-dsa-mv88e6xxx-Add-LED-infrastructure.patch deleted file mode 100644 index 2b3aab7c2..000000000 --- a/patches/linux/6.12.65/0005-net-dsa-mv88e6xxx-Add-LED-infrastructure.patch +++ /dev/null @@ -1,310 +0,0 @@ -From e2f9222f3a6d9befb99a158a07ac4d4b33ab566a Mon Sep 17 00:00:00 2001 -From: Tobias Waldekranz -Date: Thu, 16 Nov 2023 19:44:32 +0100 -Subject: [PATCH 05/30] net: dsa: mv88e6xxx: Add LED infrastructure - -Parse DT for LEDs and register them for devices that support it, -though no actual implementations exist yet. ---- - drivers/net/dsa/mv88e6xxx/Makefile | 1 + - drivers/net/dsa/mv88e6xxx/chip.c | 5 +- - drivers/net/dsa/mv88e6xxx/chip.h | 16 +++ - drivers/net/dsa/mv88e6xxx/leds.c | 185 +++++++++++++++++++++++++++++ - drivers/net/dsa/mv88e6xxx/leds.h | 12 ++ - 5 files changed, 218 insertions(+), 1 deletion(-) - create mode 100644 drivers/net/dsa/mv88e6xxx/leds.c - create mode 100644 drivers/net/dsa/mv88e6xxx/leds.h - -diff --git a/drivers/net/dsa/mv88e6xxx/Makefile b/drivers/net/dsa/mv88e6xxx/Makefile -index a9a9651187db..6720d9303914 100644 ---- a/drivers/net/dsa/mv88e6xxx/Makefile -+++ b/drivers/net/dsa/mv88e6xxx/Makefile -@@ -9,6 +9,7 @@ mv88e6xxx-objs += global2.o - mv88e6xxx-objs += global2_avb.o - mv88e6xxx-objs += global2_scratch.o - mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_PTP) += hwtstamp.o -+mv88e6xxx-objs += leds.o - mv88e6xxx-objs += pcs-6185.o - mv88e6xxx-objs += pcs-6352.o - mv88e6xxx-objs += pcs-639x.o -diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index b96bc12dc6a8..f92b7d7d5780 100644 ---- a/drivers/net/dsa/mv88e6xxx/chip.c -+++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -37,6 +37,7 @@ - #include "global1.h" - #include "global2.h" - #include "hwtstamp.h" -+#include "leds.h" - #include "phy.h" - #include "port.h" - #include "ptp.h" -@@ -4171,7 +4172,9 @@ static int mv88e6xxx_port_setup(struct dsa_switch *ds, int port) - return err; - } - -- return mv88e6xxx_setup_devlink_regions_port(ds, port); -+ err = err ? : mv88e6xxx_setup_devlink_regions_port(ds, port); -+ err = err ? : mv88e6xxx_port_setup_leds(ds, port); -+ return err; - } - - static void mv88e6xxx_port_teardown(struct dsa_switch *ds, int port) -diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h -index a54682240839..32c87ab754d1 100644 ---- a/drivers/net/dsa/mv88e6xxx/chip.h -+++ b/drivers/net/dsa/mv88e6xxx/chip.h -@@ -207,6 +207,7 @@ struct mv88e6xxx_avb_ops; - struct mv88e6xxx_ptp_ops; - struct mv88e6xxx_pcs_ops; - struct mv88e6xxx_cc_coeffs; -+struct mv88e6xxx_led_ops; - - struct mv88e6xxx_irq { - u16 masked; -@@ -330,6 +331,8 @@ struct mv88e6xxx_hw_stat { - int type; - }; - -+struct mv88e6xxx_led; -+ - struct mv88e6xxx_chip { - const struct mv88e6xxx_info *info; - -@@ -661,6 +664,9 @@ struct mv88e6xxx_ops { - /* Precision Time Protocol operations */ - const struct mv88e6xxx_ptp_ops *ptp_ops; - -+ /* LED operations */ -+ const struct mv88e6xxx_led_ops *led_ops; -+ - /* Phylink */ - void (*phylink_get_caps)(struct mv88e6xxx_chip *chip, int port, - struct phylink_config *config); -@@ -740,7 +746,17 @@ struct mv88e6xxx_pcs_ops { - void (*pcs_teardown)(struct mv88e6xxx_chip *chip, int port); - struct phylink_pcs *(*pcs_select)(struct mv88e6xxx_chip *chip, int port, - phy_interface_t mode); -+}; - -+struct mv88e6xxx_led_ops { -+ int (*brightness_set)(struct mv88e6xxx_led *led, -+ enum led_brightness brightness); -+ int (*blink_set)(struct mv88e6xxx_led *led, -+ unsigned long *delay_on, unsigned long *delay_off); -+ int (*hw_control_is_supported)(struct mv88e6xxx_led *led, -+ unsigned long flags); -+ int (*hw_control_set)(struct mv88e6xxx_led *led, unsigned long flags); -+ int (*hw_control_get)(struct mv88e6xxx_led *led, unsigned long *flags); - }; - - static inline bool mv88e6xxx_has_stu(struct mv88e6xxx_chip *chip) -diff --git a/drivers/net/dsa/mv88e6xxx/leds.c b/drivers/net/dsa/mv88e6xxx/leds.c -new file mode 100644 -index 000000000000..e3de10991f29 ---- /dev/null -+++ b/drivers/net/dsa/mv88e6xxx/leds.c -@@ -0,0 +1,185 @@ -+// SPDX-License-Identifier: GPL-2.0-or-later -+#include -+ -+#include "chip.h" -+#include "leds.h" -+#include "port.h" -+ -+struct mv88e6xxx_led { -+ struct mv88e6xxx_chip *chip; -+ int port; -+ u8 index; -+ -+ struct led_classdev ldev; -+}; -+ -+static int mv88e6xxx_led_brightness_set(struct led_classdev *ldev, -+ enum led_brightness brightness) -+{ -+ const struct mv88e6xxx_led_ops *ops; -+ struct mv88e6xxx_led *led; -+ -+ led = container_of(ldev, struct mv88e6xxx_led, ldev); -+ ops = led->chip->info->ops->led_ops; -+ -+ if (!ops->brightness_set) -+ return -EOPNOTSUPP; -+ -+ return ops->brightness_set(led, brightness); -+} -+ -+static int mv88e6xxx_led_blink_set(struct led_classdev *ldev, -+ unsigned long *delay_on, -+ unsigned long *delay_off) -+{ -+ const struct mv88e6xxx_led_ops *ops; -+ struct mv88e6xxx_led *led; -+ -+ led = container_of(ldev, struct mv88e6xxx_led, ldev); -+ ops = led->chip->info->ops->led_ops; -+ -+ if (!ops->blink_set) -+ return -EOPNOTSUPP; -+ -+ return ops->blink_set(led, delay_on, delay_off); -+} -+ -+static int mv88e6xxx_led_hw_control_is_supported(struct led_classdev *ldev, -+ unsigned long flags) -+{ -+ const struct mv88e6xxx_led_ops *ops; -+ struct mv88e6xxx_led *led; -+ -+ led = container_of(ldev, struct mv88e6xxx_led, ldev); -+ ops = led->chip->info->ops->led_ops; -+ -+ if (!ops->hw_control_is_supported) -+ return -EOPNOTSUPP; -+ -+ return ops->hw_control_is_supported(led, flags); -+} -+ -+static int mv88e6xxx_led_hw_control_set(struct led_classdev *ldev, -+ unsigned long flags) -+{ -+ const struct mv88e6xxx_led_ops *ops; -+ struct mv88e6xxx_led *led; -+ -+ led = container_of(ldev, struct mv88e6xxx_led, ldev); -+ ops = led->chip->info->ops->led_ops; -+ -+ if (!ops->hw_control_set) -+ return -EOPNOTSUPP; -+ -+ return ops->hw_control_set(led, flags); -+} -+ -+static int mv88e6xxx_led_hw_control_get(struct led_classdev *ldev, -+ unsigned long *flags) -+{ -+ const struct mv88e6xxx_led_ops *ops; -+ struct mv88e6xxx_led *led; -+ -+ led = container_of(ldev, struct mv88e6xxx_led, ldev); -+ ops = led->chip->info->ops->led_ops; -+ -+ if (!ops->hw_control_get) -+ return -EOPNOTSUPP; -+ -+ return ops->hw_control_get(led, flags); -+} -+ -+static struct device *mv88e6xxx_led_hw_control_get_device(struct led_classdev *ldev) -+{ -+ struct mv88e6xxx_led *led; -+ struct dsa_port *dp; -+ -+ led = container_of(ldev, struct mv88e6xxx_led, ldev); -+ dp = dsa_to_port(led->chip->ds, led->port); -+ -+ if (dp && dp->user) -+ return &dp->user->dev; -+ -+ return NULL; -+} -+ -+static int mv88e6xxx_port_setup_led(struct mv88e6xxx_chip *chip, int port, -+ struct device_node *np) -+{ -+ struct led_init_data init_data = {}; -+ struct mv88e6xxx_led *led; -+ char *devname; -+ u32 index; -+ int err; -+ -+ err = of_property_read_u32(np, "reg", &index); -+ if (err) -+ return err; -+ -+ if (index >= 2) -+ return -EINVAL; -+ -+ led = devm_kzalloc(chip->dev, sizeof(*led), GFP_KERNEL); -+ if (!led) -+ return -ENOMEM; -+ -+ *led = (struct mv88e6xxx_led) { -+ .chip = chip, -+ .port = port, -+ .index = index, -+ -+ .ldev = { -+ .max_brightness = 1, -+ .brightness_set_blocking = mv88e6xxx_led_brightness_set, -+ .blink_set = mv88e6xxx_led_blink_set, -+ -+#ifdef CONFIG_LEDS_TRIGGERS -+ .hw_control_trigger = "netdev", -+ .hw_control_get_device = mv88e6xxx_led_hw_control_get_device, -+ -+ .hw_control_is_supported = mv88e6xxx_led_hw_control_is_supported, -+ .hw_control_set = mv88e6xxx_led_hw_control_set, -+ .hw_control_get = mv88e6xxx_led_hw_control_get, -+#endif -+ }, -+ }; -+ -+ devname = devm_kasprintf(chip->dev, GFP_KERNEL, "%s.%d", -+ dev_name(chip->dev), port); -+ if (!devname) -+ return -ENOMEM; -+ -+ init_data = (struct led_init_data) { -+ .fwnode = of_fwnode_handle(np), -+ .devname_mandatory = true, -+ .devicename = devname, -+ }; -+ -+ return devm_led_classdev_register_ext(chip->dev, &led->ldev, &init_data); -+} -+ -+int mv88e6xxx_port_setup_leds(struct dsa_switch *ds, int port) -+{ -+ struct dsa_port *dp = dsa_to_port(ds, port); -+ struct mv88e6xxx_chip *chip = ds->priv; -+ struct device_node *pnp, *np; -+ int err; -+ -+ if (!chip->info->ops->led_ops) -+ return 0; -+ -+ if (!dp->dn) -+ return 0; -+ -+ pnp = of_get_child_by_name(dp->dn, "leds"); -+ if (!pnp) -+ return 0; -+ -+ for_each_available_child_of_node(pnp, np) { -+ err = mv88e6xxx_port_setup_led(chip, port, np); -+ if (err) -+ return err; -+ } -+ -+ return 0; -+} -diff --git a/drivers/net/dsa/mv88e6xxx/leds.h b/drivers/net/dsa/mv88e6xxx/leds.h -new file mode 100644 -index 000000000000..8afa2a0c0527 ---- /dev/null -+++ b/drivers/net/dsa/mv88e6xxx/leds.h -@@ -0,0 +1,12 @@ -+/* SPDX-License-Identifier: GPL-2.0-or-later */ -+ -+/* Marvell 88E6xxx Switch leds support. */ -+ -+#ifndef _MV88E6XXX_LEDS_H -+#define _MV88E6XXX_LEDS_H -+ -+#include "chip.h" -+ -+int mv88e6xxx_port_setup_leds(struct dsa_switch *ds, int port); -+ -+#endif /* _MV88E6XXX_LEDS_H */ diff --git a/patches/linux/6.12.65/0006-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch b/patches/linux/6.12.65/0006-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch deleted file mode 100644 index 592abd1a1..000000000 --- a/patches/linux/6.12.65/0006-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch +++ /dev/null @@ -1,358 +0,0 @@ -From 4ea316ce76be7fd2a17ea800d11889b9bff61942 Mon Sep 17 00:00:00 2001 -From: Tobias Waldekranz -Date: Thu, 16 Nov 2023 21:59:35 +0100 -Subject: [PATCH 06/30] net: dsa: mv88e6xxx: Add LED support for 6393X - -Trigger support: -- "none" -- "timer" -- "netdev" ---- - drivers/net/dsa/mv88e6xxx/chip.c | 1 + - drivers/net/dsa/mv88e6xxx/leds.c | 229 +++++++++++++++++++++++++++++++ - drivers/net/dsa/mv88e6xxx/leds.h | 2 + - drivers/net/dsa/mv88e6xxx/port.c | 33 +++++ - drivers/net/dsa/mv88e6xxx/port.h | 7 + - 5 files changed, 272 insertions(+) - -diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index f92b7d7d5780..c833b7e44d8b 100644 ---- a/drivers/net/dsa/mv88e6xxx/chip.c -+++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -5691,6 +5691,7 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = { - .gpio_ops = &mv88e6352_gpio_ops, - .avb_ops = &mv88e6390_avb_ops, - .ptp_ops = &mv88e6352_ptp_ops, -+ .led_ops = &mv88e6393x_led_ops, - .phylink_get_caps = mv88e6393x_phylink_get_caps, - .pcs_ops = &mv88e6393x_pcs_ops, - }; -diff --git a/drivers/net/dsa/mv88e6xxx/leds.c b/drivers/net/dsa/mv88e6xxx/leds.c -index e3de10991f29..acdb5eca6647 100644 ---- a/drivers/net/dsa/mv88e6xxx/leds.c -+++ b/drivers/net/dsa/mv88e6xxx/leds.c -@@ -5,6 +5,13 @@ - #include "leds.h" - #include "port.h" - -+#define FLAG_ACT (BIT(TRIGGER_NETDEV_RX) | BIT(TRIGGER_NETDEV_TX)) -+#define FLAG_LINK BIT(TRIGGER_NETDEV_LINK) -+#define FLAG_LINK_10 BIT(TRIGGER_NETDEV_LINK_10) -+#define FLAG_LINK_100 BIT(TRIGGER_NETDEV_LINK_100) -+#define FLAG_LINK_1G BIT(TRIGGER_NETDEV_LINK_1000) -+#define FLAG_FULL BIT(TRIGGER_NETDEV_FULL_DUPLEX) -+ - struct mv88e6xxx_led { - struct mv88e6xxx_chip *chip; - int port; -@@ -13,6 +20,228 @@ struct mv88e6xxx_led { - struct led_classdev ldev; - }; - -+enum mv88e6393x_led_mode { -+ MV88E6393X_LED_MODE_BLINK = 0xd, -+ MV88E6393X_LED_MODE_OFF = 0xe, -+ MV88E6393X_LED_MODE_ON = 0xf, -+ -+ MV88E6393X_LED_MODES = 0x10 -+}; -+ -+static const unsigned long mv88e6393x_led_map_p1_p8[2][MV88E6393X_LED_MODES] = { -+ { -+ [0x1] = FLAG_ACT | FLAG_LINK_100 | FLAG_LINK_1G, -+ [0x2] = FLAG_ACT | FLAG_LINK_1G, -+ [0x3] = FLAG_ACT | FLAG_LINK, -+ [0x6] = FLAG_FULL, -+ [0x7] = FLAG_ACT | FLAG_LINK_10 | FLAG_LINK_1G, -+ [0x8] = FLAG_LINK, -+ [0x9] = FLAG_LINK_10, -+ [0xa] = FLAG_ACT | FLAG_LINK_10, -+ [0xb] = FLAG_LINK_100 | FLAG_LINK_1G, -+ }, -+ { -+ [0x1] = FLAG_ACT, -+ [0x2] = FLAG_ACT | FLAG_LINK_10 | FLAG_LINK_100, -+ [0x3] = FLAG_LINK_1G, -+ [0x5] = FLAG_ACT | FLAG_LINK, -+ [0x6] = FLAG_ACT | FLAG_LINK_10 | FLAG_LINK_1G, -+ [0x7] = FLAG_LINK_10 | FLAG_LINK_1G, -+ [0x9] = FLAG_LINK_100, -+ [0xa] = FLAG_ACT | FLAG_LINK_100, -+ [0xb] = FLAG_LINK_10 | FLAG_LINK_100, -+ } -+}; -+ -+static const unsigned long mv88e6393x_led_map_p9_p10[2][MV88E6393X_LED_MODES] = { -+ { -+ [0x1] = FLAG_ACT | FLAG_LINK, -+ }, -+ { -+ [0x6] = FLAG_FULL, -+ [0x7] = FLAG_ACT | FLAG_LINK, -+ [0x8] = FLAG_LINK, -+ } -+}; -+ -+static const unsigned long *mv88e6393x_led_map(struct mv88e6xxx_led *led) -+{ -+ switch (led->port) { -+ case 1: -+ case 2: -+ case 3: -+ case 4: -+ case 5: -+ case 6: -+ case 7: -+ case 8: -+ return mv88e6393x_led_map_p1_p8[led->index]; -+ case 9: -+ case 10: -+ return mv88e6393x_led_map_p9_p10[led->index]; -+ } -+ -+ return NULL; -+} -+ -+static int mv88e6393x_led_flags_to_mode(struct mv88e6xxx_led *led, unsigned long flags) -+{ -+ const unsigned long *map = mv88e6393x_led_map(led); -+ int i; -+ -+ if (!map) -+ return -ENODEV; -+ -+ if (!flags) -+ return MV88E6393X_LED_MODE_OFF; -+ -+ for (i = 0; i < MV88E6393X_LED_MODES; i++) { -+ if (map[i] == flags) -+ return i; -+ } -+ -+ return -EOPNOTSUPP; -+} -+ -+static int mv88e6393x_led_mode_to_flags(struct mv88e6xxx_led *led, u8 mode, -+ unsigned long *flags) -+{ -+ const unsigned long *map = mv88e6393x_led_map(led); -+ -+ if (!map) -+ return -ENODEV; -+ -+ if (mode == MV88E6393X_LED_MODE_OFF) { -+ *flags = 0; -+ return 0; -+ } -+ -+ if (map[mode]) { -+ *flags = map[mode]; -+ return 0; -+ } -+ -+ return -EINVAL; -+} -+ -+static int mv88e6393x_led_set(struct mv88e6xxx_led *led, int mode) -+{ -+ u16 ctrl; -+ int err; -+ -+ if (mode < 0) -+ return mode; -+ -+ mv88e6xxx_reg_lock(led->chip); -+ -+ err = mv88e6393x_port_led_read(led->chip, led->port, 0, &ctrl); -+ if (err) -+ goto out; -+ -+ switch (led->index) { -+ case 0: -+ ctrl &= ~0x0f; -+ ctrl |= mode; -+ break; -+ case 1: -+ ctrl &= ~0xf0; -+ ctrl |= mode << 4; -+ } -+ -+ err = mv88e6393x_port_led_write(led->chip, led->port, 0, ctrl); -+out: -+ mv88e6xxx_reg_unlock(led->chip); -+ return err; -+} -+ -+static int mv88e6393x_led_get(struct mv88e6xxx_led *led) -+{ -+ u16 ctrl; -+ int err; -+ -+ mv88e6xxx_reg_lock(led->chip); -+ err = mv88e6393x_port_led_read(led->chip, led->port, 0, &ctrl); -+ mv88e6xxx_reg_unlock(led->chip); -+ if (err) -+ return err; -+ -+ switch (led->index) { -+ case 0: -+ return ctrl & 0xf; -+ case 1: -+ return (ctrl >> 4) & 0xf; -+ } -+ -+ return -EINVAL; -+} -+ -+static int mv88e6393x_led_brightness_set(struct mv88e6xxx_led *led, -+ enum led_brightness brightness) -+{ -+ if (brightness == LED_OFF) -+ return mv88e6393x_led_set(led, MV88E6393X_LED_MODE_OFF); -+ -+ return mv88e6393x_led_set(led, MV88E6393X_LED_MODE_ON); -+} -+static int mv88e6393x_led_blink_set(struct mv88e6xxx_led *led, -+ unsigned long *delay_on, -+ unsigned long *delay_off) -+{ -+ int err; -+ -+ /* Defer anything other than 50% duty cycles to software */ -+ if (*delay_on != *delay_off) -+ return -EINVAL; -+ -+ /* Reject values outside ~20% of our default rate (84ms) */ -+ if (*delay_on && ((*delay_on < 30) || (*delay_on > 50))) -+ return -EINVAL; -+ -+ err = mv88e6393x_led_set(led, MV88E6393X_LED_MODE_BLINK); -+ if (!err) -+ *delay_on = *delay_off = 42; -+ -+ return err; -+} -+ -+static int mv88e6393x_led_hw_control_is_supported(struct mv88e6xxx_led *led, -+ unsigned long flags) -+{ -+ int mode = mv88e6393x_led_flags_to_mode(led, flags); -+ -+ return (mode < 0) ? mode : 0; -+} -+ -+static int mv88e6393x_led_hw_control_set(struct mv88e6xxx_led *led, -+ unsigned long flags) -+{ -+ int mode = mv88e6393x_led_flags_to_mode(led, flags); -+ -+ if (mode < 0) -+ return mode; -+ -+ return mv88e6393x_led_set(led, mode); -+} -+ -+static int mv88e6393x_led_hw_control_get(struct mv88e6xxx_led *led, -+ unsigned long *flags) -+{ -+ int mode = mv88e6393x_led_get(led); -+ -+ if (mode < 0) -+ return mode; -+ -+ return mv88e6393x_led_mode_to_flags(led, mode, flags); -+} -+ -+const struct mv88e6xxx_led_ops mv88e6393x_led_ops = { -+ .brightness_set = mv88e6393x_led_brightness_set, -+ .blink_set = mv88e6393x_led_blink_set, -+ .hw_control_is_supported = mv88e6393x_led_hw_control_is_supported, -+ .hw_control_set = mv88e6393x_led_hw_control_set, -+ .hw_control_get = mv88e6393x_led_hw_control_get, -+}; -+ - static int mv88e6xxx_led_brightness_set(struct led_classdev *ldev, - enum led_brightness brightness) - { -diff --git a/drivers/net/dsa/mv88e6xxx/leds.h b/drivers/net/dsa/mv88e6xxx/leds.h -index 8afa2a0c0527..542345d23dc5 100644 ---- a/drivers/net/dsa/mv88e6xxx/leds.h -+++ b/drivers/net/dsa/mv88e6xxx/leds.h -@@ -7,6 +7,8 @@ - - #include "chip.h" - -+extern const struct mv88e6xxx_led_ops mv88e6393x_led_ops; -+ - int mv88e6xxx_port_setup_leds(struct dsa_switch *ds, int port); - - #endif /* _MV88E6XXX_LEDS_H */ -diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c -index f25fb3214acb..aa5d312d8aa5 100644 ---- a/drivers/net/dsa/mv88e6xxx/port.c -+++ b/drivers/net/dsa/mv88e6xxx/port.c -@@ -1558,6 +1558,39 @@ int mv88e6351_port_set_ether_type(struct mv88e6xxx_chip *chip, int port, - return mv88e6xxx_port_write(chip, port, MV88E6XXX_PORT_ETH_TYPE, etype); - } - -+/* Offset 0x16: LED Control Register */ -+ -+int mv88e6393x_port_led_write(struct mv88e6xxx_chip *chip, int port, -+ unsigned int pointer, u16 data) -+{ -+ u16 cmd = BIT(15) | ((pointer & 0x7) << 12) | (data & 0x7ff); -+ int err; -+ -+ err = mv88e6xxx_port_write(chip, port, MV88E6393X_PORT_LED_CONTROL, cmd); -+ if (err) -+ return err; -+ -+ return mv88e6xxx_port_wait_bit(chip, port, MV88E6393X_PORT_LED_CONTROL, 15, 0); -+} -+ -+int mv88e6393x_port_led_read(struct mv88e6xxx_chip *chip, int port, -+ unsigned int pointer, u16 *data) -+{ -+ u16 cmd = (pointer & 0x7) << 12; -+ int err; -+ -+ err = mv88e6xxx_port_write(chip, port, MV88E6393X_PORT_LED_CONTROL, cmd); -+ if (err) -+ return err; -+ -+ err = mv88e6xxx_port_read(chip, port, MV88E6393X_PORT_LED_CONTROL, &cmd); -+ if (err) -+ return err; -+ -+ *data = cmd & 0x7ff; -+ return 0; -+} -+ - /* Offset 0x18: Port IEEE Priority Remapping Registers [0-3] - * Offset 0x19: Port IEEE Priority Remapping Registers [4-7] - */ -diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h -index ddadeb9bfdae..7157864dc20f 100644 ---- a/drivers/net/dsa/mv88e6xxx/port.h -+++ b/drivers/net/dsa/mv88e6xxx/port.h -@@ -309,6 +309,9 @@ - /* Offset 0x13: OutFiltered Counter */ - #define MV88E6XXX_PORT_OUT_FILTERED 0x13 - -+/* Offset 0x16: LED Control Register */ -+#define MV88E6393X_PORT_LED_CONTROL 0x16 -+ - /* Offset 0x18: IEEE Priority Mapping Table */ - #define MV88E6390_PORT_IEEE_PRIO_MAP_TABLE 0x18 - #define MV88E6390_PORT_IEEE_PRIO_MAP_TABLE_UPDATE 0x8000 -@@ -425,6 +428,10 @@ int mv88e6393x_port_set_policy(struct mv88e6xxx_chip *chip, int port, - enum mv88e6xxx_policy_action action); - int mv88e6351_port_set_ether_type(struct mv88e6xxx_chip *chip, int port, - u16 etype); -+int mv88e6393x_port_led_write(struct mv88e6xxx_chip *chip, int port, -+ unsigned int pointer, u16 data); -+int mv88e6393x_port_led_read(struct mv88e6xxx_chip *chip, int port, -+ unsigned int pointer, u16 *data); - int mv88e6393x_set_egress_port(struct mv88e6xxx_chip *chip, - enum mv88e6xxx_egress_direction direction, - int port); diff --git a/patches/linux/6.12.65/0024-usb-core-adjust-log-level-for-unauthorized-devices.patch b/patches/linux/6.12.65/0024-usb-core-adjust-log-level-for-unauthorized-devices.patch deleted file mode 100644 index 14500d9e8..000000000 --- a/patches/linux/6.12.65/0024-usb-core-adjust-log-level-for-unauthorized-devices.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 614812cf8afc87298d88a5185c7e6c2e7aab378f Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Mon, 29 Apr 2024 15:14:51 +0200 -Subject: [PATCH 24/30] usb: core: adjust log level for unauthorized devices - -The fact that a USB device currently is not authorized is not an error, -so let's adjust the log level so these messages slip below radar for the -commonly used 'quiet' log level. - -Signed-off-by: Joachim Wiberg ---- - drivers/usb/core/driver.c | 4 ++-- - drivers/usb/core/generic.c | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c -index 0c3f12daac79..037f03aace9f 100644 ---- a/drivers/usb/core/driver.c -+++ b/drivers/usb/core/driver.c -@@ -335,10 +335,10 @@ static int usb_probe_interface(struct device *dev) - return error; - - if (udev->authorized == 0) { -- dev_err(&intf->dev, "Device is not authorized for usage\n"); -+ dev_warn(&intf->dev, "Device is not authorized for usage\n"); - return error; - } else if (intf->authorized == 0) { -- dev_err(&intf->dev, "Interface %d is not authorized for usage\n", -+ dev_warn(&intf->dev, "Interface %d is not authorized for usage\n", - intf->altsetting->desc.bInterfaceNumber); - return error; - } -diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c -index b134bff5c3fe..60575a01a810 100644 ---- a/drivers/usb/core/generic.c -+++ b/drivers/usb/core/generic.c -@@ -247,7 +247,7 @@ int usb_generic_driver_probe(struct usb_device *udev) - * with the driver core and lets interface drivers bind to them. - */ - if (udev->authorized == 0) -- dev_err(&udev->dev, "Device is not authorized for usage\n"); -+ dev_warn(&udev->dev, "Device is not authorized for usage\n"); - else { - c = usb_choose_configuration(udev); - if (c >= 0) { diff --git a/patches/linux/6.12.65/0014-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch b/patches/linux/6.18.5/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch similarity index 90% rename from patches/linux/6.12.65/0014-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch rename to patches/linux/6.18.5/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch index 669db4350..8a6e5b056 100644 --- a/patches/linux/6.12.65/0014-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch +++ b/patches/linux/6.18.5/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch @@ -1,8 +1,12 @@ -From bbc64101e7b46fe57f2ca84d746c607c164b7e3e Mon Sep 17 00:00:00 2001 +From 2cda5240aa8504deefb0a1758b2088136183cde4 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 19 Sep 2023 18:38:10 +0200 -Subject: [PATCH 14/30] net: phy: marvell10g: Support firmware loading on +Subject: [PATCH 01/29] net: phy: marvell10g: Support firmware loading on 88X3310 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires When probing, if a device is waiting for firmware to be loaded into its RAM, ask userspace for the binary and load it over XMDIO. @@ -10,12 +14,14 @@ its RAM, ask userspace for the binary and load it over XMDIO. We have no choice but to bail out of the probe if firmware is not available, as the device does not have any built-in image on which to fall back. + +Signed-off-by: Mattias Walström --- drivers/net/phy/marvell10g.c | 161 +++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c -index 6642eb642d4b..79d9483419c0 100644 +index 8fd42131cdbf..44294519231e 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c @@ -25,6 +25,7 @@ @@ -59,7 +65,7 @@ index 6642eb642d4b..79d9483419c0 100644 #ifdef CONFIG_HWMON int (*hwmon_read_temp_reg)(struct phy_device *phydev); #endif -@@ -508,6 +521,145 @@ static const struct sfp_upstream_ops mv3310_sfp_ops = { +@@ -487,6 +500,145 @@ static const struct sfp_upstream_ops mv3310_sfp_ops = { .module_insert = mv3310_sfp_insert, }; @@ -205,7 +211,7 @@ index 6642eb642d4b..79d9483419c0 100644 static int mv3310_probe(struct phy_device *phydev) { const struct mv3310_chip *chip = to_mv3310_chip(phydev); -@@ -529,6 +681,12 @@ static int mv3310_probe(struct phy_device *phydev) +@@ -508,6 +660,12 @@ static int mv3310_probe(struct phy_device *phydev) return -ENODEV; } @@ -218,7 +224,7 @@ index 6642eb642d4b..79d9483419c0 100644 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; -@@ -1222,6 +1380,8 @@ static const struct mv3310_chip mv3310_type = { +@@ -1201,6 +1359,8 @@ static const struct mv3310_chip mv3310_type = { .mactypes = mv3310_mactypes, .n_mactypes = ARRAY_SIZE(mv3310_mactypes), @@ -227,9 +233,12 @@ index 6642eb642d4b..79d9483419c0 100644 #ifdef CONFIG_HWMON .hwmon_read_temp_reg = mv3310_hwmon_read_temp_reg, #endif -@@ -1491,4 +1651,5 @@ static struct mdio_device_id __maybe_unused mv3310_tbl[] = { +@@ -1474,4 +1634,5 @@ static const struct mdio_device_id __maybe_unused mv3310_tbl[] = { }; MODULE_DEVICE_TABLE(mdio, mv3310_tbl); MODULE_DESCRIPTION("Marvell Alaska X/M multi-gigabit Ethernet PHY driver"); +MODULE_FIRMWARE("mrvl/x3310fw.hdr"); MODULE_LICENSE("GPL"); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0015-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch b/patches/linux/6.18.5/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch similarity index 77% rename from patches/linux/6.12.65/0015-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch rename to patches/linux/6.18.5/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch index d370374e0..66cf143d6 100644 --- a/patches/linux/6.12.65/0015-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch +++ b/patches/linux/6.18.5/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch @@ -1,21 +1,27 @@ -From 78829f58ad06c9060679fd00ec833d03cb76ffd4 Mon Sep 17 00:00:00 2001 +From 65ce7e078d94e739a2255f07f697215ba5172e03 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 21 Nov 2023 20:15:24 +0100 -Subject: [PATCH 15/30] net: phy: marvell10g: Fix power-up when strapped to +Subject: [PATCH 02/29] net: phy: marvell10g: Fix power-up when strapped to start powered down +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires On devices which are hardware strapped to start powered down (PDSTATE == 1), make sure that we clear the power-down bit on all units affected by this setting. + +Signed-off-by: Mattias Walström --- drivers/net/phy/marvell10g.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c -index 79d9483419c0..268484092776 100644 +index 44294519231e..40439db49601 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c -@@ -342,11 +342,23 @@ static int mv3310_power_down(struct phy_device *phydev) +@@ -322,11 +322,23 @@ static int mv3310_power_down(struct phy_device *phydev) static int mv3310_power_up(struct phy_device *phydev) { @@ -42,3 +48,6 @@ index 79d9483419c0..268484092776 100644 /* Sometimes, the power down bit doesn't clear immediately, and * a read of this register causes the bit not to clear. Delay +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0016-net-phy-marvell10g-Add-LED-support-for-88X3310.patch b/patches/linux/6.18.5/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch similarity index 96% rename from patches/linux/6.12.65/0016-net-phy-marvell10g-Add-LED-support-for-88X3310.patch rename to patches/linux/6.18.5/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch index 80467f707..abfe980dd 100644 --- a/patches/linux/6.12.65/0016-net-phy-marvell10g-Add-LED-support-for-88X3310.patch +++ b/patches/linux/6.18.5/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch @@ -1,7 +1,11 @@ -From d0dd51bb4bab4b4300128e8449cb2769824f6e56 Mon Sep 17 00:00:00 2001 +From 19c9739b06feceb9df4142fa7323a51fc8782113 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 15 Nov 2023 20:58:42 +0100 -Subject: [PATCH 16/30] net: phy: marvell10g: Add LED support for 88X3310 +Subject: [PATCH 03/29] net: phy: marvell10g: Add LED support for 88X3310 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Pickup the LEDs from the state in which the hardware reset or bootloader left them, but also support further configuration via @@ -16,12 +20,14 @@ Trigger support: software blinking - "netdev": Offload link or duplex information to the solid behavior; tx and/or rx activity to blink behavior. + +Signed-off-by: Mattias Walström --- drivers/net/phy/marvell10g.c | 422 +++++++++++++++++++++++++++++++++++ 1 file changed, 422 insertions(+) diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c -index 268484092776..9f8475b67ef7 100644 +index 40439db49601..7ae4744f147b 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c @@ -28,6 +28,7 @@ @@ -477,7 +483,7 @@ index 268484092776..9f8475b67ef7 100644 #ifdef CONFIG_HWMON static umode_t mv3310_hwmon_is_visible(const void *data, enum hwmon_sensor_types type, -@@ -733,6 +1144,10 @@ static int mv3310_probe(struct phy_device *phydev) +@@ -712,6 +1123,10 @@ static int mv3310_probe(struct phy_device *phydev) if (ret) return ret; @@ -488,7 +494,7 @@ index 268484092776..9f8475b67ef7 100644 chip->init_supported_interfaces(priv->supported_interfaces); return phy_sfp_probe(phydev, &mv3310_sfp_ops); -@@ -1385,6 +1800,7 @@ static void mv2111_init_supported_interfaces(unsigned long *mask) +@@ -1364,6 +1779,7 @@ static void mv2111_init_supported_interfaces(unsigned long *mask) static const struct mv3310_chip mv3310_type = { .has_downshift = mv3310_has_downshift, .init_supported_interfaces = mv3310_init_supported_interfaces, @@ -496,7 +502,7 @@ index 268484092776..9f8475b67ef7 100644 .get_mactype = mv3310_get_mactype, .set_mactype = mv3310_set_mactype, .select_mactype = mv3310_select_mactype, -@@ -1594,6 +2010,12 @@ static struct phy_driver mv3310_drivers[] = { +@@ -1577,6 +1993,12 @@ static struct phy_driver mv3310_drivers[] = { .set_loopback = genphy_c45_loopback, .get_wol = mv3110_get_wol, .set_wol = mv3110_set_wol, @@ -509,3 +515,6 @@ index 268484092776..9f8475b67ef7 100644 }, { .phy_id = MARVELL_PHY_ID_88X3310, +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0017-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch b/patches/linux/6.18.5/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch similarity index 86% rename from patches/linux/6.12.65/0017-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch rename to patches/linux/6.18.5/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch index 84c25a3ae..4e7737bfa 100644 --- a/patches/linux/6.12.65/0017-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch +++ b/patches/linux/6.18.5/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch @@ -1,8 +1,12 @@ -From a41cb042e9a090f315677e2ff41bb08c444d0a14 Mon Sep 17 00:00:00 2001 +From aeed21718ad95ea9e4cb668d47fe5c4c9ca7d383 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 12 Dec 2023 09:51:05 +0100 -Subject: [PATCH 17/30] net: phy: marvell10g: Support LEDs tied to a single +Subject: [PATCH 04/29] net: phy: marvell10g: Support LEDs tied to a single media side +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires In a combo-port setup, i.e. where both the copper and fiber interface are available to the user, the LEDs may be physically located either @@ -13,12 +17,14 @@ tied to a particular media side, and use that information to refine the offloading of the "netdev" trigger, such that LEDs attached to the RJ45 jack only lights up when a copper link is established, and vice versa for the SFP cage. + +Signed-off-by: Mattias Walström --- drivers/net/phy/marvell10g.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c -index 9f8475b67ef7..82b2e9b55b67 100644 +index 7ae4744f147b..5e48355ffcef 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c @@ -192,6 +192,9 @@ struct mv3310_chip { @@ -72,3 +78,6 @@ index 9f8475b67ef7..82b2e9b55b67 100644 /* mv3310_led_polarity_set() will not be called unless the * device tree specifies a mode that of_phy_led() considers to * be a non-default configuration. I.e., something other than +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0018-net-phy-Do-not-resume-PHY-when-attaching.patch b/patches/linux/6.18.5/0005-net-phy-Do-not-resume-PHY-when-attaching.patch similarity index 69% rename from patches/linux/6.12.65/0018-net-phy-Do-not-resume-PHY-when-attaching.patch rename to patches/linux/6.18.5/0005-net-phy-Do-not-resume-PHY-when-attaching.patch index 3719bbc67..23fe8fb68 100644 --- a/patches/linux/6.12.65/0018-net-phy-Do-not-resume-PHY-when-attaching.patch +++ b/patches/linux/6.18.5/0005-net-phy-Do-not-resume-PHY-when-attaching.patch @@ -1,7 +1,11 @@ -From bf99f6f1f565bc2eec38b2a7c6d70c1b3e069ad6 Mon Sep 17 00:00:00 2001 +From 1df613d51cd26250219870cd175324652adde99e Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 27 Mar 2024 10:10:19 +0100 -Subject: [PATCH 18/30] net: phy: Do not resume PHY when attaching +Subject: [PATCH 05/29] net: phy: Do not resume PHY when attaching +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires The PHY should not start negotiating with its link-partner until explicitly instructed to do so. @@ -14,15 +18,17 @@ Otherwise, drivers that attached to their PHYs during probing (e.g. DSA) would end up with a physical link being established, even though the corresponding interface was still administratively down. + +Signed-off-by: Mattias Walström --- drivers/net/phy/phy_device.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c -index 834624a61060..d09872e1ac4e 100644 +index 7a67c900e79a..5c61faf4b10a 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c -@@ -1661,7 +1661,6 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, +@@ -1750,7 +1750,6 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, if (err) goto error; @@ -30,3 +36,6 @@ index 834624a61060..d09872e1ac4e 100644 if (!phydev->is_on_sfp_module) phy_led_triggers_register(phydev); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0019-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch b/patches/linux/6.18.5/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch similarity index 71% rename from patches/linux/6.12.65/0019-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch rename to patches/linux/6.18.5/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch index 8487e50de..54b714722 100644 --- a/patches/linux/6.12.65/0019-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch +++ b/patches/linux/6.18.5/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch @@ -1,8 +1,12 @@ -From 0f9335d37e9b56361179a6eeaa6929e4df274004 Mon Sep 17 00:00:00 2001 +From 499093fbb2cc3d4db2e60e1d07908acf2c0d857a Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 4 Mar 2024 16:47:28 +0100 -Subject: [PATCH 19/30] net: bridge: avoid classifying unknown multicast as +Subject: [PATCH 06/29] net: bridge: avoid classifying unknown multicast as mrouters_only +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Unknown multicast, MAC/IPv4/IPv6, should always be flooded according to the per-port mcast_flood setting, as well as to detected and configured @@ -15,35 +19,36 @@ Because a multicast router should always receive both known and unknown multicast. Signed-off-by: Joachim Wiberg +Signed-off-by: Mattias Walström --- include/uapi/linux/if_bridge.h | 1 + net/bridge/br.c | 5 +++++ net/bridge/br_device.c | 10 ++++++---- net/bridge/br_forward.c | 14 ++++++++++++-- - net/bridge/br_input.c | 2 +- + net/bridge/br_input.c | 12 ++++++++---- net/bridge/br_multicast.c | 11 +++++++++-- net/bridge/br_private.h | 18 ++++++++++++++++-- - 7 files changed, 50 insertions(+), 11 deletions(-) + 7 files changed, 57 insertions(+), 14 deletions(-) diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h -index a5b743a2f775..3bffc39d7800 100644 +index e52f8207ab27..306fa8a94c81 100644 --- a/include/uapi/linux/if_bridge.h +++ b/include/uapi/linux/if_bridge.h -@@ -830,6 +830,7 @@ enum br_boolopt_id { - BR_BOOLOPT_NO_LL_LEARN, - BR_BOOLOPT_MCAST_VLAN_SNOOPING, +@@ -835,6 +835,7 @@ enum br_boolopt_id { BR_BOOLOPT_MST_ENABLE, + BR_BOOLOPT_MDB_OFFLOAD_FAIL_NOTIFICATION, + BR_BOOLOPT_FDB_LOCAL_VLAN_0, + BR_BOOLOPT_MCAST_FLOOD_ALWAYS, BR_BOOLOPT_MAX }; diff --git a/net/bridge/br.c b/net/bridge/br.c -index 35e9842f4203..921781a83589 100644 +index c37e52e2f29a..0759bc37d6f0 100644 --- a/net/bridge/br.c +++ b/net/bridge/br.c -@@ -282,6 +282,9 @@ int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on, - case BR_BOOLOPT_MST_ENABLE: - err = br_mst_set_enabled(br, on, extack); +@@ -312,6 +312,9 @@ int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on, + case BR_BOOLOPT_FDB_LOCAL_VLAN_0: + err = br_toggle_fdb_local_vlan_0(br, on, extack); break; + case BR_BOOLOPT_MCAST_FLOOD_ALWAYS: + br_opt_toggle(br, BROPT_MCAST_FLOOD_ALWAYS, on); @@ -51,20 +56,20 @@ index 35e9842f4203..921781a83589 100644 default: /* shouldn't be called with unsupported options */ WARN_ON(1); -@@ -300,6 +303,8 @@ int br_boolopt_get(const struct net_bridge *br, enum br_boolopt_id opt) - return br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED); - case BR_BOOLOPT_MST_ENABLE: - return br_opt_get(br, BROPT_MST_ENABLED); +@@ -334,6 +337,8 @@ int br_boolopt_get(const struct net_bridge *br, enum br_boolopt_id opt) + return br_opt_get(br, BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION); + case BR_BOOLOPT_FDB_LOCAL_VLAN_0: + return br_opt_get(br, BROPT_FDB_LOCAL_VLAN_0); + case BR_BOOLOPT_MCAST_FLOOD_ALWAYS: + return br_opt_get(br, BROPT_MCAST_FLOOD_ALWAYS); default: /* shouldn't be called with unsupported options */ WARN_ON(1); diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c -index 26b79feb385d..f3ecc70a47dc 100644 +index a818fdc22da9..3cdb97ded410 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c -@@ -87,10 +87,10 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) +@@ -89,10 +89,10 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) dest = eth_hdr(skb)->h_dest; if (is_broadcast_ether_addr(dest)) { @@ -77,7 +82,7 @@ index 26b79feb385d..f3ecc70a47dc 100644 goto out; } if (br_multicast_rcv(&brmctx, &pmctx_null, vlan, skb, vid)) { -@@ -103,11 +103,11 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) +@@ -105,11 +105,11 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst)) br_multicast_flood(mdst, skb, brmctx, false, true); else @@ -91,7 +96,7 @@ index 26b79feb385d..f3ecc70a47dc 100644 } out: rcu_read_unlock(); -@@ -526,6 +526,8 @@ void br_dev_setup(struct net_device *dev) +@@ -528,6 +528,8 @@ void br_dev_setup(struct net_device *dev) br->bridge_ageing_time = br->ageing_time = BR_DEFAULT_AGEING_TIME; dev->max_mtu = ETH_MAX_MTU; @@ -101,10 +106,10 @@ index 26b79feb385d..f3ecc70a47dc 100644 br_stp_timer_init(br); br_multicast_init(br); diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c -index e9f09cdb9848..acca5cabec15 100644 +index dea09096ad0f..f0a613238e0d 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c -@@ -199,14 +199,19 @@ static struct net_bridge_port *maybe_deliver( +@@ -199,15 +199,20 @@ static struct net_bridge_port *maybe_deliver( /* called under rcu_read_lock */ void br_flood(struct net_bridge *br, struct sk_buff *skb, @@ -113,6 +118,7 @@ index e9f09cdb9848..acca5cabec15 100644 + struct net_bridge_mcast *brmctx, enum br_pkt_type pkt_type, + bool local_rcv, bool local_orig, u16 vid) { + enum skb_drop_reason reason = SKB_DROP_REASON_NO_TX_TARGET; + struct net_bridge_port *rport = NULL; struct net_bridge_port *prev = NULL; + struct hlist_node *rp = NULL; @@ -126,7 +132,7 @@ index e9f09cdb9848..acca5cabec15 100644 list_for_each_entry_rcu(p, &br->port_list, list) { /* Do not flood unicast traffic to ports that turn it off, nor * other traffic if flood off, except for traffic we originate -@@ -217,6 +222,11 @@ void br_flood(struct net_bridge *br, struct sk_buff *skb, +@@ -218,6 +223,11 @@ void br_flood(struct net_bridge *br, struct sk_buff *skb, continue; break; case BR_PKT_MULTICAST: @@ -139,10 +145,27 @@ index e9f09cdb9848..acca5cabec15 100644 continue; break; diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c -index 2eb2bb664388..dd6a5d2c1351 100644 +index 777fa869c1a1..924d41c62395 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c -@@ -212,7 +212,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb +@@ -186,9 +186,13 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb + switch (pkt_type) { + case BR_PKT_MULTICAST: + mdst = br_mdb_entry_skb_get(brmctx, skb, vid); +- if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) && +- br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst)) { +- if ((mdst && mdst->host_joined) || ++ /* Only use strict multicast filtering when: ++ * 1. There's an MDB entry (someone joined this group), AND ++ * 2. A querier exists (we can rely on IGMP/MLD) ++ * Unknown multicast (no MDB entry) is always flooded. ++ */ ++ if (mdst && br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst)) { ++ if (mdst->host_joined || + br_multicast_is_router(brmctx, skb) || + br->dev->flags & IFF_ALLMULTI) { + local_rcv = true; +@@ -226,7 +230,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb br_forward(dst->dst, skb, local_rcv, false); } else { if (!mcast_hit) @@ -152,10 +175,10 @@ index 2eb2bb664388..dd6a5d2c1351 100644 br_multicast_flood(mdst, skb, brmctx, local_rcv, false); } diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c -index 0a00c3f57815..1ae021be0a7b 100644 +index 22d12e545966..06b729ed2d03 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c -@@ -3835,6 +3835,11 @@ static void br_multicast_err_count(const struct net_bridge *br, +@@ -3845,6 +3845,11 @@ static void br_multicast_err_count(const struct net_bridge *br, u64_stats_update_end(&pstats->syncp); } @@ -167,7 +190,7 @@ index 0a00c3f57815..1ae021be0a7b 100644 static void br_multicast_pim(struct net_bridge_mcast *brmctx, struct net_bridge_mcast_port *pmctx, const struct sk_buff *skb) -@@ -3881,7 +3886,8 @@ static int br_multicast_ipv4_rcv(struct net_bridge_mcast *brmctx, +@@ -3891,7 +3896,8 @@ static int br_multicast_ipv4_rcv(struct net_bridge_mcast *brmctx, if (err == -ENOMSG) { if (!ipv4_is_local_multicast(ip_hdr(skb)->daddr)) { @@ -177,7 +200,7 @@ index 0a00c3f57815..1ae021be0a7b 100644 } else if (pim_ipv4_all_pim_routers(ip_hdr(skb)->daddr)) { if (ip_hdr(skb)->protocol == IPPROTO_PIM) br_multicast_pim(brmctx, pmctx, skb); -@@ -3950,7 +3956,8 @@ static int br_multicast_ipv6_rcv(struct net_bridge_mcast *brmctx, +@@ -3960,7 +3966,8 @@ static int br_multicast_ipv6_rcv(struct net_bridge_mcast *brmctx, if (err == -ENOMSG || err == -ENODATA) { if (!ipv6_addr_is_ll_all_nodes(&ipv6_hdr(skb)->daddr)) @@ -188,18 +211,18 @@ index 0a00c3f57815..1ae021be0a7b 100644 ipv6_addr_is_all_snoopers(&ipv6_hdr(skb)->daddr)) br_ip6_multicast_mrd_rcv(brmctx, pmctx, skb); diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h -index b2e4e2d04f02..60e4a0e4dd63 100644 +index b9b2981c4841..ccbaaa96f7c7 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h -@@ -486,6 +486,7 @@ enum net_bridge_opts { - BROPT_VLAN_BRIDGE_BINDING, - BROPT_MCAST_VLAN_SNOOPING_ENABLED, +@@ -489,6 +489,7 @@ enum net_bridge_opts { BROPT_MST_ENABLED, + BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION, + BROPT_FDB_LOCAL_VLAN_0, + BROPT_MCAST_FLOOD_ALWAYS, }; struct net_bridge { -@@ -890,8 +891,8 @@ void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, +@@ -895,8 +896,8 @@ void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, bool local_rcv, bool local_orig); int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb); void br_flood(struct net_bridge *br, struct sk_buff *skb, @@ -210,7 +233,7 @@ index b2e4e2d04f02..60e4a0e4dd63 100644 /* return true if both source port and dest port are isolated */ static inline bool br_skb_isolated(const struct net_bridge_port *to, -@@ -1412,6 +1413,19 @@ static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst, +@@ -1435,6 +1436,19 @@ static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst, { } @@ -230,3 +253,6 @@ index b2e4e2d04f02..60e4a0e4dd63 100644 static inline bool br_multicast_is_router(struct net_bridge_mcast *brmctx, struct sk_buff *skb) { +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0020-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch b/patches/linux/6.18.5/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch similarity index 72% rename from patches/linux/6.12.65/0020-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch rename to patches/linux/6.18.5/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch index 42186e457..1410dcb1e 100644 --- a/patches/linux/6.12.65/0020-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch +++ b/patches/linux/6.18.5/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch @@ -1,8 +1,12 @@ -From 91e4d6891f7f4391e083ed2c92d306f045a9d8cf Mon Sep 17 00:00:00 2001 +From 4b0261a3a65f5f28b2d6e356b7a4740b939984fa Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Tue, 5 Mar 2024 06:44:41 +0100 -Subject: [PATCH 20/30] net: bridge: Ignore router ports when forwarding L2 +Subject: [PATCH 07/29] net: bridge: Ignore router ports when forwarding L2 multicast +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Multicast router ports are either statically configured or learned from control protocol traffic (IGMP/MLD/PIM). These protocols regulate IP @@ -11,15 +15,16 @@ of unknown multicast or using permanent MDB entries. Signed-off-by: Tobias Waldekranz Signed-off-by: Joachim Wiberg +Signed-off-by: Mattias Walström --- net/bridge/br_private.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h -index 60e4a0e4dd63..76a0fb2c2941 100644 +index ccbaaa96f7c7..d7187bead496 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h -@@ -1090,7 +1090,10 @@ br_multicast_get_first_rport_node(struct net_bridge_mcast *brmctx, +@@ -1097,7 +1097,10 @@ br_multicast_get_first_rport_node(struct net_bridge_mcast *brmctx, if (skb->protocol == htons(ETH_P_IPV6)) return rcu_dereference(hlist_first_rcu(&brmctx->ip6_mc_router_list)); #endif @@ -31,3 +36,6 @@ index 60e4a0e4dd63..76a0fb2c2941 100644 } static inline struct net_bridge_port * +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0021-net-bridge-drop-delay-for-applying-strict-multicast-.patch b/patches/linux/6.18.5/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch similarity index 78% rename from patches/linux/6.12.65/0021-net-bridge-drop-delay-for-applying-strict-multicast-.patch rename to patches/linux/6.18.5/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch index 7c3d20286..3d642258c 100644 --- a/patches/linux/6.12.65/0021-net-bridge-drop-delay-for-applying-strict-multicast-.patch +++ b/patches/linux/6.18.5/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch @@ -1,8 +1,12 @@ -From 2478d8986ed29ef789149197ccc8ccb72f71ecc5 Mon Sep 17 00:00:00 2001 +From af297677c0ac5ab96eca7ca1e837d621404015e1 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 4 Apr 2024 16:36:30 +0200 -Subject: [PATCH 21/30] net: bridge: drop delay for applying strict multicast +Subject: [PATCH 08/29] net: bridge: drop delay for applying strict multicast filtering +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires This *local* patch drops the initial delay before applying strict multicast filtering, introduced in [1] and recently updated in [2]. @@ -18,13 +22,14 @@ A proper fix for upstreaming could be to add a knob to disable the delay. [2]: https://lore.kernel.org/netdev/20240127175033.9640-1-linus.luessing@c0d3.blue/ Signed-off-by: Joachim Wiberg +Signed-off-by: Mattias Walström --- net/bridge/br_multicast.c | 42 +++++++-------------------------------- net/bridge/br_private.h | 4 +--- 2 files changed, 8 insertions(+), 38 deletions(-) diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c -index 1ae021be0a7b..dd815b0fa8f8 100644 +index 06b729ed2d03..66d709f6b19d 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -1762,10 +1762,6 @@ static void br_ip6_multicast_querier_expired(struct timer_list *t) @@ -38,7 +43,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 static void br_multicast_select_own_querier(struct net_bridge_mcast *brmctx, struct br_ip *ip, struct sk_buff *skb) -@@ -3257,12 +3253,8 @@ int br_multicast_dump_querier_state(struct sk_buff *skb, +@@ -3267,12 +3263,8 @@ int br_multicast_dump_querier_state(struct sk_buff *skb, static void br_multicast_update_query_timer(struct net_bridge_mcast *brmctx, @@ -52,7 +57,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 mod_timer(&query->timer, jiffies + brmctx->multicast_querier_interval); } -@@ -3453,13 +3445,12 @@ static void +@@ -3463,13 +3455,12 @@ static void br_ip4_multicast_query_received(struct net_bridge_mcast *brmctx, struct net_bridge_mcast_port *pmctx, struct bridge_mcast_other_query *query, @@ -68,7 +73,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 br_ip4_multicast_mark_router(brmctx, pmctx); } -@@ -3468,13 +3459,12 @@ static void +@@ -3478,13 +3469,12 @@ static void br_ip6_multicast_query_received(struct net_bridge_mcast *brmctx, struct net_bridge_mcast_port *pmctx, struct bridge_mcast_other_query *query, @@ -84,7 +89,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 br_ip6_multicast_mark_router(brmctx, pmctx); } #endif -@@ -3528,7 +3518,7 @@ static void br_ip4_multicast_query(struct net_bridge_mcast *brmctx, +@@ -3538,7 +3528,7 @@ static void br_ip4_multicast_query(struct net_bridge_mcast *brmctx, br_ip4_multicast_query_received(brmctx, pmctx, &brmctx->ip4_other_query, @@ -93,7 +98,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 goto out; } -@@ -3616,7 +3606,7 @@ static int br_ip6_multicast_query(struct net_bridge_mcast *brmctx, +@@ -3626,7 +3616,7 @@ static int br_ip6_multicast_query(struct net_bridge_mcast *brmctx, br_ip6_multicast_query_received(brmctx, pmctx, &brmctx->ip6_other_query, @@ -102,7 +107,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 goto out; } else if (!group) { goto out; -@@ -4124,8 +4114,6 @@ void br_multicast_ctx_init(struct net_bridge *br, +@@ -4131,8 +4121,6 @@ void br_multicast_ctx_init(struct net_bridge *br, br_ip4_multicast_local_router_expired, 0); timer_setup(&brmctx->ip4_other_query.timer, br_ip4_multicast_querier_expired, 0); @@ -111,7 +116,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 timer_setup(&brmctx->ip4_own_query.timer, br_ip4_multicast_query_expired, 0); #if IS_ENABLED(CONFIG_IPV6) -@@ -4133,8 +4121,6 @@ void br_multicast_ctx_init(struct net_bridge *br, +@@ -4140,8 +4128,6 @@ void br_multicast_ctx_init(struct net_bridge *br, br_ip6_multicast_local_router_expired, 0); timer_setup(&brmctx->ip6_other_query.timer, br_ip6_multicast_querier_expired, 0); @@ -120,20 +125,20 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 timer_setup(&brmctx->ip6_own_query.timer, br_ip6_multicast_query_expired, 0); #endif -@@ -4269,12 +4255,10 @@ static void __br_multicast_stop(struct net_bridge_mcast *brmctx) +@@ -4276,12 +4262,10 @@ static void __br_multicast_stop(struct net_bridge_mcast *brmctx) { - del_timer_sync(&brmctx->ip4_mc_router_timer); - del_timer_sync(&brmctx->ip4_other_query.timer); -- del_timer_sync(&brmctx->ip4_other_query.delay_timer); - del_timer_sync(&brmctx->ip4_own_query.timer); + timer_delete_sync(&brmctx->ip4_mc_router_timer); + timer_delete_sync(&brmctx->ip4_other_query.timer); +- timer_delete_sync(&brmctx->ip4_other_query.delay_timer); + timer_delete_sync(&brmctx->ip4_own_query.timer); #if IS_ENABLED(CONFIG_IPV6) - del_timer_sync(&brmctx->ip6_mc_router_timer); - del_timer_sync(&brmctx->ip6_other_query.timer); -- del_timer_sync(&brmctx->ip6_other_query.delay_timer); - del_timer_sync(&brmctx->ip6_own_query.timer); + timer_delete_sync(&brmctx->ip6_mc_router_timer); + timer_delete_sync(&brmctx->ip6_other_query.timer); +- timer_delete_sync(&brmctx->ip6_other_query.delay_timer); + timer_delete_sync(&brmctx->ip6_own_query.timer); #endif } -@@ -4728,8 +4712,6 @@ EXPORT_SYMBOL_GPL(br_multicast_router); +@@ -4735,8 +4719,6 @@ EXPORT_SYMBOL_GPL(br_multicast_router); int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val) { @@ -142,7 +147,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 val = !!val; spin_lock_bh(&brmctx->br->multicast_lock); -@@ -4740,19 +4722,9 @@ int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val) +@@ -4747,19 +4729,9 @@ int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val) if (!val) goto unlock; @@ -163,7 +168,7 @@ index 1ae021be0a7b..dd815b0fa8f8 100644 #endif diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h -index 76a0fb2c2941..dd36afeaa1a0 100644 +index d7187bead496..83dc15fdcefd 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -80,7 +80,6 @@ struct bridge_mcast_own_query { @@ -174,7 +179,7 @@ index 76a0fb2c2941..dd36afeaa1a0 100644 }; /* selected querier */ -@@ -1168,8 +1167,7 @@ __br_multicast_querier_exists(struct net_bridge_mcast *brmctx, +@@ -1175,8 +1174,7 @@ __br_multicast_querier_exists(struct net_bridge_mcast *brmctx, own_querier_enabled = false; } @@ -184,3 +189,6 @@ index 76a0fb2c2941..dd36afeaa1a0 100644 } static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx, +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0022-net-bridge-Differentiate-MDB-additions-from-modifica.patch b/patches/linux/6.18.5/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch similarity index 80% rename from patches/linux/6.12.65/0022-net-bridge-Differentiate-MDB-additions-from-modifica.patch rename to patches/linux/6.18.5/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch index f356ad38c..bdb157497 100644 --- a/patches/linux/6.12.65/0022-net-bridge-Differentiate-MDB-additions-from-modifica.patch +++ b/patches/linux/6.18.5/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch @@ -1,8 +1,12 @@ -From 41be9f8bba3b812282dfc3ac9751b02a690184d4 Mon Sep 17 00:00:00 2001 +From 2543c1537f5554d5467975e96f9a5ac1f48c1b9e Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Thu, 16 May 2024 14:51:54 +0200 -Subject: [PATCH 22/30] net: bridge: Differentiate MDB additions from +Subject: [PATCH 09/29] net: bridge: Differentiate MDB additions from modifications +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Before this change, the reception of an IGMPv3 report (and analogously for MLDv2) that adds a new group, would trigger two MDB RTM_NEWMDB @@ -20,6 +24,8 @@ generated. Therefore, discriminate new groups from changes to existing groups by introducing a RTM_SETMDB events to be used in the latter scenario. + +Signed-off-by: Mattias Walström --- include/uapi/linux/rtnetlink.h | 2 ++ net/bridge/br_mdb.c | 4 ++-- @@ -27,10 +33,10 @@ introducing a RTM_SETMDB events to be used in the latter scenario. 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h -index db7254d52d93..63508279df47 100644 +index dab9493c791b..40a3534f0f1d 100644 --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h -@@ -134,6 +134,8 @@ enum { +@@ -142,6 +142,8 @@ enum { #define RTM_DELMDB RTM_DELMDB RTM_GETMDB = 86, #define RTM_GETMDB RTM_GETMDB @@ -40,21 +46,21 @@ index db7254d52d93..63508279df47 100644 RTM_NEWNSID = 88, #define RTM_NEWNSID RTM_NEWNSID diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c -index 7e1ad229e133..3b1873e7c499 100644 +index 400eb872b403..cd7a2cd0911a 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c -@@ -734,7 +734,7 @@ static int br_mdb_replace_group_sg(const struct br_mdb_config *cfg, +@@ -752,7 +752,7 @@ static int br_mdb_replace_group_sg(const struct br_mdb_config *cfg, else - del_timer(&pg->timer); + timer_delete(&pg->timer); - br_mdb_notify(cfg->br->dev, mp, pg, RTM_NEWMDB); + br_mdb_notify(cfg->br->dev, mp, pg, RTM_SETMDB); return 0; } -@@ -955,7 +955,7 @@ static int br_mdb_replace_group_star_g(const struct br_mdb_config *cfg, +@@ -973,7 +973,7 @@ static int br_mdb_replace_group_star_g(const struct br_mdb_config *cfg, else - del_timer(&pg->timer); + timer_delete(&pg->timer); - br_mdb_notify(cfg->br->dev, mp, pg, RTM_NEWMDB); + br_mdb_notify(cfg->br->dev, mp, pg, RTM_SETMDB); @@ -62,7 +68,7 @@ index 7e1ad229e133..3b1873e7c499 100644 if (br_multicast_should_handle_mode(brmctx, cfg->group.proto)) br_multicast_star_g_handle_mode(pg, cfg->filter_mode); diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c -index dd815b0fa8f8..41ab527953da 100644 +index 66d709f6b19d..4d1b27d2cdbc 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -619,7 +619,7 @@ static void br_multicast_fwd_src_handle(struct net_bridge_group_src *src) @@ -83,7 +89,7 @@ index dd815b0fa8f8..41ab527953da 100644 } out: spin_unlock(&br->multicast_lock); -@@ -2948,7 +2948,7 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge_mcast *brmctx, +@@ -2958,7 +2958,7 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge_mcast *brmctx, break; } if (changed) @@ -92,7 +98,7 @@ index dd815b0fa8f8..41ab527953da 100644 unlock_continue: spin_unlock(&brmctx->br->multicast_lock); } -@@ -3090,7 +3090,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge_mcast *brmctx, +@@ -3100,7 +3100,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge_mcast *brmctx, break; } if (changed) @@ -101,3 +107,6 @@ index dd815b0fa8f8..41ab527953da 100644 unlock_continue: spin_unlock(&brmctx->br->multicast_lock); } +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0023-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch b/patches/linux/6.18.5/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch similarity index 84% rename from patches/linux/6.12.65/0023-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch rename to patches/linux/6.18.5/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch index e6122191b..7f477bec8 100644 --- a/patches/linux/6.12.65/0023-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch +++ b/patches/linux/6.18.5/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch @@ -1,8 +1,12 @@ -From 09fecf196de9d5fd0fd1eae9f4e43f52a5a52cc2 Mon Sep 17 00:00:00 2001 +From 6ebc47bbd15263a24d06c1200ee85e425385a9e1 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Fri, 24 Nov 2023 23:29:55 +0100 -Subject: [PATCH 23/30] nvmem: layouts: onie-tlv: Let device probe even when +Subject: [PATCH 10/29] nvmem: layouts: onie-tlv: Let device probe even when TLV is invalid +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Before this change, probing an NVMEM device, expected to contain a valid TLV, would fail if it had not been provisioned yet. But an @@ -12,6 +16,8 @@ be successfully probed. Therefore, settle for reporting data corruption issues in the log, and simply refrain from registering any cells in those cases. + +Signed-off-by: Mattias Walström --- drivers/nvmem/layouts/onie-tlv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) @@ -47,3 +53,6 @@ index 0967a32319a2..48547d5bb502 100644 data = table + hdr_len; ret = onie_tlv_add_cells(dev, nvmem, data_len, data); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0027-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch b/patches/linux/6.18.5/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch similarity index 74% rename from patches/linux/6.12.65/0027-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch rename to patches/linux/6.18.5/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch index 9c909140b..6bdac2896 100644 --- a/patches/linux/6.12.65/0027-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch +++ b/patches/linux/6.18.5/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch @@ -1,8 +1,12 @@ -From d67b558cc9efbbca6acce508ee778980c0998dfe Mon Sep 17 00:00:00 2001 +From 28d1887a75ae6b46e96111a6cddc5efbd7d0e3b7 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 11 Aug 2024 11:27:35 +0200 -Subject: [PATCH 27/30] net: usb: r8152: add r8153b support for link/activity +Subject: [PATCH 11/29] net: usb: r8152: add r8153b support for link/activity LEDs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires This patch adds support for the link/activity LEDs on the NanoPi R2S and OrangePi R1 Plus. @@ -13,12 +17,13 @@ https://github.com/friendlyarm/kernel-rockchip/ Specifically commit be0b1939b271c307ab1fef5fb1478beaafc6de17 Signed-off-by: Joachim Wiberg +Signed-off-by: Mattias Walström --- drivers/net/usb/r8152.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c -index 3fcd2b736c5e..531712943118 100644 +index a22d4bb2cf3b..ae89323ade06 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -41,6 +41,11 @@ @@ -33,7 +38,7 @@ index 3fcd2b736c5e..531712943118 100644 #define R8152_PHY_ID 32 #define PLA_IDR 0xc000 -@@ -7307,6 +7312,9 @@ static void r8153b_init(struct r8152 *tp) +@@ -7277,6 +7282,9 @@ static void r8153b_init(struct r8152 *tp) ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN); ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); @@ -43,3 +48,6 @@ index 3fcd2b736c5e..531712943118 100644 rtl_tally_reset(tp); tp->coalesce = 15000; /* 15 us */ +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0028-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch b/patches/linux/6.18.5/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch similarity index 78% rename from patches/linux/6.12.65/0028-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch rename to patches/linux/6.18.5/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch index 1a0b8f737..6e7825b03 100644 --- a/patches/linux/6.12.65/0028-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch +++ b/patches/linux/6.18.5/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch @@ -1,8 +1,12 @@ -From daa0e1ecb717ffb62174272a07289c5f7107cfed Mon Sep 17 00:00:00 2001 +From 71b2cad84f563649512a1753ffd48e57c1cb0dab Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 10 Aug 2025 18:52:54 +0200 -Subject: [PATCH 28/30] arm64: dts: mediatek: mt7986a: rename BPi R3 ports to +Subject: [PATCH 12/29] arm64: dts: mediatek: mt7986a: rename BPi R3 ports to match case +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires For ref. see: https://wiki.banana-pi.org/File:Bpi-r3_Metal_case.jpg @@ -10,12 +14,13 @@ Also, comment out gpio-keys (reset and wps) since they clash with with the PCIe controller. Signed-off-by: Joachim Wiberg +Signed-off-by: Mattias Walström --- .../boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts -index ed79ad1ae871..1c7c666e3173 100644 +index e7654dc9a1c9..4cc6aff07225 100644 --- a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts +++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts @@ -46,7 +46,7 @@ fan: pwm-fan { @@ -34,9 +39,9 @@ index ed79ad1ae871..1c7c666e3173 100644 - +*/ /* i2c of the left SFP cage (wan) */ - i2c_sfp1: i2c-gpio-0 { + i2c_sfp1: i2c-0 { compatible = "i2c-gpio"; -@@ -418,27 +418,27 @@ port@0 { +@@ -415,27 +415,27 @@ port@0 { port@1 { reg = <1>; @@ -69,3 +74,6 @@ index ed79ad1ae871..1c7c666e3173 100644 phy-mode = "2500base-x"; sfp = <&sfp2>; managed = "in-band-status"; +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0029-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch b/patches/linux/6.18.5/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch similarity index 84% rename from patches/linux/6.12.65/0029-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch rename to patches/linux/6.18.5/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch index 7ab59ebac..6f8691be8 100644 --- a/patches/linux/6.12.65/0029-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch +++ b/patches/linux/6.18.5/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch @@ -1,8 +1,12 @@ -From 1730b8e5736ba1d0a2d2aa388ef451c209048c46 Mon Sep 17 00:00:00 2001 -From: Mattias Walström +From 673f624878aae8e2718995baf693ac352ea91a70 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Wed, 20 Aug 2025 21:38:24 +0200 -Subject: [PATCH 29/30] drm/panel-simple: Add a timing for the Raspberry Pi 7" +Subject: [PATCH 13/29] drm/panel-simple: Add a timing for the Raspberry Pi 7" panel +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires The Raspberry Pi 7" 800x480 panel uses a Toshiba TC358762 DSI to DPI bridge chip, so there is a requirement for the timings @@ -41,15 +45,16 @@ on Pi4. parent PLL). Signed-off-by: Dave Stevenson +Signed-off-by: Mattias Walström --- drivers/gpu/drm/panel/panel-simple.c | 31 +++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c -index 82db3daf4f81..3699cef24ea6 100644 +index 0019de93be1b..3cddde5733ca 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c -@@ -391,7 +391,8 @@ static int panel_simple_get_modes(struct drm_panel *panel, +@@ -400,7 +400,8 @@ static int panel_simple_get_modes(struct drm_panel *panel, * TODO: Remove once all drm drivers call * drm_connector_set_orientation_from_panel() */ @@ -59,7 +64,7 @@ index 82db3daf4f81..3699cef24ea6 100644 return num; } -@@ -3829,6 +3830,31 @@ static const struct panel_desc qishenglong_gopher2b_lcd = { +@@ -4074,6 +4075,31 @@ static const struct panel_desc qishenglong_gopher2b_lcd = { .connector_type = DRM_MODE_CONNECTOR_DPI, }; @@ -91,7 +96,7 @@ index 82db3daf4f81..3699cef24ea6 100644 static const struct display_timing rocktech_rk043fn48h_timing = { .pixelclock = { 6000000, 9000000, 12000000 }, .hactive = { 480, 480, 480 }, -@@ -4977,6 +5003,9 @@ static const struct of_device_id platform_of_match[] = { +@@ -5344,6 +5370,9 @@ static const struct of_device_id platform_of_match[] = { .compatible = "qishenglong,gopher2b-lcd", .data = &qishenglong_gopher2b_lcd, }, { @@ -101,3 +106,6 @@ index 82db3daf4f81..3699cef24ea6 100644 .compatible = "rocktech,rk043fn48h", .data = &rocktech_rk043fn48h, }, { +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0030-input-touchscreen-edt-ft5x06-Add-polled-mode.patch b/patches/linux/6.18.5/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch similarity index 79% rename from patches/linux/6.12.65/0030-input-touchscreen-edt-ft5x06-Add-polled-mode.patch rename to patches/linux/6.18.5/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch index 6e0087508..0bae15c29 100644 --- a/patches/linux/6.12.65/0030-input-touchscreen-edt-ft5x06-Add-polled-mode.patch +++ b/patches/linux/6.18.5/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch @@ -1,16 +1,22 @@ -From 27c59cf9f479bedb8638e4d5066d8f87b47730ab Mon Sep 17 00:00:00 2001 -From: Mattias Walström +From 8c468f604841179197c32a467e81050e98e96d03 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 21 Aug 2025 11:20:23 +0200 -Subject: [PATCH 30/30] input:touchscreen:edt-ft5x06: Add polled mode +Subject: [PATCH 14/29] input:touchscreen:edt-ft5x06: Add polled mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Not all hardware has interrupts therefore we need to poll the touchscreen. + +Signed-off-by: Mattias Walström --- drivers/input/touchscreen/edt-ft5x06.c | 74 ++++++++++++++++++++------ 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c -index 85c6d8ce003f..e61519915137 100644 +index bf498bd4dea9..30308d840935 100644 --- a/drivers/input/touchscreen/edt-ft5x06.c +++ b/drivers/input/touchscreen/edt-ft5x06.c @@ -77,6 +77,9 @@ @@ -23,7 +29,7 @@ index 85c6d8ce003f..e61519915137 100644 #define M06_REG_CMD(factory) ((factory) ? 0xf3 : 0xfc) #define M06_REG_ADDR(factory, addr) ((factory) ? (addr) & 0x7f : (addr) & 0x3f) -@@ -139,6 +142,7 @@ struct edt_ft5x06_ts_data { +@@ -138,6 +141,7 @@ struct edt_ft5x06_ts_data { u8 tdata_cmd; int tdata_len; int tdata_offset; @@ -31,7 +37,7 @@ index 85c6d8ce003f..e61519915137 100644 char name[EDT_NAME_LEN]; char fw_version[EDT_NAME_LEN]; -@@ -147,6 +151,9 @@ struct edt_ft5x06_ts_data { +@@ -146,6 +150,9 @@ struct edt_ft5x06_ts_data { enum edt_ver version; unsigned int crc_errors; unsigned int header_errors; @@ -41,13 +47,13 @@ index 85c6d8ce003f..e61519915137 100644 }; struct edt_i2c_chip_data { -@@ -582,6 +589,22 @@ static struct attribute *edt_ft5x06_attrs[] = { +@@ -581,6 +588,22 @@ static struct attribute *edt_ft5x06_attrs[] = { }; ATTRIBUTE_GROUPS(edt_ft5x06); +static void edt_ft5x06_ts_irq_poll_timer(struct timer_list *t) +{ -+ struct edt_ft5x06_ts_data *tsdata = from_timer(tsdata, t, timer); ++ struct edt_ft5x06_ts_data *tsdata = timer_container_of(tsdata, t, timer); + + schedule_work(&tsdata->work_i2c_poll); + mod_timer(&tsdata->timer, jiffies + msecs_to_jiffies(POLL_INTERVAL_MS)); @@ -64,7 +70,7 @@ index 85c6d8ce003f..e61519915137 100644 static void edt_ft5x06_restore_reg_parameters(struct edt_ft5x06_ts_data *tsdata) { struct edt_reg_addr *reg_addr = &tsdata->reg_addr; -@@ -614,7 +637,9 @@ static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata) +@@ -613,7 +636,9 @@ static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata) return -EINVAL; } @@ -75,7 +81,7 @@ index 85c6d8ce003f..e61519915137 100644 if (!tsdata->raw_buffer) { tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y * -@@ -657,7 +682,8 @@ static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata) +@@ -656,7 +681,8 @@ static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata) kfree(tsdata->raw_buffer); tsdata->raw_buffer = NULL; tsdata->factory_mode = false; @@ -85,7 +91,7 @@ index 85c6d8ce003f..e61519915137 100644 return error; } -@@ -698,7 +724,8 @@ static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata) +@@ -697,7 +723,8 @@ static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata) tsdata->raw_buffer = NULL; edt_ft5x06_restore_reg_parameters(tsdata); @@ -95,7 +101,7 @@ index 85c6d8ce003f..e61519915137 100644 return 0; } -@@ -1331,18 +1358,27 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client) +@@ -1327,18 +1354,27 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client) dev_err(&client->dev, "Unable to init MT slots.\n"); return error; } @@ -135,19 +141,19 @@ index 85c6d8ce003f..e61519915137 100644 } error = input_register_device(input); -@@ -1364,6 +1400,11 @@ static void edt_ft5x06_ts_remove(struct i2c_client *client) +@@ -1360,6 +1396,11 @@ static void edt_ft5x06_ts_remove(struct i2c_client *client) { struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client); + if (!client->irq) { -+ del_timer(&tsdata->timer); ++ timer_delete(&tsdata->timer); + cancel_work_sync(&tsdata->work_i2c_poll); + } + edt_ft5x06_ts_teardown_debugfs(tsdata); } -@@ -1395,7 +1436,8 @@ static int edt_ft5x06_ts_suspend(struct device *dev) +@@ -1391,7 +1432,8 @@ static int edt_ft5x06_ts_suspend(struct device *dev) * settings. Disable the irq to avoid adjusting each host till the * device is back in a full functional state. */ @@ -157,3 +163,6 @@ index 85c6d8ce003f..e61519915137 100644 gpiod_set_value_cansleep(reset_gpio, 1); usleep_range(1000, 2000); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0001-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch b/patches/linux/6.18.5/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch similarity index 68% rename from patches/linux/6.12.65/0001-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch rename to patches/linux/6.18.5/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch index 18fe7d4d5..baf90984b 100644 --- a/patches/linux/6.12.65/0001-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch +++ b/patches/linux/6.18.5/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch @@ -1,21 +1,27 @@ -From b6285fed851cfabd6824dc4465a1158eeb4b59a8 Mon Sep 17 00:00:00 2001 +From 4ef0fd107eae67ef12cb2d38ab11882e0f2a3776 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 12 Mar 2024 10:27:24 +0100 -Subject: [PATCH 01/30] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for +Subject: [PATCH 15/29] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for PPU on 6393X +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires In a multi-chip setup, delays of up to 750ms are observed before the device (6393X) signals completion of PPU initialization (Global 1, register 0, bit 15). Therefore, increase the timeout threshold to 1s. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index 211c219dd52d..d64c3eef4447 100644 +index b4d48997bf46..73264c1c1565 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -86,7 +86,7 @@ int mv88e6xxx_write(struct mv88e6xxx_chip *chip, int addr, int reg, u16 val) +@@ -87,7 +87,7 @@ int mv88e6xxx_write(struct mv88e6xxx_chip *chip, int addr, int reg, u16 val) int mv88e6xxx_wait_mask(struct mv88e6xxx_chip *chip, int addr, int reg, u16 mask, u16 val) { @@ -24,3 +30,6 @@ index 211c219dd52d..d64c3eef4447 100644 u16 data; int err; int i; +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0002-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch b/patches/linux/6.18.5/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch similarity index 94% rename from patches/linux/6.12.65/0002-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch rename to patches/linux/6.18.5/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch index babe0ca09..9bb071ade 100644 --- a/patches/linux/6.12.65/0002-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch +++ b/patches/linux/6.18.5/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch @@ -1,8 +1,12 @@ -From 22d7d5b6b04ac24dc6e689a279f55afd349c24c4 Mon Sep 17 00:00:00 2001 +From b2be28e5956e3d7547acb591da968f4f64d812cb Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 27 Mar 2024 15:52:43 +0100 -Subject: [PATCH 02/30] net: dsa: mv88e6xxx: Improve indirect register access +Subject: [PATCH 16/29] net: dsa: mv88e6xxx: Improve indirect register access perf on 6393 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires When operating in multi-chip mode, the 6393 family maps a subset of commonly used global registers to the outermost address space (in @@ -12,6 +16,8 @@ previous families). Therefore, add a new set of SMI operations which remaps accesses to such registers to the corresponding directly addressable register. All other accesses use the regular indirect interface. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 7 +++ drivers/net/dsa/mv88e6xxx/global1.h | 3 ++ @@ -21,10 +27,10 @@ other accesses use the regular indirect interface. 5 files changed, 119 insertions(+) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index d64c3eef4447..47138492885e 100644 +index 73264c1c1565..2a27e41a2dea 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -6539,6 +6539,13 @@ static int mv88e6xxx_detect(struct mv88e6xxx_chip *chip) +@@ -6566,6 +6566,13 @@ static int mv88e6xxx_detect(struct mv88e6xxx_chip *chip) /* Update the compatible info with the probed one */ chip->info = info; @@ -208,3 +214,6 @@ index c6c71d5757f5..788cf68b7b33 100644 int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip, struct mii_bus *bus, int sw_addr); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0003-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch b/patches/linux/6.18.5/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch similarity index 68% rename from patches/linux/6.12.65/0003-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch rename to patches/linux/6.18.5/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch index 8c2bea1de..9c23ef5b7 100644 --- a/patches/linux/6.12.65/0003-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch +++ b/patches/linux/6.18.5/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch @@ -1,8 +1,12 @@ -From 168e7c71f57e68181c48b9aa61afb5a5102a69e5 Mon Sep 17 00:00:00 2001 +From 582aea58b399dd70bab23a8313bc640096ca7c9d Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Mon, 22 Apr 2024 23:18:01 +0200 -Subject: [PATCH 03/30] net: dsa: mv88e6xxx: Honor ports being managed via +Subject: [PATCH 17/29] net: dsa: mv88e6xxx: Honor ports being managed via in-band-status +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Keep all link parameters in their unforced states when the port is declared as being managed via in-band-status, and let the MAC @@ -12,15 +16,17 @@ USXGMII autoneg) This state is the default set up by mv88e6xxx_port_setup_mac(), so all we have to do is to make the phylink MAC callbacks no-ops in cases when in-band-status is being used. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index 47138492885e..b96bc12dc6a8 100644 +index 2a27e41a2dea..7da618978ba7 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -964,6 +964,9 @@ static void mv88e6xxx_mac_link_down(struct phylink_config *config, +@@ -965,6 +965,9 @@ static void mv88e6xxx_mac_link_down(struct phylink_config *config, int port = dp->index; int err = 0; @@ -30,7 +36,7 @@ index 47138492885e..b96bc12dc6a8 100644 ops = chip->info->ops; mv88e6xxx_reg_lock(chip); -@@ -996,6 +999,9 @@ static void mv88e6xxx_mac_link_up(struct phylink_config *config, +@@ -997,6 +1000,9 @@ static void mv88e6xxx_mac_link_up(struct phylink_config *config, int port = dp->index; int err = 0; @@ -40,3 +46,6 @@ index 47138492885e..b96bc12dc6a8 100644 ops = chip->info->ops; mv88e6xxx_reg_lock(chip); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0004-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch b/patches/linux/6.18.5/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch similarity index 86% rename from patches/linux/6.12.65/0004-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch rename to patches/linux/6.18.5/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch index d3878a9c8..0e3379ecb 100644 --- a/patches/linux/6.12.65/0004-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch +++ b/patches/linux/6.18.5/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch @@ -1,8 +1,12 @@ -From c3c7bbdd78ad04591d3feeb8592a989b0f60a02f Mon Sep 17 00:00:00 2001 +From 8b1ed160c587b517fb6bcb803b78842aa9ab9488 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 24 Apr 2024 22:41:04 +0200 -Subject: [PATCH 04/30] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user +Subject: [PATCH 18/29] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user ports on 6393X +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires For packets with a DA in the IEEE reserved L2 group range, originating from a CPU, forward it as normal, rather than classifying it as @@ -28,15 +32,17 @@ Before this change, due to rsvd2cpu being enabled on the CPU port, the switch would try to trap it back to the CPU. Given that the CPU is trusted, instead assume that it indeed meant for the packet to be forwarded like any other. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/port.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c -index 04053fdc6489..f25fb3214acb 100644 +index 66b1b7277281..df19dfa5cc3d 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c -@@ -1432,6 +1432,23 @@ static int mv88e6393x_port_policy_write_all(struct mv88e6xxx_chip *chip, +@@ -1434,6 +1434,23 @@ static int mv88e6393x_port_policy_write_all(struct mv88e6xxx_chip *chip, return 0; } @@ -60,7 +66,7 @@ index 04053fdc6489..f25fb3214acb 100644 int mv88e6393x_set_egress_port(struct mv88e6xxx_chip *chip, enum mv88e6xxx_egress_direction direction, int port) -@@ -1473,26 +1490,28 @@ int mv88e6393x_port_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip) +@@ -1475,26 +1492,28 @@ int mv88e6393x_port_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip) int err; /* Consider the frames with reserved multicast destination @@ -95,3 +101,6 @@ index 04053fdc6489..f25fb3214acb 100644 if (err) return err; +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0007-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch b/patches/linux/6.18.5/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch similarity index 82% rename from patches/linux/6.12.65/0007-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch rename to patches/linux/6.18.5/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch index a6b28d961..0988dcd9e 100644 --- a/patches/linux/6.12.65/0007-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch +++ b/patches/linux/6.18.5/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch @@ -1,8 +1,12 @@ -From a5ea2783fc55d77f34ea85e5daf7fb8158eec856 Mon Sep 17 00:00:00 2001 +From d57c5a250f32f99dc58aeb642b02a706e1f7ed32 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 28 May 2024 10:38:42 +0200 -Subject: [PATCH 07/30] net: dsa: tag_dsa: Use tag priority as initial +Subject: [PATCH 19/29] net: dsa: tag_dsa: Use tag priority as initial skb->priority +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Use the 3-bit priority field from the DSA tag as the initial packet priority on ingress to the CPU. @@ -18,6 +22,8 @@ Ideally we could then map this priority to an internal one, like we can do with an "ingress-qos-map" on VLAN interfaces. Until that is implemented, support the setup that is likely to be the most common; a 1:1 mapping from FPri to skb->priority. + +Signed-off-by: Mattias Walström --- net/dsa/tag_dsa.c | 7 +++++++ 1 file changed, 7 insertions(+) @@ -40,3 +46,6 @@ index 2a2c4fb61a65..a00ae6bf2971 100644 return skb; } +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0008-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch b/patches/linux/6.18.5/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch similarity index 89% rename from patches/linux/6.12.65/0008-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch rename to patches/linux/6.18.5/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch index 79410bd34..5185bdb3a 100644 --- a/patches/linux/6.12.65/0008-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch +++ b/patches/linux/6.18.5/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch @@ -1,8 +1,12 @@ -From 5fe8ecbafd3e9eaf32fe5bbc1793e09099351298 Mon Sep 17 00:00:00 2001 +From 1ddc69f6f28652c29a8cbee0170cebc44b3cb4d9 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 16 Jan 2024 16:00:55 +0100 -Subject: [PATCH 08/30] net: dsa: Support MDB memberships whose L2 addresses +Subject: [PATCH 20/29] net: dsa: Support MDB memberships whose L2 addresses overlap +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Multiple IP multicast groups (32 for v4, 2^80 for v6) map to the same L2 address. This means that switchdev drivers may receive multiple MDB @@ -28,6 +32,8 @@ as long as the count is positive. Fortunately, all the infrastructure needed to do this is already in place, since it is also needed on CPU and DSA ports. Thus, "implement" this by simply removing the guards which previously skipped reference countung on user ports. + +Signed-off-by: Mattias Walström --- net/dsa/switch.c | 16 ---------------- 1 file changed, 16 deletions(-) @@ -66,3 +72,6 @@ index 3d2feeea897b..628e8a884dde 100644 mutex_lock(&dp->addr_lists_lock); a = dsa_mac_addr_find(&dp->mdbs, mdb->addr, mdb->vid, db); +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0009-net-dsa-Support-EtherType-based-priority-overrides.patch b/patches/linux/6.18.5/0021-net-dsa-Support-EtherType-based-priority-overrides.patch similarity index 79% rename from patches/linux/6.12.65/0009-net-dsa-Support-EtherType-based-priority-overrides.patch rename to patches/linux/6.18.5/0021-net-dsa-Support-EtherType-based-priority-overrides.patch index b8afe349c..2fab3b15d 100644 --- a/patches/linux/6.12.65/0009-net-dsa-Support-EtherType-based-priority-overrides.patch +++ b/patches/linux/6.18.5/0021-net-dsa-Support-EtherType-based-priority-overrides.patch @@ -1,18 +1,23 @@ -From aefc2e785ad0e6bbb1d0d19618ba48dd0acf91b1 Mon Sep 17 00:00:00 2001 +From f38ee70d9df5f42679937910f34068edc8c4e16a Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Thu, 21 Mar 2024 19:12:15 +0100 -Subject: [PATCH 09/30] net: dsa: Support EtherType based priority overrides +Subject: [PATCH 21/29] net: dsa: Support EtherType based priority overrides +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires +Signed-off-by: Mattias Walström --- include/net/dsa.h | 4 ++++ net/dsa/user.c | 56 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h -index 877f9b270cf6..d86698e0e12c 100644 +index 5cb456bf4639..c31d4e910f07 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h -@@ -968,6 +968,10 @@ struct dsa_switch_ops { +@@ -958,6 +958,10 @@ struct dsa_switch_ops { const u8 *sel, int nsel); int (*port_get_apptrust)(struct dsa_switch *ds, int port, u8 *sel, int *nsel); @@ -24,10 +29,10 @@ index 877f9b270cf6..d86698e0e12c 100644 /* * Suspend and resume diff --git a/net/dsa/user.c b/net/dsa/user.c -index 06267c526dc4..ee0e5cf3f6d8 100644 +index f59d66f0975d..58174ad612d2 100644 --- a/net/dsa/user.c +++ b/net/dsa/user.c -@@ -2302,6 +2302,34 @@ dsa_user_dcbnl_add_dscp_prio(struct net_device *dev, struct dcb_app *app) +@@ -2336,6 +2336,34 @@ dsa_user_dcbnl_add_dscp_prio(struct net_device *dev, struct dcb_app *app) return 0; } @@ -62,7 +67,7 @@ index 06267c526dc4..ee0e5cf3f6d8 100644 static int __maybe_unused dsa_user_dcbnl_ieee_setapp(struct net_device *dev, struct dcb_app *app) { -@@ -2311,7 +2339,7 @@ static int __maybe_unused dsa_user_dcbnl_ieee_setapp(struct net_device *dev, +@@ -2345,7 +2373,7 @@ static int __maybe_unused dsa_user_dcbnl_ieee_setapp(struct net_device *dev, case 0: return dsa_user_dcbnl_set_default_prio(dev, app); default: @@ -71,7 +76,7 @@ index 06267c526dc4..ee0e5cf3f6d8 100644 } break; case IEEE_8021QAZ_APP_SEL_DSCP: -@@ -2384,6 +2412,30 @@ dsa_user_dcbnl_del_dscp_prio(struct net_device *dev, struct dcb_app *app) +@@ -2418,6 +2446,30 @@ dsa_user_dcbnl_del_dscp_prio(struct net_device *dev, struct dcb_app *app) return 0; } @@ -102,7 +107,7 @@ index 06267c526dc4..ee0e5cf3f6d8 100644 static int __maybe_unused dsa_user_dcbnl_ieee_delapp(struct net_device *dev, struct dcb_app *app) { -@@ -2393,7 +2445,7 @@ static int __maybe_unused dsa_user_dcbnl_ieee_delapp(struct net_device *dev, +@@ -2427,7 +2479,7 @@ static int __maybe_unused dsa_user_dcbnl_ieee_delapp(struct net_device *dev, case 0: return dsa_user_dcbnl_del_default_prio(dev, app); default: @@ -111,3 +116,6 @@ index 06267c526dc4..ee0e5cf3f6d8 100644 } break; case IEEE_8021QAZ_APP_SEL_DSCP: +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0010-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch b/patches/linux/6.18.5/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch similarity index 85% rename from patches/linux/6.12.65/0010-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch rename to patches/linux/6.18.5/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch index 1e82b5ad2..86a9ae36a 100644 --- a/patches/linux/6.12.65/0010-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch +++ b/patches/linux/6.18.5/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch @@ -1,9 +1,14 @@ -From eaff2f84718f553b406289356d039fc0039bbe2e Mon Sep 17 00:00:00 2001 +From c196348fb4b2023a26aacad062a18fa68a178a63 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Fri, 22 Mar 2024 16:15:43 +0100 -Subject: [PATCH 10/30] net: dsa: mv88e6xxx: Support EtherType based priority +Subject: [PATCH 22/29] net: dsa: mv88e6xxx: Support EtherType based priority overrides +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 64 +++++++++++++++++++++++++++++ drivers/net/dsa/mv88e6xxx/chip.h | 21 ++++++++++ @@ -14,10 +19,10 @@ Subject: [PATCH 10/30] net: dsa: mv88e6xxx: Support EtherType based priority 6 files changed, 207 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index c833b7e44d8b..c48369663425 100644 +index 7da618978ba7..a7e9c141e053 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -1715,6 +1715,11 @@ static int mv88e6xxx_rmu_setup(struct mv88e6xxx_chip *chip) +@@ -1688,6 +1688,11 @@ static int mv88e6xxx_rmu_setup(struct mv88e6xxx_chip *chip) static int mv88e6xxx_pot_setup(struct mv88e6xxx_chip *chip) { @@ -29,15 +34,15 @@ index c833b7e44d8b..c48369663425 100644 if (chip->info->ops->pot_clear) return chip->info->ops->pot_clear(chip); -@@ -3427,6 +3432,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) +@@ -3384,6 +3389,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) + p = &chip->ports[port]; + p->chip = chip; + p->port = port; ++ refcount_set(&p->etype.refcnt, 0); - chip->ports[port].chip = chip; - chip->ports[port].port = port; -+ refcount_set(&chip->ports[port].etype.refcnt, 0); - - err = mv88e6xxx_port_setup_mac(chip, port, LINK_UNFORCED, - SPEED_UNFORCED, DUPLEX_UNFORCED, -@@ -6599,6 +6605,7 @@ static struct mv88e6xxx_chip *mv88e6xxx_alloc_chip(struct device *dev) + /* Look up corresponding fwnode if any */ + ports_fwnode = device_get_named_child_node(chip->dev, "ethernet-ports"); +@@ -6622,6 +6628,7 @@ static struct mv88e6xxx_chip *mv88e6xxx_alloc_chip(struct device *dev) chip->dev = dev; mutex_init(&chip->reg_lock); @@ -45,7 +50,7 @@ index c833b7e44d8b..c48369663425 100644 INIT_LIST_HEAD(&chip->mdios); idr_init(&chip->policies); INIT_LIST_HEAD(&chip->msts); -@@ -7138,6 +7145,61 @@ static int mv88e6xxx_crosschip_lag_leave(struct dsa_switch *ds, int sw_index, +@@ -7161,6 +7168,61 @@ static int mv88e6xxx_crosschip_lag_leave(struct dsa_switch *ds, int sw_index, return err_sync ? : err_pvt; } @@ -107,7 +112,7 @@ index c833b7e44d8b..c48369663425 100644 static const struct phylink_mac_ops mv88e6xxx_phylink_mac_ops = { .mac_select_pcs = mv88e6xxx_mac_select_pcs, .mac_prepare = mv88e6xxx_mac_prepare, -@@ -7207,6 +7269,8 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = { +@@ -7230,6 +7292,8 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = { .crosschip_lag_change = mv88e6xxx_crosschip_lag_change, .crosschip_lag_join = mv88e6xxx_crosschip_lag_join, .crosschip_lag_leave = mv88e6xxx_crosschip_lag_leave, @@ -117,10 +122,10 @@ index c833b7e44d8b..c48369663425 100644 static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip) diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h -index 32c87ab754d1..25edc2534979 100644 +index 2f211e55cb47..d66380eef2b0 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.h +++ b/drivers/net/dsa/mv88e6xxx/chip.h -@@ -293,6 +293,11 @@ struct mv88e6xxx_port { +@@ -301,6 +301,11 @@ struct mv88e6xxx_port { /* MacAuth Bypass control flag */ bool mab; @@ -132,7 +137,7 @@ index 32c87ab754d1..25edc2534979 100644 }; enum mv88e6xxx_region_id { -@@ -331,6 +336,11 @@ struct mv88e6xxx_hw_stat { +@@ -339,6 +344,11 @@ struct mv88e6xxx_hw_stat { int type; }; @@ -141,10 +146,10 @@ index 32c87ab754d1..25edc2534979 100644 + u8 pri; +}; + - struct mv88e6xxx_led; - struct mv88e6xxx_chip { -@@ -348,6 +358,14 @@ struct mv88e6xxx_chip { + const struct mv88e6xxx_info *info; + +@@ -354,6 +364,14 @@ struct mv88e6xxx_chip { /* This mutex protects the access to the switch registers */ struct mutex reg_lock; @@ -159,10 +164,10 @@ index 32c87ab754d1..25edc2534979 100644 /* The MII bus and the address on the bus that is used to * communication with the switch */ -@@ -437,6 +455,9 @@ struct mv88e6xxx_chip { +@@ -444,6 +462,9 @@ struct mv88e6xxx_chip { - /* Bridge MST to SID mappings */ - struct list_head msts; + /* FID map */ + DECLARE_BITMAP(fid_bitmap, MV88E6XXX_N_FID); + + /* Queue priority overrides */ + struct mv88e6xxx_po qpri_po[16]; @@ -170,7 +175,7 @@ index 32c87ab754d1..25edc2534979 100644 struct mv88e6xxx_bus_ops { diff --git a/drivers/net/dsa/mv88e6xxx/global2.c b/drivers/net/dsa/mv88e6xxx/global2.c -index b2b5f6ba438f..2c52903e8992 100644 +index 30a6ffa7817b..3f16a7ef3fa2 100644 --- a/drivers/net/dsa/mv88e6xxx/global2.c +++ b/drivers/net/dsa/mv88e6xxx/global2.c @@ -315,7 +315,7 @@ int mv88e6xxx_g2_atu_stats_get(struct mv88e6xxx_chip *chip, u16 *stats) @@ -266,10 +271,10 @@ index 3663645621c9..496269c26c50 100644 int mv88e6xxx_g2_trunk_mask_write(struct mv88e6xxx_chip *chip, int num, bool hash, u16 mask); diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c -index aa5d312d8aa5..84900814c456 100644 +index df19dfa5cc3d..e1fee09eae2f 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c -@@ -1558,6 +1558,52 @@ int mv88e6351_port_set_ether_type(struct mv88e6xxx_chip *chip, int port, +@@ -1560,6 +1560,52 @@ int mv88e6351_port_set_ether_type(struct mv88e6xxx_chip *chip, int port, return mv88e6xxx_port_write(chip, port, MV88E6XXX_PORT_ETH_TYPE, etype); } @@ -319,11 +324,11 @@ index aa5d312d8aa5..84900814c456 100644 + return err; +} + - /* Offset 0x16: LED Control Register */ - - int mv88e6393x_port_led_write(struct mv88e6xxx_chip *chip, int port, + /* Offset 0x18: Port IEEE Priority Remapping Registers [0-3] + * Offset 0x19: Port IEEE Priority Remapping Registers [4-7] + */ diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h -index 7157864dc20f..7edb04c41ac8 100644 +index c1d2f99efb1c..d2ba9ed1f23e 100644 --- a/drivers/net/dsa/mv88e6xxx/port.h +++ b/drivers/net/dsa/mv88e6xxx/port.h @@ -286,7 +286,18 @@ @@ -346,7 +351,7 @@ index 7157864dc20f..7edb04c41ac8 100644 /* Offset 0x10: InDiscards Low Counter */ #define MV88E6XXX_PORT_IN_DISCARD_LO 0x10 -@@ -426,8 +437,13 @@ int mv88e6352_port_set_policy(struct mv88e6xxx_chip *chip, int port, +@@ -547,16 +558,19 @@ int mv88e6352_port_set_policy(struct mv88e6xxx_chip *chip, int port, int mv88e6393x_port_set_policy(struct mv88e6xxx_chip *chip, int port, enum mv88e6xxx_policy_mapping mapping, enum mv88e6xxx_policy_action action); @@ -357,10 +362,9 @@ index 7157864dc20f..7edb04c41ac8 100644 +int mv88e6xxx_port_claim_ether_type(struct mv88e6xxx_chip *chip, int port, + u16 etype); +int mv88e6xxx_port_relinquish_ether_type(struct mv88e6xxx_chip *chip, int port); - int mv88e6393x_port_led_write(struct mv88e6xxx_chip *chip, int port, - unsigned int pointer, u16 data); - int mv88e6393x_port_led_read(struct mv88e6xxx_chip *chip, int port, -@@ -438,8 +454,6 @@ int mv88e6393x_set_egress_port(struct mv88e6xxx_chip *chip, + int mv88e6393x_set_egress_port(struct mv88e6xxx_chip *chip, + enum mv88e6xxx_egress_direction direction, + int port); int mv88e6393x_port_set_upstream_port(struct mv88e6xxx_chip *chip, int port, int upstream_port); int mv88e6393x_port_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip); @@ -369,3 +373,6 @@ index 7157864dc20f..7edb04c41ac8 100644 int mv88e6xxx_port_set_message_port(struct mv88e6xxx_chip *chip, int port, bool message_port); int mv88e6xxx_port_set_trunk(struct mv88e6xxx_chip *chip, int port, +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0011-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch b/patches/linux/6.18.5/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch similarity index 89% rename from patches/linux/6.12.65/0011-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch rename to patches/linux/6.18.5/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch index 0c09ee3ba..458822200 100644 --- a/patches/linux/6.12.65/0011-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch +++ b/patches/linux/6.18.5/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch @@ -1,7 +1,11 @@ -From ac53ae08ec45b600a846130853b2080395914b59 Mon Sep 17 00:00:00 2001 +From 0bdbde2ac4f2028725db158623f3baecc1f81813 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 28 May 2024 11:04:22 +0200 -Subject: [PATCH 11/30] net: dsa: mv88e6xxx: Add mqprio qdisc support +Subject: [PATCH 23/29] net: dsa: mv88e6xxx: Add mqprio qdisc support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Add support for attaching mqprio qdisc's to mv88e6xxx ports and use the packet's traffic class as the outgoing priority when no PCP bits @@ -23,16 +27,18 @@ are effectively only specifying the QPri. Since FPri is always a 3-bit field, even on older chips with only 4 physical queues, always report 8 queues and let the chip's policy handle the mapping down to the "real" number. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 70 ++++++++++++++++++++++++++++++++ net/dsa/tag_dsa.c | 4 +- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index c48369663425..050a89c1b7e1 100644 +index a7e9c141e053..20bdc3e106e7 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -31,6 +31,7 @@ +@@ -32,6 +32,7 @@ #include #include #include @@ -40,7 +46,7 @@ index c48369663425..050a89c1b7e1 100644 #include "chip.h" #include "devlink.h" -@@ -7200,6 +7201,68 @@ static int mv88e6xxx_port_del_etype_prio(struct dsa_switch *ds, int port, +@@ -7223,6 +7224,68 @@ static int mv88e6xxx_port_del_etype_prio(struct dsa_switch *ds, int port, return err; } @@ -109,7 +115,7 @@ index c48369663425..050a89c1b7e1 100644 static const struct phylink_mac_ops mv88e6xxx_phylink_mac_ops = { .mac_select_pcs = mv88e6xxx_mac_select_pcs, .mac_prepare = mv88e6xxx_mac_prepare, -@@ -7271,6 +7334,7 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = { +@@ -7294,6 +7357,7 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = { .crosschip_lag_leave = mv88e6xxx_crosschip_lag_leave, .port_add_etype_prio = mv88e6xxx_port_add_etype_prio, .port_del_etype_prio = mv88e6xxx_port_del_etype_prio, @@ -117,7 +123,7 @@ index c48369663425..050a89c1b7e1 100644 }; static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip) -@@ -7297,6 +7361,12 @@ static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip) +@@ -7320,6 +7384,12 @@ static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip) */ ds->num_lag_ids = mv88e6xxx_has_lag(chip) ? 16 : 0; @@ -154,3 +160,6 @@ index a00ae6bf2971..55c296e0b5b0 100644 dsa_header[3] = vid & 0xff; } +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0012-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch b/patches/linux/6.18.5/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch similarity index 83% rename from patches/linux/6.12.65/0012-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch rename to patches/linux/6.18.5/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch index 952bed9af..a1e39d31f 100644 --- a/patches/linux/6.12.65/0012-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch +++ b/patches/linux/6.18.5/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch @@ -1,8 +1,12 @@ -From d132f0518975efe8a0fcdb75375e64f7f3699beb Mon Sep 17 00:00:00 2001 +From 343b13988e5428e41899392021bee32383988e0d Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 29 May 2024 13:20:41 +0200 -Subject: [PATCH 12/30] net: dsa: mv88e6xxx: Use VLAN prio over IP when both +Subject: [PATCH 24/29] net: dsa: mv88e6xxx: Use VLAN prio over IP when both are available +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Switch the priority sourcing precdence to prefer VLAN PCP over IP DSCP, when both are available. @@ -21,15 +25,17 @@ main reasons for choosing the new default: packet's priority. As the packet then moves through the network core over trusted VLAN trunks, the packet should keep its original priority, independent of what inner protocol fields may indicate. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index 050a89c1b7e1..1888ddd9bfa4 100644 +index 20bdc3e106e7..d199a1c67aaa 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -3443,9 +3443,13 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) +@@ -3425,9 +3425,13 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) /* Port Control: disable Drop-on-Unlock, disable Drop-on-Lock, * disable Header mode, enable IGMP/MLD snooping, disable VLAN @@ -46,7 +52,7 @@ index 050a89c1b7e1..1888ddd9bfa4 100644 * * If this is the CPU link, use DSA or EDSA tagging depending * on which tagging mode was configured. -@@ -3456,6 +3460,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) +@@ -3438,6 +3442,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) * forwarding of unknown unicasts and multicasts. */ reg = MV88E6185_PORT_CTL0_USE_TAG | MV88E6185_PORT_CTL0_USE_IP | @@ -54,3 +60,6 @@ index 050a89c1b7e1..1888ddd9bfa4 100644 MV88E6XXX_PORT_CTL0_STATE_FORWARDING; /* Forward any IPv4 IGMP or IPv6 MLD frames received * by a USER port to the CPU port to allow snooping. +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0013-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch b/patches/linux/6.18.5/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch similarity index 84% rename from patches/linux/6.12.65/0013-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch rename to patches/linux/6.18.5/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch index 3927e6597..e9a0eef6d 100644 --- a/patches/linux/6.12.65/0013-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch +++ b/patches/linux/6.18.5/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch @@ -1,8 +1,12 @@ -From 2d35135597b7f76b89f380fa8fa2668858044736 Mon Sep 17 00:00:00 2001 +From ee53e8d8b2c5e6f29f14953dfe051b9995c95931 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Tue, 26 Nov 2024 19:45:59 +0100 -Subject: [PATCH 13/30] [FIX] net: dsa: mv88e6xxx: Trap locally terminated +Subject: [PATCH 25/29] [FIX] net: dsa: mv88e6xxx: Trap locally terminated VLANs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires Before this change, in a setup like the following, packets assigned to VLAN 10 were forwarded between the switch ports, even though the @@ -23,6 +27,8 @@ a VLAN upper interface, rather than to offload bridge VLANs, are marked as policy entries. As the VTU policy of user ports is already set to TRAP (to ensure proper standalone port operation), this will cause all packets assigned to these VLANs to properly terminated. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 33 ++++++++++++++++++-------------- include/net/switchdev.h | 4 ++++ @@ -30,10 +36,10 @@ cause all packets assigned to these VLANs to properly terminated. 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index 1888ddd9bfa4..70eefc1b2140 100644 +index d199a1c67aaa..141a3105be9f 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -2665,7 +2665,7 @@ static int mv88e6xxx_port_broadcast_sync(struct mv88e6xxx_chip *chip, int port, +@@ -2611,7 +2611,7 @@ static int mv88e6xxx_port_broadcast_sync(struct mv88e6xxx_chip *chip, int port, } static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port, @@ -42,7 +48,7 @@ index 1888ddd9bfa4..70eefc1b2140 100644 { const u8 non_member = MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_NON_MEMBER; struct mv88e6xxx_vtu_entry vlan; -@@ -2677,9 +2677,7 @@ static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port, +@@ -2623,9 +2623,7 @@ static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port, if (!vlan.valid) { memset(&vlan, 0, sizeof(vlan)); @@ -53,7 +59,7 @@ index 1888ddd9bfa4..70eefc1b2140 100644 err = mv88e6xxx_atu_new(chip, &vlan.fid); if (err) -@@ -2702,6 +2700,9 @@ static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port, +@@ -2648,6 +2646,9 @@ static int mv88e6xxx_port_vlan_join(struct mv88e6xxx_chip *chip, int port, if (err) return err; } else if (vlan.member[port] != member) { @@ -63,7 +69,7 @@ index 1888ddd9bfa4..70eefc1b2140 100644 vlan.member[port] = member; err = mv88e6xxx_vtu_loadpurge(chip, &vlan); -@@ -2748,7 +2749,8 @@ static int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, +@@ -2697,7 +2698,8 @@ static int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, mv88e6xxx_reg_lock(chip); @@ -73,7 +79,7 @@ index 1888ddd9bfa4..70eefc1b2140 100644 if (err) { dev_err(ds->dev, "p%d: failed to add VLAN %d%c\n", port, vlan->vid, untagged ? 'u' : 't'); -@@ -3495,14 +3497,17 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) +@@ -3477,14 +3479,17 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) if (err) return err; @@ -98,7 +104,7 @@ index 1888ddd9bfa4..70eefc1b2140 100644 chip->info->ops->port_set_policy) { err = chip->info->ops->port_set_policy(chip, port, MV88E6XXX_POLICY_MAPPING_VTU, -@@ -3532,7 +3537,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) +@@ -3514,7 +3519,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) */ err = mv88e6xxx_port_vlan_join(chip, port, MV88E6XXX_VID_STANDALONE, MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_UNMODIFIED, @@ -107,7 +113,7 @@ index 1888ddd9bfa4..70eefc1b2140 100644 if (err) return err; -@@ -3546,7 +3551,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) +@@ -3528,7 +3533,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) */ err = mv88e6xxx_port_vlan_join(chip, port, MV88E6XXX_VID_BRIDGED, MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_UNMODIFIED, @@ -132,10 +138,10 @@ index 8346b0d29542..764cd3dd4645 100644 #define SWITCHDEV_OBJ_PORT_VLAN(OBJ) \ diff --git a/net/dsa/user.c b/net/dsa/user.c -index ee0e5cf3f6d8..6f81658598e5 100644 +index 58174ad612d2..c0019d0c1172 100644 --- a/net/dsa/user.c +++ b/net/dsa/user.c -@@ -1762,6 +1762,8 @@ static int dsa_user_vlan_rx_add_vid(struct net_device *dev, __be16 proto, +@@ -1796,6 +1796,8 @@ static int dsa_user_vlan_rx_add_vid(struct net_device *dev, __be16 proto, .vid = vid, /* This API only allows programming tagged, non-PVID VIDs */ .flags = 0, @@ -144,7 +150,7 @@ index ee0e5cf3f6d8..6f81658598e5 100644 }; struct netlink_ext_ack extack = {0}; struct dsa_switch *ds = dp->ds; -@@ -1836,6 +1838,8 @@ static int dsa_user_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, +@@ -1870,6 +1872,8 @@ static int dsa_user_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, .vid = vid, /* This API only allows programming tagged, non-PVID VIDs */ .flags = 0, @@ -153,3 +159,6 @@ index ee0e5cf3f6d8..6f81658598e5 100644 }; struct dsa_switch *ds = dp->ds; struct netdev_hw_addr *ha; +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0025-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch b/patches/linux/6.18.5/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch similarity index 75% rename from patches/linux/6.12.65/0025-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch rename to patches/linux/6.18.5/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch index 6cdbd8b7a..46fd76192 100644 --- a/patches/linux/6.12.65/0025-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch +++ b/patches/linux/6.18.5/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch @@ -1,8 +1,12 @@ -From 21f36ec32b54f2aa1059ba19dfb745f38da32a42 Mon Sep 17 00:00:00 2001 +From 741a311f8a905ca53c5a60863a05b8ce074ad1bb Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 16 Jan 2025 12:35:12 +0100 -Subject: [PATCH 25/30] net: dsa: mv88e6xxx: collapse disabled state into +Subject: [PATCH 26/29] net: dsa: mv88e6xxx: collapse disabled state into blocking +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires This patch changes the behavior of switchcore ports wrt. the port state. Instead of disabling the port, the driver now treats the disabled state @@ -17,15 +21,16 @@ each member port, preventing LACPDUs from passing through to qualify the link and become active. Signed-off-by: Joachim Wiberg +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/port.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c -index 84900814c456..91e58297594c 100644 +index e1fee09eae2f..e28fdd21de38 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c -@@ -791,8 +791,6 @@ int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state) +@@ -793,8 +793,6 @@ int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state) switch (state) { case BR_STATE_DISABLED: @@ -34,3 +39,6 @@ index 84900814c456..91e58297594c 100644 case BR_STATE_BLOCKING: case BR_STATE_LISTENING: state = MV88E6XXX_PORT_CTL0_STATE_BLOCKING; +-- +2.43.0 + diff --git a/patches/linux/6.12.65/0026-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch b/patches/linux/6.18.5/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch similarity index 86% rename from patches/linux/6.12.65/0026-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch rename to patches/linux/6.18.5/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch index d29a41b0a..b16a8ffd3 100644 --- a/patches/linux/6.12.65/0026-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch +++ b/patches/linux/6.18.5/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch @@ -1,8 +1,12 @@ -From 7e01ba47d7260812a76f6a7aa37525b026b506df Mon Sep 17 00:00:00 2001 +From 3b1fd215706810d155e37e29a4ff9d8c8125d853 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 12 Feb 2025 22:03:14 +0100 -Subject: [PATCH 26/30] net: dsa: mv88e6xxx: Only activate LAG offloading when +Subject: [PATCH 27/29] net: dsa: mv88e6xxx: Only activate LAG offloading when bridged +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires The current port isolation scheme for mv88e6xxx is detailed here: https://lore.kernel.org/netdev/20220203101657.990241-1-tobias@waldekranz.com/ @@ -45,15 +49,17 @@ existing port isolation to work as intended. Before joining a bridge, the offload does not offer any performance benefit anyway. All ingressing packet will always have to go to the CPU; egress traffic always relies on software hashing. + +Signed-off-by: Mattias Walström --- drivers/net/dsa/mv88e6xxx/chip.c | 42 +++++++++++++++----------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index 70eefc1b2140..e0db6333e418 100644 +index 141a3105be9f..2014a0958380 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -3106,6 +3106,7 @@ static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, +@@ -3058,6 +3058,7 @@ static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, struct netlink_ext_ack *extack) { struct mv88e6xxx_chip *chip = ds->priv; @@ -61,7 +67,7 @@ index 70eefc1b2140..e0db6333e418 100644 int err; mv88e6xxx_reg_lock(chip); -@@ -3114,6 +3115,13 @@ static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, +@@ -3066,6 +3067,13 @@ static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, if (err) goto unlock; @@ -75,7 +81,7 @@ index 70eefc1b2140..e0db6333e418 100644 err = mv88e6xxx_port_set_map_da(chip, port, true); if (err) goto unlock; -@@ -3158,6 +3166,14 @@ static void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port, +@@ -3110,6 +3118,14 @@ static void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port, "port %d failed to restore map-DA: %pe\n", port, ERR_PTR(err)); @@ -90,7 +96,7 @@ index 70eefc1b2140..e0db6333e418 100644 err = mv88e6xxx_port_commit_pvid(chip, port); if (err) dev_err(ds->dev, -@@ -7066,30 +7082,13 @@ static int mv88e6xxx_port_lag_join(struct dsa_switch *ds, int port, +@@ -7089,30 +7105,13 @@ static int mv88e6xxx_port_lag_join(struct dsa_switch *ds, int port, struct netlink_ext_ack *extack) { struct mv88e6xxx_chip *chip = ds->priv; @@ -122,7 +128,7 @@ index 70eefc1b2140..e0db6333e418 100644 mv88e6xxx_reg_unlock(chip); return err; } -@@ -7098,13 +7097,12 @@ static int mv88e6xxx_port_lag_leave(struct dsa_switch *ds, int port, +@@ -7121,13 +7120,12 @@ static int mv88e6xxx_port_lag_leave(struct dsa_switch *ds, int port, struct dsa_lag lag) { struct mv88e6xxx_chip *chip = ds->priv; @@ -139,3 +145,6 @@ index 70eefc1b2140..e0db6333e418 100644 } static int mv88e6xxx_crosschip_lag_change(struct dsa_switch *ds, int sw_index, +-- +2.43.0 + diff --git a/patches/linux/6.18.5/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch b/patches/linux/6.18.5/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch new file mode 100644 index 000000000..5a5ef1c74 --- /dev/null +++ b/patches/linux/6.18.5/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch @@ -0,0 +1,550 @@ +From 12212af51b5e14c53c473426eba96d87c0bfb9b6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= +Date: Wed, 14 Jan 2026 18:22:41 +0100 +Subject: [PATCH 28/29] net: dsa: mv88e6xxx: Add LED support for 6393X +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires + +Original commit: +commit 462277b926140ee2d231317e92afb6cabf640268 +Author: Tobias Waldekranz +Date: Thu Nov 16 21:59:35 2023 +0100 + + net: dsa: mv88e6xxx: Add LED support for 6393X + + Trigger support: + - "none" + - "timer" + - "netdev" + +Signed-off-by: Mattias Walström +--- + drivers/net/dsa/mv88e6xxx/chip.c | 1 + + drivers/net/dsa/mv88e6xxx/leds.c | 403 +++++++++++++++++++++++++++++++ + drivers/net/dsa/mv88e6xxx/port.c | 33 +++ + drivers/net/dsa/mv88e6xxx/port.h | 13 + + 4 files changed, 450 insertions(+) + +diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c +index 2014a0958380..2e9737c5eb7d 100644 +--- a/drivers/net/dsa/mv88e6xxx/chip.c ++++ b/drivers/net/dsa/mv88e6xxx/chip.c +@@ -5681,6 +5681,7 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = { + .port_disable_pri_override = mv88e6xxx_port_disable_pri_override, + .port_get_cmode = mv88e6352_port_get_cmode, + .port_set_cmode = mv88e6393x_port_set_cmode, ++ .port_setup_leds = mv88e6393x_port_setup_leds, + .port_setup_message_port = mv88e6xxx_setup_message_port, + .port_set_upstream_port = mv88e6393x_port_set_upstream_port, + .stats_snapshot = mv88e6390_g1_stats_snapshot, +diff --git a/drivers/net/dsa/mv88e6xxx/leds.c b/drivers/net/dsa/mv88e6xxx/leds.c +index ab3bc645da56..aa539df21f8d 100644 +--- a/drivers/net/dsa/mv88e6xxx/leds.c ++++ b/drivers/net/dsa/mv88e6xxx/leds.c +@@ -102,6 +102,58 @@ struct mv88e6xxx_led_hwconfig { + u16 selector; + }; + ++/* 6393X LED mode flags */ ++#define MV88E6393X_FLAG_ACT (BIT(TRIGGER_NETDEV_RX) | BIT(TRIGGER_NETDEV_TX)) ++#define MV88E6393X_FLAG_LINK BIT(TRIGGER_NETDEV_LINK) ++#define MV88E6393X_FLAG_LINK_10 BIT(TRIGGER_NETDEV_LINK_10) ++#define MV88E6393X_FLAG_LINK_100 BIT(TRIGGER_NETDEV_LINK_100) ++#define MV88E6393X_FLAG_LINK_1G BIT(TRIGGER_NETDEV_LINK_1000) ++#define MV88E6393X_FLAG_FULL BIT(TRIGGER_NETDEV_FULL_DUPLEX) ++ ++/* 6393X LED modes */ ++#define MV88E6393X_LED_MODE_BLINK 0xd ++#define MV88E6393X_LED_MODE_OFF 0xe ++#define MV88E6393X_LED_MODE_ON 0xf ++#define MV88E6393X_LED_MODES 0x10 ++ ++/* 6393X LED mode to flags mapping for ports 1-8 */ ++static const unsigned long mv88e6393x_led_map_p1_p8[2][MV88E6393X_LED_MODES] = { ++ [0] = { ++ [0x1] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_100 | MV88E6393X_FLAG_LINK_1G, ++ [0x2] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_1G, ++ [0x3] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK, ++ [0x6] = MV88E6393X_FLAG_FULL, ++ [0x7] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_10 | MV88E6393X_FLAG_LINK_1G, ++ [0x8] = MV88E6393X_FLAG_LINK, ++ [0x9] = MV88E6393X_FLAG_LINK_10, ++ [0xa] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_10, ++ [0xb] = MV88E6393X_FLAG_LINK_100 | MV88E6393X_FLAG_LINK_1G, ++ }, ++ [1] = { ++ [0x1] = MV88E6393X_FLAG_ACT, ++ [0x2] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_10 | MV88E6393X_FLAG_LINK_100, ++ [0x3] = MV88E6393X_FLAG_LINK_1G, ++ [0x5] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK, ++ [0x6] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_10 | MV88E6393X_FLAG_LINK_1G, ++ [0x7] = MV88E6393X_FLAG_LINK_10 | MV88E6393X_FLAG_LINK_1G, ++ [0x9] = MV88E6393X_FLAG_LINK_100, ++ [0xa] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK_100, ++ [0xb] = MV88E6393X_FLAG_LINK_10 | MV88E6393X_FLAG_LINK_100, ++ } ++}; ++ ++/* 6393X LED mode to flags mapping for ports 9-10 */ ++static const unsigned long mv88e6393x_led_map_p9_p10[2][MV88E6393X_LED_MODES] = { ++ [0] = { ++ [0x1] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK, ++ }, ++ [1] = { ++ [0x6] = MV88E6393X_FLAG_FULL, ++ [0x7] = MV88E6393X_FLAG_ACT | MV88E6393X_FLAG_LINK, ++ [0x8] = MV88E6393X_FLAG_LINK, ++ } ++}; ++ + /* The following is a lookup table to check what rules we can support on a + * certain LED given restrictions such as that some rules only work with fiber + * (SFP) connections and some blink on activity by default. +@@ -846,3 +898,354 @@ int mv88e6xxx_port_setup_leds(struct mv88e6xxx_chip *chip, int port) + fwnode_handle_put(leds); + return ret; + } ++ ++/* 6393X LED support */ ++ ++static const unsigned long *mv88e6393x_led_map(int port, int led) ++{ ++ if (port >= 1 && port <= 8) ++ return mv88e6393x_led_map_p1_p8[led]; ++ if (port >= 9 && port <= 10) ++ return mv88e6393x_led_map_p9_p10[led]; ++ return NULL; ++} ++ ++static int mv88e6393x_led_flags_to_mode(int port, int led, unsigned long flags) ++{ ++ const unsigned long *map = mv88e6393x_led_map(port, led); ++ int i; ++ ++ if (!map) ++ return -ENODEV; ++ ++ if (!flags) ++ return MV88E6393X_LED_MODE_OFF; ++ ++ for (i = 0; i < MV88E6393X_LED_MODES; i++) { ++ if (map[i] == flags) ++ return i; ++ } ++ ++ return -EOPNOTSUPP; ++} ++ ++static int mv88e6393x_led_mode_to_flags(int port, int led, u8 mode, ++ unsigned long *flags) ++{ ++ const unsigned long *map = mv88e6393x_led_map(port, led); ++ ++ if (!map) ++ return -ENODEV; ++ ++ if (mode == MV88E6393X_LED_MODE_OFF) { ++ *flags = 0; ++ return 0; ++ } ++ ++ if (mode < MV88E6393X_LED_MODES && map[mode]) { ++ *flags = map[mode]; ++ return 0; ++ } ++ ++ return -EINVAL; ++} ++ ++static int mv88e6393x_led_set_mode(struct mv88e6xxx_port *p, int led, int mode) ++{ ++ u16 ctrl; ++ int err; ++ ++ if (mode < 0) ++ return mode; ++ ++ err = mv88e6393x_port_led_read(p->chip, p->port, 0, &ctrl); ++ if (err) ++ return err; ++ ++ if (led == 0) { ++ ctrl &= ~0x0f; ++ ctrl |= mode; ++ } else { ++ ctrl &= ~0xf0; ++ ctrl |= mode << 4; ++ } ++ ++ return mv88e6393x_port_led_write(p->chip, p->port, 0, ctrl); ++} ++ ++static int mv88e6393x_led_get_mode(struct mv88e6xxx_port *p, int led) ++{ ++ u16 ctrl; ++ int err; ++ ++ err = mv88e6393x_port_led_read(p->chip, p->port, 0, &ctrl); ++ if (err) ++ return err; ++ ++ if (led == 0) ++ return ctrl & 0xf; ++ else ++ return (ctrl >> 4) & 0xf; ++} ++ ++static int mv88e6393x_led_brightness_set(struct mv88e6xxx_port *p, int led, ++ int brightness) ++{ ++ if (brightness == LED_OFF) ++ return mv88e6393x_led_set_mode(p, led, MV88E6393X_LED_MODE_OFF); ++ ++ return mv88e6393x_led_set_mode(p, led, MV88E6393X_LED_MODE_ON); ++} ++ ++static int mv88e6393x_led0_brightness_set_blocking(struct led_classdev *ldev, ++ enum led_brightness brightness) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led0); ++ int err; ++ ++ mv88e6xxx_reg_lock(p->chip); ++ err = mv88e6393x_led_brightness_set(p, 0, brightness); ++ mv88e6xxx_reg_unlock(p->chip); ++ ++ return err; ++} ++ ++static int mv88e6393x_led1_brightness_set_blocking(struct led_classdev *ldev, ++ enum led_brightness brightness) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led1); ++ int err; ++ ++ mv88e6xxx_reg_lock(p->chip); ++ err = mv88e6393x_led_brightness_set(p, 1, brightness); ++ mv88e6xxx_reg_unlock(p->chip); ++ ++ return err; ++} ++ ++static int mv88e6393x_led_blink_set(struct mv88e6xxx_port *p, int led, ++ unsigned long *delay_on, ++ unsigned long *delay_off) ++{ ++ int err; ++ ++ /* Defer anything other than 50% duty cycles to software */ ++ if (*delay_on != *delay_off) ++ return -EINVAL; ++ ++ /* Reject values outside ~20% of our default rate (84ms) */ ++ if (*delay_on && ((*delay_on < 30) || (*delay_on > 50))) ++ return -EINVAL; ++ ++ mv88e6xxx_reg_lock(p->chip); ++ err = mv88e6393x_led_set_mode(p, led, MV88E6393X_LED_MODE_BLINK); ++ mv88e6xxx_reg_unlock(p->chip); ++ if (!err) ++ *delay_on = *delay_off = 42; ++ ++ return err; ++} ++ ++static int mv88e6393x_led0_blink_set(struct led_classdev *ldev, ++ unsigned long *delay_on, ++ unsigned long *delay_off) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led0); ++ ++ return mv88e6393x_led_blink_set(p, 0, delay_on, delay_off); ++} ++ ++static int mv88e6393x_led1_blink_set(struct led_classdev *ldev, ++ unsigned long *delay_on, ++ unsigned long *delay_off) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led1); ++ ++ return mv88e6393x_led_blink_set(p, 1, delay_on, delay_off); ++} ++ ++static int ++mv88e6393x_led0_hw_control_is_supported(struct led_classdev *ldev, unsigned long rules) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led0); ++ int mode = mv88e6393x_led_flags_to_mode(p->port, 0, rules); ++ ++ return (mode < 0) ? mode : 0; ++} ++ ++static int ++mv88e6393x_led1_hw_control_is_supported(struct led_classdev *ldev, unsigned long rules) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led1); ++ int mode = mv88e6393x_led_flags_to_mode(p->port, 1, rules); ++ ++ return (mode < 0) ? mode : 0; ++} ++ ++static int mv88e6393x_led_hw_control_set(struct mv88e6xxx_port *p, ++ int led, unsigned long rules) ++{ ++ int mode = mv88e6393x_led_flags_to_mode(p->port, led, rules); ++ ++ if (mode < 0) ++ return mode; ++ ++ return mv88e6393x_led_set_mode(p, led, mode); ++} ++ ++static int ++mv88e6393x_led0_hw_control_set(struct led_classdev *ldev, unsigned long rules) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led0); ++ int err; ++ ++ mv88e6xxx_reg_lock(p->chip); ++ err = mv88e6393x_led_hw_control_set(p, 0, rules); ++ mv88e6xxx_reg_unlock(p->chip); ++ ++ return err; ++} ++ ++static int ++mv88e6393x_led1_hw_control_set(struct led_classdev *ldev, unsigned long rules) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led1); ++ int err; ++ ++ mv88e6xxx_reg_lock(p->chip); ++ err = mv88e6393x_led_hw_control_set(p, 1, rules); ++ mv88e6xxx_reg_unlock(p->chip); ++ ++ return err; ++} ++ ++static int ++mv88e6393x_led_hw_control_get(struct mv88e6xxx_port *p, int led, unsigned long *rules) ++{ ++ int mode; ++ ++ mv88e6xxx_reg_lock(p->chip); ++ mode = mv88e6393x_led_get_mode(p, led); ++ mv88e6xxx_reg_unlock(p->chip); ++ if (mode < 0) ++ return mode; ++ ++ return mv88e6393x_led_mode_to_flags(p->port, led, mode, rules); ++} ++ ++static int ++mv88e6393x_led0_hw_control_get(struct led_classdev *ldev, unsigned long *rules) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led0); ++ ++ return mv88e6393x_led_hw_control_get(p, 0, rules); ++} ++ ++static int ++mv88e6393x_led1_hw_control_get(struct led_classdev *ldev, unsigned long *rules) ++{ ++ struct mv88e6xxx_port *p = container_of(ldev, struct mv88e6xxx_port, led1); ++ ++ return mv88e6393x_led_hw_control_get(p, 1, rules); ++} ++ ++int mv88e6393x_port_setup_leds(struct mv88e6xxx_chip *chip, int port) ++{ ++ struct fwnode_handle *led = NULL, *leds = NULL; ++ struct led_init_data init_data = { }; ++ enum led_default_state state; ++ struct mv88e6xxx_port *p; ++ struct led_classdev *l; ++ struct device *dev; ++ u32 led_num; ++ int ret; ++ ++ /* 6393X has LEDs on ports 1-10 */ ++ if (port < 1 || port > 10) ++ return -EOPNOTSUPP; ++ ++ p = &chip->ports[port]; ++ if (!p->fwnode) ++ return 0; ++ ++ dev = chip->dev; ++ ++ leds = fwnode_get_named_child_node(p->fwnode, "leds"); ++ if (!leds) { ++ dev_dbg(dev, "No Leds node specified in device tree for port %d!\n", ++ port); ++ return 0; ++ } ++ ++ fwnode_for_each_child_node(leds, led) { ++ if (fwnode_property_read_u32(led, "reg", &led_num)) ++ continue; ++ if (led_num > 1) { ++ dev_err(dev, "invalid LED specified port %d\n", port); ++ ret = -EINVAL; ++ goto err_put_led; ++ } ++ ++ if (led_num == 0) ++ l = &p->led0; ++ else ++ l = &p->led1; ++ ++ state = led_init_default_state_get(led); ++ switch (state) { ++ case LEDS_DEFSTATE_ON: ++ l->brightness = 1; ++ mv88e6393x_led_brightness_set(p, led_num, 1); ++ break; ++ case LEDS_DEFSTATE_KEEP: ++ break; ++ default: ++ l->brightness = 0; ++ mv88e6393x_led_brightness_set(p, led_num, 0); ++ } ++ ++ l->max_brightness = 1; ++ if (led_num == 0) { ++ l->brightness_set_blocking = mv88e6393x_led0_brightness_set_blocking; ++ l->blink_set = mv88e6393x_led0_blink_set; ++ l->hw_control_is_supported = mv88e6393x_led0_hw_control_is_supported; ++ l->hw_control_set = mv88e6393x_led0_hw_control_set; ++ l->hw_control_get = mv88e6393x_led0_hw_control_get; ++ l->hw_control_get_device = mv88e6xxx_led0_hw_control_get_device; ++ } else { ++ l->brightness_set_blocking = mv88e6393x_led1_brightness_set_blocking; ++ l->blink_set = mv88e6393x_led1_blink_set; ++ l->hw_control_is_supported = mv88e6393x_led1_hw_control_is_supported; ++ l->hw_control_set = mv88e6393x_led1_hw_control_set; ++ l->hw_control_get = mv88e6393x_led1_hw_control_get; ++ l->hw_control_get_device = mv88e6xxx_led1_hw_control_get_device; ++ } ++ l->hw_control_trigger = "netdev"; ++ ++ init_data.default_label = ":port"; ++ init_data.fwnode = led; ++ init_data.devname_mandatory = true; ++ init_data.devicename = kasprintf(GFP_KERNEL, "%s:0%d:0%d", chip->info->name, ++ port, led_num); ++ if (!init_data.devicename) { ++ ret = -ENOMEM; ++ goto err_put_led; ++ } ++ ++ ret = devm_led_classdev_register_ext(dev, l, &init_data); ++ kfree(init_data.devicename); ++ ++ if (ret) { ++ dev_err(dev, "Failed to init LED %d for port %d", led_num, port); ++ goto err_put_led; ++ } ++ } ++ ++ fwnode_handle_put(leds); ++ return 0; ++ ++err_put_led: ++ fwnode_handle_put(led); ++ fwnode_handle_put(leds); ++ return ret; ++} +diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c +index e28fdd21de38..1985b8553611 100644 +--- a/drivers/net/dsa/mv88e6xxx/port.c ++++ b/drivers/net/dsa/mv88e6xxx/port.c +@@ -1604,6 +1604,39 @@ int mv88e6xxx_port_relinquish_ether_type(struct mv88e6xxx_chip *chip, int port) + return err; + } + ++/* Offset 0x16: LED Control (6393X family) */ ++ ++int mv88e6393x_port_led_write(struct mv88e6xxx_chip *chip, int port, ++ unsigned int pointer, u16 data) ++{ ++ u16 cmd = BIT(15) | ((pointer & 0x7) << 12) | (data & 0x7ff); ++ int err; ++ ++ err = mv88e6xxx_port_write(chip, port, MV88E6393X_PORT_LED_CONTROL, cmd); ++ if (err) ++ return err; ++ ++ return mv88e6xxx_port_wait_bit(chip, port, MV88E6393X_PORT_LED_CONTROL, 15, 0); ++} ++ ++int mv88e6393x_port_led_read(struct mv88e6xxx_chip *chip, int port, ++ unsigned int pointer, u16 *data) ++{ ++ u16 cmd = (pointer & 0x7) << 12; ++ int err; ++ ++ err = mv88e6xxx_port_write(chip, port, MV88E6393X_PORT_LED_CONTROL, cmd); ++ if (err) ++ return err; ++ ++ err = mv88e6xxx_port_read(chip, port, MV88E6393X_PORT_LED_CONTROL, &cmd); ++ if (err) ++ return err; ++ ++ *data = cmd & 0x7ff; ++ return 0; ++} ++ + /* Offset 0x18: Port IEEE Priority Remapping Registers [0-3] + * Offset 0x19: Port IEEE Priority Remapping Registers [4-7] + */ +diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h +index d2ba9ed1f23e..f4a56671fc4c 100644 +--- a/drivers/net/dsa/mv88e6xxx/port.h ++++ b/drivers/net/dsa/mv88e6xxx/port.h +@@ -444,6 +444,9 @@ + /* Control for Special LED (Index 0x7 of LED Control on Port 2) */ + #define MV88E6XXX_PORT_LED_CONTROL_0x07_P2_PTP_ACT 0 /* bits 6:0 PTP Activity */ + ++/* Offset 0x16: LED Control (6393X family) */ ++#define MV88E6393X_PORT_LED_CONTROL 0x16 ++ + /* Offset 0x18: IEEE Priority Mapping Table */ + #define MV88E6390_PORT_IEEE_PRIO_MAP_TABLE 0x18 + #define MV88E6390_PORT_IEEE_PRIO_MAP_TABLE_UPDATE 0x8000 +@@ -565,6 +568,10 @@ int mv88e6351_port_set_ether_type(struct mv88e6xxx_chip *chip, int port, + int mv88e6xxx_port_claim_ether_type(struct mv88e6xxx_chip *chip, int port, + u16 etype); + int mv88e6xxx_port_relinquish_ether_type(struct mv88e6xxx_chip *chip, int port); ++int mv88e6393x_port_led_write(struct mv88e6xxx_chip *chip, int port, ++ unsigned int pointer, u16 data); ++int mv88e6393x_port_led_read(struct mv88e6xxx_chip *chip, int port, ++ unsigned int pointer, u16 *data); + int mv88e6393x_set_egress_port(struct mv88e6xxx_chip *chip, + enum mv88e6xxx_egress_direction direction, + int port); +@@ -597,12 +604,18 @@ int mv88e6185_port_get_cmode(struct mv88e6xxx_chip *chip, int port, u8 *cmode); + int mv88e6352_port_get_cmode(struct mv88e6xxx_chip *chip, int port, u8 *cmode); + #ifdef CONFIG_NET_DSA_MV88E6XXX_LEDS + int mv88e6xxx_port_setup_leds(struct mv88e6xxx_chip *chip, int port); ++int mv88e6393x_port_setup_leds(struct mv88e6xxx_chip *chip, int port); + #else + static inline int mv88e6xxx_port_setup_leds(struct mv88e6xxx_chip *chip, + int port) + { + return 0; + } ++static inline int mv88e6393x_port_setup_leds(struct mv88e6xxx_chip *chip, ++ int port) ++{ ++ return 0; ++} + #endif + int mv88e6xxx_port_drop_untagged(struct mv88e6xxx_chip *chip, int port, + bool drop_untagged); +-- +2.43.0 + diff --git a/patches/linux/linux.hash b/patches/linux/linux.hash index 087d4353b..f39d18a63 100644 --- a/patches/linux/linux.hash +++ b/patches/linux/linux.hash @@ -1,2 +1,2 @@ # Calculated with utils/kernel-refresh.sh -sha256 54e852667af35c0ed06cfc81311e65fa7f5f798a3bfcf78a559d3b4785a139c1 linux-6.12.65.tar.xz +sha256 189d1f409cef8d0d234210e04595172df392f8cb297e14b447ed95720e2fd940 linux-6.18.5.tar.xz diff --git a/src/board/raspberry-pi-4/dts/.claude/settings.local.json b/src/board/raspberry-pi-4/dts/.claude/settings.local.json new file mode 100644 index 000000000..e77944f6d --- /dev/null +++ b/src/board/raspberry-pi-4/dts/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "WebSearch" + ], + "deny": [], + "ask": [] + } +} \ No newline at end of file From 09beee9db28c8437e77b922a478a110965c74c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Wed, 5 Nov 2025 16:26:19 +0100 Subject: [PATCH 2/8] fstab: Remove commit and error mount option These options does not exist anymore, they are removed in 6.18 --- board/common/rootfs/etc/fstab | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/board/common/rootfs/etc/fstab b/board/common/rootfs/etc/fstab index 97ecd8685..265f891c5 100644 --- a/board/common/rootfs/etc/fstab +++ b/board/common/rootfs/etc/fstab @@ -8,8 +8,8 @@ cfgfs /config configfs nofail,noauto 0 0 # /home, /root, and /var, are determined dynamically by /usr/libexec/infix/mnt # depending on the available devices. mnttmp /mnt/tmp tmpfs defaults 0 0 -LABEL=aux /mnt/aux auto noatime,nodiratime,noauto,errors=remount-ro 0 0 -LABEL=var /mnt/var ext4 noatime,nodiratime,noauto,commit=30,errors=remount-ro 0 0 -LABEL=cfg /mnt/cfg ext4 noatime,nodiratime,noauto,commit=30,errors=remount-ro 0 0 +LABEL=aux /mnt/aux auto noatime,nodiratime,noauto 0 0 +LABEL=var /mnt/var ext4 noatime,nodiratime,noauto 0 0 +LABEL=cfg /mnt/cfg ext4 noatime,nodiratime,noauto 0 0 hostfs /mnt/host 9p cache=none,msize=16384,noauto 0 0 /usr/libexec/infix/mnt# /cfg helper none 0 0 From 01eb22f737798a39a12d05c7c54734cdfa713ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 6 Nov 2025 14:06:25 +0100 Subject: [PATCH 3/8] kernel: Enable legacy iptables --- board/aarch64/linux_defconfig | 1 + board/x86_64/linux_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/board/aarch64/linux_defconfig b/board/aarch64/linux_defconfig index 54f230660..8695d356b 100644 --- a/board/aarch64/linux_defconfig +++ b/board/aarch64/linux_defconfig @@ -626,3 +626,4 @@ CONFIG_TEST_LOCKUP=m CONFIG_FUNCTION_TRACER=y # CONFIG_STRICT_DEVMEM is not set CONFIG_MEMTEST=y +CONFIG_NETFILTER_XTABLES_LEGACY=y diff --git a/board/x86_64/linux_defconfig b/board/x86_64/linux_defconfig index 3c9fd667e..7533202e2 100644 --- a/board/x86_64/linux_defconfig +++ b/board/x86_64/linux_defconfig @@ -340,3 +340,4 @@ CONFIG_WQ_CPU_INTENSIVE_REPORT=y CONFIG_TEST_LOCKUP=m CONFIG_FUNCTION_TRACER=y CONFIG_UNWINDER_FRAME_POINTER=y +CONFIG_NETFILTER_XTABLES_LEGACY=y From 17cbe10d3610479418f95384b4375f71600a39a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Mon, 17 Nov 2025 13:58:16 +0100 Subject: [PATCH 4/8] gitignore: add local claude directory --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 1fff940af..354f63f00 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *~ .claude .gdb_history +.claude /.backup /.ccache /dl @@ -10,3 +11,4 @@ /test/.log /local.mk /test/spec/Readme.adoc + From da5503b7cabde9bfcca487e0633531157522d40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 15 Jan 2026 13:19:03 +0100 Subject: [PATCH 5/8] banana-pi: Do not try to set autoneg on the SFP ports This will just crash dagger. They are already in autoneg, thats all they support. --- .../bananapi,bpi-r3/etc/product/interface-quirks.json | 11 +++++++++++ src/confd/src/ieee802-ethernet-interface.c | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 board/aarch64/bananapi-bpi-r3/rootfs/usr/share/product/bananapi,bpi-r3/etc/product/interface-quirks.json diff --git a/board/aarch64/bananapi-bpi-r3/rootfs/usr/share/product/bananapi,bpi-r3/etc/product/interface-quirks.json b/board/aarch64/bananapi-bpi-r3/rootfs/usr/share/product/bananapi,bpi-r3/etc/product/interface-quirks.json new file mode 100644 index 000000000..293eca46d --- /dev/null +++ b/board/aarch64/bananapi-bpi-r3/rootfs/usr/share/product/bananapi,bpi-r3/etc/product/interface-quirks.json @@ -0,0 +1,11 @@ +{ + "sfp1": { + "comment": "Reports it supports autoneg, but if setting it, dagger crashes", + "broken-autoneg": true + }, + "sfp2": { + "comment": "Reports it supports autoneg, but if setting it, dagger crashes", + "broken-autoneg": true + } + +} diff --git a/src/confd/src/ieee802-ethernet-interface.c b/src/confd/src/ieee802-ethernet-interface.c index 53f156eb7..b63fbdb19 100644 --- a/src/confd/src/ieee802-ethernet-interface.c +++ b/src/confd/src/ieee802-ethernet-interface.c @@ -69,6 +69,9 @@ static int netdag_gen_ethtool_autoneg(struct dagger *net, struct lyd_node *cif) int mbps, err = 0; FILE *fp; + if (iface_has_quirk(ifname, "broken-autoneg")) + return SR_ERR_OK; + if (iface_has_quirk(ifname, "phy-detached-when-down")) phase = NETDAG_INIT_POST; From 929eb018f500fd2ebdf0e22151e1ebd94aa9791b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 15 Jan 2026 23:14:40 +0100 Subject: [PATCH 6/8] rpi64: uboot: Fix addresses dtb and ramdisk to not overlap with kernel Device tree was overwritten by the kernel while unpacking. --- board/aarch64/raspberrypi-rpi64/uboot/rpi-env.dtso | 8 ++++++++ ...aces.rules => 61-remove-virtual-wifi-interfaces.rules} | 0 2 files changed, 8 insertions(+) rename board/common/rootfs/etc/udev/rules.d/{70-remove-virtual-wifi-interfaces.rules => 61-remove-virtual-wifi-interfaces.rules} (100%) diff --git a/board/aarch64/raspberrypi-rpi64/uboot/rpi-env.dtso b/board/aarch64/raspberrypi-rpi64/uboot/rpi-env.dtso index 58fdd41c2..8c5c4fc7d 100644 --- a/board/aarch64/raspberrypi-rpi64/uboot/rpi-env.dtso +++ b/board/aarch64/raspberrypi-rpi64/uboot/rpi-env.dtso @@ -12,6 +12,14 @@ boot_targets = "mmc0"; ethprime = "eth0"; + /* Memory layout for kernel boot: + * 0x00200000: Kernel relocation address (ARM64 fixed) + * 0x04000000: FDT (64MB - safe for kernels up to ~60MB) + * 0x10000000: Ramdisk (256MB - high to allow large initramfs) + */ + fdt_addr_r = "0x04000000"; + ramdisk_addr_r = "0x10000000"; + stdout = "serial"; stderr = "serial"; stdin = "serial"; diff --git a/board/common/rootfs/etc/udev/rules.d/70-remove-virtual-wifi-interfaces.rules b/board/common/rootfs/etc/udev/rules.d/61-remove-virtual-wifi-interfaces.rules similarity index 100% rename from board/common/rootfs/etc/udev/rules.d/70-remove-virtual-wifi-interfaces.rules rename to board/common/rootfs/etc/udev/rules.d/61-remove-virtual-wifi-interfaces.rules From 4337caa4c2f281530cb1e054eba6107c925a3c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 15 Jan 2026 23:17:01 +0100 Subject: [PATCH 7/8] rpi4: Fix factory-config.cfg * Adding ipv6 on ethernet * Adapt to function with the new Wi-Fi architecture --- .../raspberrypi,4-model-b/etc/factory-config.cfg | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/board/aarch64/raspberrypi-rpi64/rootfs/usr/share/product/raspberrypi,4-model-b/etc/factory-config.cfg b/board/aarch64/raspberrypi-rpi64/rootfs/usr/share/product/raspberrypi,4-model-b/etc/factory-config.cfg index 78bc0980e..3ad9aea0a 100644 --- a/board/aarch64/raspberrypi-rpi64/rootfs/usr/share/product/raspberrypi,4-model-b/etc/factory-config.cfg +++ b/board/aarch64/raspberrypi-rpi64/rootfs/usr/share/product/raspberrypi,4-model-b/etc/factory-config.cfg @@ -10,6 +10,13 @@ "state": { "admin-state": "unlocked" } + }, + { + "name": "radio0", + "class": "infix-hardware:wifi", + "infix-hardware:wifi-radio": { + "country-code": "00" + } } ] }, @@ -38,6 +45,7 @@ { "name": "eth0", "type": "infix-if-type:ethernet", + "ietf-ip:ipv6": {}, "ietf-ip:ipv4": { "infix-dhcp-client:dhcp": { "option": [ @@ -72,7 +80,10 @@ }, { "name": "wifi0", - "type": "infix-if-type:wifi" + "type": "infix-if-type:wifi", + "infix-interfaces:wifi": { + "radio": "radio0" + } } ] }, From 45718c7aa94afa6561a3040a2db09e8a3a6c269b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 15 Jan 2026 23:19:06 +0100 Subject: [PATCH 8/8] kernel: rpi: Enable deletion of wlan0 interface --- ...m-brcm80211-Allow-wlan0-to-be-delete.patch | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 patches/linux/6.18.5/0029-wireless-broadcom-brcm80211-Allow-wlan0-to-be-delete.patch diff --git a/patches/linux/6.18.5/0029-wireless-broadcom-brcm80211-Allow-wlan0-to-be-delete.patch b/patches/linux/6.18.5/0029-wireless-broadcom-brcm80211-Allow-wlan0-to-be-delete.patch new file mode 100644 index 000000000..c4068c4f8 --- /dev/null +++ b/patches/linux/6.18.5/0029-wireless-broadcom-brcm80211-Allow-wlan0-to-be-delete.patch @@ -0,0 +1,165 @@ +From b8c501b25a89194b8d91f235258ccf4601560798 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= +Date: Thu, 15 Jan 2026 22:47:37 +0100 +Subject: [PATCH 29/29] wireless: broadcom: brcm80211: Allow wlan0 to be + deleted +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires + +It can not be deleted in the firmware so we need to do some hack +around it. + +Signed-off-by: Mattias Walström +--- + .../broadcom/brcm80211/brcmfmac/cfg80211.c | 88 ++++++++++++++++++- + .../broadcom/brcm80211/brcmfmac/core.c | 6 +- + 2 files changed, 88 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +index bb96b87b2a6e..fee2487dfb14 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -974,6 +974,66 @@ static int brcmf_mon_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev) + return 0; + } + ++/** ++ * brcmf_cfg80211_add_primary_iface() - recreate the primary interface ++ * ++ * @wiphy: wiphy device of new interface. ++ * @name: name of the new interface. ++ * @type: interface type (STATION or AP). ++ * ++ * The primary interface (bsscfgidx 0) cannot be created in firmware ++ * as it always exists. This function recreates the local driver ++ * structures after a previous deletion. ++ * ++ * Return: pointer to new wdev on success, ERR_PTR(-errno) on failure ++ */ ++static struct wireless_dev *brcmf_cfg80211_add_primary_iface(struct wiphy *wiphy, ++ const char *name, ++ enum nl80211_iftype type) ++{ ++ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); ++ struct brcmf_pub *drvr = cfg->pub; ++ struct brcmf_cfg80211_vif *vif; ++ struct brcmf_if *ifp; ++ int err; ++ ++ brcmf_dbg(INFO, "Recreating primary interface \"%s\"\n", name); ++ ++ /* Create the interface structure for bsscfgidx 0 */ ++ ifp = brcmf_add_if(drvr, 0, 0, false, name, drvr->mac); ++ if (IS_ERR(ifp)) ++ return ERR_CAST(ifp); ++ ++ brcmf_proto_add_if(drvr, ifp); ++ ++ /* Allocate and set up the vif */ ++ vif = brcmf_alloc_vif(cfg, type); ++ if (IS_ERR(vif)) { ++ err = PTR_ERR(vif); ++ goto fail_ifp; ++ } ++ ++ vif->ifp = ifp; ++ vif->wdev.netdev = ifp->ndev; ++ ifp->ndev->ieee80211_ptr = &vif->wdev; ++ SET_NETDEV_DEV(ifp->ndev, wiphy_dev(cfg->wiphy)); ++ ifp->vif = vif; ++ ++ err = brcmf_net_attach(ifp, true); ++ if (err) { ++ bphy_err(drvr, "Registering netdevice failed\n"); ++ goto fail_vif; ++ } ++ ++ return &vif->wdev; ++ ++fail_vif: ++ brcmf_free_vif(vif); ++fail_ifp: ++ brcmf_remove_interface(ifp, true); ++ return ERR_PTR(err); ++} ++ + static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy, + const char *name, + unsigned char name_assign_type, +@@ -1001,7 +1061,11 @@ static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy, + return brcmf_mon_add_vif(wiphy, name); + case NL80211_IFTYPE_STATION: + case NL80211_IFTYPE_AP: +- wdev = brcmf_apsta_add_vif(wiphy, name, params, type); ++ /* Check if primary interface slot is available for recreation */ ++ if (!drvr->iflist[0]) ++ wdev = brcmf_cfg80211_add_primary_iface(wiphy, name, type); ++ else ++ wdev = brcmf_apsta_add_vif(wiphy, name, params, type); + break; + case NL80211_IFTYPE_P2P_CLIENT: + case NL80211_IFTYPE_P2P_GO: +@@ -1294,14 +1358,28 @@ static int brcmf_cfg80211_del_apsta_iface(struct wiphy *wiphy, + return err; + } + ++static int brcmf_cfg80211_del_primary_iface(struct wiphy *wiphy, ++ struct wireless_dev *wdev) ++{ ++ struct net_device *ndev = wdev->netdev; ++ struct brcmf_if *ifp = netdev_priv(ndev); ++ ++ /* ++ * The primary interface (bsscfgidx 0) cannot be removed from ++ * firmware, but we can remove the local interface structures ++ * to allow recreation via add_virtual_intf. ++ */ ++ brcmf_remove_interface(ifp, true); ++ ++ return 0; ++} ++ + static + int brcmf_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev) + { + struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); + struct net_device *ndev = wdev->netdev; +- +- if (ndev && ndev == cfg_to_ndev(cfg)) +- return -ENOTSUPP; ++ bool is_primary = ndev && ndev == cfg_to_ndev(cfg); + + /* vif event pending in firmware */ + if (brcmf_cfg80211_vif_event_armed(cfg)) +@@ -1326,6 +1404,8 @@ int brcmf_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev) + return brcmf_mon_del_vif(wiphy, wdev); + case NL80211_IFTYPE_STATION: + case NL80211_IFTYPE_AP: ++ if (is_primary) ++ return brcmf_cfg80211_del_primary_iface(wiphy, wdev); + return brcmf_cfg80211_del_apsta_iface(wiphy, wdev); + case NL80211_IFTYPE_P2P_CLIENT: + case NL80211_IFTYPE_P2P_GO: +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +index 862a0336a0b5..08f265325ce4 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -933,9 +933,11 @@ static void brcmf_del_if(struct brcmf_pub *drvr, s32 bsscfgidx, + if (ifp->ndev) { + if (bsscfgidx == 0) { + if (ifp->ndev->netdev_ops == &brcmf_netdev_ops_pri) { +- rtnl_lock(); ++ if (!locked) ++ rtnl_lock(); + brcmf_netdev_stop(ifp->ndev); +- rtnl_unlock(); ++ if (!locked) ++ rtnl_unlock(); + } + } else { + netif_stop_queue(ifp->ndev); +-- +2.43.0 +