From 71411cb8b8eeae4521eadfcdf47f1dda15a199a5 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Thu, 7 Mar 2024 09:24:20 +0100 Subject: [PATCH 01/31] ath11k-firmware: Move from kvalo to new upstream repository It was announced [1] that the original staging repositories are no longer used for staging of new firmware binaries. And that the old repository will be removed [2] in June 2024. The ath11k-firmware package must therefore point to the new repository before the old one is no longer accessible. [1] https://lore.kernel.org/r/bac97f31-4a70-4c4c-8179-4ede0b32f869@quicinc.com [2] https://github.com/kvalo/ath11k-firmware/commit/8d2cc160f390badd62970a66483214773c3fbea1 Signed-off-by: Sven Eckelmann --- package/firmware/ath11k-firmware/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/firmware/ath11k-firmware/Makefile b/package/firmware/ath11k-firmware/Makefile index 384595f10d..2af34354cf 100644 --- a/package/firmware/ath11k-firmware/Makefile +++ b/package/firmware/ath11k-firmware/Makefile @@ -55,7 +55,7 @@ QCN9074_BOARD_REV:=8e140c65f36137714b6d8934e09dcd73cb05c2f6 QCN9074_BOARD_FILE:=board-2.bin.$(QCN9074_BOARD_REV) define Download/qcn9074-board - URL:=https://github.com/kvalo/ath11k-firmware/raw/master/QCN9074/hw1.0/ + URL:=https://git.codelinaro.org/clo/ath-firmware/ath11k-firmware/-/raw/main/QCN9074/hw1.0/ URL_FILE:=board-2.bin FILE:=$(QCN9074_BOARD_FILE) HASH:=dbf0ca14aa1229eccd48f26f1026901b9718b143bd30b51b8ea67c84ba6207f1 @@ -63,7 +63,7 @@ endef $(eval $(call Download,qcn9074-board)) define Download/ath11k-firmware-old - URL:=https://github.com/kvalo/ath11k-firmware.git + URL:=https://git.codelinaro.org/clo/ath-firmware/ath11k-firmware.git VERSION:=540105aa5c0903b5f773d4e80b8501e8da5217e7 PROTO:=git FILE:=ath11k-firmware-old.tar.xz From e247763617ef749a97cad609564ff85878c0aec8 Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Tue, 5 Mar 2024 10:31:48 +0100 Subject: [PATCH 02/31] ath25: drop target ath25 has been on life support for the last couple of releases, eventually leading to marking it as source-only in 2023. It has been basically only touched to do a kernel bump so that we can make the new OpenWrt release which was a challenge due to small RAM amount. However, with the attempt of kernel 6.1 update it turns out that kernel cannot even finish booting due to RAM constraints, so its time to let this target go. Signed-off-by: Robert Marko --- .github/labeler.yml | 2 - package/kernel/mac80211/ath.mk | 11 +- target/linux/ath25/Makefile | 23 - .../ath25/base-files/etc/board.d/01_leds | 12 - .../ath25/base-files/etc/board.d/02_network | 27 - .../lib/preinit/15_preinit_iface_atheros | 29 - .../ath25/base-files/lib/upgrade/platform.sh | 76 - target/linux/ath25/config-5.15 | 132 -- .../ath25/files/drivers/net/phy/mvswitch.c | 454 ----- .../ath25/files/drivers/net/phy/mvswitch.h | 145 -- target/linux/ath25/generic/target.mk | 1 - target/linux/ath25/image/Makefile | 118 -- .../ath25/patches-5.15/107-ar5312_gpio.patch | 212 -- .../ath25/patches-5.15/108-ar2315_gpio.patch | 363 ---- .../patches-5.15/110-ar2313_ethernet.patch | 1733 ----------------- .../ath25/patches-5.15/120-spiflash.patch | 631 ------ .../ath25/patches-5.15/130-watchdog.patch | 277 --- .../140-redboot_boardconfig.patch | 60 - .../141-redboot_partition_scan.patch | 44 - .../142-redboot_various_erase_size_fix.patch | 83 - .../ath25/patches-5.15/210-reset_button.patch | 71 - .../220-enet_micrel_workaround.patch | 111 -- .../ath25/patches-5.15/330-board_leds.patch | 116 -- .../patches-5.15/700-swconfig_mvswitch.patch | 23 - target/linux/ath25/profiles/00-default.mk | 13 - ...30-mtd-add-myloader-partition-parser.patch | 2 +- ...30-mtd-add-myloader-partition-parser.patch | 2 +- 27 files changed, 5 insertions(+), 4766 deletions(-) delete mode 100644 target/linux/ath25/Makefile delete mode 100644 target/linux/ath25/base-files/etc/board.d/01_leds delete mode 100644 target/linux/ath25/base-files/etc/board.d/02_network delete mode 100644 target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros delete mode 100644 target/linux/ath25/base-files/lib/upgrade/platform.sh delete mode 100644 target/linux/ath25/config-5.15 delete mode 100644 target/linux/ath25/files/drivers/net/phy/mvswitch.c delete mode 100644 target/linux/ath25/files/drivers/net/phy/mvswitch.h delete mode 100644 target/linux/ath25/generic/target.mk delete mode 100644 target/linux/ath25/image/Makefile delete mode 100644 target/linux/ath25/patches-5.15/107-ar5312_gpio.patch delete mode 100644 target/linux/ath25/patches-5.15/108-ar2315_gpio.patch delete mode 100644 target/linux/ath25/patches-5.15/110-ar2313_ethernet.patch delete mode 100644 target/linux/ath25/patches-5.15/120-spiflash.patch delete mode 100644 target/linux/ath25/patches-5.15/130-watchdog.patch delete mode 100644 target/linux/ath25/patches-5.15/140-redboot_boardconfig.patch delete mode 100644 target/linux/ath25/patches-5.15/141-redboot_partition_scan.patch delete mode 100644 target/linux/ath25/patches-5.15/142-redboot_various_erase_size_fix.patch delete mode 100644 target/linux/ath25/patches-5.15/210-reset_button.patch delete mode 100644 target/linux/ath25/patches-5.15/220-enet_micrel_workaround.patch delete mode 100644 target/linux/ath25/patches-5.15/330-board_leds.patch delete mode 100644 target/linux/ath25/patches-5.15/700-swconfig_mvswitch.patch delete mode 100644 target/linux/ath25/profiles/00-default.mk diff --git a/.github/labeler.yml b/.github/labeler.yml index c8f8466d4a..1813b7f849 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -11,8 +11,6 @@ - "target/linux/at91/**" - "package/boot/at91bootstrap/**" - "package/boot/uboot-at91/**" -"target/ath25": - - "target/linux/ath25/**" "target/ath79": - "target/linux/ath79/**" "target/bcm27xx": diff --git a/package/kernel/mac80211/ath.mk b/package/kernel/mac80211/ath.mk index dd200a89d4..b0c3691a57 100644 --- a/package/kernel/mac80211/ath.mk +++ b/package/kernel/mac80211/ath.mk @@ -64,12 +64,7 @@ config-$(call config_package,ath11k) += ATH11K config-$(call config_package,ath11k-ahb) += ATH11K_AHB config-$(call config_package,ath11k-pci) += ATH11K_PCI -config-$(call config_package,ath5k) += ATH5K -ifdef CONFIG_TARGET_ath25 - config-y += ATH5K_AHB -else - config-y += ATH5K_PCI -endif +config-$(call config_package,ath5k) += ATH5K ATH5K_PCI config-$(call config_package,ath6kl) += ATH6KL config-$(call config_package,ath6kl-sdio) += ATH6KL_SDIO @@ -133,7 +128,7 @@ endef define KernelPackage/ath $(call KernelPackage/mac80211/Default) TITLE:=Atheros common driver part - DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ath79||TARGET_ath25 +kmod-mac80211 + DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ath79 +kmod-mac80211 FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath.ko MENU:=1 endef @@ -146,7 +141,7 @@ define KernelPackage/ath5k $(call KernelPackage/mac80211/Default) TITLE:=Atheros 5xxx wireless cards support URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath5k - DEPENDS+= @(PCI_SUPPORT||TARGET_ath25) +kmod-ath + DEPENDS+= @PCI_SUPPORT +kmod-ath FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath5k/ath5k.ko AUTOLOAD:=$(call AutoProbe,ath5k) endef diff --git a/target/linux/ath25/Makefile b/target/linux/ath25/Makefile deleted file mode 100644 index 84d22ca361..0000000000 --- a/target/linux/ath25/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2013 OpenWrt.org - -include $(TOPDIR)/rules.mk - -ARCH:=mips -BOARD:=ath25 -BOARDNAME:=Atheros AR231x/AR5312 -FEATURES:=squashfs low_mem small_flash source-only -SUBTARGETS:=generic - -KERNEL_PATCHVER:=5.15 - -define Target/Description - Build firmware images for Atheros SoC boards -endef - -include $(INCLUDE_DIR)/target.mk - -DEFAULT_PACKAGES += wpad-basic-mbedtls kmod-ath5k swconfig kmod-gpio-button-hotplug - -$(eval $(call BuildTarget)) diff --git a/target/linux/ath25/base-files/etc/board.d/01_leds b/target/linux/ath25/base-files/etc/board.d/01_leds deleted file mode 100644 index b417d8acef..0000000000 --- a/target/linux/ath25/base-files/etc/board.d/01_leds +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright 2012-2015 OpenWrt.org -# - -. /lib/functions/uci-defaults.sh - -board_config_update - -ucidef_set_led_netdev "wlan" "wlan" "wlan" "wlan0" - -board_config_flush - -exit 0 diff --git a/target/linux/ath25/base-files/etc/board.d/02_network b/target/linux/ath25/base-files/etc/board.d/02_network deleted file mode 100644 index 618ffddae8..0000000000 --- a/target/linux/ath25/base-files/etc/board.d/02_network +++ /dev/null @@ -1,27 +0,0 @@ - -. /lib/functions/uci-defaults.sh - -board_config_update - -if [ -e "/sys/bus/mdio_bus/drivers/IC+ IP175C/0:00" -o \ - -e "/sys/bus/mdio_bus/drivers/IC+ IP17xx/0:00" ] && \ - [ -x /sbin/swconfig ]; -then - ucidef_add_switch "eth0" \ - "0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5@eth0" - -elif [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \ - -e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; -then - ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" - -elif [ -d /sys/class/net/eth1 ]; then - ucidef_set_interfaces_lan_wan "eth0" "eth1" - -else - ucidef_set_interface_lan "eth0" -fi - -board_config_flush - -exit 0 diff --git a/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros b/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros deleted file mode 100644 index b795aac45f..0000000000 --- a/target/linux/ath25/base-files/lib/preinit/15_preinit_iface_atheros +++ /dev/null @@ -1,29 +0,0 @@ -preinit_ip() { - if [ -z "$pi_ifname" ]; then - grep -q 'Atheros AR231[567]' /proc/cpuinfo && { - if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \ - -e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then - ip link set eth0 up - ip link add link eth0 name eth0.1 type vlan id 1 - ifname=eth0.1 - else - ifname=eth0 - fi - pi_ifname=$ifname - } - fi - [ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && { - ip addr add $pi_ip/$pi_netmask broadcast $pi_broadcast dev $pi_ifname - ip link set $pi_ifname up - } -} - -preinit_ip_deconfig() { - if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \ - -e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then - ip link del eth0.1 2>/dev/null - ip link set $pi_ifname down - elif [ -n "$pi_ifname" ]; then - ip -4 addr flush dev $pi_ifname - fi -} diff --git a/target/linux/ath25/base-files/lib/upgrade/platform.sh b/target/linux/ath25/base-files/lib/upgrade/platform.sh deleted file mode 100644 index 778bbf5a39..0000000000 --- a/target/linux/ath25/base-files/lib/upgrade/platform.sh +++ /dev/null @@ -1,76 +0,0 @@ -CI_BLKSZ=65536 -CI_LDADR=0x80041000 - -platform_find_partitions() { - local first dev size erasesize name - while read dev size erasesize name; do - name=${name#'"'}; name=${name%'"'} - case "$name" in - vmlinux.bin.l7|kernel|linux|rootfs) - if [ -z "$first" ]; then - first="$name" - else - echo "$erasesize:$first:$name" - break - fi - ;; - esac - done < /proc/mtd -} - -platform_find_kernelpart() { - local part - for part in "${1%:*}" "${1#*:}"; do - case "$part" in - vmlinux.bin.l7|kernel|linux) - echo "$part" - break - ;; - esac - done -} - -platform_check_image() { - [ "$#" -gt 1 ] && return 1 - - case "$(get_magic_word "$1")" in - # Combined Image - 4349) - local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null) - local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}" - - if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then - return 0 - else - echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)" - return 1 - fi - ;; - *) - echo "Invalid image. Use combined .img files on this platform" - return 1 - ;; - esac -} - -platform_do_upgrade() { - local partitions=$(platform_find_partitions) - local kernelpart=$(platform_find_kernelpart "${partitions#*:}") - local erase_size=$((0x${partitions%%:*})); partitions="${partitions#*:}" - local kern_length=0x$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null) - local kern_blocks=$(($kern_length / $CI_BLKSZ)) - local root_blocks=$((0x$(dd if="$1" bs=2 skip=5 count=4 2>/dev/null) / $CI_BLKSZ)) - - if [ -n "$partitions" ] && [ -n "$kernelpart" ] && \ - [ ${kern_blocks:-0} -gt 0 ] && \ - [ ${root_blocks:-0} -gt ${kern_blocks:-0} ] && \ - [ ${erase_size:-0} -gt 0 ]; - then - local append="" - [ -f "$UPGRADE_BACKUP" ] && append="-j $UPGRADE_BACKUP" - - ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \ - dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \ - mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions - fi -} diff --git a/target/linux/ath25/config-5.15 b/target/linux/ath25/config-5.15 deleted file mode 100644 index a27ad4980f..0000000000 --- a/target/linux/ath25/config-5.15 +++ /dev/null @@ -1,132 +0,0 @@ -CONFIG_ADM6996_PHY=y -CONFIG_AR2315_WDT=y -CONFIG_AR8216_PHY=y -CONFIG_ARCH_32BIT_OFF_T=y -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_KEEP_MEMBLOCK=y -CONFIG_ARCH_MMAP_RND_BITS_MAX=15 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=15 -CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_ATH25=y -CONFIG_BLK_MQ_PCI=y -CONFIG_CEVT_R4K=y -CONFIG_CLONE_BACKWARDS=y -CONFIG_CMDLINE="console=ttyS0,9600 rootfstype=squashfs,jffs2" -CONFIG_CMDLINE_BOOL=y -# CONFIG_CMDLINE_OVERRIDE is not set -# CONFIG_COMMON_CLK is not set -CONFIG_COMPAT_32BIT_TIME=y -CONFIG_CPU_BIG_ENDIAN=y -CONFIG_CPU_GENERIC_DUMP_TLB=y -CONFIG_CPU_HAS_PREFETCH=y -CONFIG_CPU_HAS_SYNC=y -CONFIG_CPU_MIPS32=y -CONFIG_CPU_MIPS32_R1=y -CONFIG_CPU_MIPSR1=y -CONFIG_CPU_NEEDS_NO_SMARTMIPS_OR_MICROMIPS=y -CONFIG_CPU_R4K_CACHE_TLB=y -CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y -CONFIG_CPU_SUPPORTS_HIGHMEM=y -CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y -CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2 -CONFIG_CRYPTO_RNG2=y -CONFIG_CSRC_R4K=y -CONFIG_DMA_NONCOHERENT=y -CONFIG_EARLY_PRINTK=y -CONFIG_ETHERNET_PACKET_MANGLE=y -CONFIG_FORCE_PCI=y -CONFIG_FW_LOADER_PAGED_BUF=y -CONFIG_GENERIC_ATOMIC64=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CMOS_UPDATE=y -CONFIG_GENERIC_CPU_AUTOPROBE=y -CONFIG_GENERIC_FIND_FIRST_BIT=y -CONFIG_GENERIC_GETTIMEOFDAY=y -CONFIG_GENERIC_IOMAP=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_LIB_ASHLDI3=y -CONFIG_GENERIC_LIB_ASHRDI3=y -CONFIG_GENERIC_LIB_CMPDI2=y -CONFIG_GENERIC_LIB_LSHRDI3=y -CONFIG_GENERIC_LIB_UCMPDI2=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_GENERIC_SCHED_CLOCK=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GPIO_AR2315=y -CONFIG_GPIO_AR5312=y -CONFIG_GPIO_CDEV=y -CONFIG_HANDLE_DOMAIN_IRQ=y -CONFIG_HARDWARE_WATCHPOINTS=y -CONFIG_HAS_DMA=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT_MAP=y -CONFIG_HW_RANDOM=y -CONFIG_HZ_PERIODIC=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_IP17XX_PHY=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_IRQ_MIPS_CPU=y -CONFIG_IRQ_WORK=y -CONFIG_LEDS_GPIO=y -CONFIG_LOCK_DEBUGGING_SUPPORT=y -CONFIG_MDIO_BUS=y -CONFIG_MDIO_DEVICE=y -CONFIG_MDIO_DEVRES=y -CONFIG_MEMFD_CREATE=y -CONFIG_MIGRATION=y -CONFIG_MIPS=y -CONFIG_MIPS_ASID_BITS=8 -CONFIG_MIPS_ASID_SHIFT=0 -CONFIG_MIPS_CLOCK_VSYSCALL=y -# CONFIG_MIPS_CMDLINE_BUILTIN_EXTEND is not set -CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER=y -CONFIG_MIPS_EBPF_JIT=y -CONFIG_MIPS_L1_CACHE_SHIFT=5 -CONFIG_MIPS_LD_CAN_LINK_VDSO=y -CONFIG_MODULES_USE_ELF_REL=y -CONFIG_MTD_AR2315=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -# CONFIG_MTD_CFI_GEOMETRY is not set -# CONFIG_MTD_CFI_INTELEXT is not set -CONFIG_MTD_MYLOADER_PARTS=y -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-3 -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MVSWITCH_PHY=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_NEED_PER_CPU_KM=y -CONFIG_NET_AR231X=y -CONFIG_NET_SELFTESTS=y -CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y -# CONFIG_OF is not set -CONFIG_PCI=y -CONFIG_PCI_AR2315=y -CONFIG_PCI_DISABLE_COMMON_QUIRKS=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_DRIVERS_LEGACY=y -CONFIG_PERF_USE_VMALLOC=y -CONFIG_PGTABLE_LEVELS=2 -CONFIG_PHYLIB=y -CONFIG_PTP_1588_CLOCK_OPTIONAL=y -CONFIG_SERIAL_8250_NR_UARTS=1 -CONFIG_SERIAL_8250_RUNTIME_UARTS=1 -CONFIG_SERIAL_MCTRL_GPIO=y -CONFIG_SOC_AR2315=y -CONFIG_SOC_AR5312=y -CONFIG_SRCU=y -# CONFIG_SWAP is not set -CONFIG_SWCONFIG=y -CONFIG_SYSCTL_EXCEPTION_TRACE=y -CONFIG_SYS_HAS_CPU_MIPS32_R1=y -CONFIG_SYS_HAS_EARLY_PRINTK=y -CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y -CONFIG_SYS_SUPPORTS_ARBIT_HZ=y -CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y -CONFIG_TARGET_ISA_REV=1 -CONFIG_TICK_CPU_ACCOUNTING=y -CONFIG_TINY_SRCU=y -CONFIG_USB_SUPPORT=y diff --git a/target/linux/ath25/files/drivers/net/phy/mvswitch.c b/target/linux/ath25/files/drivers/net/phy/mvswitch.c deleted file mode 100644 index 285d306ef0..0000000000 --- a/target/linux/ath25/files/drivers/net/phy/mvswitch.c +++ /dev/null @@ -1,454 +0,0 @@ -/* - * Marvell 88E6060 switch driver - * Copyright (c) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License v2 as published by the - * Free Software Foundation - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include "mvswitch.h" - -/* Undefine this to use trailer mode instead. - * I don't know if header mode works with all chips */ -#define HEADER_MODE 1 - -MODULE_DESCRIPTION("Marvell 88E6060 Switch driver"); -MODULE_AUTHOR("Felix Fietkau"); -MODULE_LICENSE("GPL"); - -#define MVSWITCH_MAGIC 0x88E6060 - -struct mvswitch_priv { - netdev_features_t orig_features; - u8 vlans[16]; -}; - -#define to_mvsw(_phy) ((struct mvswitch_priv *) (_phy)->priv) - -static inline u16 -r16(struct phy_device *phydev, int addr, int reg) -{ - struct mii_bus *bus = phydev->mdio.bus; - - return bus->read(bus, addr, reg); -} - -static inline void -w16(struct phy_device *phydev, int addr, int reg, u16 val) -{ - struct mii_bus *bus = phydev->mdio.bus; - - bus->write(bus, addr, reg, val); -} - - -static struct sk_buff * -mvswitch_mangle_tx(struct net_device *dev, struct sk_buff *skb) -{ - struct mvswitch_priv *priv; - char *buf = NULL; - u16 vid; - - priv = dev->phy_ptr; - if (unlikely(!priv)) - goto error; - - if (unlikely(skb->len < 16)) - goto error; - -#ifdef HEADER_MODE - if (__vlan_hwaccel_get_tag(skb, &vid)) - goto error; - - if (skb_cloned(skb) || (skb->len <= 62) || (skb_headroom(skb) < MV_HEADER_SIZE)) { - if (pskb_expand_head(skb, MV_HEADER_SIZE, (skb->len < 62 ? 62 - skb->len : 0), GFP_ATOMIC)) - goto error_expand; - if (skb->len < 62) - skb->len = 62; - } - buf = skb_push(skb, MV_HEADER_SIZE); -#else - if (__vlan_get_tag(skb, &vid)) - goto error; - - if (unlikely((vid > 15 || !priv->vlans[vid]))) - goto error; - - if (skb->len <= 64) { - if (pskb_expand_head(skb, 0, 64 + MV_TRAILER_SIZE - skb->len, GFP_ATOMIC)) - goto error_expand; - - buf = skb->data + 64; - skb->len = 64 + MV_TRAILER_SIZE; - } else { - if (skb_cloned(skb) || unlikely(skb_tailroom(skb) < 4)) { - if (pskb_expand_head(skb, 0, 4, GFP_ATOMIC)) - goto error_expand; - } - buf = skb_put(skb, 4); - } - - /* move the ethernet header 4 bytes forward, overwriting the vlan tag */ - memmove(skb->data + 4, skb->data, 12); - skb->data += 4; - skb->len -= 4; - skb->mac_header += 4; -#endif - - if (!buf) - goto error; - - -#ifdef HEADER_MODE - /* prepend the tag */ - *((__be16 *) buf) = cpu_to_be16( - ((vid << MV_HEADER_VLAN_S) & MV_HEADER_VLAN_M) | - ((priv->vlans[vid] << MV_HEADER_PORTS_S) & MV_HEADER_PORTS_M) - ); -#else - /* append the tag */ - *((__be32 *) buf) = cpu_to_be32(( - (MV_TRAILER_OVERRIDE << MV_TRAILER_FLAGS_S) | - ((priv->vlans[vid] & MV_TRAILER_PORTS_M) << MV_TRAILER_PORTS_S) - )); -#endif - - return skb; - -error_expand: - if (net_ratelimit()) - printk("%s: failed to expand/update skb for the switch\n", dev->name); - -error: - /* any errors? drop the packet! */ - dev_kfree_skb_any(skb); - return NULL; -} - -static void -mvswitch_mangle_rx(struct net_device *dev, struct sk_buff *skb) -{ - struct mvswitch_priv *priv; - unsigned char *buf; - int vlan = -1; - int i; - - priv = dev->phy_ptr; - if (WARN_ON_ONCE(!priv)) - return; - -#ifdef HEADER_MODE - buf = skb->data; - skb_pull(skb, MV_HEADER_SIZE); -#else - buf = skb->data + skb->len - MV_TRAILER_SIZE; - if (buf[0] != 0x80) - return; -#endif - - /* look for the vlan matching the incoming port */ - for (i = 0; i < ARRAY_SIZE(priv->vlans); i++) { - if ((1 << buf[1]) & priv->vlans[i]) - vlan = i; - } - - if (vlan == -1) - return; - - __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan); -} - - -static int -mvswitch_wait_mask(struct phy_device *pdev, int addr, int reg, u16 mask, u16 val) -{ - int i = 100; - u16 r; - - do { - r = r16(pdev, addr, reg) & mask; - if (r == val) - return 0; - } while(--i > 0); - return -ETIMEDOUT; -} - -static int -mvswitch_config_init(struct phy_device *pdev) -{ - struct mvswitch_priv *priv = to_mvsw(pdev); - struct net_device *dev = pdev->attached_dev; - u8 vlmap = 0; - int i; - - if (!dev) - return -EINVAL; - - printk("%s: Marvell 88E6060 PHY driver attached.\n", dev->name); - linkmode_zero(pdev->supported); - linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, pdev->supported); - linkmode_copy(pdev->advertising, pdev->supported); - dev->phy_ptr = priv; - pdev->irq = PHY_POLL; -#ifdef HEADER_MODE - dev->flags |= IFF_PROMISC; -#endif - - /* initialize default vlans */ - for (i = 0; i < MV_PORTS; i++) - priv->vlans[(i == MV_WANPORT ? 2 : 1)] |= (1 << i); - - /* before entering reset, disable all ports */ - for (i = 0; i < MV_PORTS; i++) - w16(pdev, MV_PORTREG(CONTROL, i), 0x00); - - msleep(2); /* wait for the status change to settle in */ - - /* put the ATU in reset */ - w16(pdev, MV_SWITCHREG(ATU_CTRL), MV_ATUCTL_RESET); - - i = mvswitch_wait_mask(pdev, MV_SWITCHREG(ATU_CTRL), MV_ATUCTL_RESET, 0); - if (i < 0) { - printk("%s: Timeout waiting for the switch to reset.\n", dev->name); - return i; - } - - /* set the ATU flags */ - w16(pdev, MV_SWITCHREG(ATU_CTRL), - MV_ATUCTL_NO_LEARN | - MV_ATUCTL_ATU_1K | - MV_ATUCTL_AGETIME(MV_ATUCTL_AGETIME_MIN) /* minimum without disabling ageing */ - ); - - /* initialize the cpu port */ - w16(pdev, MV_PORTREG(CONTROL, MV_CPUPORT), -#ifdef HEADER_MODE - MV_PORTCTRL_HEADER | -#else - MV_PORTCTRL_RXTR | - MV_PORTCTRL_TXTR | -#endif - MV_PORTCTRL_ENABLED - ); - /* wait for the phy change to settle in */ - msleep(2); - for (i = 0; i < MV_PORTS; i++) { - u8 pvid = 0; - int j; - - vlmap = 0; - - /* look for the matching vlan */ - for (j = 0; j < ARRAY_SIZE(priv->vlans); j++) { - if (priv->vlans[j] & (1 << i)) { - vlmap = priv->vlans[j]; - pvid = j; - } - } - /* leave port unconfigured if it's not part of a vlan */ - if (!vlmap) - continue; - - /* add the cpu port to the allowed destinations list */ - vlmap |= (1 << MV_CPUPORT); - - /* take port out of its own vlan destination map */ - vlmap &= ~(1 << i); - - /* apply vlan settings */ - w16(pdev, MV_PORTREG(VLANMAP, i), - MV_PORTVLAN_PORTS(vlmap) | - MV_PORTVLAN_ID(i) - ); - - /* re-enable port */ - w16(pdev, MV_PORTREG(CONTROL, i), - MV_PORTCTRL_ENABLED - ); - } - - w16(pdev, MV_PORTREG(VLANMAP, MV_CPUPORT), - MV_PORTVLAN_ID(MV_CPUPORT) - ); - - /* set the port association vector */ - for (i = 0; i <= MV_PORTS; i++) { - w16(pdev, MV_PORTREG(ASSOC, i), - MV_PORTASSOC_PORTS(1 << i) - ); - } - - /* init switch control */ - w16(pdev, MV_SWITCHREG(CTRL), - MV_SWITCHCTL_MSIZE | - MV_SWITCHCTL_DROP - ); - - dev->eth_mangle_rx = mvswitch_mangle_rx; - dev->eth_mangle_tx = mvswitch_mangle_tx; - priv->orig_features = dev->features; - -#ifdef HEADER_MODE -#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0) - dev->priv_flags |= IFF_NO_IP_ALIGN; -#else - dev->extra_priv_flags |= IFF_NO_IP_ALIGN; -#endif - dev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_TX; -#else - dev->features |= NETIF_F_HW_VLAN_CTAG_RX; -#endif - - return 0; -} - -static int -mvswitch_read_status(struct phy_device *pdev) -{ - pdev->speed = SPEED_100; - pdev->duplex = DUPLEX_FULL; - pdev->link = 1; - - /* XXX ugly workaround: we can't force the switch - * to gracefully handle hosts moving from one port to another, - * so we have to regularly clear the ATU database */ - - /* wait for the ATU to become available */ - mvswitch_wait_mask(pdev, MV_SWITCHREG(ATU_OP), MV_ATUOP_INPROGRESS, 0); - - /* flush the ATU */ - w16(pdev, MV_SWITCHREG(ATU_OP), - MV_ATUOP_INPROGRESS | - MV_ATUOP_FLUSH_ALL - ); - - /* wait for operation to complete */ - mvswitch_wait_mask(pdev, MV_SWITCHREG(ATU_OP), MV_ATUOP_INPROGRESS, 0); - - return 0; -} - -static int -mvswitch_aneg_done(struct phy_device *phydev) -{ - return 1; /* Return any positive value */ -} - -static int -mvswitch_config_aneg(struct phy_device *phydev) -{ - return 0; -} - -static void -mvswitch_detach(struct phy_device *pdev) -{ - struct mvswitch_priv *priv = to_mvsw(pdev); - struct net_device *dev = pdev->attached_dev; - - if (!dev) - return; - - dev->phy_ptr = NULL; - dev->eth_mangle_rx = NULL; - dev->eth_mangle_tx = NULL; - dev->features = priv->orig_features; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0) - dev->priv_flags &= ~IFF_NO_IP_ALIGN; -#else - dev->extra_priv_flags &= ~IFF_NO_IP_ALIGN; -#endif -} - -static void -mvswitch_remove(struct phy_device *pdev) -{ - struct mvswitch_priv *priv = to_mvsw(pdev); - - kfree(priv); -} - -static int -mvswitch_probe(struct phy_device *pdev) -{ - struct mvswitch_priv *priv; - - priv = kzalloc(sizeof(struct mvswitch_priv), GFP_KERNEL); - if (priv == NULL) - return -ENOMEM; - - pdev->priv = priv; - - return 0; -} - -static int -mvswitch_fixup(struct phy_device *dev) -{ - struct mii_bus *bus = dev->mdio.bus; - u16 reg; - - if (dev->mdio.addr != 0x10) - return 0; - - reg = bus->read(bus, MV_PORTREG(IDENT, 0)) & MV_IDENT_MASK; - if (reg != MV_IDENT_VALUE) - return 0; - - dev->phy_id = MVSWITCH_MAGIC; - return 0; -} - - -static struct phy_driver mvswitch_driver = { - .name = "Marvell 88E6060", - .phy_id = MVSWITCH_MAGIC, - .phy_id_mask = 0xffffffff, - .features = PHY_BASIC_FEATURES, - .probe = &mvswitch_probe, - .remove = &mvswitch_remove, - .detach = &mvswitch_detach, - .config_init = &mvswitch_config_init, - .config_aneg = &mvswitch_config_aneg, - .aneg_done = &mvswitch_aneg_done, - .read_status = &mvswitch_read_status, -}; - -static int __init -mvswitch_init(void) -{ - phy_register_fixup_for_id(PHY_ANY_ID, mvswitch_fixup); - return phy_driver_register(&mvswitch_driver, THIS_MODULE); -} - -static void __exit -mvswitch_exit(void) -{ - phy_driver_unregister(&mvswitch_driver); -} - -module_init(mvswitch_init); -module_exit(mvswitch_exit); diff --git a/target/linux/ath25/files/drivers/net/phy/mvswitch.h b/target/linux/ath25/files/drivers/net/phy/mvswitch.h deleted file mode 100644 index ab2a1a126e..0000000000 --- a/target/linux/ath25/files/drivers/net/phy/mvswitch.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Marvell 88E6060 switch driver - * Copyright (c) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License v2 as published by the - * Free Software Foundation - */ -#ifndef __MVSWITCH_H -#define __MVSWITCH_H - -#define MV_HEADER_SIZE 2 -#define MV_HEADER_PORTS_M 0x001f -#define MV_HEADER_PORTS_S 0 -#define MV_HEADER_VLAN_M 0xf000 -#define MV_HEADER_VLAN_S 12 - -#define MV_TRAILER_SIZE 4 -#define MV_TRAILER_PORTS_M 0x1f -#define MV_TRAILER_PORTS_S 16 -#define MV_TRAILER_FLAGS_S 24 -#define MV_TRAILER_OVERRIDE 0x80 - - -#define MV_PORTS 5 -#define MV_WANPORT 4 -#define MV_CPUPORT 5 - -#define MV_BASE 0x10 - -#define MV_PHYPORT_BASE (MV_BASE + 0x0) -#define MV_PHYPORT(_n) (MV_PHYPORT_BASE + (_n)) -#define MV_SWITCHPORT_BASE (MV_BASE + 0x8) -#define MV_SWITCHPORT(_n) (MV_SWITCHPORT_BASE + (_n)) -#define MV_SWITCHREGS (MV_BASE + 0xf) - -enum { - MV_PHY_CONTROL = 0x00, - MV_PHY_STATUS = 0x01, - MV_PHY_IDENT0 = 0x02, - MV_PHY_IDENT1 = 0x03, - MV_PHY_ANEG = 0x04, - MV_PHY_LINK_ABILITY = 0x05, - MV_PHY_ANEG_EXPAND = 0x06, - MV_PHY_XMIT_NEXTP = 0x07, - MV_PHY_LINK_NEXTP = 0x08, - MV_PHY_CONTROL1 = 0x10, - MV_PHY_STATUS1 = 0x11, - MV_PHY_INTR_EN = 0x12, - MV_PHY_INTR_STATUS = 0x13, - MV_PHY_INTR_PORT = 0x14, - MV_PHY_RECV_COUNTER = 0x16, - MV_PHY_LED_PARALLEL = 0x16, - MV_PHY_LED_STREAM = 0x17, - MV_PHY_LED_CTRL = 0x18, - MV_PHY_LED_OVERRIDE = 0x19, - MV_PHY_VCT_CTRL = 0x1a, - MV_PHY_VCT_STATUS = 0x1b, - MV_PHY_CONTROL2 = 0x1e -}; -#define MV_PHYREG(_type, _port) MV_PHYPORT(_port), MV_PHY_##_type - -enum { - MV_PORT_STATUS = 0x00, - MV_PORT_IDENT = 0x03, - MV_PORT_CONTROL = 0x04, - MV_PORT_VLANMAP = 0x06, - MV_PORT_ASSOC = 0x0b, - MV_PORT_RXCOUNT = 0x10, - MV_PORT_TXCOUNT = 0x11, -}; -#define MV_PORTREG(_type, _port) MV_SWITCHPORT(_port), MV_PORT_##_type - -enum { - MV_PORTCTRL_BLOCK = (1 << 0), - MV_PORTCTRL_LEARN = (2 << 0), - MV_PORTCTRL_ENABLED = (3 << 0), - MV_PORTCTRL_VLANTUN = (1 << 7), /* Enforce VLANs on packets */ - MV_PORTCTRL_RXTR = (1 << 8), /* Enable Marvell packet trailer for ingress */ - MV_PORTCTRL_HEADER = (1 << 11), /* Enable Marvell packet header mode for port */ - MV_PORTCTRL_TXTR = (1 << 14), /* Enable Marvell packet trailer for egress */ - MV_PORTCTRL_FORCEFL = (1 << 15), /* force flow control */ -}; - -#define MV_PORTVLAN_ID(_n) (((_n) & 0xf) << 12) -#define MV_PORTVLAN_PORTS(_n) ((_n) & 0x3f) - -#define MV_PORTASSOC_PORTS(_n) ((_n) & 0x1f) -#define MV_PORTASSOC_MONITOR (1 << 15) - -enum { - MV_SWITCH_MAC0 = 0x01, - MV_SWITCH_MAC1 = 0x02, - MV_SWITCH_MAC2 = 0x03, - MV_SWITCH_CTRL = 0x04, - MV_SWITCH_ATU_CTRL = 0x0a, - MV_SWITCH_ATU_OP = 0x0b, - MV_SWITCH_ATU_DATA = 0x0c, - MV_SWITCH_ATU_MAC0 = 0x0d, - MV_SWITCH_ATU_MAC1 = 0x0e, - MV_SWITCH_ATU_MAC2 = 0x0f, -}; -#define MV_SWITCHREG(_type) MV_SWITCHREGS, MV_SWITCH_##_type - -enum { - MV_SWITCHCTL_EEIE = (1 << 0), /* EEPROM interrupt enable */ - MV_SWITCHCTL_PHYIE = (1 << 1), /* PHY interrupt enable */ - MV_SWITCHCTL_ATUDONE= (1 << 2), /* ATU done interrupt enable */ - MV_SWITCHCTL_ATUIE = (1 << 3), /* ATU interrupt enable */ - MV_SWITCHCTL_CTRMODE= (1 << 8), /* statistics for rx and tx errors */ - MV_SWITCHCTL_RELOAD = (1 << 9), /* reload registers from eeprom */ - MV_SWITCHCTL_MSIZE = (1 << 10), /* increase maximum frame size */ - MV_SWITCHCTL_DROP = (1 << 13), /* discard frames with excessive collisions */ -}; - -enum { -#define MV_ATUCTL_AGETIME_MIN 16 -#define MV_ATUCTL_AGETIME_MAX 4080 -#define MV_ATUCTL_AGETIME(_n) ((((_n) / 16) & 0xff) << 4) - MV_ATUCTL_ATU_256 = (0 << 12), - MV_ATUCTL_ATU_512 = (1 << 12), - MV_ATUCTL_ATU_1K = (2 << 12), - MV_ATUCTL_ATUMASK = (3 << 12), - MV_ATUCTL_NO_LEARN = (1 << 14), - MV_ATUCTL_RESET = (1 << 15), -}; - -enum { -#define MV_ATUOP_DBNUM(_n) ((_n) & 0x0f) - - MV_ATUOP_NOOP = (0 << 12), - MV_ATUOP_FLUSH_ALL = (1 << 12), - MV_ATUOP_FLUSH_U = (2 << 12), - MV_ATUOP_LOAD_DB = (3 << 12), - MV_ATUOP_GET_NEXT = (4 << 12), - MV_ATUOP_FLUSH_DB = (5 << 12), - MV_ATUOP_FLUSH_DB_UU= (6 << 12), - - MV_ATUOP_INPROGRESS = (1 << 15), -}; - -#define MV_IDENT_MASK 0xfff0 -#define MV_IDENT_VALUE 0x0600 - -#endif diff --git a/target/linux/ath25/generic/target.mk b/target/linux/ath25/generic/target.mk deleted file mode 100644 index f5cb1fb19b..0000000000 --- a/target/linux/ath25/generic/target.mk +++ /dev/null @@ -1 +0,0 @@ -BOARDNAME:=Generic diff --git a/target/linux/ath25/image/Makefile b/target/linux/ath25/image/Makefile deleted file mode 100644 index 9cdcdf9e95..0000000000 --- a/target/linux/ath25/image/Makefile +++ /dev/null @@ -1,118 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2006-2010 OpenWrt.org - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/image.mk - -define Build/mkfwimage - $(STAGING_DIR_HOST)/bin/mkfwimage \ - -B $(1).$(VERSION_DIST).$(REVISION) \ - -k $(IMAGE_KERNEL) \ - -r $(IMAGE_ROOTFS) \ - -o $@.new && \ - mv $@.new $@ -endef - -define Build/combined-image - -sh $(TOPDIR)/scripts/combined-image.sh \ - "$(IMAGE_KERNEL)" \ - "$(IMAGE_ROOTFS)" \ - "$@.new" && \ - mv $@.new $@ -endef - -define Build/mkmylofw - $(STAGING_DIR_HOST)/bin/mkmylofw -B $(1) \ - -p0x020000:0x130000:ah:0x80041000:linux:$(IMAGE_KERNEL) \ - -p0x150000:0x2a0000:::rootfs:$(IMAGE_ROOTFS) \ - $@.new && \ - mv $@.new $@ -endef - -define Build/gzip-kernel - gzip -9n -c $@ > $@.gz - dd if=$@.gz of=$@ bs=65536 conv=sync -endef - -define Build/lzma-kernel - $(STAGING_DIR_HOST)/bin/lzma e $@ $@.l7 - dd if=$@.l7 of=$@ bs=65536 conv=sync -endef - -define Build/copy-kernel - rm -f $@ $@.elf - cp $< $@ - cp $<.elf $@.elf -endef - -define Build/elf-kernel - cp $(IMAGE_KERNEL).elf $@ -endef - - -define Device/Default - PROFILES = Default $$(DEVICE_NAME) - KERNEL := copy-kernel | lzma-kernel - KERNEL_INITRAMFS = kernel-bin - KERNEL_INITRAMFS_NAME := vmlinux-initramfs.elf - KERNEL_INITRAMFS_SUFFIX := -kernel.elf - IMAGES := sysupgrade.bin - FILESYSTEMS := squashfs -endef - -define Device/generic - DEVICE_VENDOR := Atheros - DEVICE_MODEL := Generic AR2xxx board - IMAGES := kernel.lzma kernel.elf kernel.gz rootfs.bin sysupgrade.bin - IMAGE/kernel.gz := elf-kernel | gzip-kernel - IMAGE/kernel.elf := elf-kernel - IMAGE/kernel.lzma := elf-kernel | lzma-kernel - IMAGE/rootfs.bin := append-rootfs | pad-rootfs | pad-to 128k - IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to 128k | combined-image - DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(if $$(findstring kernel,$$(2)),,$$(1)-)$$(2) -endef -TARGET_DEVICES += generic - -define Device/ubnt_picostation-2 - DEVICE_VENDOR := Ubiquiti - DEVICE_MODEL := Picostation 2 (XS2-8) - IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to 128k | mkfwimage XS2-8 -v XS2.ar2316 -endef -TARGET_DEVICES += ubnt_picostation-2 - -define Device/ubnt_nanostation-2 - DEVICE_VENDOR := Ubiquiti - DEVICE_MODEL := Nanostation 2 (XS2) - IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to 128k | mkfwimage XS2 -v XS2.ar2316 - DEFAULT := n -endef -TARGET_DEVICES += ubnt_nanostation-2 - -define Device/ubnt_nanostation-5 - DEVICE_VENDOR := Ubiquiti - DEVICE_MODEL := Nanostation 5 (XS5) - IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to 128k | mkfwimage XS5 -v XS5.ar2313 - DEFAULT := n -endef -TARGET_DEVICES += ubnt_nanostation-5 - -define Device/compex_np25g - DEVICE_VENDOR := Compex - DEVICE_MODEL := NP25G - KERNEL := kernel-bin | gzip-kernel - IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to 128k | mkmylofw np25g - BROKEN := y -endef -TARGET_DEVICES += compex_np25g - -define Device/compex_wpe53g - DEVICE_VENDOR := Compex - DEVICE_MODEL := WPE53G - KERNEL := kernel-bin | gzip-kernel - IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to 128k | mkmylofw wpe53g - BROKEN := y -endef -TARGET_DEVICES += compex_wpe53g - -$(eval $(call BuildImage)) diff --git a/target/linux/ath25/patches-5.15/107-ar5312_gpio.patch b/target/linux/ath25/patches-5.15/107-ar5312_gpio.patch deleted file mode 100644 index 70d139621a..0000000000 --- a/target/linux/ath25/patches-5.15/107-ar5312_gpio.patch +++ /dev/null @@ -1,212 +0,0 @@ ---- a/arch/mips/ath25/Kconfig -+++ b/arch/mips/ath25/Kconfig -@@ -2,6 +2,7 @@ - config SOC_AR5312 - bool "Atheros AR5312/AR2312+ SoC support" - depends on ATH25 -+ select GPIO_AR5312 - default y - - config SOC_AR2315 ---- a/arch/mips/ath25/ar5312.c -+++ b/arch/mips/ath25/ar5312.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -177,6 +178,22 @@ static struct platform_device ar5312_phy - .num_resources = 1, - }; - -+static struct resource ar5312_gpio_res[] = { -+ { -+ .name = "ar5312-gpio", -+ .flags = IORESOURCE_MEM, -+ .start = AR5312_GPIO_BASE, -+ .end = AR5312_GPIO_BASE + AR5312_GPIO_SIZE - 1, -+ }, -+}; -+ -+static struct platform_device ar5312_gpio = { -+ .name = "ar5312-gpio", -+ .id = -1, -+ .resource = ar5312_gpio_res, -+ .num_resources = ARRAY_SIZE(ar5312_gpio_res), -+}; -+ - static void __init ar5312_flash_init(void) - { - void __iomem *flashctl_base; -@@ -244,6 +261,8 @@ void __init ar5312_init_devices(void) - - platform_device_register(&ar5312_physmap_flash); - -+ platform_device_register(&ar5312_gpio); -+ - switch (ath25_soc) { - case ATH25_SOC_AR5312: - if (!ath25_board.radio) ---- a/drivers/gpio/Kconfig -+++ b/drivers/gpio/Kconfig -@@ -143,6 +143,13 @@ config GPIO_AMDPT - driver for GPIO functionality on Promontory IOHub - Require ACPI ASL code to enumerate as a platform device. - -+config GPIO_AR5312 -+ bool "AR5312 SoC GPIO support" -+ default y if SOC_AR5312 -+ depends on SOC_AR5312 -+ help -+ Say yes here to enable GPIO support for Atheros AR5312/AR2312+ SoCs. -+ - config GPIO_ASPEED - tristate "Aspeed GPIO support" - depends on (ARCH_ASPEED || COMPILE_TEST) && OF_GPIO ---- a/drivers/gpio/Makefile -+++ b/drivers/gpio/Makefile -@@ -32,6 +32,7 @@ obj-$(CONFIG_GPIO_ALTERA) += gpio-alt - obj-$(CONFIG_GPIO_AMD8111) += gpio-amd8111.o - obj-$(CONFIG_GPIO_AMD_FCH) += gpio-amd-fch.o - obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o -+obj-$(CONFIG_GPIO_AR5312) += gpio-ar5312.o - obj-$(CONFIG_GPIO_ARIZONA) += gpio-arizona.o - obj-$(CONFIG_GPIO_ASPEED) += gpio-aspeed.o - obj-$(CONFIG_GPIO_ASPEED_SGPIO) += gpio-aspeed-sgpio.o ---- /dev/null -+++ b/drivers/gpio/gpio-ar5312.c -@@ -0,0 +1,121 @@ -+/* -+ * This file is subject to the terms and conditions of the GNU General Public -+ * License. See the file "COPYING" in the main directory of this archive -+ * for more details. -+ * -+ * Copyright (C) 2003 Atheros Communications, Inc., All Rights Reserved. -+ * Copyright (C) 2006 FON Technology, SL. -+ * Copyright (C) 2006 Imre Kaloz -+ * Copyright (C) 2006-2009 Felix Fietkau -+ * Copyright (C) 2012 Alexandros C. Couloumbis -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#define DRIVER_NAME "ar5312-gpio" -+ -+#define AR5312_GPIO_DO 0x00 /* output register */ -+#define AR5312_GPIO_DI 0x04 /* intput register */ -+#define AR5312_GPIO_CR 0x08 /* control register */ -+ -+#define AR5312_GPIO_CR_M(x) (1 << (x)) /* mask for i/o */ -+#define AR5312_GPIO_CR_O(x) (0 << (x)) /* mask for output */ -+#define AR5312_GPIO_CR_I(x) (1 << (x)) /* mask for input */ -+#define AR5312_GPIO_CR_INT(x) (1 << ((x)+8)) /* mask for interrupt */ -+#define AR5312_GPIO_CR_UART(x) (1 << ((x)+16)) /* uart multiplex */ -+ -+#define AR5312_GPIO_NUM 8 -+ -+static void __iomem *ar5312_mem; -+ -+static inline u32 ar5312_gpio_reg_read(unsigned reg) -+{ -+ return __raw_readl(ar5312_mem + reg); -+} -+ -+static inline void ar5312_gpio_reg_write(unsigned reg, u32 val) -+{ -+ __raw_writel(val, ar5312_mem + reg); -+} -+ -+static inline void ar5312_gpio_reg_mask(unsigned reg, u32 mask, u32 val) -+{ -+ ar5312_gpio_reg_write(reg, (ar5312_gpio_reg_read(reg) & ~mask) | val); -+} -+ -+static int ar5312_gpio_get_val(struct gpio_chip *chip, unsigned gpio) -+{ -+ return (ar5312_gpio_reg_read(AR5312_GPIO_DI) >> gpio) & 1; -+} -+ -+static void ar5312_gpio_set_val(struct gpio_chip *chip, unsigned gpio, int val) -+{ -+ u32 reg = ar5312_gpio_reg_read(AR5312_GPIO_DO); -+ -+ reg = val ? reg | (1 << gpio) : reg & ~(1 << gpio); -+ ar5312_gpio_reg_write(AR5312_GPIO_DO, reg); -+} -+ -+static int ar5312_gpio_dir_in(struct gpio_chip *chip, unsigned gpio) -+{ -+ ar5312_gpio_reg_mask(AR5312_GPIO_CR, 0, 1 << gpio); -+ return 0; -+} -+ -+static int ar5312_gpio_dir_out(struct gpio_chip *chip, unsigned gpio, int val) -+{ -+ ar5312_gpio_reg_mask(AR5312_GPIO_CR, 1 << gpio, 0); -+ ar5312_gpio_set_val(chip, gpio, val); -+ return 0; -+} -+ -+static struct gpio_chip ar5312_gpio_chip = { -+ .label = DRIVER_NAME, -+ .direction_input = ar5312_gpio_dir_in, -+ .direction_output = ar5312_gpio_dir_out, -+ .set = ar5312_gpio_set_val, -+ .get = ar5312_gpio_get_val, -+ .base = 0, -+ .ngpio = AR5312_GPIO_NUM, -+}; -+ -+static int ar5312_gpio_probe(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct resource *res; -+ int ret; -+ -+ if (ar5312_mem) -+ return -EBUSY; -+ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ ar5312_mem = devm_ioremap_resource(dev, res); -+ if (IS_ERR(ar5312_mem)) -+ return PTR_ERR(ar5312_mem); -+ -+ ar5312_gpio_chip.parent = dev; -+ ret = gpiochip_add(&ar5312_gpio_chip); -+ if (ret) { -+ dev_err(dev, "failed to add gpiochip\n"); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static struct platform_driver ar5312_gpio_driver = { -+ .probe = ar5312_gpio_probe, -+ .driver = { -+ .name = DRIVER_NAME, -+ .owner = THIS_MODULE, -+ } -+}; -+ -+static int __init ar5312_gpio_init(void) -+{ -+ return platform_driver_register(&ar5312_gpio_driver); -+} -+subsys_initcall(ar5312_gpio_init); ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -232,6 +232,7 @@ config ATH25 - select CEVT_R4K - select CSRC_R4K - select DMA_NONCOHERENT -+ select GPIOLIB - select IRQ_MIPS_CPU - select IRQ_DOMAIN - select SYS_HAS_CPU_MIPS32_R1 diff --git a/target/linux/ath25/patches-5.15/108-ar2315_gpio.patch b/target/linux/ath25/patches-5.15/108-ar2315_gpio.patch deleted file mode 100644 index f2e1e4a9a3..0000000000 --- a/target/linux/ath25/patches-5.15/108-ar2315_gpio.patch +++ /dev/null @@ -1,363 +0,0 @@ ---- a/arch/mips/ath25/Kconfig -+++ b/arch/mips/ath25/Kconfig -@@ -8,6 +8,7 @@ config SOC_AR5312 - config SOC_AR2315 - bool "Atheros AR2315+ SoC support" - depends on ATH25 -+ select GPIO_AR2315 - default y - - config PCI_AR2315 ---- a/arch/mips/ath25/ar2315.c -+++ b/arch/mips/ath25/ar2315.c -@@ -22,6 +22,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -165,11 +167,42 @@ void __init ar2315_arch_init_irq(void) - ar2315_misc_irq_domain = domain; - } - -+static struct resource ar2315_gpio_res[] = { -+ { -+ .name = "ar2315-gpio", -+ .flags = IORESOURCE_MEM, -+ .start = AR2315_RST_BASE + AR2315_GPIO, -+ .end = AR2315_RST_BASE + AR2315_GPIO + 0x10 - 1, -+ }, -+ { -+ .name = "ar2315-gpio", -+ .flags = IORESOURCE_IRQ, -+ }, -+ { -+ .name = "ar2315-gpio-irq-base", -+ .flags = IORESOURCE_IRQ, -+ .start = AR231X_GPIO_IRQ_BASE, -+ .end = AR231X_GPIO_IRQ_BASE, -+ } -+}; -+ -+static struct platform_device ar2315_gpio = { -+ .id = -1, -+ .name = "ar2315-gpio", -+ .resource = ar2315_gpio_res, -+ .num_resources = ARRAY_SIZE(ar2315_gpio_res) -+}; -+ - void __init ar2315_init_devices(void) - { - /* Find board configuration */ - ath25_find_config(AR2315_SPI_READ_BASE, AR2315_SPI_READ_SIZE); - -+ ar2315_gpio_res[1].start = irq_create_mapping(ar2315_misc_irq_domain, -+ AR2315_MISC_IRQ_GPIO); -+ ar2315_gpio_res[1].end = ar2315_gpio_res[1].start; -+ platform_device_register(&ar2315_gpio); -+ - ath25_add_wmac(0, AR2315_WLAN0_BASE, AR2315_IRQ_WLAN0); - } - -@@ -185,8 +218,8 @@ static void ar2315_restart(char *command - /* Cold reset does not work on the AR2315/6, use the GPIO reset bits - * a workaround. Give it some time to attempt a gpio based hardware - * reset (atheros reference design workaround) */ -- -- /* TODO: implement the GPIO reset workaround */ -+ gpio_request_one(AR2315_RESET_GPIO, GPIOF_OUT_INIT_LOW, "Reset"); -+ mdelay(100); - - /* Some boards (e.g. Senao EOC-2610) don't implement the reset logic - * workaround. Attempt to jump to the mips reset location - ---- a/drivers/gpio/Kconfig -+++ b/drivers/gpio/Kconfig -@@ -143,6 +143,13 @@ config GPIO_AMDPT - driver for GPIO functionality on Promontory IOHub - Require ACPI ASL code to enumerate as a platform device. - -+config GPIO_AR2315 -+ bool "AR2315 SoC GPIO support" -+ default y if SOC_AR2315 -+ depends on SOC_AR2315 -+ help -+ Say yes here to enable GPIO support for Atheros AR2315+ SoCs. -+ - config GPIO_AR5312 - bool "AR5312 SoC GPIO support" - default y if SOC_AR5312 ---- a/drivers/gpio/Makefile -+++ b/drivers/gpio/Makefile -@@ -32,6 +32,7 @@ obj-$(CONFIG_GPIO_ALTERA) += gpio-alt - obj-$(CONFIG_GPIO_AMD8111) += gpio-amd8111.o - obj-$(CONFIG_GPIO_AMD_FCH) += gpio-amd-fch.o - obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o -+obj-$(CONFIG_GPIO_AR2315) += gpio-ar2315.o - obj-$(CONFIG_GPIO_AR5312) += gpio-ar5312.o - obj-$(CONFIG_GPIO_ARIZONA) += gpio-arizona.o - obj-$(CONFIG_GPIO_ASPEED) += gpio-aspeed.o ---- /dev/null -+++ b/drivers/gpio/gpio-ar2315.c -@@ -0,0 +1,233 @@ -+/* -+ * This file is subject to the terms and conditions of the GNU General Public -+ * License. See the file "COPYING" in the main directory of this archive -+ * for more details. -+ * -+ * Copyright (C) 2003 Atheros Communications, Inc., All Rights Reserved. -+ * Copyright (C) 2006 FON Technology, SL. -+ * Copyright (C) 2006 Imre Kaloz -+ * Copyright (C) 2006 Felix Fietkau -+ * Copyright (C) 2012 Alexandros C. Couloumbis -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define DRIVER_NAME "ar2315-gpio" -+ -+#define AR2315_GPIO_DI 0x0000 -+#define AR2315_GPIO_DO 0x0008 -+#define AR2315_GPIO_DIR 0x0010 -+#define AR2315_GPIO_INT 0x0018 -+ -+#define AR2315_GPIO_DIR_M(x) (1 << (x)) /* mask for i/o */ -+#define AR2315_GPIO_DIR_O(x) (1 << (x)) /* output */ -+#define AR2315_GPIO_DIR_I(x) (0) /* input */ -+ -+#define AR2315_GPIO_INT_NUM_M 0x3F /* mask for GPIO num */ -+#define AR2315_GPIO_INT_TRIG(x) ((x) << 6) /* interrupt trigger */ -+#define AR2315_GPIO_INT_TRIG_M (0x3 << 6) /* mask for int trig */ -+ -+#define AR2315_GPIO_INT_TRIG_OFF 0 /* Triggerring off */ -+#define AR2315_GPIO_INT_TRIG_LOW 1 /* Low Level Triggered */ -+#define AR2315_GPIO_INT_TRIG_HIGH 2 /* High Level Triggered */ -+#define AR2315_GPIO_INT_TRIG_EDGE 3 /* Edge Triggered */ -+ -+#define AR2315_GPIO_NUM 22 -+ -+static u32 ar2315_gpio_intmask; -+static u32 ar2315_gpio_intval; -+static unsigned ar2315_gpio_irq_base; -+static void __iomem *ar2315_mem; -+ -+static inline u32 ar2315_gpio_reg_read(unsigned reg) -+{ -+ return __raw_readl(ar2315_mem + reg); -+} -+ -+static inline void ar2315_gpio_reg_write(unsigned reg, u32 val) -+{ -+ __raw_writel(val, ar2315_mem + reg); -+} -+ -+static inline void ar2315_gpio_reg_mask(unsigned reg, u32 mask, u32 val) -+{ -+ ar2315_gpio_reg_write(reg, (ar2315_gpio_reg_read(reg) & ~mask) | val); -+} -+ -+static void ar2315_gpio_irq_handler(struct irq_desc *desc) -+{ -+ u32 pend; -+ int bit = -1; -+ -+ /* only do one gpio interrupt at a time */ -+ pend = ar2315_gpio_reg_read(AR2315_GPIO_DI); -+ pend ^= ar2315_gpio_intval; -+ pend &= ar2315_gpio_intmask; -+ -+ if (pend) { -+ bit = fls(pend) - 1; -+ pend &= ~(1 << bit); -+ ar2315_gpio_intval ^= (1 << bit); -+ } -+ -+ /* Enable interrupt with edge detection */ -+ if ((ar2315_gpio_reg_read(AR2315_GPIO_DIR) & AR2315_GPIO_DIR_M(bit)) != -+ AR2315_GPIO_DIR_I(bit)) -+ return; -+ -+ if (bit >= 0) -+ generic_handle_irq(ar2315_gpio_irq_base + bit); -+} -+ -+static void ar2315_gpio_int_setup(unsigned gpio, int trig) -+{ -+ u32 reg = ar2315_gpio_reg_read(AR2315_GPIO_INT); -+ -+ reg &= ~(AR2315_GPIO_INT_NUM_M | AR2315_GPIO_INT_TRIG_M); -+ reg |= gpio | AR2315_GPIO_INT_TRIG(trig); -+ ar2315_gpio_reg_write(AR2315_GPIO_INT, reg); -+} -+ -+static void ar2315_gpio_irq_unmask(struct irq_data *d) -+{ -+ unsigned gpio = d->irq - ar2315_gpio_irq_base; -+ u32 dir = ar2315_gpio_reg_read(AR2315_GPIO_DIR); -+ -+ /* Enable interrupt with edge detection */ -+ if ((dir & AR2315_GPIO_DIR_M(gpio)) != AR2315_GPIO_DIR_I(gpio)) -+ return; -+ -+ ar2315_gpio_intmask |= (1 << gpio); -+ ar2315_gpio_int_setup(gpio, AR2315_GPIO_INT_TRIG_EDGE); -+} -+ -+static void ar2315_gpio_irq_mask(struct irq_data *d) -+{ -+ unsigned gpio = d->irq - ar2315_gpio_irq_base; -+ -+ /* Disable interrupt */ -+ ar2315_gpio_intmask &= ~(1 << gpio); -+ ar2315_gpio_int_setup(gpio, AR2315_GPIO_INT_TRIG_OFF); -+} -+ -+static struct irq_chip ar2315_gpio_irq_chip = { -+ .name = DRIVER_NAME, -+ .irq_unmask = ar2315_gpio_irq_unmask, -+ .irq_mask = ar2315_gpio_irq_mask, -+}; -+ -+static void ar2315_gpio_irq_init(unsigned irq) -+{ -+ unsigned i; -+ -+ ar2315_gpio_intval = ar2315_gpio_reg_read(AR2315_GPIO_DI); -+ for (i = 0; i < AR2315_GPIO_NUM; i++) { -+ unsigned _irq = ar2315_gpio_irq_base + i; -+ -+ irq_set_chip_and_handler(_irq, &ar2315_gpio_irq_chip, -+ handle_level_irq); -+ } -+ irq_set_chained_handler(irq, ar2315_gpio_irq_handler); -+} -+ -+static int ar2315_gpio_get_val(struct gpio_chip *chip, unsigned gpio) -+{ -+ return (ar2315_gpio_reg_read(AR2315_GPIO_DI) >> gpio) & 1; -+} -+ -+static void ar2315_gpio_set_val(struct gpio_chip *chip, unsigned gpio, int val) -+{ -+ u32 reg = ar2315_gpio_reg_read(AR2315_GPIO_DO); -+ -+ reg = val ? reg | (1 << gpio) : reg & ~(1 << gpio); -+ ar2315_gpio_reg_write(AR2315_GPIO_DO, reg); -+} -+ -+static int ar2315_gpio_dir_in(struct gpio_chip *chip, unsigned gpio) -+{ -+ ar2315_gpio_reg_mask(AR2315_GPIO_DIR, 1 << gpio, 0); -+ return 0; -+} -+ -+static int ar2315_gpio_dir_out(struct gpio_chip *chip, unsigned gpio, int val) -+{ -+ ar2315_gpio_reg_mask(AR2315_GPIO_DIR, 0, 1 << gpio); -+ ar2315_gpio_set_val(chip, gpio, val); -+ return 0; -+} -+ -+static int ar2315_gpio_to_irq(struct gpio_chip *chip, unsigned gpio) -+{ -+ return ar2315_gpio_irq_base + gpio; -+} -+ -+static struct gpio_chip ar2315_gpio_chip = { -+ .label = DRIVER_NAME, -+ .direction_input = ar2315_gpio_dir_in, -+ .direction_output = ar2315_gpio_dir_out, -+ .set = ar2315_gpio_set_val, -+ .get = ar2315_gpio_get_val, -+ .to_irq = ar2315_gpio_to_irq, -+ .base = 0, -+ .ngpio = AR2315_GPIO_NUM, -+}; -+ -+static int ar2315_gpio_probe(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct resource *res; -+ unsigned irq; -+ int ret; -+ -+ if (ar2315_mem) -+ return -EBUSY; -+ -+ res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, -+ "ar2315-gpio-irq-base"); -+ if (!res) { -+ dev_err(dev, "not found GPIO IRQ base\n"); -+ return -ENXIO; -+ } -+ ar2315_gpio_irq_base = res->start; -+ -+ res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, DRIVER_NAME); -+ if (!res) { -+ dev_err(dev, "not found IRQ number\n"); -+ return -ENXIO; -+ } -+ irq = res->start; -+ -+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, DRIVER_NAME); -+ ar2315_mem = devm_ioremap_resource(dev, res); -+ if (IS_ERR(ar2315_mem)) -+ return PTR_ERR(ar2315_mem); -+ -+ ar2315_gpio_chip.parent = dev; -+ ret = gpiochip_add(&ar2315_gpio_chip); -+ if (ret) { -+ dev_err(dev, "failed to add gpiochip\n"); -+ return ret; -+ } -+ -+ ar2315_gpio_irq_init(irq); -+ -+ return 0; -+} -+ -+static struct platform_driver ar2315_gpio_driver = { -+ .probe = ar2315_gpio_probe, -+ .driver = { -+ .name = DRIVER_NAME, -+ .owner = THIS_MODULE, -+ } -+}; -+ -+static int __init ar2315_gpio_init(void) -+{ -+ return platform_driver_register(&ar2315_gpio_driver); -+} -+subsys_initcall(ar2315_gpio_init); ---- a/arch/mips/ath25/devices.h -+++ b/arch/mips/ath25/devices.h -@@ -4,6 +4,11 @@ - - #include - -+#define AR231X_GPIO_IRQ_BASE 0x30 -+ -+/* GPIO number for AR2315/16 reset issue workaround */ -+#define AR2315_RESET_GPIO 5 -+ - #define ATH25_REG_MS(_val, _field) (((_val) & _field##_M) >> _field##_S) - - #define ATH25_IRQ_CPU_CLOCK (MIPS_CPU_IRQ_BASE + 7) /* C0_CAUSE: 0x8000 */ ---- a/arch/mips/ath25/ar2315_regs.h -+++ b/arch/mips/ath25/ar2315_regs.h -@@ -315,6 +315,9 @@ - #define AR2315_MEM_CFG_BANKADDR_BITS_M 0x00000018 - #define AR2315_MEM_CFG_BANKADDR_BITS_S 3 - -+/* GPIO MMR base address */ -+#define AR2315_GPIO 0x0088 -+ - /* - * Local Bus Interface Registers - */ diff --git a/target/linux/ath25/patches-5.15/110-ar2313_ethernet.patch b/target/linux/ath25/patches-5.15/110-ar2313_ethernet.patch deleted file mode 100644 index fcb6abff7d..0000000000 --- a/target/linux/ath25/patches-5.15/110-ar2313_ethernet.patch +++ /dev/null @@ -1,1733 +0,0 @@ ---- a/drivers/net/ethernet/atheros/Makefile -+++ b/drivers/net/ethernet/atheros/Makefile -@@ -9,3 +9,4 @@ obj-$(CONFIG_ATL2) += atlx/ - obj-$(CONFIG_ATL1E) += atl1e/ - obj-$(CONFIG_ATL1C) += atl1c/ - obj-$(CONFIG_ALX) += alx/ -+obj-$(CONFIG_NET_AR231X) += ar231x/ ---- a/drivers/net/ethernet/atheros/Kconfig -+++ b/drivers/net/ethernet/atheros/Kconfig -@@ -6,7 +6,7 @@ - config NET_VENDOR_ATHEROS - bool "Atheros devices" - default y -- depends on (PCI || ATH79) -+ depends on (PCI || ATH25 || ATH79) - help - If you have a network (Ethernet) card belonging to this class, say Y. - -@@ -88,4 +88,10 @@ config ALX - To compile this driver as a module, choose M here. The module - will be called alx. - -+config NET_AR231X -+ tristate "Atheros AR231X built-in Ethernet support" -+ depends on ATH25 -+ help -+ Support for the AR231x/531x ethernet controller -+ - endif # NET_VENDOR_ATHEROS ---- /dev/null -+++ b/drivers/net/ethernet/atheros/ar231x/Makefile -@@ -0,0 +1 @@ -+obj-$(CONFIG_NET_AR231X) += ar231x.o ---- /dev/null -+++ b/drivers/net/ethernet/atheros/ar231x/ar231x.c -@@ -0,0 +1,1117 @@ -+/* -+ * ar231x.c: Linux driver for the Atheros AR231x Ethernet device. -+ * -+ * Copyright (C) 2004 by Sameer Dekate -+ * Copyright (C) 2006 Imre Kaloz -+ * Copyright (C) 2006-2009 Felix Fietkau -+ * -+ * Thanks to Atheros for providing hardware and documentation -+ * enabling me to write this driver. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * Additional credits: -+ * This code is taken from John Taylor's Sibyte driver and then -+ * modified for the AR2313. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define AR2313_MTU 1692 -+#define AR2313_PRIOS 1 -+#define AR2313_QUEUES (2*AR2313_PRIOS) -+#define AR2313_DESCR_ENTRIES 64 -+ -+#ifndef min -+#define min(a, b) (((a) < (b)) ? (a) : (b)) -+#endif -+ -+#ifndef SMP_CACHE_BYTES -+#define SMP_CACHE_BYTES L1_CACHE_BYTES -+#endif -+ -+#define AR2313_MBOX_SET_BIT 0x8 -+ -+#include "ar231x.h" -+ -+/** -+ * New interrupt handler strategy: -+ * -+ * An old interrupt handler worked using the traditional method of -+ * replacing an skbuff with a new one when a packet arrives. However -+ * the rx rings do not need to contain a static number of buffer -+ * descriptors, thus it makes sense to move the memory allocation out -+ * of the main interrupt handler and do it in a bottom half handler -+ * and only allocate new buffers when the number of buffers in the -+ * ring is below a certain threshold. In order to avoid starving the -+ * NIC under heavy load it is however necessary to force allocation -+ * when hitting a minimum threshold. The strategy for alloction is as -+ * follows: -+ * -+ * RX_LOW_BUF_THRES - allocate buffers in the bottom half -+ * RX_PANIC_LOW_THRES - we are very low on buffers, allocate -+ * the buffers in the interrupt handler -+ * RX_RING_THRES - maximum number of buffers in the rx ring -+ * -+ * One advantagous side effect of this allocation approach is that the -+ * entire rx processing can be done without holding any spin lock -+ * since the rx rings and registers are totally independent of the tx -+ * ring and its registers. This of course includes the kmalloc's of -+ * new skb's. Thus start_xmit can run in parallel with rx processing -+ * and the memory allocation on SMP systems. -+ * -+ * Note that running the skb reallocation in a bottom half opens up -+ * another can of races which needs to be handled properly. In -+ * particular it can happen that the interrupt handler tries to run -+ * the reallocation while the bottom half is either running on another -+ * CPU or was interrupted on the same CPU. To get around this the -+ * driver uses bitops to prevent the reallocation routines from being -+ * reentered. -+ * -+ * TX handling can also be done without holding any spin lock, wheee -+ * this is fun! since tx_csm is only written to by the interrupt -+ * handler. -+ */ -+ -+/** -+ * Threshold values for RX buffer allocation - the low water marks for -+ * when to start refilling the rings are set to 75% of the ring -+ * sizes. It seems to make sense to refill the rings entirely from the -+ * intrrupt handler once it gets below the panic threshold, that way -+ * we don't risk that the refilling is moved to another CPU when the -+ * one running the interrupt handler just got the slab code hot in its -+ * cache. -+ */ -+#define RX_RING_SIZE AR2313_DESCR_ENTRIES -+#define RX_PANIC_THRES (RX_RING_SIZE/4) -+#define RX_LOW_THRES ((3*RX_RING_SIZE)/4) -+#define CRC_LEN 4 -+#define RX_OFFSET 2 -+ -+#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) -+#define VLAN_HDR 4 -+#else -+#define VLAN_HDR 0 -+#endif -+ -+#define AR2313_BUFSIZE (AR2313_MTU + VLAN_HDR + ETH_HLEN + CRC_LEN + \ -+ RX_OFFSET) -+ -+#ifdef MODULE -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Sameer Dekate , Imre Kaloz , Felix Fietkau "); -+MODULE_DESCRIPTION("AR231x Ethernet driver"); -+#endif -+ -+/* prototypes */ -+static void ar231x_halt(struct net_device *dev); -+static void rx_tasklet_func(unsigned long data); -+static void rx_tasklet_cleanup(struct net_device *dev); -+static void ar231x_multicast_list(struct net_device *dev); -+static void ar231x_tx_timeout(struct net_device *dev, unsigned int txqueue); -+ -+static int ar231x_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum); -+static int ar231x_mdiobus_write(struct mii_bus *bus, int phy_addr, int regnum, -+ u16 value); -+static int ar231x_mdiobus_reset(struct mii_bus *bus); -+static int ar231x_mdiobus_probe(struct net_device *dev); -+static void ar231x_adjust_link(struct net_device *dev); -+ -+#ifndef ERR -+#define ERR(fmt, args...) printk("%s: " fmt, __func__, ##args) -+#endif -+ -+#ifdef CONFIG_NET_POLL_CONTROLLER -+static void -+ar231x_netpoll(struct net_device *dev) -+{ -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ ar231x_interrupt(dev->irq, dev); -+ local_irq_restore(flags); -+} -+#endif -+ -+static const struct net_device_ops ar231x_ops = { -+ .ndo_open = ar231x_open, -+ .ndo_stop = ar231x_close, -+ .ndo_start_xmit = ar231x_start_xmit, -+ .ndo_set_rx_mode = ar231x_multicast_list, -+ .ndo_do_ioctl = ar231x_ioctl, -+ .ndo_validate_addr = eth_validate_addr, -+ .ndo_set_mac_address = eth_mac_addr, -+ .ndo_tx_timeout = ar231x_tx_timeout, -+#ifdef CONFIG_NET_POLL_CONTROLLER -+ .ndo_poll_controller = ar231x_netpoll, -+#endif -+}; -+ -+static int ar231x_probe(struct platform_device *pdev) -+{ -+ struct net_device *dev; -+ struct ar231x_private *sp; -+ struct resource *res; -+ unsigned long ar_eth_base; -+ char buf[64]; -+ -+ dev = alloc_etherdev(sizeof(struct ar231x_private)); -+ -+ if (dev == NULL) { -+ printk(KERN_ERR -+ "ar231x: Unable to allocate net_device structure!\n"); -+ return -ENOMEM; -+ } -+ -+ platform_set_drvdata(pdev, dev); -+ -+ SET_NETDEV_DEV(dev, &pdev->dev); -+ -+ sp = netdev_priv(dev); -+ sp->dev = dev; -+ sp->pdev = pdev; -+ sp->cfg = pdev->dev.platform_data; -+ -+ sprintf(buf, "eth%d_membase", pdev->id); -+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, buf); -+ if (!res) -+ return -ENODEV; -+ -+ sp->link = 0; -+ ar_eth_base = res->start; -+ -+ sprintf(buf, "eth%d_irq", pdev->id); -+ dev->irq = platform_get_irq_byname(pdev, buf); -+ -+ spin_lock_init(&sp->lock); -+ -+ dev->features |= NETIF_F_HIGHDMA; -+ dev->netdev_ops = &ar231x_ops; -+ -+ tasklet_init(&sp->rx_tasklet, rx_tasklet_func, (unsigned long)dev); -+ tasklet_disable(&sp->rx_tasklet); -+ -+ sp->eth_regs = ioremap(ar_eth_base, sizeof(*sp->eth_regs)); -+ if (!sp->eth_regs) { -+ printk("Can't remap eth registers\n"); -+ return -ENXIO; -+ } -+ -+ /** -+ * When there's only one MAC, PHY regs are typically on ENET0, -+ * even though the MAC might be on ENET1. -+ * So remap PHY regs separately. -+ */ -+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "eth0_mii"); -+ if (!res) { -+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, -+ "eth1_mii"); -+ if (!res) -+ return -ENODEV; -+ } -+ sp->phy_regs = ioremap(res->start, resource_size(res)); -+ if (!sp->phy_regs) { -+ printk("Can't remap phy registers\n"); -+ return -ENXIO; -+ } -+ -+ sp->dma_regs = ioremap(ar_eth_base + 0x1000, -+ sizeof(*sp->dma_regs)); -+ if (!sp->dma_regs) { -+ printk("Can't remap DMA registers\n"); -+ return -ENXIO; -+ } -+ dev->base_addr = ar_eth_base + 0x1000; -+ -+ strncpy(sp->name, "Atheros AR231x", sizeof(sp->name) - 1); -+ sp->name[sizeof(sp->name) - 1] = '\0'; -+ memcpy(dev->dev_addr, sp->cfg->macaddr, 6); -+ -+ if (ar231x_init(dev)) { -+ /* ar231x_init() calls ar231x_init_cleanup() on error */ -+ kfree(dev); -+ return -ENODEV; -+ } -+ -+ if (register_netdev(dev)) { -+ printk("%s: register_netdev failed\n", __func__); -+ return -1; -+ } -+ -+ printk("%s: %s: %pM, irq %d\n", dev->name, sp->name, dev->dev_addr, -+ dev->irq); -+ -+ sp->mii_bus = mdiobus_alloc(); -+ if (sp->mii_bus == NULL) -+ return -1; -+ -+ sp->mii_bus->priv = dev; -+ sp->mii_bus->read = ar231x_mdiobus_read; -+ sp->mii_bus->write = ar231x_mdiobus_write; -+ sp->mii_bus->reset = ar231x_mdiobus_reset; -+ sp->mii_bus->name = "ar231x_eth_mii"; -+ snprintf(sp->mii_bus->id, MII_BUS_ID_SIZE, "%d", pdev->id); -+ -+ mdiobus_register(sp->mii_bus); -+ -+ if (ar231x_mdiobus_probe(dev) != 0) { -+ printk(KERN_ERR "%s: mdiobus_probe failed\n", dev->name); -+ rx_tasklet_cleanup(dev); -+ ar231x_init_cleanup(dev); -+ unregister_netdev(dev); -+ kfree(dev); -+ return -ENODEV; -+ } -+ -+ return 0; -+} -+ -+static void ar231x_multicast_list(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ unsigned int filter; -+ -+ filter = sp->eth_regs->mac_control; -+ -+ if (dev->flags & IFF_PROMISC) -+ filter |= MAC_CONTROL_PR; -+ else -+ filter &= ~MAC_CONTROL_PR; -+ if ((dev->flags & IFF_ALLMULTI) || (netdev_mc_count(dev) > 0)) -+ filter |= MAC_CONTROL_PM; -+ else -+ filter &= ~MAC_CONTROL_PM; -+ -+ sp->eth_regs->mac_control = filter; -+} -+ -+static void rx_tasklet_cleanup(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ -+ /** -+ * Tasklet may be scheduled. Need to get it removed from the list -+ * since we're about to free the struct. -+ */ -+ -+ sp->unloading = 1; -+ tasklet_enable(&sp->rx_tasklet); -+ tasklet_kill(&sp->rx_tasklet); -+} -+ -+static int ar231x_remove(struct platform_device *pdev) -+{ -+ struct net_device *dev = platform_get_drvdata(pdev); -+ struct ar231x_private *sp = netdev_priv(dev); -+ -+ rx_tasklet_cleanup(dev); -+ ar231x_init_cleanup(dev); -+ unregister_netdev(dev); -+ mdiobus_unregister(sp->mii_bus); -+ mdiobus_free(sp->mii_bus); -+ kfree(dev); -+ return 0; -+} -+ -+/** -+ * Restart the AR2313 ethernet controller. -+ */ -+static int ar231x_restart(struct net_device *dev) -+{ -+ /* disable interrupts */ -+ disable_irq(dev->irq); -+ -+ /* stop mac */ -+ ar231x_halt(dev); -+ -+ /* initialize */ -+ ar231x_init(dev); -+ -+ /* enable interrupts */ -+ enable_irq(dev->irq); -+ -+ return 0; -+} -+ -+static struct platform_driver ar231x_driver = { -+ .driver.name = "ar231x-eth", -+ .probe = ar231x_probe, -+ .remove = ar231x_remove, -+}; -+ -+module_platform_driver(ar231x_driver); -+ -+static void ar231x_free_descriptors(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ -+ if (sp->rx_ring != NULL) { -+ kfree((void *)KSEG0ADDR(sp->rx_ring)); -+ sp->rx_ring = NULL; -+ sp->tx_ring = NULL; -+ } -+} -+ -+static int ar231x_allocate_descriptors(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ int size; -+ int j; -+ ar231x_descr_t *space; -+ -+ if (sp->rx_ring != NULL) { -+ printk("%s: already done.\n", __func__); -+ return 0; -+ } -+ -+ size = sizeof(ar231x_descr_t) * (AR2313_DESCR_ENTRIES * AR2313_QUEUES); -+ space = kmalloc(size, GFP_KERNEL); -+ if (space == NULL) -+ return 1; -+ -+ /* invalidate caches */ -+ dma_cache_inv((unsigned int)space, size); -+ -+ /* now convert pointer to KSEG1 */ -+ space = (ar231x_descr_t *)KSEG1ADDR(space); -+ -+ memset((void *)space, 0, size); -+ -+ sp->rx_ring = space; -+ space += AR2313_DESCR_ENTRIES; -+ -+ sp->tx_ring = space; -+ space += AR2313_DESCR_ENTRIES; -+ -+ /* Initialize the transmit Descriptors */ -+ for (j = 0; j < AR2313_DESCR_ENTRIES; j++) { -+ ar231x_descr_t *td = &sp->tx_ring[j]; -+ -+ td->status = 0; -+ td->devcs = DMA_TX1_CHAINED; -+ td->addr = 0; -+ td->descr = virt_to_phys(&sp->tx_ring[DSC_NEXT(j)]); -+ } -+ -+ return 0; -+} -+ -+/** -+ * Generic cleanup handling data allocated during init. Used when the -+ * module is unloaded or if an error occurs during initialization -+ */ -+static void ar231x_init_cleanup(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ struct sk_buff *skb; -+ int j; -+ -+ ar231x_free_descriptors(dev); -+ -+ if (sp->eth_regs) -+ iounmap((void *)sp->eth_regs); -+ if (sp->dma_regs) -+ iounmap((void *)sp->dma_regs); -+ if (sp->phy_regs) -+ iounmap((void *)sp->phy_regs); -+ -+ if (sp->rx_skb) { -+ for (j = 0; j < AR2313_DESCR_ENTRIES; j++) { -+ skb = sp->rx_skb[j]; -+ if (skb) { -+ sp->rx_skb[j] = NULL; -+ dev_kfree_skb(skb); -+ } -+ } -+ kfree(sp->rx_skb); -+ sp->rx_skb = NULL; -+ } -+ -+ if (sp->tx_skb) { -+ for (j = 0; j < AR2313_DESCR_ENTRIES; j++) { -+ skb = sp->tx_skb[j]; -+ if (skb) { -+ sp->tx_skb[j] = NULL; -+ dev_kfree_skb(skb); -+ } -+ } -+ kfree(sp->tx_skb); -+ sp->tx_skb = NULL; -+ } -+} -+ -+static int ar231x_reset_reg(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ unsigned int ethsal, ethsah; -+ unsigned int flags; -+ -+ sp->cfg->reset_set(sp->cfg->reset_mac); -+ mdelay(10); -+ sp->cfg->reset_clear(sp->cfg->reset_mac); -+ mdelay(10); -+ sp->cfg->reset_set(sp->cfg->reset_phy); -+ mdelay(10); -+ sp->cfg->reset_clear(sp->cfg->reset_phy); -+ mdelay(10); -+ -+ sp->dma_regs->bus_mode = (DMA_BUS_MODE_SWR); -+ mdelay(10); -+ sp->dma_regs->bus_mode = -+ ((32 << DMA_BUS_MODE_PBL_SHIFT) | DMA_BUS_MODE_BLE); -+ -+ /* enable interrupts */ -+ sp->dma_regs->intr_ena = DMA_STATUS_AIS | DMA_STATUS_NIS | -+ DMA_STATUS_RI | DMA_STATUS_TI | -+ DMA_STATUS_FBE; -+ sp->dma_regs->xmt_base = virt_to_phys(sp->tx_ring); -+ sp->dma_regs->rcv_base = virt_to_phys(sp->rx_ring); -+ sp->dma_regs->control = -+ (DMA_CONTROL_SR | DMA_CONTROL_ST | DMA_CONTROL_SF); -+ -+ sp->eth_regs->flow_control = (FLOW_CONTROL_FCE); -+ sp->eth_regs->vlan_tag = (0x8100); -+ -+ /* Enable Ethernet Interface */ -+ flags = (MAC_CONTROL_TE | /* transmit enable */ -+ MAC_CONTROL_PM | /* pass mcast */ -+ MAC_CONTROL_F | /* full duplex */ -+ MAC_CONTROL_HBD); /* heart beat disabled */ -+ -+ if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ -+ flags |= MAC_CONTROL_PR; -+ } -+ sp->eth_regs->mac_control = flags; -+ -+ /* Set all Ethernet station address registers to their initial values */ -+ ethsah = (((u_int) (dev->dev_addr[5]) << 8) & (u_int) 0x0000FF00) | -+ (((u_int) (dev->dev_addr[4]) << 0) & (u_int) 0x000000FF); -+ -+ ethsal = (((u_int) (dev->dev_addr[3]) << 24) & (u_int) 0xFF000000) | -+ (((u_int) (dev->dev_addr[2]) << 16) & (u_int) 0x00FF0000) | -+ (((u_int) (dev->dev_addr[1]) << 8) & (u_int) 0x0000FF00) | -+ (((u_int) (dev->dev_addr[0]) << 0) & (u_int) 0x000000FF); -+ -+ sp->eth_regs->mac_addr[0] = ethsah; -+ sp->eth_regs->mac_addr[1] = ethsal; -+ -+ mdelay(10); -+ -+ return 0; -+} -+ -+static int ar231x_init(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ int ecode = 0; -+ -+ /* Allocate descriptors */ -+ if (ar231x_allocate_descriptors(dev)) { -+ printk("%s: %s: ar231x_allocate_descriptors failed\n", -+ dev->name, __func__); -+ ecode = -EAGAIN; -+ goto init_error; -+ } -+ -+ /* Get the memory for the skb rings */ -+ if (sp->rx_skb == NULL) { -+ sp->rx_skb = -+ kmalloc(sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES, -+ GFP_KERNEL); -+ if (!(sp->rx_skb)) { -+ printk("%s: %s: rx_skb kmalloc failed\n", -+ dev->name, __func__); -+ ecode = -EAGAIN; -+ goto init_error; -+ } -+ } -+ memset(sp->rx_skb, 0, sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES); -+ -+ if (sp->tx_skb == NULL) { -+ sp->tx_skb = -+ kmalloc(sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES, -+ GFP_KERNEL); -+ if (!(sp->tx_skb)) { -+ printk("%s: %s: tx_skb kmalloc failed\n", -+ dev->name, __func__); -+ ecode = -EAGAIN; -+ goto init_error; -+ } -+ } -+ memset(sp->tx_skb, 0, sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES); -+ -+ /** -+ * Set tx_csm before we start receiving interrupts, otherwise -+ * the interrupt handler might think it is supposed to process -+ * tx ints before we are up and running, which may cause a null -+ * pointer access in the int handler. -+ */ -+ sp->rx_skbprd = 0; -+ sp->cur_rx = 0; -+ sp->tx_prd = 0; -+ sp->tx_csm = 0; -+ -+ /* Zero the stats before starting the interface */ -+ memset(&dev->stats, 0, sizeof(dev->stats)); -+ -+ /** -+ * We load the ring here as there seem to be no way to tell the -+ * firmware to wipe the ring without re-initializing it. -+ */ -+ ar231x_load_rx_ring(dev, RX_RING_SIZE); -+ -+ /* Init hardware */ -+ ar231x_reset_reg(dev); -+ -+ /* Get the IRQ */ -+ ecode = request_irq(dev->irq, &ar231x_interrupt, 0, -+ dev->name, dev); -+ if (ecode) { -+ printk(KERN_WARNING "%s: %s: Requested IRQ %d is busy\n", -+ dev->name, __func__, dev->irq); -+ goto init_error; -+ } -+ -+ tasklet_enable(&sp->rx_tasklet); -+ -+ return 0; -+ -+init_error: -+ ar231x_init_cleanup(dev); -+ return ecode; -+} -+ -+/** -+ * Load the rx ring. -+ * -+ * Loading rings is safe without holding the spin lock since this is -+ * done only before the device is enabled, thus no interrupts are -+ * generated and by the interrupt handler/tasklet handler. -+ */ -+static void ar231x_load_rx_ring(struct net_device *dev, int nr_bufs) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ short i, idx; -+ -+ idx = sp->rx_skbprd; -+ -+ for (i = 0; i < nr_bufs; i++) { -+ struct sk_buff *skb; -+ ar231x_descr_t *rd; -+ -+ if (sp->rx_skb[idx]) -+ break; -+ -+ skb = netdev_alloc_skb_ip_align(dev, AR2313_BUFSIZE); -+ if (!skb) { -+ printk("\n\n\n\n %s: No memory in system\n\n\n\n", -+ __func__); -+ break; -+ } -+ -+ /* Make sure IP header starts on a fresh cache line */ -+ skb->dev = dev; -+ sp->rx_skb[idx] = skb; -+ -+ rd = (ar231x_descr_t *)&sp->rx_ring[idx]; -+ -+ /* initialize dma descriptor */ -+ rd->devcs = ((AR2313_BUFSIZE << DMA_RX1_BSIZE_SHIFT) | -+ DMA_RX1_CHAINED); -+ rd->addr = virt_to_phys(skb->data); -+ rd->descr = virt_to_phys(&sp->rx_ring[DSC_NEXT(idx)]); -+ rd->status = DMA_RX_OWN; -+ -+ idx = DSC_NEXT(idx); -+ } -+ -+ if (i) -+ sp->rx_skbprd = idx; -+} -+ -+#define AR2313_MAX_PKTS_PER_CALL 64 -+ -+static int ar231x_rx_int(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ struct sk_buff *skb, *skb_new; -+ ar231x_descr_t *rxdesc; -+ unsigned int status; -+ u32 idx; -+ int pkts = 0; -+ int rval; -+ -+ idx = sp->cur_rx; -+ -+ /* process at most the entire ring and then wait for another int */ -+ while (1) { -+ rxdesc = &sp->rx_ring[idx]; -+ status = rxdesc->status; -+ -+ if (status & DMA_RX_OWN) { -+ /* SiByte owns descriptor or descr not yet filled in */ -+ rval = 0; -+ break; -+ } -+ -+ if (++pkts > AR2313_MAX_PKTS_PER_CALL) { -+ rval = 1; -+ break; -+ } -+ -+ if ((status & DMA_RX_ERROR) && !(status & DMA_RX_LONG)) { -+ dev->stats.rx_errors++; -+ dev->stats.rx_dropped++; -+ -+ /* add statistics counters */ -+ if (status & DMA_RX_ERR_CRC) -+ dev->stats.rx_crc_errors++; -+ if (status & DMA_RX_ERR_COL) -+ dev->stats.rx_over_errors++; -+ if (status & DMA_RX_ERR_LENGTH) -+ dev->stats.rx_length_errors++; -+ if (status & DMA_RX_ERR_RUNT) -+ dev->stats.rx_over_errors++; -+ if (status & DMA_RX_ERR_DESC) -+ dev->stats.rx_over_errors++; -+ -+ } else { -+ /* alloc new buffer. */ -+ skb_new = netdev_alloc_skb_ip_align(dev, -+ AR2313_BUFSIZE); -+ if (skb_new != NULL) { -+ skb = sp->rx_skb[idx]; -+ /* set skb */ -+ skb_put(skb, ((status >> DMA_RX_LEN_SHIFT) & -+ 0x3fff) - CRC_LEN); -+ -+ dev->stats.rx_bytes += skb->len; -+ skb->protocol = eth_type_trans(skb, dev); -+ /* pass the packet to upper layers */ -+ netif_rx(skb); -+ -+ skb_new->dev = dev; -+ /* reset descriptor's curr_addr */ -+ rxdesc->addr = virt_to_phys(skb_new->data); -+ -+ dev->stats.rx_packets++; -+ sp->rx_skb[idx] = skb_new; -+ } else { -+ dev->stats.rx_dropped++; -+ } -+ } -+ -+ rxdesc->devcs = ((AR2313_BUFSIZE << DMA_RX1_BSIZE_SHIFT) | -+ DMA_RX1_CHAINED); -+ rxdesc->status = DMA_RX_OWN; -+ -+ idx = DSC_NEXT(idx); -+ } -+ -+ sp->cur_rx = idx; -+ -+ return rval; -+} -+ -+static void ar231x_tx_int(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ u32 idx; -+ struct sk_buff *skb; -+ ar231x_descr_t *txdesc; -+ unsigned int status = 0; -+ -+ idx = sp->tx_csm; -+ -+ while (idx != sp->tx_prd) { -+ txdesc = &sp->tx_ring[idx]; -+ status = txdesc->status; -+ -+ if (status & DMA_TX_OWN) { -+ /* ar231x dma still owns descr */ -+ break; -+ } -+ /* done with this descriptor */ -+ dma_unmap_single(&sp->pdev->dev, txdesc->addr, -+ txdesc->devcs & DMA_TX1_BSIZE_MASK, -+ DMA_TO_DEVICE); -+ txdesc->status = 0; -+ -+ if (status & DMA_TX_ERROR) { -+ dev->stats.tx_errors++; -+ dev->stats.tx_dropped++; -+ if (status & DMA_TX_ERR_UNDER) -+ dev->stats.tx_fifo_errors++; -+ if (status & DMA_TX_ERR_HB) -+ dev->stats.tx_heartbeat_errors++; -+ if (status & (DMA_TX_ERR_LOSS | DMA_TX_ERR_LINK)) -+ dev->stats.tx_carrier_errors++; -+ if (status & (DMA_TX_ERR_LATE | DMA_TX_ERR_COL | -+ DMA_TX_ERR_JABBER | DMA_TX_ERR_DEFER)) -+ dev->stats.tx_aborted_errors++; -+ } else { -+ /* transmit OK */ -+ dev->stats.tx_packets++; -+ } -+ -+ skb = sp->tx_skb[idx]; -+ sp->tx_skb[idx] = NULL; -+ idx = DSC_NEXT(idx); -+ dev->stats.tx_bytes += skb->len; -+ dev_kfree_skb_irq(skb); -+ } -+ -+ sp->tx_csm = idx; -+} -+ -+static void rx_tasklet_func(unsigned long data) -+{ -+ struct net_device *dev = (struct net_device *)data; -+ struct ar231x_private *sp = netdev_priv(dev); -+ -+ if (sp->unloading) -+ return; -+ -+ if (ar231x_rx_int(dev)) { -+ tasklet_hi_schedule(&sp->rx_tasklet); -+ } else { -+ unsigned long flags; -+ -+ spin_lock_irqsave(&sp->lock, flags); -+ sp->dma_regs->intr_ena |= DMA_STATUS_RI; -+ spin_unlock_irqrestore(&sp->lock, flags); -+ } -+} -+ -+static void rx_schedule(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ -+ sp->dma_regs->intr_ena &= ~DMA_STATUS_RI; -+ -+ tasklet_hi_schedule(&sp->rx_tasklet); -+} -+ -+static irqreturn_t ar231x_interrupt(int irq, void *dev_id) -+{ -+ struct net_device *dev = (struct net_device *)dev_id; -+ struct ar231x_private *sp = netdev_priv(dev); -+ unsigned int status, enabled; -+ -+ /* clear interrupt */ -+ /* Don't clear RI bit if currently disabled */ -+ status = sp->dma_regs->status; -+ enabled = sp->dma_regs->intr_ena; -+ sp->dma_regs->status = status & enabled; -+ -+ if (status & DMA_STATUS_NIS) { -+ /* normal status */ -+ /** -+ * Don't schedule rx processing if interrupt -+ * is already disabled. -+ */ -+ if (status & enabled & DMA_STATUS_RI) { -+ /* receive interrupt */ -+ rx_schedule(dev); -+ } -+ if (status & DMA_STATUS_TI) { -+ /* transmit interrupt */ -+ ar231x_tx_int(dev); -+ } -+ } -+ -+ /* abnormal status */ -+ if (status & (DMA_STATUS_FBE | DMA_STATUS_TPS)) -+ ar231x_restart(dev); -+ -+ return IRQ_HANDLED; -+} -+ -+static int ar231x_open(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ unsigned int ethsal, ethsah; -+ -+ /* reset the hardware, in case the MAC address changed */ -+ ethsah = (((u_int) (dev->dev_addr[5]) << 8) & (u_int) 0x0000FF00) | -+ (((u_int) (dev->dev_addr[4]) << 0) & (u_int) 0x000000FF); -+ -+ ethsal = (((u_int) (dev->dev_addr[3]) << 24) & (u_int) 0xFF000000) | -+ (((u_int) (dev->dev_addr[2]) << 16) & (u_int) 0x00FF0000) | -+ (((u_int) (dev->dev_addr[1]) << 8) & (u_int) 0x0000FF00) | -+ (((u_int) (dev->dev_addr[0]) << 0) & (u_int) 0x000000FF); -+ -+ sp->eth_regs->mac_addr[0] = ethsah; -+ sp->eth_regs->mac_addr[1] = ethsal; -+ -+ mdelay(10); -+ -+ dev->mtu = 1500; -+ netif_start_queue(dev); -+ -+ sp->eth_regs->mac_control |= MAC_CONTROL_RE; -+ -+ phy_start(sp->phy_dev); -+ -+ return 0; -+} -+ -+static void ar231x_tx_timeout(struct net_device *dev, unsigned int txqueue) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ unsigned long flags; -+ -+ spin_lock_irqsave(&sp->lock, flags); -+ ar231x_restart(dev); -+ spin_unlock_irqrestore(&sp->lock, flags); -+} -+ -+static void ar231x_halt(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ int j; -+ -+ tasklet_disable(&sp->rx_tasklet); -+ -+ /* kill the MAC */ -+ sp->eth_regs->mac_control &= ~(MAC_CONTROL_RE | /* disable Receives */ -+ MAC_CONTROL_TE); /* disable Transmits */ -+ /* stop dma */ -+ sp->dma_regs->control = 0; -+ sp->dma_regs->bus_mode = DMA_BUS_MODE_SWR; -+ -+ /* place phy and MAC in reset */ -+ sp->cfg->reset_set(sp->cfg->reset_mac); -+ sp->cfg->reset_set(sp->cfg->reset_phy); -+ -+ /* free buffers on tx ring */ -+ for (j = 0; j < AR2313_DESCR_ENTRIES; j++) { -+ struct sk_buff *skb; -+ ar231x_descr_t *txdesc; -+ -+ txdesc = &sp->tx_ring[j]; -+ txdesc->descr = 0; -+ -+ skb = sp->tx_skb[j]; -+ if (skb) { -+ dev_kfree_skb(skb); -+ sp->tx_skb[j] = NULL; -+ } -+ } -+} -+ -+/** -+ * close should do nothing. Here's why. It's called when -+ * 'ifconfig bond0 down' is run. If it calls free_irq then -+ * the irq is gone forever ! When bond0 is made 'up' again, -+ * the ar231x_open () does not call request_irq (). Worse, -+ * the call to ar231x_halt() generates a WDOG reset due to -+ * the write to reset register and the box reboots. -+ * Commenting this out is good since it allows the -+ * system to resume when bond0 is made up again. -+ */ -+static int ar231x_close(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+#if 0 -+ /* Disable interrupts */ -+ disable_irq(dev->irq); -+ -+ /** -+ * Without (or before) releasing irq and stopping hardware, this -+ * is an absolute non-sense, by the way. It will be reset instantly -+ * by the first irq. -+ */ -+ netif_stop_queue(dev); -+ -+ /* stop the MAC and DMA engines */ -+ ar231x_halt(dev); -+ -+ /* release the interrupt */ -+ free_irq(dev->irq, dev); -+ -+#endif -+ -+ phy_stop(sp->phy_dev); -+ -+ return 0; -+} -+ -+static int ar231x_start_xmit(struct sk_buff *skb, struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ ar231x_descr_t *td; -+ u32 idx; -+ -+ idx = sp->tx_prd; -+ td = &sp->tx_ring[idx]; -+ -+ if (td->status & DMA_TX_OWN) { -+ /* free skbuf and lie to the caller that we sent it out */ -+ dev->stats.tx_dropped++; -+ dev_kfree_skb(skb); -+ -+ /* restart transmitter in case locked */ -+ sp->dma_regs->xmt_poll = 0; -+ return 0; -+ } -+ -+ /* Setup the transmit descriptor. */ -+ td->devcs = ((skb->len << DMA_TX1_BSIZE_SHIFT) | -+ (DMA_TX1_LS | DMA_TX1_IC | DMA_TX1_CHAINED)); -+ td->addr = dma_map_single(&sp->pdev->dev, skb->data, skb->len, DMA_TO_DEVICE); -+ td->status = DMA_TX_OWN; -+ -+ /* kick transmitter last */ -+ sp->dma_regs->xmt_poll = 0; -+ -+ sp->tx_skb[idx] = skb; -+ idx = DSC_NEXT(idx); -+ sp->tx_prd = idx; -+ -+ return 0; -+} -+ -+static int ar231x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ -+ switch (cmd) { -+ case SIOCGMIIPHY: -+ case SIOCGMIIREG: -+ case SIOCSMIIREG: -+ return phy_mii_ioctl(sp->phy_dev, ifr, cmd); -+ -+ default: -+ break; -+ } -+ -+ return -EOPNOTSUPP; -+} -+ -+static void ar231x_adjust_link(struct net_device *dev) -+{ -+ struct ar231x_private *sp = netdev_priv(dev); -+ struct phy_device *phydev = sp->phy_dev; -+ u32 mc; -+ -+ if (!phydev->link) { -+ if (sp->link) { -+ pr_info("%s: link down\n", dev->name); -+ sp->link = 0; -+ } -+ return; -+ } -+ sp->link = 1; -+ -+ pr_info("%s: link up (%uMbps/%s duplex)\n", dev->name, -+ phydev->speed, phydev->duplex ? "full" : "half"); -+ -+ mc = sp->eth_regs->mac_control; -+ if (phydev->duplex) -+ mc = (mc | MAC_CONTROL_F) & ~MAC_CONTROL_DRO; -+ else -+ mc = (mc | MAC_CONTROL_DRO) & ~MAC_CONTROL_F; -+ sp->eth_regs->mac_control = mc; -+ sp->duplex = phydev->duplex; -+} -+ -+#define MII_ADDR(phy, reg) \ -+ ((reg << MII_ADDR_REG_SHIFT) | (phy << MII_ADDR_PHY_SHIFT)) -+ -+static int -+ar231x_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum) -+{ -+ struct net_device *const dev = bus->priv; -+ struct ar231x_private *sp = netdev_priv(dev); -+ volatile MII *ethernet = sp->phy_regs; -+ -+ ethernet->mii_addr = MII_ADDR(phy_addr, regnum); -+ while (ethernet->mii_addr & MII_ADDR_BUSY) -+ ; -+ return ethernet->mii_data >> MII_DATA_SHIFT; -+} -+ -+static int -+ar231x_mdiobus_write(struct mii_bus *bus, int phy_addr, int regnum, u16 value) -+{ -+ struct net_device *const dev = bus->priv; -+ struct ar231x_private *sp = netdev_priv(dev); -+ volatile MII *ethernet = sp->phy_regs; -+ -+ while (ethernet->mii_addr & MII_ADDR_BUSY) -+ ; -+ ethernet->mii_data = value << MII_DATA_SHIFT; -+ ethernet->mii_addr = MII_ADDR(phy_addr, regnum) | MII_ADDR_WRITE; -+ -+ return 0; -+} -+ -+static int ar231x_mdiobus_reset(struct mii_bus *bus) -+{ -+ struct net_device *const dev = bus->priv; -+ -+ ar231x_reset_reg(dev); -+ -+ return 0; -+} -+ -+static int ar231x_mdiobus_probe(struct net_device *dev) -+{ -+ __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; -+ struct ar231x_private *const sp = netdev_priv(dev); -+ struct phy_device *phydev = NULL; -+ -+ /* find the first (lowest address) PHY on the current MAC's MII bus */ -+ phydev = phy_find_first(sp->mii_bus); -+ if (!phydev) { -+ printk(KERN_ERR "ar231x: %s: no PHY found\n", dev->name); -+ return -1; -+ } -+ -+ /* now we are supposed to have a proper phydev, to attach to... */ -+ BUG_ON(phydev->attached_dev); -+ -+ phydev = phy_connect(dev, phydev_name(phydev), &ar231x_adjust_link, -+ PHY_INTERFACE_MODE_MII); -+ if (IS_ERR(phydev)) { -+ printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name); -+ return PTR_ERR(phydev); -+ } -+ -+ /* mask with MAC supported features */ -+ linkmode_set_bit_array(phy_10_100_features_array, -+ ARRAY_SIZE(phy_10_100_features_array), -+ mask); -+ linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, mask); -+ linkmode_set_bit(ETHTOOL_LINK_MODE_MII_BIT, mask); -+ linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, mask); -+ -+ linkmode_and(phydev->supported, phydev->supported, mask); -+ linkmode_copy(phydev->advertising, phydev->supported); -+ -+ sp->phy_dev = phydev; -+ -+ printk(KERN_INFO "%s: attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", -+ dev->name, phydev->drv->name, phydev_name(phydev)); -+ -+ return 0; -+} -+ ---- /dev/null -+++ b/drivers/net/ethernet/atheros/ar231x/ar231x.h -@@ -0,0 +1,282 @@ -+/* -+ * ar231x.h: Linux driver for the Atheros AR231x Ethernet device. -+ * -+ * Copyright (C) 2004 by Sameer Dekate -+ * Copyright (C) 2006 Imre Kaloz -+ * Copyright (C) 2006-2009 Felix Fietkau -+ * -+ * Thanks to Atheros for providing hardware and documentation -+ * enabling me to write this driver. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef _AR2313_H_ -+#define _AR2313_H_ -+ -+#include -+#include -+#include -+#include -+ -+/* probe link timer - 5 secs */ -+#define LINK_TIMER (5*HZ) -+ -+#define IS_DMA_TX_INT(X) (((X) & (DMA_STATUS_TI)) != 0) -+#define IS_DMA_RX_INT(X) (((X) & (DMA_STATUS_RI)) != 0) -+#define IS_DRIVER_OWNED(X) (((X) & (DMA_TX_OWN)) == 0) -+ -+#define AR2313_TX_TIMEOUT (HZ/4) -+ -+/* Rings */ -+#define DSC_RING_ENTRIES_SIZE (AR2313_DESCR_ENTRIES * sizeof(struct desc)) -+#define DSC_NEXT(idx) ((idx + 1) & (AR2313_DESCR_ENTRIES - 1)) -+ -+#define AR2313_MBGET 2 -+#define AR2313_MBSET 3 -+#define AR2313_PCI_RECONFIG 4 -+#define AR2313_PCI_DUMP 5 -+#define AR2313_TEST_PANIC 6 -+#define AR2313_TEST_NULLPTR 7 -+#define AR2313_READ_DATA 8 -+#define AR2313_WRITE_DATA 9 -+#define AR2313_GET_VERSION 10 -+#define AR2313_TEST_HANG 11 -+#define AR2313_SYNC 12 -+ -+#define DMA_RX_ERR_CRC BIT(1) -+#define DMA_RX_ERR_DRIB BIT(2) -+#define DMA_RX_ERR_MII BIT(3) -+#define DMA_RX_EV2 BIT(5) -+#define DMA_RX_ERR_COL BIT(6) -+#define DMA_RX_LONG BIT(7) -+#define DMA_RX_LS BIT(8) /* last descriptor */ -+#define DMA_RX_FS BIT(9) /* first descriptor */ -+#define DMA_RX_MF BIT(10) /* multicast frame */ -+#define DMA_RX_ERR_RUNT BIT(11) /* runt frame */ -+#define DMA_RX_ERR_LENGTH BIT(12) /* length error */ -+#define DMA_RX_ERR_DESC BIT(14) /* descriptor error */ -+#define DMA_RX_ERROR BIT(15) /* error summary */ -+#define DMA_RX_LEN_MASK 0x3fff0000 -+#define DMA_RX_LEN_SHIFT 16 -+#define DMA_RX_FILT BIT(30) -+#define DMA_RX_OWN BIT(31) /* desc owned by DMA controller */ -+ -+#define DMA_RX1_BSIZE_MASK 0x000007ff -+#define DMA_RX1_BSIZE_SHIFT 0 -+#define DMA_RX1_CHAINED BIT(24) -+#define DMA_RX1_RER BIT(25) -+ -+#define DMA_TX_ERR_UNDER BIT(1) /* underflow error */ -+#define DMA_TX_ERR_DEFER BIT(2) /* excessive deferral */ -+#define DMA_TX_COL_MASK 0x78 -+#define DMA_TX_COL_SHIFT 3 -+#define DMA_TX_ERR_HB BIT(7) /* hearbeat failure */ -+#define DMA_TX_ERR_COL BIT(8) /* excessive collisions */ -+#define DMA_TX_ERR_LATE BIT(9) /* late collision */ -+#define DMA_TX_ERR_LINK BIT(10) /* no carrier */ -+#define DMA_TX_ERR_LOSS BIT(11) /* loss of carrier */ -+#define DMA_TX_ERR_JABBER BIT(14) /* transmit jabber timeout */ -+#define DMA_TX_ERROR BIT(15) /* frame aborted */ -+#define DMA_TX_OWN BIT(31) /* descr owned by DMA controller */ -+ -+#define DMA_TX1_BSIZE_MASK 0x000007ff -+#define DMA_TX1_BSIZE_SHIFT 0 -+#define DMA_TX1_CHAINED BIT(24) /* chained descriptors */ -+#define DMA_TX1_TER BIT(25) /* transmit end of ring */ -+#define DMA_TX1_FS BIT(29) /* first segment */ -+#define DMA_TX1_LS BIT(30) /* last segment */ -+#define DMA_TX1_IC BIT(31) /* interrupt on completion */ -+ -+#define RCVPKT_LENGTH(X) (X >> 16) /* Received pkt Length */ -+ -+#define MAC_CONTROL_RE BIT(2) /* receive enable */ -+#define MAC_CONTROL_TE BIT(3) /* transmit enable */ -+#define MAC_CONTROL_DC BIT(5) /* Deferral check */ -+#define MAC_CONTROL_ASTP BIT(8) /* Auto pad strip */ -+#define MAC_CONTROL_DRTY BIT(10) /* Disable retry */ -+#define MAC_CONTROL_DBF BIT(11) /* Disable bcast frames */ -+#define MAC_CONTROL_LCC BIT(12) /* late collision ctrl */ -+#define MAC_CONTROL_HP BIT(13) /* Hash Perfect filtering */ -+#define MAC_CONTROL_HASH BIT(14) /* Unicast hash filtering */ -+#define MAC_CONTROL_HO BIT(15) /* Hash only filtering */ -+#define MAC_CONTROL_PB BIT(16) /* Pass Bad frames */ -+#define MAC_CONTROL_IF BIT(17) /* Inverse filtering */ -+#define MAC_CONTROL_PR BIT(18) /* promis mode (valid frames only) */ -+#define MAC_CONTROL_PM BIT(19) /* pass multicast */ -+#define MAC_CONTROL_F BIT(20) /* full-duplex */ -+#define MAC_CONTROL_DRO BIT(23) /* Disable Receive Own */ -+#define MAC_CONTROL_HBD BIT(28) /* heart-beat disabled (MUST BE SET) */ -+#define MAC_CONTROL_BLE BIT(30) /* big endian mode */ -+#define MAC_CONTROL_RA BIT(31) /* rcv all (valid and invalid frames) */ -+ -+#define MII_ADDR_BUSY BIT(0) -+#define MII_ADDR_WRITE BIT(1) -+#define MII_ADDR_REG_SHIFT 6 -+#define MII_ADDR_PHY_SHIFT 11 -+#define MII_DATA_SHIFT 0 -+ -+#define FLOW_CONTROL_FCE BIT(1) -+ -+#define DMA_BUS_MODE_SWR BIT(0) /* software reset */ -+#define DMA_BUS_MODE_BLE BIT(7) /* big endian mode */ -+#define DMA_BUS_MODE_PBL_SHIFT 8 /* programmable burst length 32 */ -+#define DMA_BUS_MODE_DBO BIT(20) /* big-endian descriptors */ -+ -+#define DMA_STATUS_TI BIT(0) /* transmit interrupt */ -+#define DMA_STATUS_TPS BIT(1) /* transmit process stopped */ -+#define DMA_STATUS_TU BIT(2) /* transmit buffer unavailable */ -+#define DMA_STATUS_TJT BIT(3) /* transmit buffer timeout */ -+#define DMA_STATUS_UNF BIT(5) /* transmit underflow */ -+#define DMA_STATUS_RI BIT(6) /* receive interrupt */ -+#define DMA_STATUS_RU BIT(7) /* receive buffer unavailable */ -+#define DMA_STATUS_RPS BIT(8) /* receive process stopped */ -+#define DMA_STATUS_ETI BIT(10) /* early transmit interrupt */ -+#define DMA_STATUS_FBE BIT(13) /* fatal bus interrupt */ -+#define DMA_STATUS_ERI BIT(14) /* early receive interrupt */ -+#define DMA_STATUS_AIS BIT(15) /* abnormal interrupt summary */ -+#define DMA_STATUS_NIS BIT(16) /* normal interrupt summary */ -+#define DMA_STATUS_RS_SHIFT 17 /* receive process state */ -+#define DMA_STATUS_TS_SHIFT 20 /* transmit process state */ -+#define DMA_STATUS_EB_SHIFT 23 /* error bits */ -+ -+#define DMA_CONTROL_SR BIT(1) /* start receive */ -+#define DMA_CONTROL_ST BIT(13) /* start transmit */ -+#define DMA_CONTROL_SF BIT(21) /* store and forward */ -+ -+typedef struct { -+ volatile unsigned int status; /* OWN, Device control and status. */ -+ volatile unsigned int devcs; /* pkt Control bits + Length */ -+ volatile unsigned int addr; /* Current Address. */ -+ volatile unsigned int descr; /* Next descriptor in chain. */ -+} ar231x_descr_t; -+ -+/** -+ * New Combo structure for Both Eth0 AND eth1 -+ * -+ * Don't directly access MII related regs since phy chip could be actually -+ * connected to another ethernet block. -+ */ -+typedef struct { -+ volatile unsigned int mac_control; /* 0x00 */ -+ volatile unsigned int mac_addr[2]; /* 0x04 - 0x08 */ -+ volatile unsigned int mcast_table[2]; /* 0x0c - 0x10 */ -+ volatile unsigned int __mii_addr; /* 0x14 */ -+ volatile unsigned int __mii_data; /* 0x18 */ -+ volatile unsigned int flow_control; /* 0x1c */ -+ volatile unsigned int vlan_tag; /* 0x20 */ -+ volatile unsigned int pad[7]; /* 0x24 - 0x3c */ -+ volatile unsigned int ucast_table[8]; /* 0x40-0x5c */ -+} ETHERNET_STRUCT; -+ -+typedef struct { -+ volatile unsigned int mii_addr; -+ volatile unsigned int mii_data; -+} MII; -+ -+/******************************************************************** -+ * Interrupt controller -+ ********************************************************************/ -+ -+typedef struct { -+ volatile unsigned int wdog_control; /* 0x08 */ -+ volatile unsigned int wdog_timer; /* 0x0c */ -+ volatile unsigned int misc_status; /* 0x10 */ -+ volatile unsigned int misc_mask; /* 0x14 */ -+ volatile unsigned int global_status; /* 0x18 */ -+ volatile unsigned int reserved; /* 0x1c */ -+ volatile unsigned int reset_control; /* 0x20 */ -+} INTERRUPT; -+ -+/******************************************************************** -+ * DMA controller -+ ********************************************************************/ -+typedef struct { -+ volatile unsigned int bus_mode; /* 0x00 (CSR0) */ -+ volatile unsigned int xmt_poll; /* 0x04 (CSR1) */ -+ volatile unsigned int rcv_poll; /* 0x08 (CSR2) */ -+ volatile unsigned int rcv_base; /* 0x0c (CSR3) */ -+ volatile unsigned int xmt_base; /* 0x10 (CSR4) */ -+ volatile unsigned int status; /* 0x14 (CSR5) */ -+ volatile unsigned int control; /* 0x18 (CSR6) */ -+ volatile unsigned int intr_ena; /* 0x1c (CSR7) */ -+ volatile unsigned int rcv_missed; /* 0x20 (CSR8) */ -+ volatile unsigned int reserved[11]; /* 0x24-0x4c (CSR9-19) */ -+ volatile unsigned int cur_tx_buf_addr; /* 0x50 (CSR20) */ -+ volatile unsigned int cur_rx_buf_addr; /* 0x50 (CSR21) */ -+} DMA; -+ -+/** -+ * Struct private for the Sibyte. -+ * -+ * Elements are grouped so variables used by the tx handling goes -+ * together, and will go into the same cache lines etc. in order to -+ * avoid cache line contention between the rx and tx handling on SMP. -+ * -+ * Frequently accessed variables are put at the beginning of the -+ * struct to help the compiler generate better/shorter code. -+ */ -+struct ar231x_private { -+ struct net_device *dev; -+ struct platform_device *pdev; -+ int version; -+ u32 mb[2]; -+ -+ volatile MII *phy_regs; -+ volatile ETHERNET_STRUCT *eth_regs; -+ volatile DMA *dma_regs; -+ struct ar231x_eth *cfg; -+ -+ spinlock_t lock; /* Serialise access to device */ -+ -+ /* RX and TX descriptors, must be adjacent */ -+ ar231x_descr_t *rx_ring; -+ ar231x_descr_t *tx_ring; -+ -+ struct sk_buff **rx_skb; -+ struct sk_buff **tx_skb; -+ -+ /* RX elements */ -+ u32 rx_skbprd; -+ u32 cur_rx; -+ -+ /* TX elements */ -+ u32 tx_prd; -+ u32 tx_csm; -+ -+ /* Misc elements */ -+ char name[48]; -+ struct { -+ u32 address; -+ u32 length; -+ char *mapping; -+ } desc; -+ -+ unsigned short link; /* 0 - link down, 1 - link up */ -+ unsigned short duplex; /* 0 - half, 1 - full */ -+ -+ struct tasklet_struct rx_tasklet; -+ int unloading; -+ -+ struct phy_device *phy_dev; -+ struct mii_bus *mii_bus; -+}; -+ -+/* Prototypes */ -+static int ar231x_init(struct net_device *dev); -+#ifdef TX_TIMEOUT -+static void ar231x_tx_timeout(struct net_device *dev); -+#endif -+static int ar231x_restart(struct net_device *dev); -+static void ar231x_load_rx_ring(struct net_device *dev, int bufs); -+static irqreturn_t ar231x_interrupt(int irq, void *dev_id); -+static int ar231x_open(struct net_device *dev); -+static int ar231x_start_xmit(struct sk_buff *skb, struct net_device *dev); -+static int ar231x_close(struct net_device *dev); -+static int ar231x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); -+static void ar231x_init_cleanup(struct net_device *dev); -+ -+#endif /* _AR2313_H_ */ ---- a/arch/mips/ath25/ar2315_regs.h -+++ b/arch/mips/ath25/ar2315_regs.h -@@ -57,6 +57,9 @@ - #define AR2315_PCI_EXT_BASE 0x80000000 /* PCI external */ - #define AR2315_PCI_EXT_SIZE 0x40000000 - -+/* MII registers offset inside Ethernet MMR region */ -+#define AR2315_ENET0_MII_BASE (AR2315_ENET0_BASE + 0x14) -+ - /* - * Configuration registers - */ ---- a/arch/mips/ath25/ar5312_regs.h -+++ b/arch/mips/ath25/ar5312_regs.h -@@ -64,6 +64,10 @@ - #define AR5312_AR5312_REV7 0x0057 /* AR5312 WMAC (AP30-040) */ - #define AR5312_AR2313_REV8 0x0058 /* AR2313 WMAC (AP43-030) */ - -+/* MII registers offset inside Ethernet MMR region */ -+#define AR5312_ENET0_MII_BASE (AR5312_ENET0_BASE + 0x14) -+#define AR5312_ENET1_MII_BASE (AR5312_ENET1_BASE + 0x14) -+ - /* Reset/Timer Block Address Map */ - #define AR5312_TIMER 0x0000 /* countdown timer */ - #define AR5312_RELOAD 0x0004 /* timer reload value */ ---- a/arch/mips/ath25/ar2315.c -+++ b/arch/mips/ath25/ar2315.c -@@ -132,6 +132,8 @@ static void ar2315_irq_dispatch(void) - - if (pending & CAUSEF_IP3) - do_IRQ(AR2315_IRQ_WLAN0); -+ else if (pending & CAUSEF_IP4) -+ do_IRQ(AR2315_IRQ_ENET0); - #ifdef CONFIG_PCI_AR2315 - else if (pending & CAUSEF_IP5) - do_IRQ(AR2315_IRQ_LCBUS_PCI); -@@ -167,6 +169,29 @@ void __init ar2315_arch_init_irq(void) - ar2315_misc_irq_domain = domain; - } - -+static void ar2315_device_reset_set(u32 mask) -+{ -+ u32 val; -+ -+ val = ar2315_rst_reg_read(AR2315_RESET); -+ ar2315_rst_reg_write(AR2315_RESET, val | mask); -+} -+ -+static void ar2315_device_reset_clear(u32 mask) -+{ -+ u32 val; -+ -+ val = ar2315_rst_reg_read(AR2315_RESET); -+ ar2315_rst_reg_write(AR2315_RESET, val & ~mask); -+} -+ -+static struct ar231x_eth ar2315_eth_data = { -+ .reset_set = ar2315_device_reset_set, -+ .reset_clear = ar2315_device_reset_clear, -+ .reset_mac = AR2315_RESET_ENET0, -+ .reset_phy = AR2315_RESET_EPHY0, -+}; -+ - static struct resource ar2315_gpio_res[] = { - { - .name = "ar2315-gpio", -@@ -203,6 +228,11 @@ void __init ar2315_init_devices(void) - ar2315_gpio_res[1].end = ar2315_gpio_res[1].start; - platform_device_register(&ar2315_gpio); - -+ ar2315_eth_data.macaddr = ath25_board.config->enet0_mac; -+ ath25_add_ethernet(0, AR2315_ENET0_BASE, "eth0_mii", -+ AR2315_ENET0_MII_BASE, AR2315_IRQ_ENET0, -+ &ar2315_eth_data); -+ - ath25_add_wmac(0, AR2315_WLAN0_BASE, AR2315_IRQ_WLAN0); - } - ---- a/arch/mips/ath25/ar5312.c -+++ b/arch/mips/ath25/ar5312.c -@@ -127,6 +127,10 @@ static void ar5312_irq_dispatch(void) - - if (pending & CAUSEF_IP2) - do_IRQ(AR5312_IRQ_WLAN0); -+ else if (pending & CAUSEF_IP3) -+ do_IRQ(AR5312_IRQ_ENET0); -+ else if (pending & CAUSEF_IP4) -+ do_IRQ(AR5312_IRQ_ENET1); - else if (pending & CAUSEF_IP5) - do_IRQ(AR5312_IRQ_WLAN1); - else if (pending & CAUSEF_IP6) -@@ -160,6 +164,36 @@ void __init ar5312_arch_init_irq(void) - ar5312_misc_irq_domain = domain; - } - -+static void ar5312_device_reset_set(u32 mask) -+{ -+ u32 val; -+ -+ val = ar5312_rst_reg_read(AR5312_RESET); -+ ar5312_rst_reg_write(AR5312_RESET, val | mask); -+} -+ -+static void ar5312_device_reset_clear(u32 mask) -+{ -+ u32 val; -+ -+ val = ar5312_rst_reg_read(AR5312_RESET); -+ ar5312_rst_reg_write(AR5312_RESET, val & ~mask); -+} -+ -+static struct ar231x_eth ar5312_eth0_data = { -+ .reset_set = ar5312_device_reset_set, -+ .reset_clear = ar5312_device_reset_clear, -+ .reset_mac = AR5312_RESET_ENET0, -+ .reset_phy = AR5312_RESET_EPHY0, -+}; -+ -+static struct ar231x_eth ar5312_eth1_data = { -+ .reset_set = ar5312_device_reset_set, -+ .reset_clear = ar5312_device_reset_clear, -+ .reset_mac = AR5312_RESET_ENET1, -+ .reset_phy = AR5312_RESET_EPHY1, -+}; -+ - static struct physmap_flash_data ar5312_flash_data = { - .width = 2, - }; -@@ -240,6 +274,7 @@ static void __init ar5312_flash_init(voi - void __init ar5312_init_devices(void) - { - struct ath25_boarddata *config; -+ u8 *c; - - ar5312_flash_init(); - -@@ -263,8 +298,30 @@ void __init ar5312_init_devices(void) - - platform_device_register(&ar5312_gpio); - -+ /* Fix up MAC addresses if necessary */ -+ if (is_broadcast_ether_addr(config->enet0_mac)) -+ ether_addr_copy(config->enet0_mac, config->enet1_mac); -+ -+ /* If ENET0 and ENET1 have the same mac address, -+ * increment the one from ENET1 */ -+ if (ether_addr_equal(config->enet0_mac, config->enet1_mac)) { -+ c = config->enet1_mac + 5; -+ while ((c >= config->enet1_mac) && !(++(*c))) -+ c--; -+ } -+ - switch (ath25_soc) { - case ATH25_SOC_AR5312: -+ ar5312_eth0_data.macaddr = config->enet0_mac; -+ ath25_add_ethernet(0, AR5312_ENET0_BASE, "eth0_mii", -+ AR5312_ENET0_MII_BASE, AR5312_IRQ_ENET0, -+ &ar5312_eth0_data); -+ -+ ar5312_eth1_data.macaddr = config->enet1_mac; -+ ath25_add_ethernet(1, AR5312_ENET1_BASE, "eth1_mii", -+ AR5312_ENET1_MII_BASE, AR5312_IRQ_ENET1, -+ &ar5312_eth1_data); -+ - if (!ath25_board.radio) - return; - -@@ -273,8 +330,18 @@ void __init ar5312_init_devices(void) - - ath25_add_wmac(0, AR5312_WLAN0_BASE, AR5312_IRQ_WLAN0); - break; -+ /* -+ * AR2312/3 ethernet uses the PHY of ENET0, but the MAC -+ * of ENET1. Atheros calls it 'twisted' for a reason :) -+ */ - case ATH25_SOC_AR2312: - case ATH25_SOC_AR2313: -+ ar5312_eth1_data.reset_phy = ar5312_eth0_data.reset_phy; -+ ar5312_eth1_data.macaddr = config->enet0_mac; -+ ath25_add_ethernet(1, AR5312_ENET1_BASE, "eth0_mii", -+ AR5312_ENET0_MII_BASE, AR5312_IRQ_ENET1, -+ &ar5312_eth1_data); -+ - if (!ath25_board.radio) - return; - break; ---- a/arch/mips/ath25/devices.h -+++ b/arch/mips/ath25/devices.h -@@ -33,6 +33,8 @@ extern struct ar231x_board_config ath25_ - extern void (*ath25_irq_dispatch)(void); - - int ath25_find_config(phys_addr_t offset, unsigned long size); -+int ath25_add_ethernet(int nr, u32 base, const char *mii_name, u32 mii_base, -+ int irq, void *pdata); - void ath25_serial_setup(u32 mapbase, int irq, unsigned int uartclk); - int ath25_add_wmac(int nr, u32 base, int irq); - ---- a/arch/mips/ath25/devices.c -+++ b/arch/mips/ath25/devices.c -@@ -13,6 +13,51 @@ - struct ar231x_board_config ath25_board; - enum ath25_soc_type ath25_soc = ATH25_SOC_UNKNOWN; - -+static struct resource ath25_eth0_res[] = { -+ { -+ .name = "eth0_membase", -+ .flags = IORESOURCE_MEM, -+ }, -+ { -+ .name = "eth0_mii", -+ .flags = IORESOURCE_MEM, -+ }, -+ { -+ .name = "eth0_irq", -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+static struct resource ath25_eth1_res[] = { -+ { -+ .name = "eth1_membase", -+ .flags = IORESOURCE_MEM, -+ }, -+ { -+ .name = "eth1_mii", -+ .flags = IORESOURCE_MEM, -+ }, -+ { -+ .name = "eth1_irq", -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+static struct platform_device ath25_eth[] = { -+ { -+ .id = 0, -+ .name = "ar231x-eth", -+ .resource = ath25_eth0_res, -+ .num_resources = ARRAY_SIZE(ath25_eth0_res) -+ }, -+ { -+ .id = 1, -+ .name = "ar231x-eth", -+ .resource = ath25_eth1_res, -+ .num_resources = ARRAY_SIZE(ath25_eth1_res) -+ } -+}; -+ - static struct resource ath25_wmac0_res[] = { - { - .name = "wmac0_membase", -@@ -71,6 +116,25 @@ const char *get_system_type(void) - return soc_type_strings[ath25_soc]; - } - -+int __init ath25_add_ethernet(int nr, u32 base, const char *mii_name, -+ u32 mii_base, int irq, void *pdata) -+{ -+ struct resource *res; -+ -+ ath25_eth[nr].dev.platform_data = pdata; -+ res = &ath25_eth[nr].resource[0]; -+ res->start = base; -+ res->end = base + 0x2000 - 1; -+ res++; -+ res->name = mii_name; -+ res->start = mii_base; -+ res->end = mii_base + 8 - 1; -+ res++; -+ res->start = irq; -+ res->end = irq; -+ return platform_device_register(&ath25_eth[nr]); -+} -+ - void __init ath25_serial_setup(u32 mapbase, int irq, unsigned int uartclk) - { - #ifdef CONFIG_SERIAL_8250_CONSOLE ---- a/arch/mips/include/asm/mach-ath25/ath25_platform.h -+++ b/arch/mips/include/asm/mach-ath25/ath25_platform.h -@@ -71,4 +71,15 @@ struct ar231x_board_config { - const char *radio; - }; - -+/* -+ * Platform device information for the Ethernet MAC -+ */ -+struct ar231x_eth { -+ void (*reset_set)(u32); -+ void (*reset_clear)(u32); -+ u32 reset_mac; -+ u32 reset_phy; -+ char *macaddr; -+}; -+ - #endif /* __ASM_MACH_ATH25_PLATFORM_H */ diff --git a/target/linux/ath25/patches-5.15/120-spiflash.patch b/target/linux/ath25/patches-5.15/120-spiflash.patch deleted file mode 100644 index b7a9607ac9..0000000000 --- a/target/linux/ath25/patches-5.15/120-spiflash.patch +++ /dev/null @@ -1,631 +0,0 @@ ---- a/drivers/mtd/devices/Kconfig -+++ b/drivers/mtd/devices/Kconfig -@@ -120,6 +120,10 @@ config MTD_BCM47XXSFLASH - registered by bcma as platform devices. This enables driver for - serial flash memories. - -+config MTD_AR2315 -+ tristate "Atheros AR2315+ SPI Flash support" -+ depends on SOC_AR2315 -+ - config MTD_SLRAM - tristate "Uncached system RAM" - help ---- a/drivers/mtd/devices/Makefile -+++ b/drivers/mtd/devices/Makefile -@@ -16,6 +16,7 @@ obj-$(CONFIG_MTD_MCHP23K256) += mchp23k2 - obj-$(CONFIG_MTD_MCHP48L640) += mchp48l640.o - obj-$(CONFIG_MTD_SPEAR_SMI) += spear_smi.o - obj-$(CONFIG_MTD_SST25L) += sst25l.o -+obj-$(CONFIG_MTD_AR2315) += ar2315.o - obj-$(CONFIG_MTD_BCM47XXSFLASH) += bcm47xxsflash.o - obj-$(CONFIG_MTD_ST_SPI_FSM) += st_spi_fsm.o - obj-$(CONFIG_MTD_POWERNV_FLASH) += powernv_flash.o ---- /dev/null -+++ b/drivers/mtd/devices/ar2315.c -@@ -0,0 +1,456 @@ -+ -+/* -+ * MTD driver for the SPI Flash Memory support on Atheros AR2315 -+ * -+ * Copyright (c) 2005-2006 Atheros Communications Inc. -+ * Copyright (C) 2006-2007 FON Technology, SL. -+ * Copyright (C) 2006-2007 Imre Kaloz -+ * Copyright (C) 2006-2009 Felix Fietkau -+ * Copyright (C) 2012 Alexandros C. Couloumbis -+ * -+ * This code is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "ar2315_spiflash.h" -+ -+#define DRIVER_NAME "ar2315-spiflash" -+ -+#define busy_wait(_priv, _condition, _wait) do { \ -+ while (_condition) { \ -+ if (_wait > 1) \ -+ msleep(_wait); \ -+ else if ((_wait == 1) && need_resched()) \ -+ schedule(); \ -+ else \ -+ udelay(1); \ -+ } \ -+} while (0) -+ -+enum { -+ FLASH_NONE, -+ FLASH_1MB, -+ FLASH_2MB, -+ FLASH_4MB, -+ FLASH_8MB, -+ FLASH_16MB, -+}; -+ -+/* Flash configuration table */ -+struct flashconfig { -+ u32 byte_cnt; -+ u32 sector_cnt; -+ u32 sector_size; -+}; -+ -+static const struct flashconfig flashconfig_tbl[] = { -+ [FLASH_NONE] = { 0, 0, 0}, -+ [FLASH_1MB] = { STM_1MB_BYTE_COUNT, STM_1MB_SECTOR_COUNT, -+ STM_1MB_SECTOR_SIZE}, -+ [FLASH_2MB] = { STM_2MB_BYTE_COUNT, STM_2MB_SECTOR_COUNT, -+ STM_2MB_SECTOR_SIZE}, -+ [FLASH_4MB] = { STM_4MB_BYTE_COUNT, STM_4MB_SECTOR_COUNT, -+ STM_4MB_SECTOR_SIZE}, -+ [FLASH_8MB] = { STM_8MB_BYTE_COUNT, STM_8MB_SECTOR_COUNT, -+ STM_8MB_SECTOR_SIZE}, -+ [FLASH_16MB] = { STM_16MB_BYTE_COUNT, STM_16MB_SECTOR_COUNT, -+ STM_16MB_SECTOR_SIZE} -+}; -+ -+/* Mapping of generic opcodes to STM serial flash opcodes */ -+enum { -+ SPI_WRITE_ENABLE, -+ SPI_WRITE_DISABLE, -+ SPI_RD_STATUS, -+ SPI_WR_STATUS, -+ SPI_RD_DATA, -+ SPI_FAST_RD_DATA, -+ SPI_PAGE_PROGRAM, -+ SPI_SECTOR_ERASE, -+ SPI_BULK_ERASE, -+ SPI_DEEP_PWRDOWN, -+ SPI_RD_SIG, -+}; -+ -+struct opcodes { -+ __u16 code; -+ __s8 tx_cnt; -+ __s8 rx_cnt; -+}; -+ -+static const struct opcodes stm_opcodes[] = { -+ [SPI_WRITE_ENABLE] = {STM_OP_WR_ENABLE, 1, 0}, -+ [SPI_WRITE_DISABLE] = {STM_OP_WR_DISABLE, 1, 0}, -+ [SPI_RD_STATUS] = {STM_OP_RD_STATUS, 1, 1}, -+ [SPI_WR_STATUS] = {STM_OP_WR_STATUS, 1, 0}, -+ [SPI_RD_DATA] = {STM_OP_RD_DATA, 4, 4}, -+ [SPI_FAST_RD_DATA] = {STM_OP_FAST_RD_DATA, 5, 0}, -+ [SPI_PAGE_PROGRAM] = {STM_OP_PAGE_PGRM, 8, 0}, -+ [SPI_SECTOR_ERASE] = {STM_OP_SECTOR_ERASE, 4, 0}, -+ [SPI_BULK_ERASE] = {STM_OP_BULK_ERASE, 1, 0}, -+ [SPI_DEEP_PWRDOWN] = {STM_OP_DEEP_PWRDOWN, 1, 0}, -+ [SPI_RD_SIG] = {STM_OP_RD_SIG, 4, 1}, -+}; -+ -+/* Driver private data structure */ -+struct spiflash_priv { -+ struct mtd_info mtd; -+ void __iomem *readaddr; /* memory mapped data for read */ -+ void __iomem *mmraddr; /* memory mapped register space */ -+ struct mutex lock; /* serialize registers access */ -+}; -+ -+#define to_spiflash(_mtd) container_of(_mtd, struct spiflash_priv, mtd) -+ -+enum { -+ FL_READY, -+ FL_READING, -+ FL_ERASING, -+ FL_WRITING -+}; -+ -+/*****************************************************************************/ -+ -+static u32 -+spiflash_read_reg(struct spiflash_priv *priv, int reg) -+{ -+ return ioread32(priv->mmraddr + reg); -+} -+ -+static void -+spiflash_write_reg(struct spiflash_priv *priv, int reg, u32 data) -+{ -+ iowrite32(data, priv->mmraddr + reg); -+} -+ -+static u32 -+spiflash_wait_busy(struct spiflash_priv *priv) -+{ -+ u32 reg; -+ -+ busy_wait(priv, (reg = spiflash_read_reg(priv, SPI_FLASH_CTL)) & -+ SPI_CTL_BUSY, 0); -+ return reg; -+} -+ -+static u32 -+spiflash_sendcmd(struct spiflash_priv *priv, int opcode, u32 addr) -+{ -+ const struct opcodes *op; -+ u32 reg, mask; -+ -+ op = &stm_opcodes[opcode]; -+ reg = spiflash_wait_busy(priv); -+ spiflash_write_reg(priv, SPI_FLASH_OPCODE, -+ ((u32)op->code) | (addr << 8)); -+ -+ reg &= ~SPI_CTL_TX_RX_CNT_MASK; -+ reg |= SPI_CTL_START | op->tx_cnt | (op->rx_cnt << 4); -+ -+ spiflash_write_reg(priv, SPI_FLASH_CTL, reg); -+ spiflash_wait_busy(priv); -+ -+ if (!op->rx_cnt) -+ return 0; -+ -+ reg = spiflash_read_reg(priv, SPI_FLASH_DATA); -+ -+ switch (op->rx_cnt) { -+ case 1: -+ mask = 0x000000ff; -+ break; -+ case 2: -+ mask = 0x0000ffff; -+ break; -+ case 3: -+ mask = 0x00ffffff; -+ break; -+ default: -+ mask = 0xffffffff; -+ break; -+ } -+ reg &= mask; -+ -+ return reg; -+} -+ -+/* -+ * Probe SPI flash device -+ * Function returns 0 for failure. -+ * and flashconfig_tbl array index for success. -+ */ -+static int -+spiflash_probe_chip(struct platform_device *pdev, struct spiflash_priv *priv) -+{ -+ u32 sig = spiflash_sendcmd(priv, SPI_RD_SIG, 0); -+ int flash_size; -+ -+ switch (sig) { -+ case STM_8MBIT_SIGNATURE: -+ flash_size = FLASH_1MB; -+ break; -+ case STM_16MBIT_SIGNATURE: -+ flash_size = FLASH_2MB; -+ break; -+ case STM_32MBIT_SIGNATURE: -+ flash_size = FLASH_4MB; -+ break; -+ case STM_64MBIT_SIGNATURE: -+ flash_size = FLASH_8MB; -+ break; -+ case STM_128MBIT_SIGNATURE: -+ flash_size = FLASH_16MB; -+ break; -+ default: -+ dev_warn(&pdev->dev, "read of flash device signature failed!\n"); -+ return 0; -+ } -+ -+ return flash_size; -+} -+ -+static void -+spiflash_wait_complete(struct spiflash_priv *priv, unsigned int timeout) -+{ -+ busy_wait(priv, spiflash_sendcmd(priv, SPI_RD_STATUS, 0) & -+ SPI_STATUS_WIP, timeout); -+} -+ -+static int -+spiflash_erase(struct mtd_info *mtd, struct erase_info *instr) -+{ -+ struct spiflash_priv *priv = to_spiflash(mtd); -+ const struct opcodes *op; -+ u32 temp, reg; -+ -+ if (instr->addr + instr->len > mtd->size) -+ return -EINVAL; -+ -+ mutex_lock(&priv->lock); -+ -+ spiflash_sendcmd(priv, SPI_WRITE_ENABLE, 0); -+ reg = spiflash_wait_busy(priv); -+ -+ op = &stm_opcodes[SPI_SECTOR_ERASE]; -+ temp = ((u32)instr->addr << 8) | (u32)(op->code); -+ spiflash_write_reg(priv, SPI_FLASH_OPCODE, temp); -+ -+ reg &= ~SPI_CTL_TX_RX_CNT_MASK; -+ reg |= op->tx_cnt | SPI_CTL_START; -+ spiflash_write_reg(priv, SPI_FLASH_CTL, reg); -+ -+ spiflash_wait_complete(priv, 20); -+ -+ mutex_unlock(&priv->lock); -+ -+ return 0; -+} -+ -+static int -+spiflash_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, -+ u_char *buf) -+{ -+ struct spiflash_priv *priv = to_spiflash(mtd); -+ -+ if (!len) -+ return 0; -+ -+ if (from + len > mtd->size) -+ return -EINVAL; -+ -+ *retlen = len; -+ -+ mutex_lock(&priv->lock); -+ -+ memcpy_fromio(buf, priv->readaddr + from, len); -+ -+ mutex_unlock(&priv->lock); -+ -+ return 0; -+} -+ -+static int -+spiflash_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, -+ const u8 *buf) -+{ -+ struct spiflash_priv *priv = to_spiflash(mtd); -+ u32 opcode, bytes_left; -+ -+ *retlen = 0; -+ -+ if (!len) -+ return 0; -+ -+ if (to + len > mtd->size) -+ return -EINVAL; -+ -+ bytes_left = len; -+ -+ do { -+ u32 read_len, reg, page_offset, spi_data = 0; -+ -+ read_len = min(bytes_left, sizeof(u32)); -+ -+ /* 32-bit writes cannot span across a page boundary -+ * (256 bytes). This types of writes require two page -+ * program operations to handle it correctly. The STM part -+ * will write the overflow data to the beginning of the -+ * current page as opposed to the subsequent page. -+ */ -+ page_offset = (to & (STM_PAGE_SIZE - 1)) + read_len; -+ -+ if (page_offset > STM_PAGE_SIZE) -+ read_len -= (page_offset - STM_PAGE_SIZE); -+ -+ mutex_lock(&priv->lock); -+ -+ spiflash_sendcmd(priv, SPI_WRITE_ENABLE, 0); -+ spi_data = 0; -+ switch (read_len) { -+ case 4: -+ spi_data |= buf[3] << 24; -+ fallthrough; -+ case 3: -+ spi_data |= buf[2] << 16; -+ fallthrough; -+ case 2: -+ spi_data |= buf[1] << 8; -+ fallthrough; -+ case 1: -+ spi_data |= buf[0] & 0xff; -+ break; -+ default: -+ break; -+ } -+ -+ spiflash_write_reg(priv, SPI_FLASH_DATA, spi_data); -+ opcode = stm_opcodes[SPI_PAGE_PROGRAM].code | -+ (to & 0x00ffffff) << 8; -+ spiflash_write_reg(priv, SPI_FLASH_OPCODE, opcode); -+ -+ reg = spiflash_read_reg(priv, SPI_FLASH_CTL); -+ reg &= ~SPI_CTL_TX_RX_CNT_MASK; -+ reg |= (read_len + 4) | SPI_CTL_START; -+ spiflash_write_reg(priv, SPI_FLASH_CTL, reg); -+ -+ spiflash_wait_complete(priv, 1); -+ -+ mutex_unlock(&priv->lock); -+ -+ bytes_left -= read_len; -+ to += read_len; -+ buf += read_len; -+ -+ *retlen += read_len; -+ } while (bytes_left != 0); -+ -+ return 0; -+} -+ -+#if defined CONFIG_MTD_REDBOOT_PARTS || CONFIG_MTD_MYLOADER_PARTS -+static const char * const part_probe_types[] = { -+ "cmdlinepart", "RedBoot", "MyLoader", NULL -+}; -+#endif -+ -+static int -+spiflash_probe(struct platform_device *pdev) -+{ -+ struct spiflash_priv *priv; -+ struct mtd_info *mtd; -+ struct resource *res; -+ int index; -+ int result = 0; -+ -+ priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); -+ if (!priv) -+ return -ENOMEM; -+ -+ mutex_init(&priv->lock); -+ mtd = &priv->mtd; -+ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1); -+ priv->mmraddr = devm_ioremap_resource(&pdev->dev, res); -+ if (IS_ERR(priv->mmraddr)) { -+ dev_warn(&pdev->dev, "failed to map flash MMR\n"); -+ return PTR_ERR(priv->mmraddr); -+ } -+ -+ index = spiflash_probe_chip(pdev, priv); -+ if (!index) { -+ dev_warn(&pdev->dev, "found no flash device\n"); -+ return -ENODEV; -+ } -+ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ priv->readaddr = devm_ioremap_resource(&pdev->dev, res); -+ if (IS_ERR(priv->readaddr)) { -+ dev_warn(&pdev->dev, "failed to map flash read mem\n"); -+ return PTR_ERR(priv->readaddr); -+ } -+ -+ platform_set_drvdata(pdev, priv); -+ mtd->name = "spiflash"; -+ mtd->type = MTD_NORFLASH; -+ mtd->flags = (MTD_CAP_NORFLASH|MTD_WRITEABLE); -+ mtd->size = flashconfig_tbl[index].byte_cnt; -+ mtd->erasesize = flashconfig_tbl[index].sector_size; -+ mtd->writesize = 1; -+ mtd->numeraseregions = 0; -+ mtd->eraseregions = NULL; -+ mtd->_erase = spiflash_erase; -+ mtd->_read = spiflash_read; -+ mtd->_write = spiflash_write; -+ mtd->owner = THIS_MODULE; -+ -+ dev_info(&pdev->dev, "%lld Kbytes flash detected\n", mtd->size >> 10); -+ -+#if defined CONFIG_MTD_REDBOOT_PARTS || CONFIG_MTD_MYLOADER_PARTS -+ /* parse redboot partitions */ -+ -+ result = mtd_device_parse_register(mtd, part_probe_types, -+ NULL, NULL, 0); -+#endif -+ -+ return result; -+} -+ -+static int -+spiflash_remove(struct platform_device *pdev) -+{ -+ struct spiflash_priv *priv = platform_get_drvdata(pdev); -+ -+ mtd_device_unregister(&priv->mtd); -+ -+ return 0; -+} -+ -+static struct platform_driver spiflash_driver = { -+ .driver.name = DRIVER_NAME, -+ .probe = spiflash_probe, -+ .remove = spiflash_remove, -+}; -+ -+module_platform_driver(spiflash_driver); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("OpenWrt.org"); -+MODULE_AUTHOR("Atheros Communications Inc"); -+MODULE_DESCRIPTION("MTD driver for SPI Flash on Atheros AR2315+ SOC"); -+MODULE_ALIAS("platform:" DRIVER_NAME); -+ ---- /dev/null -+++ b/drivers/mtd/devices/ar2315_spiflash.h -@@ -0,0 +1,106 @@ -+/* -+ * Atheros AR2315 SPI Flash Memory support header file. -+ * -+ * Copyright (c) 2005, Atheros Communications Inc. -+ * Copyright (C) 2006 FON Technology, SL. -+ * Copyright (C) 2006 Imre Kaloz -+ * Copyright (C) 2006-2009 Felix Fietkau -+ * -+ * This code is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+#ifndef __AR2315_SPIFLASH_H -+#define __AR2315_SPIFLASH_H -+ -+#define STM_PAGE_SIZE 256 -+ -+#define SFI_WRITE_BUFFER_SIZE 4 -+#define SFI_FLASH_ADDR_MASK 0x00ffffff -+ -+#define STM_8MBIT_SIGNATURE 0x13 -+#define STM_M25P80_BYTE_COUNT 1048576 -+#define STM_M25P80_SECTOR_COUNT 16 -+#define STM_M25P80_SECTOR_SIZE 0x10000 -+ -+#define STM_16MBIT_SIGNATURE 0x14 -+#define STM_M25P16_BYTE_COUNT 2097152 -+#define STM_M25P16_SECTOR_COUNT 32 -+#define STM_M25P16_SECTOR_SIZE 0x10000 -+ -+#define STM_32MBIT_SIGNATURE 0x15 -+#define STM_M25P32_BYTE_COUNT 4194304 -+#define STM_M25P32_SECTOR_COUNT 64 -+#define STM_M25P32_SECTOR_SIZE 0x10000 -+ -+#define STM_64MBIT_SIGNATURE 0x16 -+#define STM_M25P64_BYTE_COUNT 8388608 -+#define STM_M25P64_SECTOR_COUNT 128 -+#define STM_M25P64_SECTOR_SIZE 0x10000 -+ -+#define STM_128MBIT_SIGNATURE 0x17 -+#define STM_M25P128_BYTE_COUNT 16777216 -+#define STM_M25P128_SECTOR_COUNT 256 -+#define STM_M25P128_SECTOR_SIZE 0x10000 -+ -+#define STM_1MB_BYTE_COUNT STM_M25P80_BYTE_COUNT -+#define STM_1MB_SECTOR_COUNT STM_M25P80_SECTOR_COUNT -+#define STM_1MB_SECTOR_SIZE STM_M25P80_SECTOR_SIZE -+#define STM_2MB_BYTE_COUNT STM_M25P16_BYTE_COUNT -+#define STM_2MB_SECTOR_COUNT STM_M25P16_SECTOR_COUNT -+#define STM_2MB_SECTOR_SIZE STM_M25P16_SECTOR_SIZE -+#define STM_4MB_BYTE_COUNT STM_M25P32_BYTE_COUNT -+#define STM_4MB_SECTOR_COUNT STM_M25P32_SECTOR_COUNT -+#define STM_4MB_SECTOR_SIZE STM_M25P32_SECTOR_SIZE -+#define STM_8MB_BYTE_COUNT STM_M25P64_BYTE_COUNT -+#define STM_8MB_SECTOR_COUNT STM_M25P64_SECTOR_COUNT -+#define STM_8MB_SECTOR_SIZE STM_M25P64_SECTOR_SIZE -+#define STM_16MB_BYTE_COUNT STM_M25P128_BYTE_COUNT -+#define STM_16MB_SECTOR_COUNT STM_M25P128_SECTOR_COUNT -+#define STM_16MB_SECTOR_SIZE STM_M25P128_SECTOR_SIZE -+ -+/* -+ * ST Microelectronics Opcodes for Serial Flash -+ */ -+ -+#define STM_OP_WR_ENABLE 0x06 /* Write Enable */ -+#define STM_OP_WR_DISABLE 0x04 /* Write Disable */ -+#define STM_OP_RD_STATUS 0x05 /* Read Status */ -+#define STM_OP_WR_STATUS 0x01 /* Write Status */ -+#define STM_OP_RD_DATA 0x03 /* Read Data */ -+#define STM_OP_FAST_RD_DATA 0x0b /* Fast Read Data */ -+#define STM_OP_PAGE_PGRM 0x02 /* Page Program */ -+#define STM_OP_SECTOR_ERASE 0xd8 /* Sector Erase */ -+#define STM_OP_BULK_ERASE 0xc7 /* Bulk Erase */ -+#define STM_OP_DEEP_PWRDOWN 0xb9 /* Deep Power-Down Mode */ -+#define STM_OP_RD_SIG 0xab /* Read Electronic Signature */ -+ -+#define STM_STATUS_WIP 0x01 /* Write-In-Progress */ -+#define STM_STATUS_WEL 0x02 /* Write Enable Latch */ -+#define STM_STATUS_BP0 0x04 /* Block Protect 0 */ -+#define STM_STATUS_BP1 0x08 /* Block Protect 1 */ -+#define STM_STATUS_BP2 0x10 /* Block Protect 2 */ -+#define STM_STATUS_SRWD 0x80 /* Status Register Write Disable */ -+ -+/* -+ * SPI Flash Interface Registers -+ */ -+ -+#define SPI_FLASH_CTL 0x00 -+#define SPI_FLASH_OPCODE 0x04 -+#define SPI_FLASH_DATA 0x08 -+ -+#define SPI_CTL_START 0x00000100 -+#define SPI_CTL_BUSY 0x00010000 -+#define SPI_CTL_TXCNT_MASK 0x0000000f -+#define SPI_CTL_RXCNT_MASK 0x000000f0 -+#define SPI_CTL_TX_RX_CNT_MASK 0x000000ff -+#define SPI_CTL_SIZE_MASK 0x00060000 -+ -+#define SPI_CTL_CLK_SEL_MASK 0x03000000 -+#define SPI_OPCODE_MASK 0x000000ff -+ -+#define SPI_STATUS_WIP STM_STATUS_WIP -+ -+#endif ---- a/arch/mips/ath25/ar2315.c -+++ b/arch/mips/ath25/ar2315.c -@@ -218,6 +218,28 @@ static struct platform_device ar2315_gpi - .num_resources = ARRAY_SIZE(ar2315_gpio_res) - }; - -+static struct resource ar2315_spiflash_res[] = { -+ { -+ .name = "spiflash_read", -+ .flags = IORESOURCE_MEM, -+ .start = AR2315_SPI_READ_BASE, -+ .end = AR2315_SPI_READ_BASE + AR2315_SPI_READ_SIZE - 1, -+ }, -+ { -+ .name = "spiflash_mmr", -+ .flags = IORESOURCE_MEM, -+ .start = AR2315_SPI_MMR_BASE, -+ .end = AR2315_SPI_MMR_BASE + AR2315_SPI_MMR_SIZE - 1, -+ }, -+}; -+ -+static struct platform_device ar2315_spiflash = { -+ .id = 0, -+ .name = "ar2315-spiflash", -+ .resource = ar2315_spiflash_res, -+ .num_resources = ARRAY_SIZE(ar2315_spiflash_res) -+}; -+ - void __init ar2315_init_devices(void) - { - /* Find board configuration */ -@@ -228,6 +250,8 @@ void __init ar2315_init_devices(void) - ar2315_gpio_res[1].end = ar2315_gpio_res[1].start; - platform_device_register(&ar2315_gpio); - -+ platform_device_register(&ar2315_spiflash); -+ - ar2315_eth_data.macaddr = ath25_board.config->enet0_mac; - ath25_add_ethernet(0, AR2315_ENET0_BASE, "eth0_mii", - AR2315_ENET0_MII_BASE, AR2315_IRQ_ENET0, diff --git a/target/linux/ath25/patches-5.15/130-watchdog.patch b/target/linux/ath25/patches-5.15/130-watchdog.patch deleted file mode 100644 index eb0bc5630d..0000000000 --- a/target/linux/ath25/patches-5.15/130-watchdog.patch +++ /dev/null @@ -1,277 +0,0 @@ ---- /dev/null -+++ b/drivers/watchdog/ar2315-wtd.c -@@ -0,0 +1,209 @@ -+/* -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, see . -+ * -+ * Copyright (C) 2008 John Crispin -+ * Based on EP93xx and ifxmips wdt driver -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define DRIVER_NAME "ar2315-wdt" -+ -+#define CLOCK_RATE 40000000 -+#define HEARTBEAT(x) (x < 1 || x > 90 ? 20 : x) -+ -+#define WDT_REG_TIMER 0x00 -+#define WDT_REG_CTRL 0x04 -+ -+#define WDT_CTRL_ACT_NONE 0x00000000 /* No action */ -+#define WDT_CTRL_ACT_NMI 0x00000001 /* NMI on watchdog */ -+#define WDT_CTRL_ACT_RESET 0x00000002 /* reset on watchdog */ -+ -+static int wdt_timeout = 20; -+static int started; -+static int in_use; -+static void __iomem *wdt_base; -+ -+static inline void ar2315_wdt_wr(unsigned reg, u32 val) -+{ -+ iowrite32(val, wdt_base + reg); -+} -+ -+static void -+ar2315_wdt_enable(void) -+{ -+ ar2315_wdt_wr(WDT_REG_TIMER, wdt_timeout * CLOCK_RATE); -+} -+ -+static ssize_t -+ar2315_wdt_write(struct file *file, const char __user *data, size_t len, -+ loff_t *ppos) -+{ -+ if (len) -+ ar2315_wdt_enable(); -+ return len; -+} -+ -+static int -+ar2315_wdt_open(struct inode *inode, struct file *file) -+{ -+ if (in_use) -+ return -EBUSY; -+ ar2315_wdt_enable(); -+ in_use = 1; -+ started = 1; -+ return nonseekable_open(inode, file); -+} -+ -+static int -+ar2315_wdt_release(struct inode *inode, struct file *file) -+{ -+ in_use = 0; -+ return 0; -+} -+ -+static irqreturn_t -+ar2315_wdt_interrupt(int irq, void *dev) -+{ -+ struct platform_device *pdev = (struct platform_device *)dev; -+ -+ if (started) { -+ dev_crit(&pdev->dev, "watchdog expired, rebooting system\n"); -+ emergency_restart(); -+ } else { -+ ar2315_wdt_wr(WDT_REG_CTRL, 0); -+ ar2315_wdt_wr(WDT_REG_TIMER, 0); -+ } -+ return IRQ_HANDLED; -+} -+ -+static struct watchdog_info ident = { -+ .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, -+ .identity = "ar2315 Watchdog", -+}; -+ -+static long -+ar2315_wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -+{ -+ int new_wdt_timeout; -+ int ret = -ENOIOCTLCMD; -+ -+ switch (cmd) { -+ case WDIOC_GETSUPPORT: -+ ret = copy_to_user((void __user *)arg, &ident, sizeof(ident)) ? -+ -EFAULT : 0; -+ break; -+ case WDIOC_KEEPALIVE: -+ ar2315_wdt_enable(); -+ ret = 0; -+ break; -+ case WDIOC_SETTIMEOUT: -+ ret = get_user(new_wdt_timeout, (int __user *)arg); -+ if (ret) -+ break; -+ wdt_timeout = HEARTBEAT(new_wdt_timeout); -+ ar2315_wdt_enable(); -+ break; -+ case WDIOC_GETTIMEOUT: -+ ret = put_user(wdt_timeout, (int __user *)arg); -+ break; -+ } -+ return ret; -+} -+ -+static const struct file_operations ar2315_wdt_fops = { -+ .owner = THIS_MODULE, -+ .llseek = no_llseek, -+ .write = ar2315_wdt_write, -+ .unlocked_ioctl = ar2315_wdt_ioctl, -+ .open = ar2315_wdt_open, -+ .release = ar2315_wdt_release, -+}; -+ -+static struct miscdevice ar2315_wdt_miscdev = { -+ .minor = WATCHDOG_MINOR, -+ .name = "watchdog", -+ .fops = &ar2315_wdt_fops, -+}; -+ -+static int -+ar2315_wdt_probe(struct platform_device *dev) -+{ -+ struct resource *mem_res, *irq_res; -+ int ret = 0; -+ -+ if (wdt_base) -+ return -EBUSY; -+ -+ irq_res = platform_get_resource(dev, IORESOURCE_IRQ, 0); -+ if (!irq_res) { -+ dev_err(&dev->dev, "no IRQ resource\n"); -+ return -ENOENT; -+ } -+ -+ mem_res = platform_get_resource(dev, IORESOURCE_MEM, 0); -+ wdt_base = devm_ioremap_resource(&dev->dev, mem_res); -+ if (IS_ERR(wdt_base)) -+ return PTR_ERR(wdt_base); -+ -+ ret = devm_request_irq(&dev->dev, irq_res->start, ar2315_wdt_interrupt, -+ 0, DRIVER_NAME, dev); -+ if (ret) { -+ dev_err(&dev->dev, "failed to register inetrrupt\n"); -+ goto out; -+ } -+ -+ ret = misc_register(&ar2315_wdt_miscdev); -+ if (ret) -+ dev_err(&dev->dev, "failed to register miscdev\n"); -+ -+out: -+ return ret; -+} -+ -+static int -+ar2315_wdt_remove(struct platform_device *dev) -+{ -+ misc_deregister(&ar2315_wdt_miscdev); -+ return 0; -+} -+ -+static struct platform_driver ar2315_wdt_driver = { -+ .probe = ar2315_wdt_probe, -+ .remove = ar2315_wdt_remove, -+ .driver = { -+ .name = DRIVER_NAME, -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+module_platform_driver(ar2315_wdt_driver); -+ -+MODULE_DESCRIPTION("Atheros AR2315 hardware watchdog driver"); -+MODULE_AUTHOR("John Crispin "); -+MODULE_LICENSE("GPL"); -+MODULE_ALIAS("platform:" DRIVER_NAME); ---- a/drivers/watchdog/Kconfig -+++ b/drivers/watchdog/Kconfig -@@ -1829,6 +1829,13 @@ config PIC32_DMT - To compile this driver as a loadable module, choose M here. - The module will be called pic32-dmt. - -+config AR2315_WDT -+ tristate "Atheros AR2315+ WiSoCs Watchdog Timer" -+ depends on ATH25 -+ help -+ Hardware driver for the built-in watchdog timer on the Atheros -+ AR2315/AR2316 WiSoCs. -+ - # PARISC Architecture - - # POWERPC Architecture ---- a/drivers/watchdog/Makefile -+++ b/drivers/watchdog/Makefile -@@ -161,6 +161,7 @@ obj-$(CONFIG_JZ4740_WDT) += jz4740_wdt.o - obj-$(CONFIG_WDT_MTX1) += mtx-1_wdt.o - obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o - obj-$(CONFIG_AR7_WDT) += ar7_wdt.o -+obj-$(CONFIG_AR2315_WDT) += ar2315-wtd.o - obj-$(CONFIG_TXX9_WDT) += txx9wdt.o - obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o - octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o ---- a/arch/mips/ath25/ar2315.c -+++ b/arch/mips/ath25/ar2315.c -@@ -218,6 +218,24 @@ static struct platform_device ar2315_gpi - .num_resources = ARRAY_SIZE(ar2315_gpio_res) - }; - -+static struct resource ar2315_wdt_res[] = { -+ { -+ .flags = IORESOURCE_MEM, -+ .start = AR2315_RST_BASE + AR2315_WDT_TIMER, -+ .end = AR2315_RST_BASE + AR2315_WDT_TIMER + 8 - 1, -+ }, -+ { -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+static struct platform_device ar2315_wdt = { -+ .id = 0, -+ .name = "ar2315-wdt", -+ .resource = ar2315_wdt_res, -+ .num_resources = ARRAY_SIZE(ar2315_wdt_res) -+}; -+ - static struct resource ar2315_spiflash_res[] = { - { - .name = "spiflash_read", -@@ -250,6 +268,11 @@ void __init ar2315_init_devices(void) - ar2315_gpio_res[1].end = ar2315_gpio_res[1].start; - platform_device_register(&ar2315_gpio); - -+ ar2315_wdt_res[1].start = irq_create_mapping(ar2315_misc_irq_domain, -+ AR2315_MISC_IRQ_WATCHDOG); -+ ar2315_wdt_res[1].end = ar2315_wdt_res[1].start; -+ platform_device_register(&ar2315_wdt); -+ - platform_device_register(&ar2315_spiflash); - - ar2315_eth_data.macaddr = ath25_board.config->enet0_mac; diff --git a/target/linux/ath25/patches-5.15/140-redboot_boardconfig.patch b/target/linux/ath25/patches-5.15/140-redboot_boardconfig.patch deleted file mode 100644 index 5f506aaa3a..0000000000 --- a/target/linux/ath25/patches-5.15/140-redboot_boardconfig.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- a/drivers/mtd/parsers/redboot.c -+++ b/drivers/mtd/parsers/redboot.c -@@ -16,6 +16,8 @@ - #include - #include - -+#define BOARD_CONFIG_PART "boardconfig" -+ - struct fis_image_desc { - unsigned char name[16]; // Null terminated name - u32 flash_base; // Address within FLASH of image -@@ -73,6 +75,7 @@ static int parse_redboot_partitions(stru - const struct mtd_partition **pparts, - struct mtd_part_parser_data *data) - { -+ unsigned long max_offset = 0; - int nrparts = 0; - struct fis_image_desc *buf; - struct mtd_partition *parts; -@@ -239,14 +242,15 @@ nogood: - } - } - #endif -- parts = kzalloc(sizeof(*parts) * nrparts + nulllen + namelen, GFP_KERNEL); -+ parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + -+ sizeof(BOARD_CONFIG_PART), GFP_KERNEL); - - if (!parts) { - ret = -ENOMEM; - goto out; - } - -- nullname = (char *)&parts[nrparts]; -+ nullname = (char *)&parts[nrparts + 1]; - #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED - if (nulllen > 0) - strcpy(nullname, nullstring); -@@ -264,6 +268,8 @@ nogood: - } - #endif - for ( ; i < nrparts; i++) { -+ if (max_offset < buf[i].flash_base + buf[i].size) -+ max_offset = buf[i].flash_base + buf[i].size; - parts[i].size = fl->img->size; - parts[i].offset = fl->img->flash_base; - parts[i].name = names; -@@ -297,6 +303,13 @@ nogood: - fl = fl->next; - kfree(tmp_fl); - } -+ if (master->size - max_offset >= master->erasesize) { -+ parts[nrparts].size = master->size - max_offset; -+ parts[nrparts].offset = max_offset; -+ parts[nrparts].name = names; -+ strcpy(names, BOARD_CONFIG_PART); -+ nrparts++; -+ } - ret = nrparts; - *pparts = parts; - out: diff --git a/target/linux/ath25/patches-5.15/141-redboot_partition_scan.patch b/target/linux/ath25/patches-5.15/141-redboot_partition_scan.patch deleted file mode 100644 index f9c98c9a37..0000000000 --- a/target/linux/ath25/patches-5.15/141-redboot_partition_scan.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- a/drivers/mtd/parsers/redboot.c -+++ b/drivers/mtd/parsers/redboot.c -@@ -94,12 +94,18 @@ static int parse_redboot_partitions(stru - - parse_redboot_of(master); - -+ buf = vmalloc(master->erasesize); -+ if (!buf) -+ return -ENOMEM; -+ -+restart: - if (directory < 0) { - offset = master->size + directory * master->erasesize; - while (mtd_block_isbad(master, offset)) { - if (!offset) { - nogood: - pr_notice("Failed to find a non-bad block to check for RedBoot partition table\n"); -+ vfree(buf); - return -EIO; - } - offset -= master->erasesize; -@@ -112,10 +118,6 @@ nogood: - goto nogood; - } - } -- buf = vmalloc(master->erasesize); -- -- if (!buf) -- return -ENOMEM; - - pr_notice("Searching for RedBoot partition table in %s at offset 0x%lx\n", - master->name, offset); -@@ -187,6 +189,11 @@ nogood: - } - if (i == numslots) { - /* Didn't find it */ -+ if (offset + master->erasesize < master->size) { -+ /* not at the end of the flash yet, maybe next block */ -+ directory++; -+ goto restart; -+ } - pr_notice("No RedBoot partition table detected in %s\n", - master->name); - ret = 0; diff --git a/target/linux/ath25/patches-5.15/142-redboot_various_erase_size_fix.patch b/target/linux/ath25/patches-5.15/142-redboot_various_erase_size_fix.patch deleted file mode 100644 index ca9e686177..0000000000 --- a/target/linux/ath25/patches-5.15/142-redboot_various_erase_size_fix.patch +++ /dev/null @@ -1,83 +0,0 @@ ---- a/drivers/mtd/parsers/redboot.c -+++ b/drivers/mtd/parsers/redboot.c -@@ -71,6 +71,22 @@ static void parse_redboot_of(struct mtd_ - directory = dirblock; - } - -+static uint32_t mtd_get_offset_erasesize(struct mtd_info *mtd, uint64_t offset) -+{ -+ struct mtd_erase_region_info *regions = mtd->eraseregions; -+ int i; -+ -+ for (i = 0; i < mtd->numeraseregions; i++) { -+ if (regions[i].offset + -+ regions[i].numblocks * regions[i].erasesize <= offset) -+ continue; -+ -+ return regions[i].erasesize; -+ } -+ -+ return mtd->erasesize; -+} -+ - static int parse_redboot_partitions(struct mtd_info *master, - const struct mtd_partition **pparts, - struct mtd_part_parser_data *data) -@@ -87,6 +103,7 @@ static int parse_redboot_partitions(stru - int namelen = 0; - int nulllen = 0; - int numslots; -+ int first_slot; - unsigned long offset; - #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED - static char nullstring[] = "unallocated"; -@@ -134,7 +151,9 @@ nogood: - } - - numslots = (master->erasesize / sizeof(struct fis_image_desc)); -- for (i = 0; i < numslots; i++) { -+ first_slot = (buf[i].flash_base & (master->erasesize - 1)) / -+ sizeof(struct fis_image_desc); -+ for (i = first_slot; i < first_slot + numslots; i++) { - if (!memcmp(buf[i].name, "FIS directory", 14)) { - /* This is apparently the FIS directory entry for the - * FIS directory itself. The FIS directory size is -@@ -200,7 +219,10 @@ nogood: - goto out; - } - -- for (i = 0; i < numslots; i++) { -+ first_slot = (buf[i].flash_base & (master->erasesize - 1)) / -+ sizeof(struct fis_image_desc); -+ -+ for (i = first_slot; i < first_slot + numslots; i++) { - struct fis_list *new_fl, **prev; - - if (buf[i].name[0] == 0xff) { -@@ -275,12 +297,13 @@ nogood: - } - #endif - for ( ; i < nrparts; i++) { -- if (max_offset < buf[i].flash_base + buf[i].size) -- max_offset = buf[i].flash_base + buf[i].size; - parts[i].size = fl->img->size; - parts[i].offset = fl->img->flash_base; - parts[i].name = names; - -+ if (max_offset < parts[i].offset + parts[i].size) -+ max_offset = parts[i].offset + parts[i].size; -+ - strcpy(names, fl->img->name); - #ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY - if (!memcmp(names, "RedBoot", 8) || -@@ -310,7 +333,9 @@ nogood: - fl = fl->next; - kfree(tmp_fl); - } -- if (master->size - max_offset >= master->erasesize) { -+ -+ if (master->size - max_offset >= -+ mtd_get_offset_erasesize(master, max_offset)) { - parts[nrparts].size = master->size - max_offset; - parts[nrparts].offset = max_offset; - parts[nrparts].name = names; diff --git a/target/linux/ath25/patches-5.15/210-reset_button.patch b/target/linux/ath25/patches-5.15/210-reset_button.patch deleted file mode 100644 index b3f7a14cda..0000000000 --- a/target/linux/ath25/patches-5.15/210-reset_button.patch +++ /dev/null @@ -1,71 +0,0 @@ ---- a/arch/mips/ath25/Makefile -+++ b/arch/mips/ath25/Makefile -@@ -8,7 +8,7 @@ - # Copyright (C) 2006-2009 Felix Fietkau - # - --obj-y += board.o prom.o devices.o -+obj-y += board.o prom.o devices.o reset.o - - obj-$(CONFIG_EARLY_PRINTK) += early_printk.o - ---- /dev/null -+++ b/arch/mips/ath25/reset.c -@@ -0,0 +1,57 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "devices.h" -+ -+static int __init -+ar231x_init_reset(void) -+{ -+ struct platform_device *pdev; -+ struct gpio_keys_platform_data pdata; -+ struct gpio_keys_button *p; -+ int err; -+ -+ if (ath25_board.config->reset_config_gpio == 0xffff) -+ return -ENODEV; -+ -+ p = kzalloc(sizeof(*p), GFP_KERNEL); -+ if (!p) -+ goto err; -+ -+ p->desc = "reset"; -+ p->type = EV_KEY; -+ p->code = KEY_RESTART; -+ p->debounce_interval = 60; -+ p->gpio = ath25_board.config->reset_config_gpio; -+ -+ memset(&pdata, 0, sizeof(pdata)); -+ pdata.poll_interval = 20; -+ pdata.buttons = p; -+ pdata.nbuttons = 1; -+ -+ pdev = platform_device_alloc("gpio-keys-polled", 0); -+ if (!pdev) -+ goto err_free; -+ -+ err = platform_device_add_data(pdev, &pdata, sizeof(pdata)); -+ if (err) -+ goto err_put_pdev; -+ -+ err = platform_device_add(pdev); -+ if (err) -+ goto err_put_pdev; -+ -+ return 0; -+ -+err_put_pdev: -+ platform_device_put(pdev); -+err_free: -+ kfree(p); -+err: -+ return -ENOMEM; -+} -+ -+device_initcall(ar231x_init_reset); diff --git a/target/linux/ath25/patches-5.15/220-enet_micrel_workaround.patch b/target/linux/ath25/patches-5.15/220-enet_micrel_workaround.patch deleted file mode 100644 index b97cb3622f..0000000000 --- a/target/linux/ath25/patches-5.15/220-enet_micrel_workaround.patch +++ /dev/null @@ -1,111 +0,0 @@ ---- a/drivers/net/ethernet/atheros/ar231x/ar231x.c -+++ b/drivers/net/ethernet/atheros/ar231x/ar231x.c -@@ -133,6 +133,7 @@ static int ar231x_mdiobus_write(struct m - static int ar231x_mdiobus_reset(struct mii_bus *bus); - static int ar231x_mdiobus_probe(struct net_device *dev); - static void ar231x_adjust_link(struct net_device *dev); -+static bool no_phy; - - #ifndef ERR - #define ERR(fmt, args...) printk("%s: " fmt, __func__, ##args) -@@ -164,6 +165,32 @@ static const struct net_device_ops ar231 - #endif - }; - -+static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id) -+{ -+ int phy_reg; -+ -+ /** -+ * Grab the bits from PHYIR1, and put them -+ * in the upper half. -+ */ -+ phy_reg = mdiobus_read(bus, addr, MII_PHYSID1); -+ -+ if (phy_reg < 0) -+ return -EIO; -+ -+ *phy_id = (phy_reg & 0xffff) << 16; -+ -+ /* Grab the bits from PHYIR2, and put them in the lower half */ -+ phy_reg = mdiobus_read(bus, addr, MII_PHYSID2); -+ -+ if (phy_reg < 0) -+ return -EIO; -+ -+ *phy_id |= (phy_reg & 0xffff); -+ -+ return 0; -+} -+ - static int ar231x_probe(struct platform_device *pdev) - { - struct net_device *dev; -@@ -271,6 +298,24 @@ static int ar231x_probe(struct platform_ - - mdiobus_register(sp->mii_bus); - -+ /** -+ * Workaround for Micrel switch, which is only available on -+ * one PHY and cannot be configured through MDIO. -+ */ -+ if (!no_phy) { -+ u32 phy_id = 0; -+ -+ get_phy_id(sp->mii_bus, 1, &phy_id); -+ if (phy_id == 0x00221450) -+ no_phy = true; -+ } -+ if (no_phy) { -+ sp->link = 1; -+ netif_carrier_on(dev); -+ return 0; -+ } -+ no_phy = true; -+ - if (ar231x_mdiobus_probe(dev) != 0) { - printk(KERN_ERR "%s: mdiobus_probe failed\n", dev->name); - rx_tasklet_cleanup(dev); -@@ -324,8 +369,10 @@ static int ar231x_remove(struct platform - rx_tasklet_cleanup(dev); - ar231x_init_cleanup(dev); - unregister_netdev(dev); -- mdiobus_unregister(sp->mii_bus); -- mdiobus_free(sp->mii_bus); -+ if (sp->mii_bus) { -+ mdiobus_unregister(sp->mii_bus); -+ mdiobus_free(sp->mii_bus); -+ } - kfree(dev); - return 0; - } -@@ -868,7 +915,8 @@ static int ar231x_open(struct net_device - - sp->eth_regs->mac_control |= MAC_CONTROL_RE; - -- phy_start(sp->phy_dev); -+ if (sp->phy_dev) -+ phy_start(sp->phy_dev); - - return 0; - } -@@ -949,7 +997,8 @@ static int ar231x_close(struct net_devic - - #endif - -- phy_stop(sp->phy_dev); -+ if (sp->phy_dev) -+ phy_stop(sp->phy_dev); - - return 0; - } -@@ -993,6 +1042,9 @@ static int ar231x_ioctl(struct net_devic - { - struct ar231x_private *sp = netdev_priv(dev); - -+ if (!sp->phy_dev) -+ return -ENODEV; -+ - switch (cmd) { - case SIOCGMIIPHY: - case SIOCGMIIREG: diff --git a/target/linux/ath25/patches-5.15/330-board_leds.patch b/target/linux/ath25/patches-5.15/330-board_leds.patch deleted file mode 100644 index 3d762db80e..0000000000 --- a/target/linux/ath25/patches-5.15/330-board_leds.patch +++ /dev/null @@ -1,116 +0,0 @@ ---- a/arch/mips/ath25/ar2315.c -+++ b/arch/mips/ath25/ar2315.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -258,6 +259,50 @@ static struct platform_device ar2315_spi - .num_resources = ARRAY_SIZE(ar2315_spiflash_res) - }; - -+#ifdef CONFIG_LEDS_GPIO -+static struct gpio_led ar2315_leds[6]; -+static struct gpio_led_platform_data ar2315_led_data = { -+ .leds = (void *)ar2315_leds, -+}; -+ -+static struct platform_device ar2315_gpio_leds = { -+ .name = "leds-gpio", -+ .id = -1, -+ .dev = { -+ .platform_data = (void *)&ar2315_led_data, -+ } -+}; -+ -+static void __init ar2315_init_gpio_leds(void) -+{ -+ static char led_names[6][6]; -+ int i, led = 0; -+ -+ ar2315_led_data.num_leds = 0; -+ for (i = 1; i < 8; i++) { -+ if ((i == AR2315_RESET_GPIO) || -+ (i == ath25_board.config->reset_config_gpio)) -+ continue; -+ -+ if (i == ath25_board.config->sys_led_gpio) -+ strcpy(led_names[led], "wlan"); -+ else -+ sprintf(led_names[led], "gpio%d", i); -+ -+ ar2315_leds[led].name = led_names[led]; -+ ar2315_leds[led].gpio = i; -+ ar2315_leds[led].active_low = 0; -+ led++; -+ } -+ ar2315_led_data.num_leds = led; -+ platform_device_register(&ar2315_gpio_leds); -+} -+#else -+static inline void ar2315_init_gpio_leds(void) -+{ -+} -+#endif -+ - void __init ar2315_init_devices(void) - { - /* Find board configuration */ -@@ -268,6 +313,8 @@ void __init ar2315_init_devices(void) - ar2315_gpio_res[1].end = ar2315_gpio_res[1].start; - platform_device_register(&ar2315_gpio); - -+ ar2315_init_gpio_leds(); -+ - ar2315_wdt_res[1].start = irq_create_mapping(ar2315_misc_irq_domain, - AR2315_MISC_IRQ_WATCHDOG); - ar2315_wdt_res[1].end = ar2315_wdt_res[1].start; ---- a/arch/mips/ath25/ar5312.c -+++ b/arch/mips/ath25/ar5312.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -228,6 +229,23 @@ static struct platform_device ar5312_gpi - .num_resources = ARRAY_SIZE(ar5312_gpio_res), - }; - -+#ifdef CONFIG_LEDS_GPIO -+static struct gpio_led ar5312_leds[] = { -+ { .name = "wlan", .gpio = 0, .active_low = 1, }, -+}; -+ -+static const struct gpio_led_platform_data ar5312_led_data = { -+ .num_leds = ARRAY_SIZE(ar5312_leds), -+ .leds = (void *)ar5312_leds, -+}; -+ -+static struct platform_device ar5312_gpio_leds = { -+ .name = "leds-gpio", -+ .id = -1, -+ .dev.platform_data = (void *)&ar5312_led_data, -+}; -+#endif -+ - static void __init ar5312_flash_init(void) - { - void __iomem *flashctl_base; -@@ -298,6 +316,11 @@ void __init ar5312_init_devices(void) - - platform_device_register(&ar5312_gpio); - -+#ifdef CONFIG_LEDS_GPIO -+ ar5312_leds[0].gpio = config->sys_led_gpio; -+ platform_device_register(&ar5312_gpio_leds); -+#endif -+ - /* Fix up MAC addresses if necessary */ - if (is_broadcast_ether_addr(config->enet0_mac)) - ether_addr_copy(config->enet0_mac, config->enet1_mac); diff --git a/target/linux/ath25/patches-5.15/700-swconfig_mvswitch.patch b/target/linux/ath25/patches-5.15/700-swconfig_mvswitch.patch deleted file mode 100644 index dcfc019f12..0000000000 --- a/target/linux/ath25/patches-5.15/700-swconfig_mvswitch.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- a/drivers/net/phy/Kconfig -+++ b/drivers/net/phy/Kconfig -@@ -96,6 +96,10 @@ config IP17XX_PHY - tristate "Driver for IC+ IP17xx switches" - select SWCONFIG - -+config MVSWITCH_PHY -+ tristate "Driver for Marvell 88E6060 switches" -+ select ETHERNET_PACKET_MANGLE -+ - config PSB6970_PHY - tristate "Lantiq XWAY Tantos (PSB6970) Ethernet switch" - select SWCONFIG ---- a/drivers/net/phy/Makefile -+++ b/drivers/net/phy/Makefile -@@ -31,6 +31,7 @@ ar8xxx-y += ar8216.o - ar8xxx-y += ar8327.o - obj-$(CONFIG_SWCONFIG_B53) += b53/ - obj-$(CONFIG_IP17XX_PHY) += ip17xx.o -+obj-$(CONFIG_MVSWITCH_PHY) += mvswitch.o - obj-$(CONFIG_PSB6970_PHY) += psb6970.o - obj-$(CONFIG_RTL8306_PHY) += rtl8306.o - obj-$(CONFIG_RTL8366_SMI) += rtl8366_smi.o diff --git a/target/linux/ath25/profiles/00-default.mk b/target/linux/ath25/profiles/00-default.mk deleted file mode 100644 index 3aeb31064a..0000000000 --- a/target/linux/ath25/profiles/00-default.mk +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2011 OpenWrt.org - -define Profile/Default - NAME:=Default Profile - PRIORITY:=1 -endef - -define Profile/Default/Description - Default package set compatible with most boards. -endef -$(eval $(call Profile,Default)) diff --git a/target/linux/generic/pending-5.15/430-mtd-add-myloader-partition-parser.patch b/target/linux/generic/pending-5.15/430-mtd-add-myloader-partition-parser.patch index 8a6e630530..c7a8d9d7b7 100644 --- a/target/linux/generic/pending-5.15/430-mtd-add-myloader-partition-parser.patch +++ b/target/linux/generic/pending-5.15/430-mtd-add-myloader-partition-parser.patch @@ -16,7 +16,7 @@ Signed-off-by: Adrian Schmutzler +config MTD_MYLOADER_PARTS + tristate "MyLoader partition parsing" -+ depends on ADM5120 || ATH25 || ATH79 ++ depends on ADM5120 || ATH79 + help + MyLoader is a bootloader which allows the user to define partitions + in flash devices, by putting a table in the second erase block diff --git a/target/linux/generic/pending-6.1/430-mtd-add-myloader-partition-parser.patch b/target/linux/generic/pending-6.1/430-mtd-add-myloader-partition-parser.patch index c8cf3f5d3b..35e80d6dcc 100644 --- a/target/linux/generic/pending-6.1/430-mtd-add-myloader-partition-parser.patch +++ b/target/linux/generic/pending-6.1/430-mtd-add-myloader-partition-parser.patch @@ -16,7 +16,7 @@ Signed-off-by: Adrian Schmutzler +config MTD_MYLOADER_PARTS + tristate "MyLoader partition parsing" -+ depends on ADM5120 || ATH25 || ATH79 ++ depends on ADM5120 || ATH79 + help + MyLoader is a bootloader which allows the user to define partitions + in flash devices, by putting a table in the second erase block From 26d1d5240356e2c286ca87dbaea3308c0e9bc97f Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sat, 2 Mar 2024 19:14:22 +0100 Subject: [PATCH 03/31] kernel: bump 5.15 to 5.15.149 Removed because it is upstream: generic/pending-5.15/540-ksmbd-only-v2-leases-handle-the-directory.patch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=81ea755b8fa57ce186f56f14b709cf491c2a5505 Manually Adapted the following patch: ath79/patches-5.15/900-unaligned_access_hacks.patch Signed-off-by: Hauke Mehrtens --- include/kernel-5.15 | 4 +-- .../900-unaligned_access_hacks.patch | 7 ++-- .../patches-5.15/910-mikrotik-rb4xx.patch | 2 +- ...dd-CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG.patch | 2 +- ...xhci-mvebu-make-USB-3.0-PHY-optional.patch | 2 +- ...-users-of-bitmap_foo-to-linkmode_foo.patch | 2 +- ...icro-stmmac-move-queue-reset-to-dedi.patch | 4 +-- ...icro-stmmac-move-dma-conf-to-dedicat.patch | 6 ++-- ...icro-stmmac-generate-stmmac-dma-conf.patch | 2 +- .../203-kallsyms_uncompressed.patch | 2 +- ...-only-v2-leases-handle-the-directory.patch | 32 ------------------- ...Add-support-for-MAP-E-FMRs-mesh-mode.patch | 28 ++++++++-------- ...ow_offload-handle-netdevice-events-f.patch | 2 +- ...les-ignore-EOPNOTSUPP-on-flowtable-d.patch | 2 +- ...pool-and-page-referenced-frags-in-GR.patch | 2 +- ...-bus-mhi-core-add-SBL-state-callback.patch | 2 +- .../810-pci_disable_common_quirks.patch | 6 ++-- ...r-Gateworks-PLX-PEX860x-switch-with-.patch | 2 +- 18 files changed, 39 insertions(+), 70 deletions(-) delete mode 100644 target/linux/generic/pending-5.15/540-ksmbd-only-v2-leases-handle-the-directory.patch diff --git a/include/kernel-5.15 b/include/kernel-5.15 index d93ae194b8..9ab2d04fc6 100644 --- a/include/kernel-5.15 +++ b/include/kernel-5.15 @@ -1,2 +1,2 @@ -LINUX_VERSION-5.15 = .148 -LINUX_KERNEL_HASH-5.15.148 = c48575c97fd9f4767cbe50a13b1b2b40ee42830aba3182fabd35a03259a6e5d8 +LINUX_VERSION-5.15 = .149 +LINUX_KERNEL_HASH-5.15.149 = bd84809a367eb400eb04e0e70294e6ba12fc03b6bfb5a7dfaca548f8947501b0 diff --git a/target/linux/ath79/patches-5.15/900-unaligned_access_hacks.patch b/target/linux/ath79/patches-5.15/900-unaligned_access_hacks.patch index 7bd6ae8b56..3c15a016ff 100644 --- a/target/linux/ath79/patches-5.15/900-unaligned_access_hacks.patch +++ b/target/linux/ath79/patches-5.15/900-unaligned_access_hacks.patch @@ -86,7 +86,7 @@ SVN-Revision: 35130 } while (word != stop); return csum_fold(csum); -@@ -182,73 +186,6 @@ static inline __sum16 ip_compute_csum(co +@@ -182,74 +186,6 @@ static inline __sum16 ip_compute_csum(co return csum_fold(csum_partial(buff, len, 0)); } @@ -152,7 +152,8 @@ SVN-Revision: 35130 - " .set pop" - : "=&r" (sum), "=&r" (tmp) - : "r" (saddr), "r" (daddr), -- "0" (htonl(len)), "r" (htonl(proto)), "r" (sum)); +- "0" (htonl(len)), "r" (htonl(proto)), "r" (sum) +- : "memory"); - - return csum_fold(sum); -} @@ -336,7 +337,7 @@ SVN-Revision: 35130 #endif /* _LINUX_TYPES_H */ --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c -@@ -1477,8 +1477,8 @@ struct sk_buff *inet_gro_receive(struct +@@ -1480,8 +1480,8 @@ struct sk_buff *inet_gro_receive(struct if (unlikely(ip_fast_csum((u8 *)iph, 5))) goto out_unlock; diff --git a/target/linux/ath79/patches-5.15/910-mikrotik-rb4xx.patch b/target/linux/ath79/patches-5.15/910-mikrotik-rb4xx.patch index 4743ad46e2..16c8f11af7 100644 --- a/target/linux/ath79/patches-5.15/910-mikrotik-rb4xx.patch +++ b/target/linux/ath79/patches-5.15/910-mikrotik-rb4xx.patch @@ -45,7 +45,7 @@ Submitted-by: Christopher Hill --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig -@@ -2176,6 +2176,14 @@ config RAVE_SP_CORE +@@ -2177,6 +2177,14 @@ config RAVE_SP_CORE Select this to get support for the Supervisory Processor device found on several devices in RAVE line of hardware. diff --git a/target/linux/generic/backport-5.15/020-v6.1-02-mm-x86-add-CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG.patch b/target/linux/generic/backport-5.15/020-v6.1-02-mm-x86-add-CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG.patch index 27c85a333b..2ea2e2497a 100644 --- a/target/linux/generic/backport-5.15/020-v6.1-02-mm-x86-add-CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG.patch +++ b/target/linux/generic/backport-5.15/020-v6.1-02-mm-x86-add-CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG.patch @@ -73,7 +73,7 @@ Signed-off-by: Andrew Morton --- a/arch/Kconfig +++ b/arch/Kconfig -@@ -1298,6 +1298,14 @@ config ARCH_HAS_ELFCORE_COMPAT +@@ -1299,6 +1299,14 @@ config ARCH_HAS_ELFCORE_COMPAT config ARCH_HAS_PARANOID_L1D_FLUSH bool diff --git a/target/linux/generic/backport-5.15/346-v5.18-02-Revert-usb-host-xhci-mvebu-make-USB-3.0-PHY-optional.patch b/target/linux/generic/backport-5.15/346-v5.18-02-Revert-usb-host-xhci-mvebu-make-USB-3.0-PHY-optional.patch index 1e8afb7bbf..8cd86e0fcb 100644 --- a/target/linux/generic/backport-5.15/346-v5.18-02-Revert-usb-host-xhci-mvebu-make-USB-3.0-PHY-optional.patch +++ b/target/linux/generic/backport-5.15/346-v5.18-02-Revert-usb-host-xhci-mvebu-make-USB-3.0-PHY-optional.patch @@ -138,7 +138,7 @@ Signed-off-by: Vinod Koul .init_quirk = xhci_mvebu_a3700_init_quirk, }; -@@ -341,14 +330,7 @@ static int xhci_plat_probe(struct platfo +@@ -344,14 +333,7 @@ static int xhci_plat_probe(struct platfo hcd->tpl_support = of_usb_host_tpl_support(sysdev->of_node); xhci->shared_hcd->tpl_support = hcd->tpl_support; diff --git a/target/linux/generic/backport-5.15/703-00-v5.16-net-convert-users-of-bitmap_foo-to-linkmode_foo.patch b/target/linux/generic/backport-5.15/703-00-v5.16-net-convert-users-of-bitmap_foo-to-linkmode_foo.patch index eca3c7ff9f..5737da6e10 100644 --- a/target/linux/generic/backport-5.15/703-00-v5.16-net-convert-users-of-bitmap_foo-to-linkmode_foo.patch +++ b/target/linux/generic/backport-5.15/703-00-v5.16-net-convert-users-of-bitmap_foo-to-linkmode_foo.patch @@ -726,7 +726,7 @@ Signed-off-by: David S. Miller * to advertise both, only report advertising at 2500BaseX. --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c -@@ -6352,15 +6352,14 @@ static void mvpp2_phylink_validate(struc +@@ -6377,15 +6377,14 @@ static void mvpp2_phylink_validate(struc goto empty_set; } diff --git a/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch b/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch index 931c589cfa..7742c4a958 100644 --- a/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch +++ b/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch @@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski stmmac_clear_tx_descriptors(priv, queue); stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, -@@ -7415,6 +7410,25 @@ int stmmac_suspend(struct device *dev) +@@ -7418,6 +7413,25 @@ int stmmac_suspend(struct device *dev) } EXPORT_SYMBOL_GPL(stmmac_suspend); @@ -113,7 +113,7 @@ Signed-off-by: Jakub Kicinski /** * stmmac_reset_queues_param - reset queue parameters * @priv: device pointer -@@ -7425,22 +7439,11 @@ static void stmmac_reset_queues_param(st +@@ -7428,22 +7442,11 @@ static void stmmac_reset_queues_param(st u32 tx_cnt = priv->plat->tx_queues_to_use; u32 queue; diff --git a/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch b/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch index c59a5d1fe1..e259668b86 100644 --- a/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch +++ b/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch @@ -1210,7 +1210,7 @@ Signed-off-by: Jakub Kicinski if (netif_running(dev)) ret = stmmac_open(dev); -@@ -7360,7 +7364,7 @@ int stmmac_suspend(struct device *dev) +@@ -7363,7 +7367,7 @@ int stmmac_suspend(struct device *dev) stmmac_disable_all_queues(priv); for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) @@ -1219,7 +1219,7 @@ Signed-off-by: Jakub Kicinski if (priv->eee_enabled) { priv->tx_path_in_lpi_mode = false; -@@ -7412,7 +7416,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend); +@@ -7415,7 +7419,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend); static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue) { @@ -1228,7 +1228,7 @@ Signed-off-by: Jakub Kicinski rx_q->cur_rx = 0; rx_q->dirty_rx = 0; -@@ -7420,7 +7424,7 @@ static void stmmac_reset_rx_queue(struct +@@ -7423,7 +7427,7 @@ static void stmmac_reset_rx_queue(struct static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue) { diff --git a/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch b/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch index bdf8b8585e..e82f6d6943 100644 --- a/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch +++ b/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch @@ -1150,7 +1150,7 @@ Signed-off-by: Jakub Kicinski dma_desc_error: return ret; } -@@ -7507,7 +7623,7 @@ int stmmac_resume(struct device *dev) +@@ -7510,7 +7626,7 @@ int stmmac_resume(struct device *dev) stmmac_reset_queues_param(priv); stmmac_free_tx_skbufs(priv); diff --git a/target/linux/generic/pending-5.15/203-kallsyms_uncompressed.patch b/target/linux/generic/pending-5.15/203-kallsyms_uncompressed.patch index e469b7229c..fc4fe6d6b0 100644 --- a/target/linux/generic/pending-5.15/203-kallsyms_uncompressed.patch +++ b/target/linux/generic/pending-5.15/203-kallsyms_uncompressed.patch @@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau } --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh -@@ -257,6 +257,10 @@ kallsyms() +@@ -262,6 +262,10 @@ kallsyms() kallsymopt="${kallsymopt} --base-relative" fi diff --git a/target/linux/generic/pending-5.15/540-ksmbd-only-v2-leases-handle-the-directory.patch b/target/linux/generic/pending-5.15/540-ksmbd-only-v2-leases-handle-the-directory.patch deleted file mode 100644 index 1bc0e72418..0000000000 --- a/target/linux/generic/pending-5.15/540-ksmbd-only-v2-leases-handle-the-directory.patch +++ /dev/null @@ -1,32 +0,0 @@ -From cb1d41b99e4afa062f904339666fae2578559718 Mon Sep 17 00:00:00 2001 -From: Namjae Jeon -Date: Mon, 15 Jan 2024 10:24:54 +0900 -Subject: [PATCH] ksmbd: only v2 leases handle the directory - -When smb2 leases is disable, ksmbd can send oplock break notification -and cause wait oplock break ack timeout. It may appear like hang when -accessing a directory. This patch make only v2 leases handle the -directory. - -Cc: stable@vger.kernel.org -Signed-off-by: Namjae Jeon -Signed-off-by: Steve French ---- - fs/ksmbd/oplock.c | 6 ++++++ - 1 file changed, 6 insertions(+) - ---- a/fs/ksmbd/oplock.c -+++ b/fs/ksmbd/oplock.c -@@ -1191,6 +1191,12 @@ int smb_grant_oplock(struct ksmbd_work * - bool prev_op_has_lease; - __le32 prev_op_state = 0; - -+ /* Only v2 leases handle the directory */ -+ if (S_ISDIR(file_inode(fp->filp)->i_mode)) { -+ if (!lctx || lctx->version != 2) -+ return 0; -+ } -+ - opinfo = alloc_opinfo(work, pid, tid); - if (!opinfo) - return -ENOMEM; diff --git a/target/linux/generic/pending-5.15/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch b/target/linux/generic/pending-5.15/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch index 2f6fbd59e4..3931278a6d 100644 --- a/target/linux/generic/pending-5.15/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch +++ b/target/linux/generic/pending-5.15/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch @@ -275,8 +275,8 @@ Signed-off-by: Steven Barth static int __ip6_tnl_rcv(struct ip6_tnl *tunnel, struct sk_buff *skb, const struct tnl_ptk_info *tpi, struct metadata_dst *tun_dst, -@@ -843,6 +969,27 @@ static int __ip6_tnl_rcv(struct ip6_tnl - skb_reset_network_header(skb); +@@ -857,6 +983,27 @@ static int __ip6_tnl_rcv(struct ip6_tnl + memset(skb->cb, 0, sizeof(struct inet6_skb_parm)); + if (tpi->proto == htons(ETH_P_IP) && tunnel->parms.fmrs && @@ -303,7 +303,7 @@ Signed-off-by: Steven Barth __skb_tunnel_rx(skb, tunnel->dev, tunnel->net); err = dscp_ecn_decapsulate(tunnel, ipv6h, skb); -@@ -994,6 +1141,7 @@ static void init_tel_txopt(struct ipv6_t +@@ -1004,6 +1151,7 @@ static void init_tel_txopt(struct ipv6_t opt->ops.opt_nflen = 8; } @@ -311,7 +311,7 @@ Signed-off-by: Steven Barth /** * ip6_tnl_addr_conflict - compare packet addresses to tunnel's own * @t: the outgoing tunnel device -@@ -1274,6 +1422,7 @@ ipxip6_tnl_xmit(struct sk_buff *skb, str +@@ -1284,6 +1432,7 @@ ipxip6_tnl_xmit(struct sk_buff *skb, str u8 protocol) { struct ip6_tnl *t = netdev_priv(dev); @@ -319,7 +319,7 @@ Signed-off-by: Steven Barth struct ipv6hdr *ipv6h; const struct iphdr *iph; int encap_limit = -1; -@@ -1373,6 +1522,18 @@ ipxip6_tnl_xmit(struct sk_buff *skb, str +@@ -1383,6 +1532,18 @@ ipxip6_tnl_xmit(struct sk_buff *skb, str fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL); dsfield = INET_ECN_encapsulate(dsfield, orig_dsfield); @@ -338,7 +338,7 @@ Signed-off-by: Steven Barth if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6)) return -1; -@@ -1526,6 +1687,14 @@ ip6_tnl_change(struct ip6_tnl *t, const +@@ -1536,6 +1697,14 @@ ip6_tnl_change(struct ip6_tnl *t, const t->parms.link = p->link; t->parms.proto = p->proto; t->parms.fwmark = p->fwmark; @@ -353,7 +353,7 @@ Signed-off-by: Steven Barth dst_cache_reset(&t->dst_cache); ip6_tnl_link_config(t); return 0; -@@ -1564,6 +1733,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ +@@ -1574,6 +1743,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ p->flowinfo = u->flowinfo; p->link = u->link; p->proto = u->proto; @@ -361,7 +361,7 @@ Signed-off-by: Steven Barth memcpy(p->name, u->name, sizeof(u->name)); } -@@ -1950,6 +2120,15 @@ static int ip6_tnl_validate(struct nlatt +@@ -1960,6 +2130,15 @@ static int ip6_tnl_validate(struct nlatt return 0; } @@ -377,7 +377,7 @@ Signed-off-by: Steven Barth static void ip6_tnl_netlink_parms(struct nlattr *data[], struct __ip6_tnl_parm *parms) { -@@ -1987,6 +2166,46 @@ static void ip6_tnl_netlink_parms(struct +@@ -1997,6 +2176,46 @@ static void ip6_tnl_netlink_parms(struct if (data[IFLA_IPTUN_FWMARK]) parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]); @@ -424,7 +424,7 @@ Signed-off-by: Steven Barth } static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[], -@@ -2102,6 +2321,12 @@ static void ip6_tnl_dellink(struct net_d +@@ -2112,6 +2331,12 @@ static void ip6_tnl_dellink(struct net_d static size_t ip6_tnl_get_size(const struct net_device *dev) { @@ -437,7 +437,7 @@ Signed-off-by: Steven Barth return /* IFLA_IPTUN_LINK */ nla_total_size(4) + -@@ -2131,6 +2356,24 @@ static size_t ip6_tnl_get_size(const str +@@ -2141,6 +2366,24 @@ static size_t ip6_tnl_get_size(const str nla_total_size(0) + /* IFLA_IPTUN_FWMARK */ nla_total_size(4) + @@ -462,7 +462,7 @@ Signed-off-by: Steven Barth 0; } -@@ -2138,6 +2381,9 @@ static int ip6_tnl_fill_info(struct sk_b +@@ -2148,6 +2391,9 @@ static int ip6_tnl_fill_info(struct sk_b { struct ip6_tnl *tunnel = netdev_priv(dev); struct __ip6_tnl_parm *parm = &tunnel->parms; @@ -472,7 +472,7 @@ Signed-off-by: Steven Barth if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) || nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) || -@@ -2147,9 +2393,27 @@ static int ip6_tnl_fill_info(struct sk_b +@@ -2157,9 +2403,27 @@ static int ip6_tnl_fill_info(struct sk_b nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) || nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) || nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) || @@ -501,7 +501,7 @@ Signed-off-by: Steven Barth if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) || nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) || nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) || -@@ -2189,6 +2453,7 @@ static const struct nla_policy ip6_tnl_p +@@ -2199,6 +2463,7 @@ static const struct nla_policy ip6_tnl_p [IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 }, [IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG }, [IFLA_IPTUN_FWMARK] = { .type = NLA_U32 }, diff --git a/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch b/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch index 606e053513..df5bef9fcd 100644 --- a/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch +++ b/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch @@ -55,7 +55,7 @@ Signed-off-by: Pablo Neira Ayuso --- a/net/netfilter/nft_flow_offload.c +++ b/net/netfilter/nft_flow_offload.c -@@ -446,47 +446,14 @@ static struct nft_expr_type nft_flow_off +@@ -451,47 +451,14 @@ static struct nft_expr_type nft_flow_off .owner = THIS_MODULE, }; diff --git a/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch b/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch index 892887c423..69ff9d5797 100644 --- a/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch +++ b/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch @@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c -@@ -7752,7 +7752,7 @@ static int nft_register_flowtable_net_ho +@@ -7760,7 +7760,7 @@ static int nft_register_flowtable_net_ho err = flowtable->data.type->setup(&flowtable->data, hook->ops.dev, FLOW_BLOCK_BIND); diff --git a/target/linux/generic/pending-5.15/750-skb-Do-mix-page-pool-and-page-referenced-frags-in-GR.patch b/target/linux/generic/pending-5.15/750-skb-Do-mix-page-pool-and-page-referenced-frags-in-GR.patch index 2a57a7ef03..8e2f3a9475 100644 --- a/target/linux/generic/pending-5.15/750-skb-Do-mix-page-pool-and-page-referenced-frags-in-GR.patch +++ b/target/linux/generic/pending-5.15/750-skb-Do-mix-page-pool-and-page-referenced-frags-in-GR.patch @@ -17,7 +17,7 @@ Signed-off-by: Alexander Duyck --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -4358,6 +4358,15 @@ int skb_gro_receive(struct sk_buff *p, s +@@ -4359,6 +4359,15 @@ int skb_gro_receive(struct sk_buff *p, s if (unlikely(p->len + len >= 65536 || NAPI_GRO_CB(skb)->flush)) return -E2BIG; diff --git a/target/linux/generic/pending-5.15/790-bus-mhi-core-add-SBL-state-callback.patch b/target/linux/generic/pending-5.15/790-bus-mhi-core-add-SBL-state-callback.patch index 2f728fefd7..6402dd9066 100644 --- a/target/linux/generic/pending-5.15/790-bus-mhi-core-add-SBL-state-callback.patch +++ b/target/linux/generic/pending-5.15/790-bus-mhi-core-add-SBL-state-callback.patch @@ -20,7 +20,7 @@ Signed-off-by: Robert Marko --- a/drivers/bus/mhi/host/main.c +++ b/drivers/bus/mhi/host/main.c -@@ -891,6 +891,7 @@ int mhi_process_ctrl_ev_ring(struct mhi_ +@@ -896,6 +896,7 @@ int mhi_process_ctrl_ev_ring(struct mhi_ switch (event) { case MHI_EE_SBL: st = DEV_ST_TRANSITION_SBL; diff --git a/target/linux/generic/pending-5.15/810-pci_disable_common_quirks.patch b/target/linux/generic/pending-5.15/810-pci_disable_common_quirks.patch index 153b5d06cf..f7f16ee37d 100644 --- a/target/linux/generic/pending-5.15/810-pci_disable_common_quirks.patch +++ b/target/linux/generic/pending-5.15/810-pci_disable_common_quirks.patch @@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos /* * The Mellanox Tavor device gives false positive parity errors. Disable * parity error reporting. -@@ -3365,6 +3366,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I +@@ -3368,6 +3369,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata); @@ -42,7 +42,7 @@ Signed-off-by: Gabor Juhos /* * Ivytown NTB BAR sizes are misreported by the hardware due to an erratum. * To work around this, query the size it should be configured to by the -@@ -3390,6 +3393,8 @@ static void quirk_intel_ntb(struct pci_d +@@ -3393,6 +3396,8 @@ static void quirk_intel_ntb(struct pci_d DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb); @@ -51,7 +51,7 @@ Signed-off-by: Gabor Juhos /* * Some BIOS implementations leave the Intel GPU interrupts enabled, even * though no one is handling them (e.g., if the i915 driver is never -@@ -3428,6 +3433,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN +@@ -3431,6 +3436,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); diff --git a/target/linux/octeontx/patches-5.15/0004-PCI-add-quirk-for-Gateworks-PLX-PEX860x-switch-with-.patch b/target/linux/octeontx/patches-5.15/0004-PCI-add-quirk-for-Gateworks-PLX-PEX860x-switch-with-.patch index 6dd02bed54..bb2dbeb4f8 100644 --- a/target/linux/octeontx/patches-5.15/0004-PCI-add-quirk-for-Gateworks-PLX-PEX860x-switch-with-.patch +++ b/target/linux/octeontx/patches-5.15/0004-PCI-add-quirk-for-Gateworks-PLX-PEX860x-switch-with-.patch @@ -22,7 +22,7 @@ Signed-off-by: Tim Harvey #include #include #include -@@ -5883,3 +5884,34 @@ static void nvidia_ion_ahci_fixup(struct +@@ -5899,3 +5900,34 @@ static void nvidia_ion_ahci_fixup(struct pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING; } DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup); From 387fde0da0e8fd51ab95f35ab33dfbd4969f32bb Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 Mar 2024 12:25:27 +0100 Subject: [PATCH 04/31] kernel: bump 5.15 to 5.15.150 Removed because it is upstream: bcm53xx/patches-5.15/030-v5.16-0019-ARM-dts-BCM53573-Describe-on-SoC-BCM53125-rev-4-swit.patch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=cb1003c07e746e4e82bdd3959c9ea37018ed41a3 Removed because it is upstream: bcm53xx/patches-5.15/037-v6.6-0004-ARM-dts-BCM53573-Drop-nonexistent-default-off-LED-tr.patch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=c65a23e98e38dc991f495d6bdb3cfa6163a88a0c Removed because it is upstream: bcm53xx/patches-5.15/037-v6.6-0005-ARM-dts-BCM53573-Drop-nonexistent-usb-cells.patch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=71475bcee001cae3844644c2787eef93b26489d1 Adapted hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch to match the changes from the upstream flow offload patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=7c71b831220edeab7ce603d818dc1708d9ea4137 Manually Adapted the following patch: bcm53xx/patches-5.15/035-v6.2-0004-ARM-dts-broadcom-align-LED-node-names-with-dtschema.patch Signed-off-by: Hauke Mehrtens --- include/kernel-5.15 | 4 +- ...core_get_rate_recalc-in-clk_rate_get.patch | 2 +- ...-Describe-on-SoC-BCM53125-rev-4-swit.patch | 44 -------------- ...-align-gpio-key-node-names-with-dtsc.patch | 4 +- ...m-align-LED-node-names-with-dtschema.patch | 8 +-- ...-Drop-nonexistent-default-off-LED-tr.patch | 57 ------------------- ...-BCM53573-Drop-nonexistent-usb-cells.patch | 32 ----------- ...support-for-performing-fake-doorbell.patch | 2 +- ...-v6.1-05-mm-multi-gen-LRU-groundwork.patch | 2 +- ...mvebu-Make-SATA-PHY-optional-for-Arm.patch | 4 +- ...icro-stmmac-move-queue-reset-to-dedi.patch | 8 +-- ...icro-stmmac-move-dma-conf-to-dedicat.patch | 42 +++++++------- ...icro-stmmac-generate-stmmac-dma-conf.patch | 16 +++--- ...-netfilter-add-xt_FLOWOFFLOAD-target.patch | 21 ++++--- ...ow_offload-handle-netdevice-events-f.patch | 4 +- ...les-ignore-EOPNOTSUPP-on-flowtable-d.patch | 2 +- .../lantiq/patches-5.15/0152-lantiq-VPE.patch | 8 +-- .../patches-5.15/0155-lantiq-VPE-nosmp.patch | 2 +- ...le-all-hardware-interrupts-on-second.patch | 6 +- ...egister-smp_ops-on-non-smp-platforms.patch | 2 +- 20 files changed, 69 insertions(+), 201 deletions(-) delete mode 100644 target/linux/bcm53xx/patches-5.15/030-v5.16-0019-ARM-dts-BCM53573-Describe-on-SoC-BCM53125-rev-4-swit.patch delete mode 100644 target/linux/bcm53xx/patches-5.15/037-v6.6-0004-ARM-dts-BCM53573-Drop-nonexistent-default-off-LED-tr.patch delete mode 100644 target/linux/bcm53xx/patches-5.15/037-v6.6-0005-ARM-dts-BCM53573-Drop-nonexistent-usb-cells.patch diff --git a/include/kernel-5.15 b/include/kernel-5.15 index 9ab2d04fc6..58573657d6 100644 --- a/include/kernel-5.15 +++ b/include/kernel-5.15 @@ -1,2 +1,2 @@ -LINUX_VERSION-5.15 = .149 -LINUX_KERNEL_HASH-5.15.149 = bd84809a367eb400eb04e0e70294e6ba12fc03b6bfb5a7dfaca548f8947501b0 +LINUX_VERSION-5.15 = .150 +LINUX_KERNEL_HASH-5.15.150 = ee05592b458e7fcdc515b43605883a10cc2f65f2e2b58d60af8a72b93467e4d4 diff --git a/target/linux/at91/patches-5.15/109-clk-use-clk_core_get_rate_recalc-in-clk_rate_get.patch b/target/linux/at91/patches-5.15/109-clk-use-clk_core_get_rate_recalc-in-clk_rate_get.patch index 32e760ac17..9d9715381a 100644 --- a/target/linux/at91/patches-5.15/109-clk-use-clk_core_get_rate_recalc-in-clk_rate_get.patch +++ b/target/linux/at91/patches-5.15/109-clk-use-clk_core_get_rate_recalc-in-clk_rate_get.patch @@ -18,7 +18,7 @@ Signed-off-by: Stephen Boyd --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c -@@ -3131,7 +3131,10 @@ static int clk_rate_get(void *data, u64 +@@ -3142,7 +3142,10 @@ static int clk_rate_get(void *data, u64 { struct clk_core *core = data; diff --git a/target/linux/bcm53xx/patches-5.15/030-v5.16-0019-ARM-dts-BCM53573-Describe-on-SoC-BCM53125-rev-4-swit.patch b/target/linux/bcm53xx/patches-5.15/030-v5.16-0019-ARM-dts-BCM53573-Describe-on-SoC-BCM53125-rev-4-swit.patch deleted file mode 100644 index 914117cb2c..0000000000 --- a/target/linux/bcm53xx/patches-5.15/030-v5.16-0019-ARM-dts-BCM53573-Describe-on-SoC-BCM53125-rev-4-swit.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 9fb90ae6cae7f8fe4fbf626945f32cd9da2c3892 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= -Date: Mon, 20 Sep 2021 16:10:23 +0200 -Subject: [PATCH] ARM: dts: BCM53573: Describe on-SoC BCM53125 rev 4 switch -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -BCM53573 family SoC have Ethernet switch connected to the first Ethernet -controller (accessible over MDIO). - -Signed-off-by: RafaÅ‚ MiÅ‚ecki -Signed-off-by: Florian Fainelli ---- - arch/arm/boot/dts/bcm53573.dtsi | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - ---- a/arch/arm/boot/dts/bcm53573.dtsi -+++ b/arch/arm/boot/dts/bcm53573.dtsi -@@ -183,6 +183,24 @@ - - gmac0: ethernet@5000 { - reg = <0x5000 0x1000>; -+ -+ mdio { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ switch: switch@1e { -+ compatible = "brcm,bcm53125"; -+ reg = <0x1e>; -+ -+ status = "disabled"; -+ -+ /* ports are defined in board DTS */ -+ ports { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ }; -+ }; - }; - - gmac1: ethernet@b000 { diff --git a/target/linux/bcm53xx/patches-5.15/034-v6.0-0001-ARM-dts-broadcom-align-gpio-key-node-names-with-dtsc.patch b/target/linux/bcm53xx/patches-5.15/034-v6.0-0001-ARM-dts-broadcom-align-gpio-key-node-names-with-dtsc.patch index f929dc3b60..1c0708a5f0 100644 --- a/target/linux/bcm53xx/patches-5.15/034-v6.0-0001-ARM-dts-broadcom-align-gpio-key-node-names-with-dtsc.patch +++ b/target/linux/bcm53xx/patches-5.15/034-v6.0-0001-ARM-dts-broadcom-align-gpio-key-node-names-with-dtsc.patch @@ -781,7 +781,7 @@ Signed-off-by: Florian Fainelli gpios = <&chipcommon 17 GPIO_ACTIVE_LOW>; --- a/arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts +++ b/arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts -@@ -39,7 +39,7 @@ +@@ -38,7 +38,7 @@ gpio-keys { compatible = "gpio-keys"; @@ -792,7 +792,7 @@ Signed-off-by: Florian Fainelli gpios = <&chipcommon 7 GPIO_ACTIVE_LOW>; --- a/arch/arm/boot/dts/bcm47189-luxul-xap-810.dts +++ b/arch/arm/boot/dts/bcm47189-luxul-xap-810.dts -@@ -49,7 +49,7 @@ +@@ -47,7 +47,7 @@ gpio-keys { compatible = "gpio-keys"; diff --git a/target/linux/bcm53xx/patches-5.15/035-v6.2-0004-ARM-dts-broadcom-align-LED-node-names-with-dtschema.patch b/target/linux/bcm53xx/patches-5.15/035-v6.2-0004-ARM-dts-broadcom-align-LED-node-names-with-dtschema.patch index d6bf49d0cd..a53070a506 100644 --- a/target/linux/bcm53xx/patches-5.15/035-v6.2-0004-ARM-dts-broadcom-align-LED-node-names-with-dtschema.patch +++ b/target/linux/bcm53xx/patches-5.15/035-v6.2-0004-ARM-dts-broadcom-align-LED-node-names-with-dtschema.patch @@ -1514,7 +1514,7 @@ Signed-off-by: Florian Fainelli }; --- a/arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts +++ b/arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts -@@ -23,13 +23,13 @@ +@@ -23,12 +23,12 @@ leds { compatible = "gpio-leds"; @@ -1522,7 +1522,6 @@ Signed-off-by: Florian Fainelli + led-wlan { label = "bcm53xx:blue:wlan"; gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>; - linux,default-trigger = "default-off"; }; - system { @@ -1532,7 +1531,7 @@ Signed-off-by: Florian Fainelli linux,default-trigger = "timer"; --- a/arch/arm/boot/dts/bcm47189-luxul-xap-810.dts +++ b/arch/arm/boot/dts/bcm47189-luxul-xap-810.dts -@@ -20,26 +20,26 @@ +@@ -20,25 +20,25 @@ reg = <0x00000000 0x08000000>; }; @@ -1544,7 +1543,6 @@ Signed-off-by: Florian Fainelli + led-5ghz { label = "bcm53xx:blue:5ghz"; gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "default-off"; }; - system { @@ -1563,7 +1561,7 @@ Signed-off-by: Florian Fainelli + led-2ghz { label = "bcm53xx:blue:2ghz"; gpios = <&pcie0_chipcommon 3 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "default-off"; + }; --- a/arch/arm/boot/dts/bcm47189-tenda-ac9.dts +++ b/arch/arm/boot/dts/bcm47189-tenda-ac9.dts @@ -20,37 +20,37 @@ diff --git a/target/linux/bcm53xx/patches-5.15/037-v6.6-0004-ARM-dts-BCM53573-Drop-nonexistent-default-off-LED-tr.patch b/target/linux/bcm53xx/patches-5.15/037-v6.6-0004-ARM-dts-BCM53573-Drop-nonexistent-default-off-LED-tr.patch deleted file mode 100644 index 8bad76edca..0000000000 --- a/target/linux/bcm53xx/patches-5.15/037-v6.6-0004-ARM-dts-BCM53573-Drop-nonexistent-default-off-LED-tr.patch +++ /dev/null @@ -1,57 +0,0 @@ -From be7e1e5b0f67c58ec4be0a54db23b6a4fa6e2116 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= -Date: Fri, 7 Jul 2023 13:40:01 +0200 -Subject: [PATCH] ARM: dts: BCM53573: Drop nonexistent "default-off" LED - trigger -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -There is no such trigger documented or implemented in Linux. It was a -copy & paste mistake. - -This fixes: -arch/arm/boot/dts/broadcom/bcm47189-luxul-xap-1440.dtb: leds: led-wlan:linux,default-trigger: 'oneOf' conditional failed, one must be fixed: - 'default-off' is not one of ['backlight', 'default-on', 'heartbeat', 'disk-activity', 'disk-read', 'disk-write', 'timer', 'pattern', 'audio-micmute', 'audio-mute', 'bluetooth-power', 'flash', 'kbd-capslock', 'mtd', 'nand-disk', 'none', 'torch', 'usb-gadget', 'usb-host', 'usbport'] - 'default-off' does not match '^cpu[0-9]*$' - 'default-off' does not match '^hci[0-9]+-power$' - 'default-off' does not match '^mmc[0-9]+$' - 'default-off' does not match '^phy[0-9]+tx$' - From schema: Documentation/devicetree/bindings/leds/leds-gpio.yaml - -Signed-off-by: RafaÅ‚ MiÅ‚ecki -Link: https://lore.kernel.org/r/20230707114004.2740-1-zajec5@gmail.com -Signed-off-by: Florian Fainelli ---- - arch/arm/boot/dts/broadcom/bcm47189-luxul-xap-1440.dts | 1 - - arch/arm/boot/dts/broadcom/bcm47189-luxul-xap-810.dts | 2 -- - 2 files changed, 3 deletions(-) - ---- a/arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts -+++ b/arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts -@@ -26,7 +26,6 @@ - led-wlan { - label = "bcm53xx:blue:wlan"; - gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>; -- linux,default-trigger = "default-off"; - }; - - led-system { ---- a/arch/arm/boot/dts/bcm47189-luxul-xap-810.dts -+++ b/arch/arm/boot/dts/bcm47189-luxul-xap-810.dts -@@ -26,7 +26,6 @@ - led-5ghz { - label = "bcm53xx:blue:5ghz"; - gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>; -- linux,default-trigger = "default-off"; - }; - - led-system { -@@ -42,7 +41,6 @@ - led-2ghz { - label = "bcm53xx:blue:2ghz"; - gpios = <&pcie0_chipcommon 3 GPIO_ACTIVE_HIGH>; -- linux,default-trigger = "default-off"; - }; - }; - diff --git a/target/linux/bcm53xx/patches-5.15/037-v6.6-0005-ARM-dts-BCM53573-Drop-nonexistent-usb-cells.patch b/target/linux/bcm53xx/patches-5.15/037-v6.6-0005-ARM-dts-BCM53573-Drop-nonexistent-usb-cells.patch deleted file mode 100644 index e7a1835d47..0000000000 --- a/target/linux/bcm53xx/patches-5.15/037-v6.6-0005-ARM-dts-BCM53573-Drop-nonexistent-usb-cells.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 05d2c3d552b8c92fc397377d9d1112fc58e2cd59 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= -Date: Fri, 7 Jul 2023 13:40:02 +0200 -Subject: [PATCH] ARM: dts: BCM53573: Drop nonexistent #usb-cells -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Such property simply doesn't exist (is not documented or used anywhere). - -This fixes: -arch/arm/boot/dts/broadcom/bcm47189-luxul-xap-1440.dtb: usb@d000: Unevaluated properties are not allowed ('#usb-cells' was unexpected) - From schema: Documentation/devicetree/bindings/usb/generic-ohci.yaml - -Signed-off-by: RafaÅ‚ MiÅ‚ecki -Link: https://lore.kernel.org/r/20230707114004.2740-2-zajec5@gmail.com -Signed-off-by: Florian Fainelli ---- - arch/arm/boot/dts/broadcom/bcm53573.dtsi | 2 -- - 1 file changed, 2 deletions(-) - ---- a/arch/arm/boot/dts/bcm53573.dtsi -+++ b/arch/arm/boot/dts/bcm53573.dtsi -@@ -159,8 +159,6 @@ - }; - - ohci: usb@d000 { -- #usb-cells = <0>; -- - compatible = "generic-ohci"; - reg = <0xd000 0x1000>; - interrupt-parent = <&gic>; diff --git a/target/linux/bcm53xx/patches-5.15/180-usb-xhci-add-support-for-performing-fake-doorbell.patch b/target/linux/bcm53xx/patches-5.15/180-usb-xhci-add-support-for-performing-fake-doorbell.patch index 49277ab251..1d3a21b6cd 100644 --- a/target/linux/bcm53xx/patches-5.15/180-usb-xhci-add-support-for-performing-fake-doorbell.patch +++ b/target/linux/bcm53xx/patches-5.15/180-usb-xhci-add-support-for-performing-fake-doorbell.patch @@ -109,7 +109,7 @@ it on BCM4708 family. --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h -@@ -1908,6 +1908,7 @@ struct xhci_hcd { +@@ -1907,6 +1907,7 @@ struct xhci_hcd { #define XHCI_RESET_TO_DEFAULT BIT_ULL(44) #define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45) #define XHCI_ZHAOXIN_HOST BIT_ULL(46) diff --git a/target/linux/generic/backport-5.15/020-v6.1-05-mm-multi-gen-LRU-groundwork.patch b/target/linux/generic/backport-5.15/020-v6.1-05-mm-multi-gen-LRU-groundwork.patch index 769384f500..969d721da6 100644 --- a/target/linux/generic/backport-5.15/020-v6.1-05-mm-multi-gen-LRU-groundwork.patch +++ b/target/linux/generic/backport-5.15/020-v6.1-05-mm-multi-gen-LRU-groundwork.patch @@ -538,7 +538,7 @@ Signed-off-by: Andrew Morton (1UL << PG_private | 1UL << PG_private_2) --- a/include/linux/sched.h +++ b/include/linux/sched.h -@@ -911,6 +911,10 @@ struct task_struct { +@@ -907,6 +907,10 @@ struct task_struct { #ifdef CONFIG_MEMCG unsigned in_user_fault:1; #endif diff --git a/target/linux/generic/backport-5.15/346-v5.18-01-Revert-ata-ahci-mvebu-Make-SATA-PHY-optional-for-Arm.patch b/target/linux/generic/backport-5.15/346-v5.18-01-Revert-ata-ahci-mvebu-Make-SATA-PHY-optional-for-Arm.patch index f225a21057..35bc19c1ef 100644 --- a/target/linux/generic/backport-5.15/346-v5.18-01-Revert-ata-ahci-mvebu-Make-SATA-PHY-optional-for-Arm.patch +++ b/target/linux/generic/backport-5.15/346-v5.18-01-Revert-ata-ahci-mvebu-Make-SATA-PHY-optional-for-Arm.patch @@ -31,15 +31,15 @@ Signed-off-by: Vinod Koul --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h -@@ -241,8 +241,6 @@ enum { +@@ -240,8 +240,6 @@ enum { as default lpm_policy */ AHCI_HFLAG_SUSPEND_PHYS = BIT(26), /* handle PHYs during suspend/resume */ - AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = BIT(27), /* ignore -EOPNOTSUPP - from phy_power_on() */ AHCI_HFLAG_NO_SXS = BIT(28), /* SXS not supported */ + AHCI_HFLAG_43BIT_ONLY = BIT(29), /* 43bit DMA addr limit */ - /* ap->flags bits */ --- a/drivers/ata/ahci_mvebu.c +++ b/drivers/ata/ahci_mvebu.c @@ -227,7 +227,7 @@ static const struct ahci_mvebu_plat_data diff --git a/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch b/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch index 7742c4a958..32dab26eb5 100644 --- a/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch +++ b/target/linux/generic/backport-5.15/775-v6.0-01-net-ethernet-stmicro-stmmac-move-queue-reset-to-dedi.patch @@ -71,7 +71,7 @@ Signed-off-by: Jakub Kicinski ret = stmmac_hw_setup(dev, true); if (ret < 0) { netdev_err(priv->dev, "%s: Hw setup failed\n", __func__); -@@ -6430,6 +6423,7 @@ void stmmac_enable_rx_queue(struct stmma +@@ -6410,6 +6403,7 @@ void stmmac_enable_rx_queue(struct stmma return; } @@ -79,7 +79,7 @@ Signed-off-by: Jakub Kicinski stmmac_clear_rx_descriptors(priv, queue); stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, -@@ -6491,6 +6485,7 @@ void stmmac_enable_tx_queue(struct stmma +@@ -6471,6 +6465,7 @@ void stmmac_enable_tx_queue(struct stmma return; } @@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski stmmac_clear_tx_descriptors(priv, queue); stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, -@@ -7418,6 +7413,25 @@ int stmmac_suspend(struct device *dev) +@@ -7398,6 +7393,25 @@ int stmmac_suspend(struct device *dev) } EXPORT_SYMBOL_GPL(stmmac_suspend); @@ -113,7 +113,7 @@ Signed-off-by: Jakub Kicinski /** * stmmac_reset_queues_param - reset queue parameters * @priv: device pointer -@@ -7428,22 +7442,11 @@ static void stmmac_reset_queues_param(st +@@ -7408,22 +7422,11 @@ static void stmmac_reset_queues_param(st u32 tx_cnt = priv->plat->tx_queues_to_use; u32 queue; diff --git a/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch b/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch index e259668b86..0f8ca79d60 100644 --- a/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch +++ b/target/linux/generic/backport-5.15/775-v6.0-03-net-ethernet-stmicro-stmmac-move-dma-conf-to-dedicat.patch @@ -1033,7 +1033,7 @@ Signed-off-by: Jakub Kicinski /* Data payload appended into SKB */ page_pool_release_page(rx_q->page_pool, buf->sec_page); -@@ -5768,11 +5768,13 @@ static irqreturn_t stmmac_safety_interru +@@ -5758,11 +5758,13 @@ static irqreturn_t stmmac_safety_interru static irqreturn_t stmmac_msi_intr_tx(int irq, void *data) { struct stmmac_tx_queue *tx_q = (struct stmmac_tx_queue *)data; @@ -1046,9 +1046,9 @@ Signed-off-by: Jakub Kicinski + dma_conf = container_of(tx_q, struct stmmac_dma_conf, tx_queue[chan]); + priv = container_of(dma_conf, struct stmmac_priv, dma_conf); - if (unlikely(!data)) { - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); -@@ -5812,10 +5814,12 @@ static irqreturn_t stmmac_msi_intr_tx(in + /* Check if adapter is up */ + if (test_bit(STMMAC_DOWN, &priv->state)) +@@ -5797,10 +5799,12 @@ static irqreturn_t stmmac_msi_intr_tx(in static irqreturn_t stmmac_msi_intr_rx(int irq, void *data) { struct stmmac_rx_queue *rx_q = (struct stmmac_rx_queue *)data; @@ -1060,9 +1060,9 @@ Signed-off-by: Jakub Kicinski + dma_conf = container_of(rx_q, struct stmmac_dma_conf, rx_queue[chan]); + priv = container_of(dma_conf, struct stmmac_priv, dma_conf); - if (unlikely(!data)) { - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); -@@ -5846,10 +5850,10 @@ static void stmmac_poll_controller(struc + /* Check if adapter is up */ + if (test_bit(STMMAC_DOWN, &priv->state)) +@@ -5826,10 +5830,10 @@ static void stmmac_poll_controller(struc if (priv->plat->multi_msi_en) { for (i = 0; i < priv->plat->rx_queues_to_use; i++) @@ -1075,7 +1075,7 @@ Signed-off-by: Jakub Kicinski } else { disable_irq(dev->irq); stmmac_interrupt(dev->irq, dev); -@@ -6030,34 +6034,34 @@ static int stmmac_rings_status_show(stru +@@ -6010,34 +6014,34 @@ static int stmmac_rings_status_show(stru return 0; for (queue = 0; queue < rx_count; queue++) { @@ -1116,7 +1116,7 @@ Signed-off-by: Jakub Kicinski } } -@@ -6404,7 +6408,7 @@ void stmmac_disable_rx_queue(struct stmm +@@ -6384,7 +6388,7 @@ void stmmac_disable_rx_queue(struct stmm void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue) { @@ -1125,7 +1125,7 @@ Signed-off-by: Jakub Kicinski struct stmmac_channel *ch = &priv->channel[queue]; unsigned long flags; u32 buf_size; -@@ -6441,7 +6445,7 @@ void stmmac_enable_rx_queue(struct stmma +@@ -6421,7 +6425,7 @@ void stmmac_enable_rx_queue(struct stmma rx_q->queue_index); } else { stmmac_set_dma_bfsize(priv, priv->ioaddr, @@ -1134,7 +1134,7 @@ Signed-off-by: Jakub Kicinski rx_q->queue_index); } -@@ -6467,7 +6471,7 @@ void stmmac_disable_tx_queue(struct stmm +@@ -6447,7 +6451,7 @@ void stmmac_disable_tx_queue(struct stmm void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue) { @@ -1143,7 +1143,7 @@ Signed-off-by: Jakub Kicinski struct stmmac_channel *ch = &priv->channel[queue]; unsigned long flags; int ret; -@@ -6517,7 +6521,7 @@ void stmmac_xdp_release(struct net_devic +@@ -6497,7 +6501,7 @@ void stmmac_xdp_release(struct net_devic stmmac_disable_all_queues(priv); for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) @@ -1152,7 +1152,7 @@ Signed-off-by: Jakub Kicinski /* Free the IRQ lines */ stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0); -@@ -6576,7 +6580,7 @@ int stmmac_xdp_open(struct net_device *d +@@ -6556,7 +6560,7 @@ int stmmac_xdp_open(struct net_device *d /* DMA RX Channel Configuration */ for (chan = 0; chan < rx_cnt; chan++) { @@ -1161,7 +1161,7 @@ Signed-off-by: Jakub Kicinski stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, rx_q->dma_rx_phy, chan); -@@ -6594,7 +6598,7 @@ int stmmac_xdp_open(struct net_device *d +@@ -6574,7 +6578,7 @@ int stmmac_xdp_open(struct net_device *d rx_q->queue_index); } else { stmmac_set_dma_bfsize(priv, priv->ioaddr, @@ -1170,7 +1170,7 @@ Signed-off-by: Jakub Kicinski rx_q->queue_index); } -@@ -6603,7 +6607,7 @@ int stmmac_xdp_open(struct net_device *d +@@ -6583,7 +6587,7 @@ int stmmac_xdp_open(struct net_device *d /* DMA TX Channel Configuration */ for (chan = 0; chan < tx_cnt; chan++) { @@ -1179,7 +1179,7 @@ Signed-off-by: Jakub Kicinski stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, tx_q->dma_tx_phy, chan); -@@ -6636,7 +6640,7 @@ int stmmac_xdp_open(struct net_device *d +@@ -6616,7 +6620,7 @@ int stmmac_xdp_open(struct net_device *d irq_error: for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) @@ -1188,7 +1188,7 @@ Signed-off-by: Jakub Kicinski stmmac_hw_teardown(dev); init_error: -@@ -6663,8 +6667,8 @@ int stmmac_xsk_wakeup(struct net_device +@@ -6643,8 +6647,8 @@ int stmmac_xsk_wakeup(struct net_device queue >= priv->plat->tx_queues_to_use) return -EINVAL; @@ -1199,7 +1199,7 @@ Signed-off-by: Jakub Kicinski ch = &priv->channel[queue]; if (!rx_q->xsk_pool && !tx_q->xsk_pool) -@@ -6924,8 +6928,8 @@ int stmmac_reinit_ringparam(struct net_d +@@ -6904,8 +6908,8 @@ int stmmac_reinit_ringparam(struct net_d if (netif_running(dev)) stmmac_release(dev); @@ -1210,7 +1210,7 @@ Signed-off-by: Jakub Kicinski if (netif_running(dev)) ret = stmmac_open(dev); -@@ -7363,7 +7367,7 @@ int stmmac_suspend(struct device *dev) +@@ -7343,7 +7347,7 @@ int stmmac_suspend(struct device *dev) stmmac_disable_all_queues(priv); for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) @@ -1219,7 +1219,7 @@ Signed-off-by: Jakub Kicinski if (priv->eee_enabled) { priv->tx_path_in_lpi_mode = false; -@@ -7415,7 +7419,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend); +@@ -7395,7 +7399,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend); static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue) { @@ -1228,7 +1228,7 @@ Signed-off-by: Jakub Kicinski rx_q->cur_rx = 0; rx_q->dirty_rx = 0; -@@ -7423,7 +7427,7 @@ static void stmmac_reset_rx_queue(struct +@@ -7403,7 +7407,7 @@ static void stmmac_reset_rx_queue(struct static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue) { diff --git a/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch b/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch index e82f6d6943..b3ca0d5c71 100644 --- a/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch +++ b/target/linux/generic/backport-5.15/775-v6.0-04-net-ethernet-stmicro-stmmac-generate-stmmac-dma-conf.patch @@ -1045,7 +1045,7 @@ Signed-off-by: Jakub Kicinski /* Disable the MAC Rx/Tx */ stmmac_mac_set(priv, priv->ioaddr, false); -@@ -6403,7 +6519,7 @@ void stmmac_disable_rx_queue(struct stmm +@@ -6383,7 +6499,7 @@ void stmmac_disable_rx_queue(struct stmm spin_unlock_irqrestore(&ch->lock, flags); stmmac_stop_rx_dma(priv, queue); @@ -1054,7 +1054,7 @@ Signed-off-by: Jakub Kicinski } void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue) -@@ -6414,21 +6530,21 @@ void stmmac_enable_rx_queue(struct stmma +@@ -6394,21 +6510,21 @@ void stmmac_enable_rx_queue(struct stmma u32 buf_size; int ret; @@ -1080,7 +1080,7 @@ Signed-off-by: Jakub Kicinski stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, rx_q->dma_rx_phy, rx_q->queue_index); -@@ -6466,7 +6582,7 @@ void stmmac_disable_tx_queue(struct stmm +@@ -6446,7 +6562,7 @@ void stmmac_disable_tx_queue(struct stmm spin_unlock_irqrestore(&ch->lock, flags); stmmac_stop_tx_dma(priv, queue); @@ -1089,7 +1089,7 @@ Signed-off-by: Jakub Kicinski } void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue) -@@ -6476,21 +6592,21 @@ void stmmac_enable_tx_queue(struct stmma +@@ -6456,21 +6572,21 @@ void stmmac_enable_tx_queue(struct stmma unsigned long flags; int ret; @@ -1115,7 +1115,7 @@ Signed-off-by: Jakub Kicinski stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, tx_q->dma_tx_phy, tx_q->queue_index); -@@ -6530,7 +6646,7 @@ void stmmac_xdp_release(struct net_devic +@@ -6510,7 +6626,7 @@ void stmmac_xdp_release(struct net_devic stmmac_stop_all_dma(priv); /* Release and free the Rx/Tx resources */ @@ -1124,7 +1124,7 @@ Signed-off-by: Jakub Kicinski /* Disable the MAC Rx/Tx */ stmmac_mac_set(priv, priv->ioaddr, false); -@@ -6555,14 +6671,14 @@ int stmmac_xdp_open(struct net_device *d +@@ -6535,14 +6651,14 @@ int stmmac_xdp_open(struct net_device *d u32 chan; int ret; @@ -1141,7 +1141,7 @@ Signed-off-by: Jakub Kicinski if (ret < 0) { netdev_err(dev, "%s: DMA descriptors initialization failed\n", __func__); -@@ -6644,7 +6760,7 @@ irq_error: +@@ -6624,7 +6740,7 @@ irq_error: stmmac_hw_teardown(dev); init_error: @@ -1150,7 +1150,7 @@ Signed-off-by: Jakub Kicinski dma_desc_error: return ret; } -@@ -7510,7 +7626,7 @@ int stmmac_resume(struct device *dev) +@@ -7490,7 +7606,7 @@ int stmmac_resume(struct device *dev) stmmac_reset_queues_param(priv); stmmac_free_tx_skbufs(priv); diff --git a/target/linux/generic/hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch b/target/linux/generic/hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch index aa6c668558..da60334498 100644 --- a/target/linux/generic/hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch +++ b/target/linux/generic/hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch @@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o --- /dev/null +++ b/net/netfilter/xt_FLOWOFFLOAD.c -@@ -0,0 +1,698 @@ +@@ -0,0 +1,701 @@ +/* + * Copyright (C) 2018-2021 Felix Fietkau + * @@ -544,10 +544,15 @@ Signed-off-by: Felix Fietkau + break; + } + -+ nf_route(xt_net(par), &other_dst, &fl, false, xt_family(par)); -+ if (!other_dst) ++ if (!dst_hold_safe(this_dst)) + return -ENOENT; + ++ nf_route(xt_net(par), &other_dst, &fl, false, xt_family(par)); ++ if (!other_dst) { ++ dst_release(this_dst); ++ return -ENOENT; ++ } ++ + nf_default_forward_path(route, this_dst, dir, devs); + nf_default_forward_path(route, other_dst, !dir, devs); + @@ -622,8 +627,7 @@ Signed-off-by: Felix Fietkau + if (!flow) + goto err_flow_alloc; + -+ if (flow_offload_route_init(flow, &route) < 0) -+ goto err_flow_add; ++ flow_offload_route_init(flow, &route); + + if (tcph) { + ct->proto.tcp.seen[0].flags |= IP_CT_TCP_FLAG_BE_LIBERAL; @@ -642,13 +646,12 @@ Signed-off-by: Felix Fietkau + xt_flowoffload_check_device(table, devs[0]); + xt_flowoffload_check_device(table, devs[1]); + -+ dst_release(route.tuple[!dir].dst); -+ + return XT_CONTINUE; + +err_flow_add: + flow_offload_free(flow); +err_flow_alloc: ++ dst_release(route.tuple[dir].dst); + dst_release(route.tuple[!dir].dst); +err_flow_route: + clear_bit(IPS_OFFLOAD_BIT, &ct->status); @@ -807,7 +810,7 @@ Signed-off-by: Felix Fietkau #include #include #include -@@ -380,8 +379,7 @@ flow_offload_lookup(struct nf_flowtable +@@ -373,8 +372,7 @@ flow_offload_lookup(struct nf_flowtable } EXPORT_SYMBOL_GPL(flow_offload_lookup); @@ -817,7 +820,7 @@ Signed-off-by: Felix Fietkau void (*iter)(struct nf_flowtable *flowtable, struct flow_offload *flow, void *data), void *data) -@@ -435,6 +433,7 @@ static void nf_flow_offload_gc_step(stru +@@ -428,6 +426,7 @@ static void nf_flow_offload_gc_step(stru nf_flow_offload_stats(flow_table, flow); } } diff --git a/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch b/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch index df5bef9fcd..8c75554033 100644 --- a/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch +++ b/target/linux/generic/pending-5.15/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch @@ -10,7 +10,7 @@ Signed-off-by: Pablo Neira Ayuso --- a/net/netfilter/nf_flow_table_core.c +++ b/net/netfilter/nf_flow_table_core.c -@@ -613,13 +613,41 @@ void nf_flow_table_free(struct nf_flowta +@@ -606,13 +606,41 @@ void nf_flow_table_free(struct nf_flowta } EXPORT_SYMBOL_GPL(nf_flow_table_free); @@ -55,7 +55,7 @@ Signed-off-by: Pablo Neira Ayuso --- a/net/netfilter/nft_flow_offload.c +++ b/net/netfilter/nft_flow_offload.c -@@ -451,47 +451,14 @@ static struct nft_expr_type nft_flow_off +@@ -455,47 +455,14 @@ static struct nft_expr_type nft_flow_off .owner = THIS_MODULE, }; diff --git a/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch b/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch index 69ff9d5797..196beffecf 100644 --- a/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch +++ b/target/linux/generic/pending-5.15/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch @@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c -@@ -7760,7 +7760,7 @@ static int nft_register_flowtable_net_ho +@@ -7763,7 +7763,7 @@ static int nft_register_flowtable_net_ho err = flowtable->data.type->setup(&flowtable->data, hook->ops.dev, FLOW_BLOCK_BIND); diff --git a/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch b/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch index e6a1361022..00917331c2 100644 --- a/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch +++ b/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch @@ -51,7 +51,7 @@ Signed-off-by: Stefan Koch #define read_vpe_c0_status() mftc0(12, 0) --- a/arch/mips/include/asm/vpe.h +++ b/arch/mips/include/asm/vpe.h -@@ -124,4 +124,13 @@ void cleanup_tc(struct tc *tc); +@@ -123,4 +123,13 @@ void cleanup_tc(struct tc *tc); int __init vpe_module_init(void); void __exit vpe_module_exit(void); @@ -75,7 +75,7 @@ Signed-off-by: Stefan Koch /* check we are the Master VPE */ local_irq_save(flags); -@@ -416,6 +417,8 @@ int __init vpe_module_init(void) +@@ -415,6 +416,8 @@ int __init vpe_module_init(void) } v->ntcs = hw_tcs - aprp_cpu_index(); @@ -84,7 +84,7 @@ Signed-off-by: Stefan Koch /* add the tc to the list of this vpe's tc's. */ list_add(&t->tc, &v->tc); -@@ -519,3 +522,47 @@ void __exit vpe_module_exit(void) +@@ -518,3 +521,47 @@ void __exit vpe_module_exit(void) release_vpe(v); } } @@ -178,7 +178,7 @@ Signed-off-by: Stefan Koch { --- a/arch/mips/lantiq/prom.c +++ b/arch/mips/lantiq/prom.c -@@ -34,10 +34,14 @@ unsigned long physical_memsize = 0L; +@@ -28,10 +28,14 @@ EXPORT_SYMBOL_GPL(ebu_lock); */ static struct ltq_soc_info soc_info; diff --git a/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch b/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch index 6562dc8bda..015acabcfe 100644 --- a/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch +++ b/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch @@ -10,7 +10,7 @@ Signed-off-by: Stefan Koch --- a/arch/mips/kernel/vpe-mt.c +++ b/arch/mips/kernel/vpe-mt.c -@@ -132,7 +132,10 @@ int vpe_run(struct vpe *v) +@@ -131,7 +131,10 @@ int vpe_run(struct vpe *v) * kernels need to turn it on, even if that wasn't the pre-dvpe() state. */ #ifdef CONFIG_SMP diff --git a/target/linux/lantiq/patches-5.15/0320-v6.1-MIPS-lantiq-enable-all-hardware-interrupts-on-second.patch b/target/linux/lantiq/patches-5.15/0320-v6.1-MIPS-lantiq-enable-all-hardware-interrupts-on-second.patch index d83a3616b3..d98664c478 100644 --- a/target/linux/lantiq/patches-5.15/0320-v6.1-MIPS-lantiq-enable-all-hardware-interrupts-on-second.patch +++ b/target/linux/lantiq/patches-5.15/0320-v6.1-MIPS-lantiq-enable-all-hardware-interrupts-on-second.patch @@ -39,7 +39,7 @@ Signed-off-by: Thomas Bogendoerfer --- a/arch/mips/lantiq/prom.c +++ b/arch/mips/lantiq/prom.c -@@ -37,6 +37,14 @@ static struct ltq_soc_info soc_info; +@@ -31,6 +31,14 @@ static struct ltq_soc_info soc_info; /* for Multithreading (APRP), vpe.c will use it */ unsigned long cp0_memsize; @@ -54,7 +54,7 @@ Signed-off-by: Thomas Bogendoerfer const char *get_system_type(void) { return soc_info.sys_type; -@@ -93,6 +101,17 @@ void __init device_tree_init(void) +@@ -87,6 +95,17 @@ void __init device_tree_init(void) unflatten_and_copy_device_tree(); } @@ -72,7 +72,7 @@ Signed-off-by: Thomas Bogendoerfer void __init prom_init(void) { /* call the soc specific detetcion code and get it to fill soc_info */ -@@ -104,7 +123,10 @@ void __init prom_init(void) +@@ -98,7 +117,10 @@ void __init prom_init(void) prom_init_cmdline(); #if defined(CONFIG_MIPS_MT_SMP) diff --git a/target/linux/lantiq/patches-5.15/0321-v6.8-MIPS-lantiq-register-smp_ops-on-non-smp-platforms.patch b/target/linux/lantiq/patches-5.15/0321-v6.8-MIPS-lantiq-register-smp_ops-on-non-smp-platforms.patch index 5339350e2f..1acf73b2d5 100644 --- a/target/linux/lantiq/patches-5.15/0321-v6.8-MIPS-lantiq-register-smp_ops-on-non-smp-platforms.patch +++ b/target/linux/lantiq/patches-5.15/0321-v6.8-MIPS-lantiq-register-smp_ops-on-non-smp-platforms.patch @@ -18,7 +18,7 @@ Signed-off-by: Thomas Bogendoerfer --- a/arch/mips/lantiq/prom.c +++ b/arch/mips/lantiq/prom.c -@@ -123,10 +123,9 @@ void __init prom_init(void) +@@ -117,10 +117,9 @@ void __init prom_init(void) prom_init_cmdline(); #if defined(CONFIG_MIPS_MT_SMP) From cd450923ab066ce35e8ce55340e66986f14a42d8 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 Mar 2024 12:34:19 +0100 Subject: [PATCH 05/31] kernel: Remove unused schedulers These schedulers were removed in kernel 5.15.150 and 6.1.180. Signed-off-by: Hauke Mehrtens --- target/linux/generic/config-5.15 | 3 --- target/linux/generic/config-6.1 | 3 --- 2 files changed, 6 deletions(-) diff --git a/target/linux/generic/config-5.15 b/target/linux/generic/config-5.15 index 5f82f0937d..6070000dd4 100644 --- a/target/linux/generic/config-5.15 +++ b/target/linux/generic/config-5.15 @@ -4139,15 +4139,12 @@ CONFIG_NET_IPGRE_BROADCAST=y CONFIG_NET_RX_BUSY_POLL=y # CONFIG_NET_SB1000 is not set CONFIG_NET_SCHED=y -# CONFIG_NET_SCH_ATM is not set # CONFIG_NET_SCH_CAKE is not set -# CONFIG_NET_SCH_CBQ is not set # CONFIG_NET_SCH_CBS is not set # CONFIG_NET_SCH_CHOKE is not set # CONFIG_NET_SCH_CODEL is not set CONFIG_NET_SCH_DEFAULT=y # CONFIG_NET_SCH_DRR is not set -# CONFIG_NET_SCH_DSMARK is not set # CONFIG_NET_SCH_ETF is not set # CONFIG_NET_SCH_ETS is not set CONFIG_NET_SCH_FIFO=y diff --git a/target/linux/generic/config-6.1 b/target/linux/generic/config-6.1 index b4aeeb9a70..8ad4700f73 100644 --- a/target/linux/generic/config-6.1 +++ b/target/linux/generic/config-6.1 @@ -4298,15 +4298,12 @@ CONFIG_NET_IPGRE_BROADCAST=y CONFIG_NET_RX_BUSY_POLL=y # CONFIG_NET_SB1000 is not set CONFIG_NET_SCHED=y -# CONFIG_NET_SCH_ATM is not set # CONFIG_NET_SCH_CAKE is not set -# CONFIG_NET_SCH_CBQ is not set # CONFIG_NET_SCH_CBS is not set # CONFIG_NET_SCH_CHOKE is not set # CONFIG_NET_SCH_CODEL is not set CONFIG_NET_SCH_DEFAULT=y # CONFIG_NET_SCH_DRR is not set -# CONFIG_NET_SCH_DSMARK is not set # CONFIG_NET_SCH_ETF is not set # CONFIG_NET_SCH_ETS is not set CONFIG_NET_SCH_FIFO=y From 662e05258895f068db6f9ab0eb48d356b6fe934f Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Thu, 22 Feb 2024 21:33:45 +0100 Subject: [PATCH 06/31] linux-firmware: Update to version 20240220 This updates the following firmware files: airoha-en8811h-firmware/lib/firmware/airoha/EthMD32.DSP.bin airoha-en8811h-firmware/lib/firmware/airoha/EthMD32.dm.bin amdgpu-firmware (Many files) ar3k-firmware/lib/firmware/qca/hpnv21.bin ar3k-firmware/lib/firmware/qca/hpnv21g.bin ath10k-board-qca4019/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin ath10k-board-qca9888/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin ath10k-firmware-qca6174/lib/firmware/ath10k/QCA6174/hw3.0/firmware-6.bin ath11k-firmware-wcn6750/lib/firmware/ath11k/WCN6750/hw1.0/board-2.bin ath11k-firmware-wcn6855/lib/firmware/ath11k/WCN6855/hw2.0/amss.bin ath11k-firmware-wcn6855/lib/firmware/ath11k/WCN6855/hw2.0/board-2.bin ath11k-firmware-wcn6855/lib/firmware/ath11k/WCN6855/hw2.1/amss.bin ath11k-firmware-wcn6855/lib/firmware/ath11k/WCN6855/hw2.1/board-2.bin ibt-firmware/lib/firmware/intel/ibt-0040-0041.ddc ibt-firmware/lib/firmware/intel/ibt-0040-0041.sfi ibt-firmware/lib/firmware/intel/ibt-0040-1050.sfi ibt-firmware/lib/firmware/intel/ibt-0040-4150.sfi ibt-firmware/lib/firmware/intel/ibt-0041-0041.sfi ibt-firmware/lib/firmware/intel/ibt-0180-0041.sfi ibt-firmware/lib/firmware/intel/ibt-0180-1050.sfi ibt-firmware/lib/firmware/intel/ibt-0180-4150.sfi ibt-firmware/lib/firmware/intel/ibt-1040-0041.sfi ibt-firmware/lib/firmware/intel/ibt-1040-4150.sfi iwlwifi-firmware-be200/lib/firmware/iwlwifi-gl-c0-fm-c0-83.ucode iwlwifi-firmware-be200/lib/firmware/iwlwifi-gl-c0-fm-c0.pnvm Signed-off-by: Hauke Mehrtens --- package/firmware/linux-firmware/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/firmware/linux-firmware/Makefile b/package/firmware/linux-firmware/Makefile index f7f1f978e3..d056140f45 100644 --- a/package/firmware/linux-firmware/Makefile +++ b/package/firmware/linux-firmware/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=linux-firmware -PKG_VERSION:=20231211 -PKG_RELEASE:=2 +PKG_VERSION:=20240220 +PKG_RELEASE:=1 PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=96af7e4b5eabd37869cdb3dcbb7ab36911106d39b76e799fa1caab16a9dbe8bb +PKG_HASH:=bf0f239dc0801e9d6bf5d5fb3e2f549575632cf4688f4348184199cb02c2bcd7 PKG_MAINTAINER:=Felix Fietkau From 4adba6415678dcdba2dbfa287466edaee30dc057 Mon Sep 17 00:00:00 2001 From: Tony Ambardar Date: Thu, 7 Mar 2024 01:21:40 -0800 Subject: [PATCH 07/31] kernel: 6.1: add missing config symbol for tracing Add missing option CONFIG_FPROBE to generic config, found building x86_64 arch with tracing enabled. Signed-off-by: Tony Ambardar --- target/linux/generic/config-6.1 | 1 + 1 file changed, 1 insertion(+) diff --git a/target/linux/generic/config-6.1 b/target/linux/generic/config-6.1 index 8ad4700f73..34a6503ce0 100644 --- a/target/linux/generic/config-6.1 +++ b/target/linux/generic/config-6.1 @@ -2182,6 +2182,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_FORCE_NR_CPUS is not set CONFIG_FORTIFY_SOURCE=y # CONFIG_FPGA is not set +# CONFIG_FPROBE is not set # CONFIG_FRAMEBUFFER_CONSOLE is not set # CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set # CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set From 1493e8f8cbe2d410227e77f761f5d0123a9117d4 Mon Sep 17 00:00:00 2001 From: Furong Xu Date: Mon, 4 Mar 2024 20:54:44 +0800 Subject: [PATCH 08/31] mediatek: convert LED color/function format for Xiaomi Redmi AX6000 Commit 2d63d42f5e2f ("mediatek: convert to new LED color/function format where possible") leaves Xiaomi Redmi AX6000 un-converted, the two LEDs become dead. Now, LEDs are alive again. Fixes: 2d63d42f5e2f ("mediatek: convert to new LED color/function format where possible") Signed-off-by: Furong Xu --- .../mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi index 30571965bc..4d58fbd2cf 100644 --- a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi +++ b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi @@ -2,6 +2,7 @@ /dts-v1/; #include +#include #include #include @@ -202,11 +203,18 @@ led_status_rgb: led@0 { reg = <0>; + function = LED_FUNCTION_STATUS; + color = ; color-index = ; }; led_network_rgb: led@1 { reg = <1>; + + /* Hardcoding here for backward compatibility */ + function = "network"; + + color = ; color-index = ; }; }; From 8d355b870a9d88a052a49005ba2c811bc6810197 Mon Sep 17 00:00:00 2001 From: Furong Xu Date: Thu, 7 Mar 2024 10:56:18 +0800 Subject: [PATCH 09/31] mediatek: filogic: switch to fitblk for Xiaomi Redmi AX6000 Use the new fitblk driver. Run-tested: filogic/mt7986a-xiaomi-redmi-router-ax6000-ubootmod Signed-off-by: Furong Xu --- .../mt7986a-xiaomi-redmi-router-ax6000-ubootmod.dts | 13 ++++++++++++- .../dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi | 2 +- .../filogic/base-files/lib/upgrade/platform.sh | 6 +++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-ubootmod.dts b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-ubootmod.dts index 152bbd20f8..a296c768f0 100644 --- a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-ubootmod.dts +++ b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000-ubootmod.dts @@ -8,9 +8,20 @@ compatible = "xiaomi,redmi-router-ax6000-ubootmod", "mediatek,mt7986a"; }; +&chosen { + rootdisk = <&ubi_rootdisk>; +}; + &partitions { partition@580000 { - label = "ubi"; + compatible = "linux,ubi"; reg = <0x580000 0x7a80000>; + label = "ubi"; + + volumes { + ubi_rootdisk: ubi-volume-fit { + volname = "fit"; + }; + }; }; }; diff --git a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi index 4d58fbd2cf..723c4f3296 100644 --- a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi +++ b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi @@ -17,7 +17,7 @@ led-upgrade = &led_status_rgb; }; - chosen { + chosen: chosen { stdout-path = "serial0:115200n8"; }; diff --git a/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh b/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh index 526de08161..abb692fb41 100755 --- a/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh +++ b/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh @@ -82,7 +82,8 @@ platform_do_upgrade() { ;; bananapi,bpi-r3|\ bananapi,bpi-r3-mini|\ - bananapi,bpi-r4) + bananapi,bpi-r4|\ + xiaomi,redmi-router-ax6000-ubootmod) [ -e /dev/fit0 ] && fitblk /dev/fit0 [ -e /dev/fitrw ] && fitblk /dev/fitrw bootdev="$(fitblk_get_bootdev)" @@ -132,8 +133,7 @@ platform_do_upgrade() { tplink,tl-xdr6086|\ tplink,tl-xdr6088|\ xiaomi,mi-router-ax3000t-ubootmod|\ - xiaomi,mi-router-wr30u-ubootmod|\ - xiaomi,redmi-router-ax6000-ubootmod) + xiaomi,mi-router-wr30u-ubootmod) CI_KERNPART="fit" nand_do_upgrade "$1" ;; From 9da90971ab32c29eb014eea7094d0b4ebdf256e3 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Sat, 2 Mar 2024 23:50:58 +0200 Subject: [PATCH 10/31] ubox: make logread as an alternative The logread can be replaced with syslog-ng. To support this it should be an alternative itself. Signed-off-by: Sergey Ponomarev --- package/system/ubox/Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package/system/ubox/Makefile b/package/system/ubox/Makefile index e74ae00b3f..adfb68e55b 100644 --- a/package/system/ubox/Makefile +++ b/package/system/ubox/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ubox -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/ubox.git @@ -47,6 +47,7 @@ define Package/logd DEPENDS:=+libubox +libubus +libblobmsg-json +libudebug TITLE:=OpenWrt system log implementation USERID:=logd=514:logd=514 + ALTERNATIVES:=200:/sbin/logread:/usr/libexec/logread-ubox endef define Package/getrandom/install @@ -63,9 +64,10 @@ define Package/ubox/install endef define Package/logd/install - $(INSTALL_DIR) $(1)/sbin $(1)/etc/init.d/ $(1)/usr/share/acl.d + $(INSTALL_DIR) $(1)/sbin $(1)/usr/libexec/ $(1)/etc/init.d/ $(1)/usr/share/acl.d - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{logd,logread} $(1)/sbin/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/logd $(1)/sbin/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/logread $(1)/usr/libexec/logread-ubox $(INSTALL_BIN) ./files/log.init $(1)/etc/init.d/log $(INSTALL_DATA) ./files/logd.json $(1)/usr/share/acl.d endef From a646e4f697ca53f9892c98caa49c68d3f1b3a7cf Mon Sep 17 00:00:00 2001 From: Qingfang Deng Date: Fri, 8 Mar 2024 11:07:49 +0800 Subject: [PATCH 11/31] kernel: enable KASAN option for more architectures KASAN has supported more architectures, such as ARM, PPC32 and RISC-V 64. Enable KASAN option for those architectures. Signed-off-by: Qingfang Deng --- config/Config-kernel.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/Config-kernel.in b/config/Config-kernel.in index 78155eb592..2e59bc9551 100644 --- a/config/Config-kernel.in +++ b/config/Config-kernel.in @@ -144,7 +144,7 @@ config KERNEL_UBSAN_TRAP config KERNEL_KASAN bool "Compile the kernel with KASan: runtime memory debugger" select KERNEL_SLUB_DEBUG - depends on (x86_64 || aarch64) + depends on (x86_64 || aarch64 || arm || powerpc || riscv64) help Enables kernel address sanitizer - runtime memory debugger, designed to find out-of-bounds accesses and use-after-free bugs. From 22f24f91076d858775fb7ebb0693508c1df421d0 Mon Sep 17 00:00:00 2001 From: Furong Xu Date: Fri, 8 Mar 2024 16:43:00 +0800 Subject: [PATCH 12/31] mediatek: clean duplicated #include in Xiaomi Redmi AX6000's dts Clean duplication of #include . Thanks musashino205 Fixes: 1493e8f8cbe2 ("mediatek: convert LED color/function format for Xiaomi Redmi AX6000") Signed-off-by: Furong Xu --- .../linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi | 1 - 1 file changed, 1 deletion(-) diff --git a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi index 723c4f3296..c262461106 100644 --- a/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi +++ b/target/linux/mediatek/dts/mt7986a-xiaomi-redmi-router-ax6000.dtsi @@ -2,7 +2,6 @@ /dts-v1/; #include -#include #include #include From abbe9095695f1452501e7b29131740427b114789 Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Fri, 8 Mar 2024 14:25:54 +0100 Subject: [PATCH 13/31] libiwinfo: update to Git HEAD (2024-03-08) 163a640fef30 devices: add device id for Qualcomm Atheros QCA6174 8ffb8bfd1115 devices: add add Qualcomm Atheros IPQ6018 WiSoC compatible Signed-off-by: Christian Marangi --- package/network/utils/iwinfo/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/network/utils/iwinfo/Makefile b/package/network/utils/iwinfo/Makefile index 4fef2babbb..e1941ca3a8 100644 --- a/package/network/utils/iwinfo/Makefile +++ b/package/network/utils/iwinfo/Makefile @@ -11,9 +11,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git -PKG_SOURCE_DATE:=2023-11-19 -PKG_SOURCE_VERSION:=a34977c0760c93480491c8eb94da656b57d7f4cc -PKG_MIRROR_HASH:=cb01671a2a9155f8ba55751ab1fe28488c5821212dd97ba5b79653640abb787e +PKG_SOURCE_DATE:=2024-03-08 +PKG_SOURCE_VERSION:=8ffb8bfd1115ae95265aa52590aa948aba7672e4 +PKG_MIRROR_HASH:=77bb6018b5001268c0f442dbfd8159893db620c575c9810221b1a42a30be4b5f PKG_MAINTAINER:=Jo-Philipp Wich PKG_LICENSE:=GPL-2.0 From 9cfa5f74175d5c663bcf5973024fb76223972033 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Fri, 8 Mar 2024 14:43:08 +0100 Subject: [PATCH 14/31] lantiq: Fix build after kernel 5.15.150 This fixes the following compile problem: ```` CC arch/mips/kernel/vpe-mt.o arch/mips/kernel/vpe-mt.c: In function 'vpe_run': arch/mips/kernel/vpe-mt.c:32:23: error: unused variable 'physical_memsize' [-Werror=unused-variable] 32 | unsigned long physical_memsize = 0L; | ^~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[6]: *** [scripts/Makefile.build:289: arch/mips/kernel/vpe-mt.o] Error 1 ```` physical_memsize was removed from upstream kernel, see: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-5.15.y&id=5b4f6c5ff65c8551018ccea40c569afd759734c0 Fixes: 387fde0da0e8 ("kernel: bump 5.15 to 5.15.150") Signed-off-by: Hauke Mehrtens --- .../linux/lantiq/patches-5.15/0152-lantiq-VPE.patch | 12 ++---------- .../lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch b/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch index 00917331c2..2395261ff1 100644 --- a/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch +++ b/target/linux/lantiq/patches-5.15/0152-lantiq-VPE.patch @@ -67,15 +67,7 @@ Signed-off-by: Stefan Koch #endif /* _ASM_VPE_H */ --- a/arch/mips/kernel/vpe-mt.c +++ b/arch/mips/kernel/vpe-mt.c -@@ -29,6 +29,7 @@ int vpe_run(struct vpe *v) - struct vpe_notifications *notifier; - unsigned int vpeflags; - struct tc *t; -+ unsigned long physical_memsize = 0L; - - /* check we are the Master VPE */ - local_irq_save(flags); -@@ -415,6 +416,8 @@ int __init vpe_module_init(void) +@@ -415,6 +415,8 @@ int __init vpe_module_init(void) } v->ntcs = hw_tcs - aprp_cpu_index(); @@ -84,7 +76,7 @@ Signed-off-by: Stefan Koch /* add the tc to the list of this vpe's tc's. */ list_add(&t->tc, &v->tc); -@@ -518,3 +521,47 @@ void __exit vpe_module_exit(void) +@@ -518,3 +520,47 @@ void __exit vpe_module_exit(void) release_vpe(v); } } diff --git a/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch b/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch index 015acabcfe..6426ee717b 100644 --- a/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch +++ b/target/linux/lantiq/patches-5.15/0155-lantiq-VPE-nosmp.patch @@ -10,7 +10,7 @@ Signed-off-by: Stefan Koch --- a/arch/mips/kernel/vpe-mt.c +++ b/arch/mips/kernel/vpe-mt.c -@@ -131,7 +131,10 @@ int vpe_run(struct vpe *v) +@@ -130,7 +130,10 @@ int vpe_run(struct vpe *v) * kernels need to turn it on, even if that wasn't the pre-dvpe() state. */ #ifdef CONFIG_SMP From 90c09ede93453d97bdbee3ef5814110934d3e1aa Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 6 Mar 2024 22:19:54 +0100 Subject: [PATCH 15/31] kernel: crypto: use ARM64 SHA1 CE optimized module for more targets At start I only set qualcommax to use the Crypto Extensions optimized version of SHA1 as I knew it supports the optional Crypto Extensions. However, after looking into the tree there are more targets/subtargets that I could find at least a specification sheet that says the support Cryptographic Extensions, so lets add them. Signed-off-by: Robert Marko --- package/kernel/linux/modules/crypto.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package/kernel/linux/modules/crypto.mk b/package/kernel/linux/modules/crypto.mk index 55988ba92c..a73062c611 100644 --- a/package/kernel/linux/modules/crypto.mk +++ b/package/kernel/linux/modules/crypto.mk @@ -935,8 +935,13 @@ endef KernelPackage/crypto-sha1/imx=$(KernelPackage/crypto-sha1/arm-neon) KernelPackage/crypto-sha1/ipq40xx=$(KernelPackage/crypto-sha1/arm-neon) +KernelPackage/crypto-sha1/mediatek/filogic=$(KernelPackage/crypto-sha1/aarch64-ce) +KernelPackage/crypto-sha1/mediatek/mt7622=$(KernelPackage/crypto-sha1/aarch64-ce) KernelPackage/crypto-sha1/mvebu/cortexa9=$(KernelPackage/crypto-sha1/arm-neon) +KernelPackage/crypto-sha1/mvebu/cortexa53=$(KernelPackage/crypto-sha1/aarch64-ce) +KernelPackage/crypto-sha1/mvebu/cortexa72=$(KernelPackage/crypto-sha1/aarch64-ce) KernelPackage/crypto-sha1/qualcommax=$(KernelPackage/crypto-sha1/aarch64-ce) +KernelPackage/crypto-sha1/rockchip/armv8=$(KernelPackage/crypto-sha1/aarch64-ce) define KernelPackage/crypto-sha1/octeon FILES+=$(LINUX_DIR)/arch/mips/cavium-octeon/crypto/octeon-sha1.ko From ce2b302ca43b42ef4a51baf875180fa03787e21f Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Wed, 6 Mar 2024 22:21:47 +0100 Subject: [PATCH 16/31] kernel: crypto: use ARM64 SHA256 CE optimized module for more targets At start I only set qualcommax to use the Crypto Extensions optimized version of SHA256 as I knew it supports the optional Crypto Extensions. However, after looking into the tree there are more targets/subtargets that I could find at least a specification sheet that says the support Cryptographic Extensions, so lets add them. Signed-off-by: Robert Marko --- package/kernel/linux/modules/crypto.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package/kernel/linux/modules/crypto.mk b/package/kernel/linux/modules/crypto.mk index a73062c611..b7cecb8919 100644 --- a/package/kernel/linux/modules/crypto.mk +++ b/package/kernel/linux/modules/crypto.mk @@ -1027,7 +1027,12 @@ define KernelPackage/crypto-sha256/x86_64 endef endif +KernelPackage/crypto-sha256/mediatek/filogic=$(KernelPackage/crypto-sha256/aarch64-ce) +KernelPackage/crypto-sha256/mediatek/mt7622=$(KernelPackage/crypto-sha256/aarch64-ce) +KernelPackage/crypto-sha256/mvebu/cortexa53=$(KernelPackage/crypto-sha256/aarch64-ce) +KernelPackage/crypto-sha256/mvebu/cortexa72=$(KernelPackage/crypto-sha256/aarch64-ce) KernelPackage/crypto-sha256/qualcommax=$(KernelPackage/crypto-sha256/aarch64-ce) +KernelPackage/crypto-sha256/rockchip/armv8=$(KernelPackage/crypto-sha256/aarch64-ce) ifdef KernelPackage/crypto-sha256/$(ARCH) KernelPackage/crypto-sha256/$(CRYPTO_TARGET)=\ From 3361ff9572c8cde1d47fb8462dd2d4c5d99c3fc0 Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 21 Nov 2023 10:46:13 +0100 Subject: [PATCH 17/31] mpc85xx: Get rid of 'of_flat_dt_is_compatible' This patch replaces 'of_flat_dt_is_compatible' with 'of_machine_is_compatible'. The TL-WDR4900 platform file won't compile in the 6.1 kernel. The platform files for the rest of the routers have been reworked or based on newer solutions. Let's make the TL-WDR4900 consistent with them. Signed-off-by: Pawel Dembicki --- .../files/arch/powerpc/platforms/85xx/tl_wdr4900_v1.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/target/linux/mpc85xx/files/arch/powerpc/platforms/85xx/tl_wdr4900_v1.c b/target/linux/mpc85xx/files/arch/powerpc/platforms/85xx/tl_wdr4900_v1.c index 0b2ebcd002..87a97e65c8 100644 --- a/target/linux/mpc85xx/files/arch/powerpc/platforms/85xx/tl_wdr4900_v1.c +++ b/target/linux/mpc85xx/files/arch/powerpc/platforms/85xx/tl_wdr4900_v1.c @@ -121,11 +121,8 @@ machine_arch_initcall(tl_wdr4900_v1, mpc85xx_common_publish_devices); */ static int __init tl_wdr4900_v1_probe(void) { - unsigned long root = of_get_flat_dt_root(); - - if (of_flat_dt_is_compatible(root, "tplink,tl-wdr4900-v1")) + if (of_machine_is_compatible("tplink,tl-wdr4900-v1")) return 1; - return 0; } From 123daef93c5a98e9f6219f584ca88fb8a9a37c19 Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 21 Nov 2023 09:38:20 +0100 Subject: [PATCH 18/31] mpc85xx: copy config 5.15 to 6.1 Simple copy of patches. Signed-off-by: Pawel Dembicki --- target/linux/mpc85xx/config-6.1 | 269 ++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 target/linux/mpc85xx/config-6.1 diff --git a/target/linux/mpc85xx/config-6.1 b/target/linux/mpc85xx/config-6.1 new file mode 100644 index 0000000000..aeeeedad85 --- /dev/null +++ b/target/linux/mpc85xx/config-6.1 @@ -0,0 +1,269 @@ +# CONFIG_40x is not set +# CONFIG_44x is not set +# CONFIG_ADVANCED_OPTIONS is not set +CONFIG_ARCH_32BIT_OFF_T=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +CONFIG_ARCH_MMAP_RND_BITS=11 +CONFIG_ARCH_MMAP_RND_BITS_MAX=17 +CONFIG_ARCH_MMAP_RND_BITS_MIN=11 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +CONFIG_ARCH_STACKWALK=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_WEAK_RELEASE_ACQUIRE=y +CONFIG_ASN1=y +CONFIG_AUDIT_ARCH=y +CONFIG_BLK_MQ_PCI=y +CONFIG_BOOKE=y +CONFIG_BOOKE_WDT=y +# CONFIG_BR200_WP is not set +# CONFIG_BSC9131_RDB is not set +# CONFIG_BSC9132_QDS is not set +# CONFIG_C293_PCIE is not set +CONFIG_CLONE_BACKWARDS=y +CONFIG_CLZ_TAB=y +CONFIG_CMDLINE="console=ttyS0,115200" +CONFIG_CMDLINE_FROM_BOOTLOADER=y +# CONFIG_CMDLINE_OVERRIDE is not set +# CONFIG_COMMON_CLK is not set +CONFIG_COMPAT_32BIT_TIME=y +# CONFIG_CORENET_GENERIC is not set +# CONFIG_CPM2 is not set +CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CRYPTO_AES_PPC_SPE is not set +CONFIG_CRYPTO_AUTHENC=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 +# CONFIG_CRYPTO_MD5_PPC is not set +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RSA=y +# CONFIG_CRYPTO_SHA1_PPC is not set +# CONFIG_CRYPTO_SHA1_PPC_SPE is not set +# CONFIG_CRYPTO_SHA256_PPC_SPE is not set +CONFIG_DATA_SHIFT=12 +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DNOTIFY=y +CONFIG_DTC=y +CONFIG_E500=y +CONFIG_E500_CPU=y +CONFIG_EARLY_PRINTK=y +CONFIG_EDAC=y +CONFIG_EDAC_ATOMIC_SCRUB=y +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_LEGACY_SYSFS=y +CONFIG_EDAC_MPC85XX=y +CONFIG_EDAC_SUPPORT=y +# CONFIG_FIREBOX_T10 is not set +CONFIG_FIXED_PHY=y +CONFIG_FSL_BOOKE=y +CONFIG_FSL_EMB_PERFMON=y +# CONFIG_FSL_FMAN is not set +CONFIG_FSL_LBC=y +CONFIG_FSL_PCI=y +CONFIG_FSL_PQ_MDIO=y +CONFIG_FSL_SOC=y +CONFIG_FSL_SOC_BOOKE=y +CONFIG_FWNODE_MDIO=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_GENERIC_ATOMIC64=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_GENERIC_EARLY_IOREMAP=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GEN_RTC=y +# CONFIG_GE_IMP3A is not set +CONFIG_GIANFAR=y +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_GENERIC=y +CONFIG_GPIO_MPC8XXX=y +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT_MAP=y +# CONFIG_HIVEAP_330 is not set +CONFIG_HW_RANDOM=y +CONFIG_HZ_PERIODIC=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_MPC=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_INITRAMFS_SOURCE="" +CONFIG_IRQCHIP=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_IRQ_WORK=y +CONFIG_ISA_DMA_API=y +CONFIG_KERNEL_START=0xc0000000 +# CONFIG_KSI8560 is not set +CONFIG_LIBFDT=y +CONFIG_LOCK_DEBUGGING_SUPPORT=y +CONFIG_LOWMEM_CAM_NUM=3 +CONFIG_LOWMEM_SIZE=0x30000000 +CONFIG_LXT_PHY=y +# CONFIG_MATH_EMULATION is not set +CONFIG_MDIO_BUS=y +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_DEVRES=y +CONFIG_MEMFD_CREATE=y +CONFIG_MIGRATION=y +CONFIG_MMU_GATHER_PAGE_SIZE=y +CONFIG_MODULES_USE_ELF_RELA=y +# CONFIG_MPC8536_DS is not set +# CONFIG_MPC8540_ADS is not set +# CONFIG_MPC8560_ADS is not set +# CONFIG_MPC85xx_CDS is not set +# CONFIG_MPC85xx_DS is not set +# CONFIG_MPC85xx_MDS is not set +# CONFIG_MPC85xx_RDB is not set +CONFIG_MPIC=y +# CONFIG_MPIC_MSGR is not set +CONFIG_MPIC_TIMER=y +CONFIG_MPILIB=y +# CONFIG_MTD_CFI is not set +CONFIG_MTD_NAND_CORE=y +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_ECC_SW_HAMMING=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_SPI_NOR=y +# CONFIG_MVME2500 is not set +CONFIG_NEED_PER_CPU_KM=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NET_SELFTESTS=y +CONFIG_NLS=y +CONFIG_NR_CPUS=1 +CONFIG_NR_IRQS=512 +CONFIG_NVMEM=y +# CONFIG_NVMEM_QORIQ_EFUSE is not set +CONFIG_OF=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_DMA_DEFAULT_COHERENT=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_FLATTREE=y +CONFIG_OF_GPIO=y +CONFIG_OF_IRQ=y +CONFIG_OF_KOBJ=y +CONFIG_OF_MDIO=y +CONFIG_OLD_SIGACTION=y +CONFIG_OLD_SIGSUSPEND=y +# CONFIG_P1010_RDB is not set +# CONFIG_P1022_DS is not set +# CONFIG_P1022_RDK is not set +# CONFIG_P1023_RDB is not set +CONFIG_PAGE_OFFSET=0xc0000000 +# CONFIG_PANDA is not set +CONFIG_PCI=y +CONFIG_PCIEAER=y +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_PERFORMANCE is not set +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +CONFIG_PCIEPORTBUS=y +CONFIG_PCI_DOMAINS=y +CONFIG_PGTABLE_LEVELS=2 +CONFIG_PHYLIB=y +CONFIG_PHYSICAL_ALIGN=0x04000000 +CONFIG_PHYSICAL_START=0x00000000 +# CONFIG_PHYS_64BIT is not set +# CONFIG_PMU_SYSFS is not set +# CONFIG_PPA8548 is not set +CONFIG_PPC=y +CONFIG_PPC32=y +# CONFIG_PPC64 is not set +CONFIG_PPC_85xx=y +# CONFIG_PPC_8xx is not set +CONFIG_PPC_ADV_DEBUG_DACS=2 +CONFIG_PPC_ADV_DEBUG_DVCS=0 +CONFIG_PPC_ADV_DEBUG_IACS=2 +CONFIG_PPC_ADV_DEBUG_REGS=y +CONFIG_PPC_BARRIER_NOSPEC=y +CONFIG_PPC_BOOK3E_MMU=y +# CONFIG_PPC_BOOK3S_32 is not set +CONFIG_PPC_DOORBELL=y +# CONFIG_PPC_E500MC is not set +# CONFIG_PPC_EARLY_DEBUG is not set +CONFIG_PPC_FSL_BOOK3E=y +CONFIG_PPC_INDIRECT_PCI=y +CONFIG_PPC_MMU_NOHASH=y +CONFIG_PPC_PAGE_SHIFT=12 +# CONFIG_PPC_QEMU_E500 is not set +CONFIG_PPC_SMP_MUXED_IPI=y +CONFIG_PPC_UDBG_16550=y +CONFIG_PPC_WERROR=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y +CONFIG_QE_GPIO=y +CONFIG_QUICC_ENGINE=y +CONFIG_RAS=y +# CONFIG_RED_15W_REV1 is not set +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_GENERIC=y +CONFIG_RTC_I2C_AND_SPI=y +CONFIG_RTC_MC146818_LIB=y +# CONFIG_SCOM_DEBUGFS is not set +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_MCTRL_GPIO=y +CONFIG_SERIAL_OF_PLATFORM=y +# CONFIG_SERIAL_QE is not set +# CONFIG_SOCRATES is not set +CONFIG_SPARSE_IRQ=y +CONFIG_SPE=y +CONFIG_SPE_POSSIBLE=y +CONFIG_SPI=y +CONFIG_SPI_FSL_ESPI=y +CONFIG_SPI_MASTER=y +CONFIG_SPI_MEM=y +CONFIG_SRCU=y +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_STX_GP3 is not set +CONFIG_SWPHY=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_TARGET_CPU="8540" +CONFIG_TARGET_CPU_BOOL=y +CONFIG_TASK_SIZE=0xc0000000 +CONFIG_THREAD_INFO_IN_TASK=y +CONFIG_THREAD_SHIFT=13 +CONFIG_TICK_CPU_ACCOUNTING=y +CONFIG_TINY_SRCU=y +# CONFIG_TL_WDR4900_V1 is not set +# CONFIG_TOOLCHAIN_DEFAULT_CPU is not set +# CONFIG_TQM8540 is not set +# CONFIG_TQM8541 is not set +# CONFIG_TQM8548 is not set +# CONFIG_TQM8555 is not set +# CONFIG_TQM8560 is not set +# CONFIG_TWR_P102x is not set +CONFIG_UCC=y +CONFIG_UCC_FAST=y +CONFIG_UCC_GETH=y +# CONFIG_UGETH_TX_ON_DEMAND is not set +CONFIG_USB_SUPPORT=y +CONFIG_VDSO32=y +# CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WS_AP3710I is not set +# CONFIG_WS_AP3715I is not set +# CONFIG_WS_AP3825I is not set +# CONFIG_XES_MPC85xx is not set +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_POWERPC=y From 7b01179e620d410f0dfbb98313f29025cd1fdea6 Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 21 Nov 2023 09:38:37 +0100 Subject: [PATCH 19/31] mpc85xx: copy patches 5.15 to 6.1 Just copy of config. Signed-off-by: Pawel Dembicki --- ...85xx-add-gpio-keys-to-of-match-table.patch | 10 ++ ...0-powerpc-85xx-tl-wdr4900-v1-support.patch | 83 +++++++++ .../101-powerpc-85xx-hiveap-330-support.patch | 30 ++++ .../102-powerpc-add-cmdline-override.patch | 37 ++++ .../103-powerpc-85xx-red-15w-rev1.patch | 29 +++ ...change-P2020RDB-dts-file-for-OpenWRT.patch | 170 ++++++++++++++++++ .../105-powerpc-85xx-panda-support.patch | 30 ++++ .../106-powerpc-85xx-ws-ap3710i-support.patch | 30 ++++ ...-powerpc-85xx-add-ws-ap3825i-support.patch | 65 +++++++ ...werpc-85xx-firebox-t10-support.patch.patch | 29 +++ ...-powerpc-85xx-add-ws-ap3715i-support.patch | 50 ++++++ .../110-powerpc-85xx-br200-wp-support.patch | 57 ++++++ ...ootwrapper-disable-uImage-generation.patch | 42 +++++ 13 files changed, 662 insertions(+) create mode 100644 target/linux/mpc85xx/patches-6.1/001-powerpc-85xx-add-gpio-keys-to-of-match-table.patch create mode 100644 target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch create mode 100644 target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch create mode 100644 target/linux/mpc85xx/patches-6.1/104-powerpc-mpc85xx-change-P2020RDB-dts-file-for-OpenWRT.patch create mode 100644 target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch create mode 100644 target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch create mode 100644 target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch diff --git a/target/linux/mpc85xx/patches-6.1/001-powerpc-85xx-add-gpio-keys-to-of-match-table.patch b/target/linux/mpc85xx/patches-6.1/001-powerpc-85xx-add-gpio-keys-to-of-match-table.patch new file mode 100644 index 0000000000..5e5ab10daf --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/001-powerpc-85xx-add-gpio-keys-to-of-match-table.patch @@ -0,0 +1,10 @@ +--- a/arch/powerpc/platforms/85xx/common.c ++++ b/arch/powerpc/platforms/85xx/common.c +@@ -30,6 +30,7 @@ static const struct of_device_id mpc85xx + { .compatible = "fsl,mpc8548-guts", }, + /* Probably unnecessary? */ + { .compatible = "gpio-leds", }, ++ { .compatible = "gpio-keys", }, + /* For all PCI controllers */ + { .compatible = "fsl,mpc8540-pci", }, + { .compatible = "fsl,mpc8548-pcie", }, diff --git a/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch b/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch new file mode 100644 index 0000000000..0ecbec3ca4 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch @@ -0,0 +1,83 @@ +From 1d9f596e572917772b87a2a37e1680902964782f Mon Sep 17 00:00:00 2001 +From: Gabor Juhos +Date: Wed, 20 Feb 2013 08:40:33 +0100 +Subject: [PATCH] powerpc: 85xx: add support for the TP-Link TL-WDR4900 v1 + board + +This patch adds support for the TP-Link TL-WDR4900 v1 +concurrent dual-band wireless router. The devices uses +the Freescale P1014 SoC. + +Signed-off-by: Gabor Juhos +Signed-off-by: Pawel Dembicki +--- + arch/powerpc/boot/Makefile | 3 ++- + arch/powerpc/boot/wrapper | 5 +++++ + arch/powerpc/platforms/85xx/Kconfig | 12 ++++++++++++ + arch/powerpc/platforms/85xx/Makefile | 1 + + 4 files changed, 20 insertions(+), 1 deletion(-) + +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -163,6 +163,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie + src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S + src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S + src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c ++src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S + + src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c + +@@ -343,7 +344,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm + image-$(CONFIG_TQM8555) += cuImage.tqm8555 + image-$(CONFIG_TQM8560) += cuImage.tqm8560 + image-$(CONFIG_KSI8560) += cuImage.ksi8560 +- ++image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 + # Board ports in arch/powerpc/platform/86xx/Kconfig + image-$(CONFIG_MVME7100) += dtbImage.mvme7100 + +--- a/arch/powerpc/boot/wrapper ++++ b/arch/powerpc/boot/wrapper +@@ -339,6 +339,11 @@ adder875-redboot) + platformo="$object/fixed-head.o $object/redboot-8xx.o" + binary=y + ;; ++simpleboot-tl-wdr4900-v1) ++ platformo="$object/fixed-head.o $object/simpleboot.o" ++ link_address='0x1000000' ++ binary=y ++ ;; + simpleboot-*) + platformo="$object/fixed-head.o $object/simpleboot.o" + binary=y +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -170,6 +170,18 @@ config STX_GP3 + select CPM2 + select DEFAULT_UIMAGE + ++config TL_WDR4900_V1 ++ bool "TP-Link TL-WDR4900 v1" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ select SWIOTLB ++ help ++ This option enables support for the TP-Link TL-WDR4900 v1 board. ++ ++ This board is a Concurrent Dual-Band wireless router with a ++ Freescale P1014 SoC. ++ + config TQM8540 + bool "TQ Components TQM8540" + help +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -27,6 +27,7 @@ obj-$(CONFIG_TWR_P102x) += twr_p102x.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o + obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o + obj-$(CONFIG_STX_GP3) += stx_gp3.o ++obj-$(CONFIG_TL_WDR4900_V1) += tl_wdr4900_v1.o + obj-$(CONFIG_TQM85xx) += tqm85xx.o + obj-$(CONFIG_PPA8548) += ppa8548.o + obj-$(CONFIG_SOCRATES) += socrates.o socrates_fpga_pic.o diff --git a/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch b/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch new file mode 100644 index 0000000000..da95cd2716 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch @@ -0,0 +1,30 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -49,6 +49,17 @@ config BSC9132_QDS + and dual StarCore SC3850 DSP cores. + Manufacturer : Freescale Semiconductor, Inc + ++config HIVEAP_330 ++ bool "Aerohive HiveAP-330" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Aerohive HiveAP-330 board. ++ ++ This board is a Concurrent Dual-Band wireless access point with a ++ Freescale P1020 SoC. ++ + config MPC8540_ADS + bool "Freescale MPC8540 ADS" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -12,6 +12,7 @@ obj-y += common.o + obj-$(CONFIG_BSC9131_RDB) += bsc913x_rdb.o + obj-$(CONFIG_BSC9132_QDS) += bsc913x_qds.o + obj-$(CONFIG_C293_PCIE) += c293pcie.o ++obj-$(CONFIG_HIVEAP_330) += hiveap-330.o + obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o + obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o + obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o diff --git a/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch b/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch new file mode 100644 index 0000000000..0d26dc8501 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch @@ -0,0 +1,37 @@ +--- a/arch/powerpc/Kconfig ++++ b/arch/powerpc/Kconfig +@@ -915,6 +915,14 @@ config CMDLINE_FORCE + + endchoice + ++config CMDLINE_OVERRIDE ++ bool "Use alternative cmdline from device tree" ++ help ++ Some bootloaders may have uneditable bootargs. While CMDLINE_FORCE can ++ be used, this is not a good option for kernels that are shared across ++ devices. This setting enables using "chosen/cmdline-override" as the ++ cmdline if it exists in the device tree. ++ + config EXTRA_TARGETS + string "Additional default image types" + help +--- a/drivers/of/fdt.c ++++ b/drivers/of/fdt.c +@@ -1162,6 +1162,17 @@ int __init early_init_dt_scan_chosen(uns + if (p != NULL && l > 0) + strlcat(data, p, min_t(int, strlen(data) + (int)l, COMMAND_LINE_SIZE)); + ++ /* CONFIG_CMDLINE_OVERRIDE is used to fallback to a different ++ * device tree option of chosen/bootargs-override. This is ++ * helpful on boards where u-boot sets bootargs, and is unable ++ * to be modified. ++ */ ++#ifdef CONFIG_CMDLINE_OVERRIDE ++ p = of_get_flat_dt_prop(node, "bootargs-override", &l); ++ if (p != NULL && l > 0) ++ strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE)); ++#endif ++ + /* + * CONFIG_CMDLINE is meant to be a default in case nothing else + * managed to set the command line, unless CONFIG_CMDLINE_FORCE diff --git a/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch b/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch new file mode 100644 index 0000000000..66044878eb --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch @@ -0,0 +1,29 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -173,6 +173,16 @@ config XES_MPC85xx + Manufacturer: Extreme Engineering Solutions, Inc. + URL: + ++config RED_15W_REV1 ++ bool "Sophos RED 15w Rev.1" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Sophos RED 15w Rev.1 board. ++ ++ This board is a wireless VPN router with a Freescale P1010 SoC. ++ + config STX_GP3 + bool "Silicon Turnkey Express GP3" + help +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -27,6 +27,7 @@ obj-$(CONFIG_P1023_RDB) += p1023_rdb.o + obj-$(CONFIG_TWR_P102x) += twr_p102x.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o + obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o ++obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o + obj-$(CONFIG_STX_GP3) += stx_gp3.o + obj-$(CONFIG_TL_WDR4900_V1) += tl_wdr4900_v1.o + obj-$(CONFIG_TQM85xx) += tqm85xx.o diff --git a/target/linux/mpc85xx/patches-6.1/104-powerpc-mpc85xx-change-P2020RDB-dts-file-for-OpenWRT.patch b/target/linux/mpc85xx/patches-6.1/104-powerpc-mpc85xx-change-P2020RDB-dts-file-for-OpenWRT.patch new file mode 100644 index 0000000000..94ed26c3df --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/104-powerpc-mpc85xx-change-P2020RDB-dts-file-for-OpenWRT.patch @@ -0,0 +1,170 @@ +From 93514afd769c305182beeed1f9c4c46235879ef8 Mon Sep 17 00:00:00 2001 +From: Pawel Dembicki +Date: Sun, 30 Dec 2018 23:24:41 +0100 +Subject: [PATCH] powerpc: mpc85xx: change P2020RDB dts file for OpenWRT + +This patch apply chages for OpenWRT in P2020RDB +dts file. + +Signed-off-by: Pawel Dembicki +--- + arch/powerpc/boot/dts/fsl/p2020rdb.dts | 98 +++++++++++++++++--------- + 1 file changed, 63 insertions(+), 35 deletions(-) + +--- a/arch/powerpc/boot/dts/fsl/p2020rdb.dts ++++ b/arch/powerpc/boot/dts/fsl/p2020rdb.dts +@@ -5,10 +5,15 @@ + * Copyright 2009-2012 Freescale Semiconductor Inc. + */ + ++/dts-v1/; ++ + /include/ "p2020si-pre.dtsi" + ++#include ++#include ++ + / { +- model = "fsl,P2020RDB"; ++ model = "Freescale P2020RDB"; + compatible = "fsl,P2020RDB"; + + aliases { +@@ -34,48 +39,38 @@ + 0x2 0x0 0x0 0xffb00000 0x00020000>; + + nor@0,0 { +- #address-cells = <1>; +- #size-cells = <1>; + compatible = "cfi-flash"; + reg = <0x0 0x0 0x1000000>; + bank-width = <2>; + device-width = <1>; + +- partition@0 { +- /* This location must not be altered */ +- /* 256KB for Vitesse 7385 Switch firmware */ +- reg = <0x0 0x00040000>; +- label = "NOR (RO) Vitesse-7385 Firmware"; +- read-only; +- }; +- +- partition@40000 { +- /* 256KB for DTB Image */ +- reg = <0x00040000 0x00040000>; +- label = "NOR (RO) DTB Image"; +- read-only; +- }; ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; + +- partition@80000 { +- /* 3.5 MB for Linux Kernel Image */ +- reg = <0x00080000 0x00380000>; +- label = "NOR (RO) Linux Kernel Image"; +- read-only; +- }; ++ partition@0 { ++ /* This location must not be altered */ ++ /* 256KB for Vitesse 7385 Switch firmware */ ++ reg = <0x0 0x00040000>; ++ label = "NOR (RO) Vitesse-7385 Firmware"; ++ read-only; ++ }; + +- partition@400000 { +- /* 11MB for JFFS2 based Root file System */ +- reg = <0x00400000 0x00b00000>; +- label = "NOR (RW) JFFS2 Root File System"; +- }; ++ partition@40000 { ++ compatible = "denx,fit"; ++ reg = <0x00040000 0x00ec0000>; ++ label = "firmware"; ++ }; + +- partition@f00000 { +- /* This location must not be altered */ +- /* 512KB for u-boot Bootloader Image */ +- /* 512KB for u-boot Environment Variables */ +- reg = <0x00f00000 0x00100000>; +- label = "NOR (RO) U-Boot Image"; +- read-only; ++ partition@f00000 { ++ /* This location must not be altered */ ++ /* 512KB for u-boot Bootloader Image */ ++ /* 512KB for u-boot Environment Variables */ ++ reg = <0x00f00000 0x00100000>; ++ label = "u-boot"; ++ read-only; ++ }; + }; + }; + +@@ -85,6 +80,7 @@ + compatible = "fsl,p2020-fcm-nand", + "fsl,elbc-fcm-nand"; + reg = <0x1 0x0 0x40000>; ++ nand-ecc-mode = "none"; + + partition@0 { + /* This location must not be altered */ +@@ -140,13 +136,43 @@ + soc: soc@ffe00000 { + ranges = <0x0 0x0 0xffe00000 0x100000>; + ++ gpio0: gpio-controller@fc00 { ++ }; ++ + i2c@3000 { ++ temperature-sensor@4c { ++ compatible = "adi,adt7461"; ++ reg = <0x4c>; ++ }; ++ ++ eeprom@50 { ++ compatible = "atmel,24c256"; ++ reg = <0x50>; ++ }; ++ + rtc@68 { + compatible = "dallas,ds1339"; + reg = <0x68>; + }; + }; + ++ i2c@3100 { ++ pmic@11 { ++ compatible = "zl2006"; ++ reg = <0x11>; ++ }; ++ ++ gpio@18 { ++ compatible = "nxp,pca9557"; ++ reg = <0x18>; ++ }; ++ ++ eeprom@52 { ++ compatible = "atmel,24c01"; ++ reg = <0x52>; ++ }; ++ }; ++ + spi@7000 { + flash@0 { + #address-cells = <1>; +@@ -200,10 +226,12 @@ + phy0: ethernet-phy@0 { + interrupts = <3 1 0 0>; + reg = <0x0>; ++ reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; + }; + phy1: ethernet-phy@1 { + interrupts = <3 1 0 0>; + reg = <0x1>; ++ reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; + }; + tbi-phy@2 { + device_type = "tbi-phy"; diff --git a/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch b/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch new file mode 100644 index 0000000000..4913c614a8 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch @@ -0,0 +1,30 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -60,6 +60,17 @@ config HIVEAP_330 + This board is a Concurrent Dual-Band wireless access point with a + Freescale P1020 SoC. + ++config PANDA ++ bool "OCEDO PANDA" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the OCEDO PANDA board. ++ ++ This board is a Concurrent Dual-Band wireless access point with a ++ Freescale P1020 SoC. ++ + config MPC8540_ADS + bool "Freescale MPC8540 ADS" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -24,6 +24,7 @@ obj-$(CONFIG_P1010_RDB) += p1010rdb.o + obj-$(CONFIG_P1022_DS) += p1022_ds.o + obj-$(CONFIG_P1022_RDK) += p1022_rdk.o + obj-$(CONFIG_P1023_RDB) += p1023_rdb.o ++obj-$(CONFIG_PANDA) += panda.o + obj-$(CONFIG_TWR_P102x) += twr_p102x.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o + obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o diff --git a/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch b/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch new file mode 100644 index 0000000000..124376ffd9 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch @@ -0,0 +1,30 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -71,6 +71,17 @@ config PANDA + This board is a Concurrent Dual-Band wireless access point with a + Freescale P1020 SoC. + ++config WS_AP3710I ++ bool "Enterasys WS-AP3710i" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Enterasys WS-AP3710i board. ++ ++ This board is a Concurrent Dual-Band wireless access point with a ++ Freescale P1020 SoC. ++ + config MPC8540_ADS + bool "Freescale MPC8540 ADS" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -26,6 +26,7 @@ obj-$(CONFIG_P1022_RDK) += p1022_rdk.o + obj-$(CONFIG_P1023_RDB) += p1023_rdb.o + obj-$(CONFIG_PANDA) += panda.o + obj-$(CONFIG_TWR_P102x) += twr_p102x.o ++obj-$(CONFIG_WS_AP3710I) += ws-ap3710i.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o + obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o + obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o diff --git a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch new file mode 100644 index 0000000000..bd731a2344 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch @@ -0,0 +1,65 @@ +From 2fa1a7983ef30f3c7486f9b07c001bee87d1f6d6 Mon Sep 17 00:00:00 2001 +From: Martin Kennedy +Date: Sat, 1 Jan 2022 11:01:37 -0500 +Subject: [PATCH] PowerPC 85xx: Add WS-AP3825i support + +This patch adds support for building Linux for the Extreme Networks +WS-AP3825i AP. + +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -82,6 +82,16 @@ config WS_AP3710I + This board is a Concurrent Dual-Band wireless access point with a + Freescale P1020 SoC. + ++config WS_AP3825I ++ bool "Extreme Networks WS-AP3825i" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Extreme Networks WS-AP3825i board. ++ This board is a Concurrent Dual-Band wireless access point with a ++ Freescale P1020 SoC. ++ + config MPC8540_ADS + bool "Freescale MPC8540 ADS" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -27,6 +27,7 @@ obj-$(CONFIG_P1023_RDB) += p1023_rdb.o + obj-$(CONFIG_PANDA) += panda.o + obj-$(CONFIG_TWR_P102x) += twr_p102x.o + obj-$(CONFIG_WS_AP3710I) += ws-ap3710i.o ++obj-$(CONFIG_WS_AP3825I) += ws-ap3825i.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o + obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o + obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -164,6 +164,7 @@ src-plat-$(CONFIG_PPC_POWERNV) += pserie + src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S + src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c + src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S ++src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S + + src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c + +@@ -345,6 +346,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm + image-$(CONFIG_TQM8560) += cuImage.tqm8560 + image-$(CONFIG_KSI8560) += cuImage.ksi8560 + image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 ++image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i + # Board ports in arch/powerpc/platform/86xx/Kconfig + image-$(CONFIG_MVME7100) += dtbImage.mvme7100 + +--- a/arch/powerpc/boot/wrapper ++++ b/arch/powerpc/boot/wrapper +@@ -339,6 +339,7 @@ adder875-redboot) + platformo="$object/fixed-head.o $object/redboot-8xx.o" + binary=y + ;; ++simpleboot-ws-ap3825i|\ + simpleboot-tl-wdr4900-v1) + platformo="$object/fixed-head.o $object/simpleboot.o" + link_address='0x1000000' diff --git a/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch b/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch new file mode 100644 index 0000000000..b074113eaa --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch @@ -0,0 +1,29 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -92,6 +92,16 @@ config WS_AP3825I + This board is a Concurrent Dual-Band wireless access point with a + Freescale P1020 SoC. + ++config FIREBOX_T10 ++ bool "Watchguard Firebox T10" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Watchguard Firebox T10 board. ++ This board is a VPN Gateway-Router with a ++ Freescale P1010 SoC. ++ + config MPC8540_ADS + bool "Freescale MPC8540 ADS" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -28,6 +28,7 @@ obj-$(CONFIG_PANDA) += panda.o + obj-$(CONFIG_TWR_P102x) += twr_p102x.o + obj-$(CONFIG_WS_AP3710I) += ws-ap3710i.o + obj-$(CONFIG_WS_AP3825I) += ws-ap3825i.o ++obj-$(CONFIG_FIREBOX_T10) += firebox_t10.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o + obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o + obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o diff --git a/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch b/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch new file mode 100644 index 0000000000..692cef0417 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch @@ -0,0 +1,50 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -82,6 +82,17 @@ config WS_AP3710I + This board is a Concurrent Dual-Band wireless access point with a + Freescale P1020 SoC. + ++config WS_AP3715I ++ bool "Enterasys WS-AP3715i" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Enterasys WS-AP3715i board. ++ ++ This board is a Concurrent Dual-Band wireless access point with a ++ Freescale P1010 SoC. ++ + config WS_AP3825I + bool "Extreme Networks WS-AP3825i" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -27,6 +27,7 @@ obj-$(CONFIG_P1023_RDB) += p1023_rdb.o + obj-$(CONFIG_PANDA) += panda.o + obj-$(CONFIG_TWR_P102x) += twr_p102x.o + obj-$(CONFIG_WS_AP3710I) += ws-ap3710i.o ++obj-$(CONFIG_WS_AP3715I) += ws-ap3715i.o + obj-$(CONFIG_WS_AP3825I) += ws-ap3825i.o + obj-$(CONFIG_FIREBOX_T10) += firebox_t10.o + obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -346,6 +346,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm + image-$(CONFIG_TQM8560) += cuImage.tqm8560 + image-$(CONFIG_KSI8560) += cuImage.ksi8560 + image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 ++image-$(CONFIG_WS_AP3715I) += simpleImage.ws-ap3715i + image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i + # Board ports in arch/powerpc/platform/86xx/Kconfig + image-$(CONFIG_MVME7100) += dtbImage.mvme7100 +--- a/arch/powerpc/boot/wrapper ++++ b/arch/powerpc/boot/wrapper +@@ -339,6 +339,7 @@ adder875-redboot) + platformo="$object/fixed-head.o $object/redboot-8xx.o" + binary=y + ;; ++simpleboot-ws-ap3715i|\ + simpleboot-ws-ap3825i|\ + simpleboot-tl-wdr4900-v1) + platformo="$object/fixed-head.o $object/simpleboot.o" diff --git a/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch b/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch new file mode 100644 index 0000000000..eb70a4c4c4 --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch @@ -0,0 +1,57 @@ +--- a/arch/powerpc/platforms/85xx/Kconfig ++++ b/arch/powerpc/platforms/85xx/Kconfig +@@ -49,6 +49,16 @@ config BSC9132_QDS + and dual StarCore SC3850 DSP cores. + Manufacturer : Freescale Semiconductor, Inc + ++config BR200_WP ++ bool "Aerohive BR200-WP" ++ select DEFAULT_UIMAGE ++ select ARCH_REQUIRE_GPIOLIB ++ select GPIO_MPC8XXX ++ help ++ This option enables support for the Aerohive BR200-WP board. ++ ++ This board is a wireless router with a Freescale P1011 SoC. ++ + config HIVEAP_330 + bool "Aerohive HiveAP-330" + select DEFAULT_UIMAGE +--- a/arch/powerpc/platforms/85xx/Makefile ++++ b/arch/powerpc/platforms/85xx/Makefile +@@ -12,6 +12,7 @@ obj-y += common.o + obj-$(CONFIG_BSC9131_RDB) += bsc913x_rdb.o + obj-$(CONFIG_BSC9132_QDS) += bsc913x_qds.o + obj-$(CONFIG_C293_PCIE) += c293pcie.o ++obj-$(CONFIG_BR200_WP) += br200-wp.o + obj-$(CONFIG_HIVEAP_330) += hiveap-330.o + obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o + obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -163,6 +163,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie + src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S + src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S + src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c ++src-plat-$(CONFIG_BR200_WP) += simpleboot.c fixed-head.S + src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S + src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S + +@@ -345,6 +346,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm + image-$(CONFIG_TQM8555) += cuImage.tqm8555 + image-$(CONFIG_TQM8560) += cuImage.tqm8560 + image-$(CONFIG_KSI8560) += cuImage.ksi8560 ++image-$(CONFIG_BR200_WP) += simpleImage.br200-wp + image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 + image-$(CONFIG_WS_AP3715I) += simpleImage.ws-ap3715i + image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i +--- a/arch/powerpc/boot/wrapper ++++ b/arch/powerpc/boot/wrapper +@@ -339,6 +339,7 @@ adder875-redboot) + platformo="$object/fixed-head.o $object/redboot-8xx.o" + binary=y + ;; ++simpleboot-br200-wp|\ + simpleboot-ws-ap3715i|\ + simpleboot-ws-ap3825i|\ + simpleboot-tl-wdr4900-v1) diff --git a/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch b/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch new file mode 100644 index 0000000000..1af5aefe0b --- /dev/null +++ b/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch @@ -0,0 +1,42 @@ +From d43ab14605510d9d2bd257a8cd70f24ada4621b0 Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Sat, 29 Feb 2020 14:27:04 +0100 +Subject: [PATCH] powerpc: bootwrapper: disable uImage generation + +Due to CONFIG_KERNEL_XZ symbol, the bootwrapper code tries to +instruct the mkimage to use the xz compression, which isn't +supported. This disables the uImage generation, as OpenWrt +generates individual uImages for each board using it's own +toolchain. + +Signed-off-by: David Bauer +--- + arch/powerpc/boot/Makefile | 9 --------- + 1 file changed, 9 deletions(-) + +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -274,7 +274,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp + image-$(CONFIG_PPC_EFIKA) += zImage.chrp + image-$(CONFIG_PPC_PMAC) += zImage.pmac + image-$(CONFIG_PPC_HOLLY) += dtbImage.holly +-image-$(CONFIG_DEFAULT_UIMAGE) += uImage + image-$(CONFIG_EPAPR_BOOT) += zImage.epapr + + # +@@ -409,15 +408,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits + $(obj)/vmlinux.strip: vmlinux + $(STRIP) -s -R .comment $< -o $@ + +-$(obj)/uImage: vmlinux $(wrapperbits) FORCE +- $(call if_changed,wrap,uboot) +- +-$(obj)/uImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE +- $(call if_changed,wrap,uboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) +- +-$(obj)/uImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE +- $(call if_changed,wrap,uboot-$*,,$(obj)/dts/$*.dtb) +- + $(obj)/cuImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE + $(call if_changed,wrap,cuboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz) + From 44ed2dc91c635d6a2e5196e07b460aa5250e508b Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 21 Nov 2023 10:43:46 +0100 Subject: [PATCH 20/31] mpc85xx: refresh 6.1 patches Most changes done by "make target/linux/refresh" Manually refreshed: 102-powerpc-add-cmdline-override.patch Signed-off-by: Pawel Dembicki --- .../100-powerpc-85xx-tl-wdr4900-v1-support.patch | 8 ++++---- .../101-powerpc-85xx-hiveap-330-support.patch | 2 +- .../patches-6.1/102-powerpc-add-cmdline-override.patch | 10 +++++----- .../patches-6.1/103-powerpc-85xx-red-15w-rev1.patch | 2 +- .../patches-6.1/105-powerpc-85xx-panda-support.patch | 2 +- .../106-powerpc-85xx-ws-ap3710i-support.patch | 2 +- .../107-powerpc-85xx-add-ws-ap3825i-support.patch | 8 ++++---- .../108-powerpc-85xx-firebox-t10-support.patch.patch | 2 +- .../109-powerpc-85xx-add-ws-ap3715i-support.patch | 6 +++--- .../110-powerpc-85xx-br200-wp-support.patch | 8 ++++---- ...powerpc-bootwrapper-disable-uImage-generation.patch | 4 ++-- 11 files changed, 27 insertions(+), 27 deletions(-) diff --git a/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch b/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch index 0ecbec3ca4..7b9016d2fe 100644 --- a/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch +++ b/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch @@ -19,7 +19,7 @@ Signed-off-by: Pawel Dembicki --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -163,6 +163,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie +@@ -179,6 +179,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c @@ -27,7 +27,7 @@ Signed-off-by: Pawel Dembicki src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c -@@ -343,7 +344,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm +@@ -359,7 +360,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm image-$(CONFIG_TQM8555) += cuImage.tqm8555 image-$(CONFIG_TQM8560) += cuImage.tqm8560 image-$(CONFIG_KSI8560) += cuImage.ksi8560 @@ -38,7 +38,7 @@ Signed-off-by: Pawel Dembicki --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -339,6 +339,11 @@ adder875-redboot) +@@ -341,6 +341,11 @@ adder875-redboot) platformo="$object/fixed-head.o $object/redboot-8xx.o" binary=y ;; @@ -52,7 +52,7 @@ Signed-off-by: Pawel Dembicki binary=y --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -170,6 +170,18 @@ config STX_GP3 +@@ -163,6 +163,18 @@ config STX_GP3 select CPM2 select DEFAULT_UIMAGE diff --git a/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch b/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch index da95cd2716..fe8745361d 100644 --- a/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch +++ b/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -49,6 +49,17 @@ config BSC9132_QDS +@@ -40,6 +40,17 @@ config BSC9132_QDS and dual StarCore SC3850 DSP cores. Manufacturer : Freescale Semiconductor, Inc diff --git a/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch b/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch index 0d26dc8501..b83e5f86d2 100644 --- a/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch +++ b/target/linux/mpc85xx/patches-6.1/102-powerpc-add-cmdline-override.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig -@@ -915,6 +915,14 @@ config CMDLINE_FORCE +@@ -954,6 +954,14 @@ config CMDLINE_FORCE endchoice @@ -17,9 +17,9 @@ help --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c -@@ -1162,6 +1162,17 @@ int __init early_init_dt_scan_chosen(uns +@@ -1187,6 +1187,17 @@ int __init early_init_dt_scan_chosen(cha if (p != NULL && l > 0) - strlcat(data, p, min_t(int, strlen(data) + (int)l, COMMAND_LINE_SIZE)); + strlcat(cmdline, p, min_t(int, strlen(cmdline) + (int)l, COMMAND_LINE_SIZE)); + /* CONFIG_CMDLINE_OVERRIDE is used to fallback to a different + * device tree option of chosen/bootargs-override. This is @@ -29,9 +29,9 @@ +#ifdef CONFIG_CMDLINE_OVERRIDE + p = of_get_flat_dt_prop(node, "bootargs-override", &l); + if (p != NULL && l > 0) -+ strlcpy(data, p, min((int)l, COMMAND_LINE_SIZE)); ++ strlcpy(cmdline, p, min((int)l, COMMAND_LINE_SIZE)); +#endif + + handle_cmdline: /* * CONFIG_CMDLINE is meant to be a default in case nothing else - * managed to set the command line, unless CONFIG_CMDLINE_FORCE diff --git a/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch b/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch index 66044878eb..711d98abe7 100644 --- a/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch +++ b/target/linux/mpc85xx/patches-6.1/103-powerpc-85xx-red-15w-rev1.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -173,6 +173,16 @@ config XES_MPC85xx +@@ -166,6 +166,16 @@ config XES_MPC85xx Manufacturer: Extreme Engineering Solutions, Inc. URL: diff --git a/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch b/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch index 4913c614a8..3c24a373ab 100644 --- a/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch +++ b/target/linux/mpc85xx/patches-6.1/105-powerpc-85xx-panda-support.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -60,6 +60,17 @@ config HIVEAP_330 +@@ -51,6 +51,17 @@ config HIVEAP_330 This board is a Concurrent Dual-Band wireless access point with a Freescale P1020 SoC. diff --git a/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch b/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch index 124376ffd9..5ac3f2f2d9 100644 --- a/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch +++ b/target/linux/mpc85xx/patches-6.1/106-powerpc-85xx-ws-ap3710i-support.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -71,6 +71,17 @@ config PANDA +@@ -62,6 +62,17 @@ config PANDA This board is a Concurrent Dual-Band wireless access point with a Freescale P1020 SoC. diff --git a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch index bd731a2344..0fa1b4172b 100644 --- a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch +++ b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch @@ -8,7 +8,7 @@ WS-AP3825i AP. --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -82,6 +82,16 @@ config WS_AP3710I +@@ -73,6 +73,16 @@ config WS_AP3710I This board is a Concurrent Dual-Band wireless access point with a Freescale P1020 SoC. @@ -37,7 +37,7 @@ WS-AP3825i AP. obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -164,6 +164,7 @@ src-plat-$(CONFIG_PPC_POWERNV) += pserie +@@ -180,6 +180,7 @@ src-plat-$(CONFIG_PPC_POWERNV) += pserie src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S @@ -45,7 +45,7 @@ WS-AP3825i AP. src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c -@@ -345,6 +346,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm +@@ -361,6 +362,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm image-$(CONFIG_TQM8560) += cuImage.tqm8560 image-$(CONFIG_KSI8560) += cuImage.ksi8560 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 @@ -55,7 +55,7 @@ WS-AP3825i AP. --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -339,6 +339,7 @@ adder875-redboot) +@@ -341,6 +341,7 @@ adder875-redboot) platformo="$object/fixed-head.o $object/redboot-8xx.o" binary=y ;; diff --git a/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch b/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch index b074113eaa..0b3a93b848 100644 --- a/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch +++ b/target/linux/mpc85xx/patches-6.1/108-powerpc-85xx-firebox-t10-support.patch.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -92,6 +92,16 @@ config WS_AP3825I +@@ -83,6 +83,16 @@ config WS_AP3825I This board is a Concurrent Dual-Band wireless access point with a Freescale P1020 SoC. diff --git a/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch b/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch index 692cef0417..8f34f14d54 100644 --- a/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch +++ b/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -82,6 +82,17 @@ config WS_AP3710I +@@ -73,6 +73,17 @@ config WS_AP3710I This board is a Concurrent Dual-Band wireless access point with a Freescale P1020 SoC. @@ -30,7 +30,7 @@ obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -346,6 +346,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm +@@ -362,6 +362,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm image-$(CONFIG_TQM8560) += cuImage.tqm8560 image-$(CONFIG_KSI8560) += cuImage.ksi8560 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 @@ -40,7 +40,7 @@ image-$(CONFIG_MVME7100) += dtbImage.mvme7100 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -339,6 +339,7 @@ adder875-redboot) +@@ -341,6 +341,7 @@ adder875-redboot) platformo="$object/fixed-head.o $object/redboot-8xx.o" binary=y ;; diff --git a/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch b/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch index eb70a4c4c4..430af1efb1 100644 --- a/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch +++ b/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig -@@ -49,6 +49,16 @@ config BSC9132_QDS +@@ -40,6 +40,16 @@ config BSC9132_QDS and dual StarCore SC3850 DSP cores. Manufacturer : Freescale Semiconductor, Inc @@ -29,7 +29,7 @@ obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -163,6 +163,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie +@@ -179,6 +179,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c @@ -37,7 +37,7 @@ src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S -@@ -345,6 +346,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm +@@ -361,6 +362,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm image-$(CONFIG_TQM8555) += cuImage.tqm8555 image-$(CONFIG_TQM8560) += cuImage.tqm8560 image-$(CONFIG_KSI8560) += cuImage.ksi8560 @@ -47,7 +47,7 @@ image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -339,6 +339,7 @@ adder875-redboot) +@@ -341,6 +341,7 @@ adder875-redboot) platformo="$object/fixed-head.o $object/redboot-8xx.o" binary=y ;; diff --git a/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch b/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch index 1af5aefe0b..f1e0f73f88 100644 --- a/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch +++ b/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch @@ -16,7 +16,7 @@ Signed-off-by: David Bauer --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -274,7 +274,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp +@@ -290,7 +290,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp image-$(CONFIG_PPC_EFIKA) += zImage.chrp image-$(CONFIG_PPC_PMAC) += zImage.pmac image-$(CONFIG_PPC_HOLLY) += dtbImage.holly @@ -24,7 +24,7 @@ Signed-off-by: David Bauer image-$(CONFIG_EPAPR_BOOT) += zImage.epapr # -@@ -409,15 +408,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits +@@ -425,15 +424,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits $(obj)/vmlinux.strip: vmlinux $(STRIP) -s -R .comment $< -o $@ From 894ff58067798ebe859dd9a2fe92ebf95765ac36 Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 21 Nov 2023 10:45:22 +0100 Subject: [PATCH 21/31] mpc85xx: kernel: refresh 6.1 config Kernel config needs to be refreshed after copy from 5.15. Signed-off-by: Pawel Dembicki --- target/linux/mpc85xx/config-6.1 | 35 +++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/target/linux/mpc85xx/config-6.1 b/target/linux/mpc85xx/config-6.1 index aeeeedad85..149518971f 100644 --- a/target/linux/mpc85xx/config-6.1 +++ b/target/linux/mpc85xx/config-6.1 @@ -12,6 +12,9 @@ CONFIG_ARCH_MMAP_RND_BITS_MAX=17 CONFIG_ARCH_MMAP_RND_BITS_MIN=11 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y +CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y +CONFIG_ARCH_SPLIT_ARG64=y CONFIG_ARCH_STACKWALK=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARCH_WEAK_RELEASE_ACQUIRE=y @@ -19,17 +22,21 @@ CONFIG_ASN1=y CONFIG_AUDIT_ARCH=y CONFIG_BLK_MQ_PCI=y CONFIG_BOOKE=y +CONFIG_BOOKE_OR_40x=y CONFIG_BOOKE_WDT=y # CONFIG_BR200_WP is not set # CONFIG_BSC9131_RDB is not set # CONFIG_BSC9132_QDS is not set # CONFIG_C293_PCIE is not set +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_CLONE_BACKWARDS=y CONFIG_CLZ_TAB=y CONFIG_CMDLINE="console=ttyS0,115200" CONFIG_CMDLINE_FROM_BOOTLOADER=y # CONFIG_CMDLINE_OVERRIDE is not set # CONFIG_COMMON_CLK is not set +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 CONFIG_COMPAT_32BIT_TIME=y # CONFIG_CORENET_GENERIC is not set # CONFIG_CPM2 is not set @@ -39,6 +46,8 @@ CONFIG_CRYPTO_AUTHENC=y CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 +CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_UTILS=y # CONFIG_CRYPTO_MD5_PPC is not set CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y @@ -46,11 +55,11 @@ CONFIG_CRYPTO_RSA=y # CONFIG_CRYPTO_SHA1_PPC is not set # CONFIG_CRYPTO_SHA1_PPC_SPE is not set # CONFIG_CRYPTO_SHA256_PPC_SPE is not set -CONFIG_DATA_SHIFT=12 +CONFIG_DATA_SHIFT=24 CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y CONFIG_DNOTIFY=y CONFIG_DTC=y -CONFIG_E500=y CONFIG_E500_CPU=y CONFIG_EARLY_PRINTK=y CONFIG_EDAC=y @@ -59,9 +68,10 @@ CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_LEGACY_SYSFS=y CONFIG_EDAC_MPC85XX=y CONFIG_EDAC_SUPPORT=y +CONFIG_EXCLUSIVE_SYSTEM_RAM=y # CONFIG_FIREBOX_T10 is not set CONFIG_FIXED_PHY=y -CONFIG_FSL_BOOKE=y +# CONFIG_FSL_DPAA2_SWITCH is not set CONFIG_FSL_EMB_PERFMON=y # CONFIG_FSL_FMAN is not set CONFIG_FSL_LBC=y @@ -71,6 +81,8 @@ CONFIG_FSL_SOC=y CONFIG_FSL_SOC_BOOKE=y CONFIG_FWNODE_MDIO=y CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_FW_LOADER_SYSFS=y +CONFIG_GCC11_NO_ARRAY_BOUNDS=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_GENERIC_ATOMIC64=y CONFIG_GENERIC_BUG=y @@ -115,7 +127,7 @@ CONFIG_KERNEL_START=0xc0000000 # CONFIG_KSI8560 is not set CONFIG_LIBFDT=y CONFIG_LOCK_DEBUGGING_SUPPORT=y -CONFIG_LOWMEM_CAM_NUM=3 +CONFIG_LOWMEM_CAM_NUM=9 CONFIG_LOWMEM_SIZE=0x30000000 CONFIG_LXT_PHY=y # CONFIG_MATH_EMULATION is not set @@ -124,6 +136,7 @@ CONFIG_MDIO_DEVICE=y CONFIG_MDIO_DEVRES=y CONFIG_MEMFD_CREATE=y CONFIG_MIGRATION=y +CONFIG_MMU_GATHER_MERGE_VMAS=y CONFIG_MMU_GATHER_PAGE_SIZE=y CONFIG_MODULES_USE_ELF_RELA=y # CONFIG_MPC8536_DS is not set @@ -168,6 +181,9 @@ CONFIG_OLD_SIGSUSPEND=y # CONFIG_P1022_RDK is not set # CONFIG_P1023_RDB is not set CONFIG_PAGE_OFFSET=0xc0000000 +CONFIG_PAGE_POOL=y +CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SIZE_LESS_THAN_64KB=y # CONFIG_PANDA is not set CONFIG_PCI=y CONFIG_PCIEAER=y @@ -195,22 +211,27 @@ CONFIG_PPC_ADV_DEBUG_DVCS=0 CONFIG_PPC_ADV_DEBUG_IACS=2 CONFIG_PPC_ADV_DEBUG_REGS=y CONFIG_PPC_BARRIER_NOSPEC=y -CONFIG_PPC_BOOK3E_MMU=y # CONFIG_PPC_BOOK3S_32 is not set CONFIG_PPC_DOORBELL=y +CONFIG_PPC_E500=y # CONFIG_PPC_E500MC is not set # CONFIG_PPC_EARLY_DEBUG is not set -CONFIG_PPC_FSL_BOOK3E=y CONFIG_PPC_INDIRECT_PCI=y +CONFIG_PPC_KUAP=y +# CONFIG_PPC_KUAP_DEBUG is not set +CONFIG_PPC_KUEP=y CONFIG_PPC_MMU_NOHASH=y CONFIG_PPC_PAGE_SHIFT=12 +# CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT is not set # CONFIG_PPC_QEMU_E500 is not set CONFIG_PPC_SMP_MUXED_IPI=y CONFIG_PPC_UDBG_16550=y CONFIG_PPC_WERROR=y +CONFIG_PREEMPT_NONE_BUILD=y CONFIG_PTP_1588_CLOCK_OPTIONAL=y CONFIG_QE_GPIO=y CONFIG_QUICC_ENGINE=y +CONFIG_RANDSTRUCT_NONE=y CONFIG_RAS=y # CONFIG_RED_15W_REV1 is not set CONFIG_RTC_CLASS=y @@ -225,6 +246,7 @@ CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_SERIAL_QE is not set # CONFIG_SOCRATES is not set +CONFIG_SOFTIRQ_ON_OWN_STACK=y CONFIG_SPARSE_IRQ=y CONFIG_SPE=y CONFIG_SPE_POSSIBLE=y @@ -233,6 +255,7 @@ CONFIG_SPI_FSL_ESPI=y CONFIG_SPI_MASTER=y CONFIG_SPI_MEM=y CONFIG_SRCU=y +# CONFIG_STATIC_CALL_SELFTEST is not set # CONFIG_STRIP_ASM_SYMS is not set # CONFIG_STX_GP3 is not set CONFIG_SWPHY=y From 6a8b831593895ff9c8a687de7f7d0d24cdef8b3f Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Mon, 19 Feb 2024 13:39:10 +0100 Subject: [PATCH 22/31] mpc85xx: p1010: change wrapper address of simple image devices Kernel and initramfs size grows. Now uncompressed initramfs image and regular kernel image overlaps configured area: Initramfs: WRAP arch/powerpc/boot/simpleImage.br200-wp INFO: Uncompressed kernel (size 0x1428688) overlaps the address of the wrapper(0x1000000) INFO: Fixing the link_address of wrapper to (0x1500000) WRAP arch/powerpc/boot/simpleImage.tl-wdr4900-v1 INFO: Uncompressed kernel (size 0x1428688) overlaps the address of the wrapper(0x1000000) INFO: Fixing the link_address of wrapper to (0x1500000) WRAP arch/powerpc/boot/simpleImage.ws-ap3715i INFO: Uncompressed kernel (size 0x1428688) overlaps the address of the wrapper(0x1000000) INFO: Fixing the link_address of wrapper to (0x1500000) Regular image: WRAP arch/powerpc/boot/simpleImage.br200-wp INFO: Uncompressed kernel (size 0x10e0688) overlaps the address of the wrapper(0x1000000) INFO: Fixing the link_address of wrapper to (0x1100000) WRAP arch/powerpc/boot/simpleImage.tl-wdr4900-v1 INFO: Uncompressed kernel (size 0x10e0688) overlaps the address of the wrapper(0x1000000) INFO: Fixing the link_address of wrapper to (0x1100000) WRAP arch/powerpc/boot/simpleImage.ws-ap3715i INFO: Uncompressed kernel (size 0x10e0688) overlaps the address of the wrapper(0x1000000) INFO: Fixing the link_address of wrapper to (0x1100000) Let's change wrapper address to safe value. Tested on: TL-WDR4900, BR200-WP Signed-off-by: Pawel Dembicki --- target/linux/mpc85xx/image/p1010.mk | 12 ++++++------ .../100-powerpc-85xx-tl-wdr4900-v1-support.patch | 2 +- .../107-powerpc-85xx-add-ws-ap3825i-support.patch | 2 +- .../100-powerpc-85xx-tl-wdr4900-v1-support.patch | 2 +- .../107-powerpc-85xx-add-ws-ap3825i-support.patch | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/target/linux/mpc85xx/image/p1010.mk b/target/linux/mpc85xx/image/p1010.mk index c0de19f6c6..a4f2d13dd4 100644 --- a/target/linux/mpc85xx/image/p1010.mk +++ b/target/linux/mpc85xx/image/p1010.mk @@ -21,8 +21,8 @@ define Device/aerohive_br200-wp KERNEL_NAME := simpleImage.br200-wp KERNEL := kernel-bin | uImage none KERNEL_INITRAMFS := kernel-bin | uImage none - KERNEL_ENTRY := 0x1000000 - KERNEL_LOADADDR := 0x1000000 + KERNEL_ENTRY := 0x1500000 + KERNEL_LOADADDR := 0x1500000 KERNEL_SIZE := 8m IMAGES := fdt.bin sysupgrade.bin IMAGE/fdt.bin := append-dtb @@ -39,8 +39,8 @@ define Device/enterasys_ws-ap3715i DEVICE_MODEL := WS-AP3715i BLOCKSIZE := 64k KERNEL_NAME := simpleImage.ws-ap3715i - KERNEL_ENTRY := 0x1000000 - KERNEL_LOADADDR := 0x1000000 + KERNEL_ENTRY := 0x1500000 + KERNEL_LOADADDR := 0x1500000 KERNEL = kernel-bin | lzma | uImage lzma IMAGES := sysupgrade.bin IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata @@ -60,8 +60,8 @@ define Device/tplink_tl-wdr4900-v1 KERNEL_NAME := simpleImage.tl-wdr4900-v1 KERNEL_INITRAMFS := KERNEL := kernel-bin | uImage none -M 0x4f4b4c49 | spi-loader-okli $(1) - KERNEL_ENTRY := 0x1000000 - KERNEL_LOADADDR := 0x1000000 + KERNEL_ENTRY := 0x1500000 + KERNEL_LOADADDR := 0x1500000 SUPPORTED_DEVICES += tl-wdr4900-v1 COMPILE := loader-$(1) COMPILE/loader-$(1) := spi-loader-okli-compile diff --git a/target/linux/mpc85xx/patches-5.15/100-powerpc-85xx-tl-wdr4900-v1-support.patch b/target/linux/mpc85xx/patches-5.15/100-powerpc-85xx-tl-wdr4900-v1-support.patch index 0ecbec3ca4..fa27e9665d 100644 --- a/target/linux/mpc85xx/patches-5.15/100-powerpc-85xx-tl-wdr4900-v1-support.patch +++ b/target/linux/mpc85xx/patches-5.15/100-powerpc-85xx-tl-wdr4900-v1-support.patch @@ -44,7 +44,7 @@ Signed-off-by: Pawel Dembicki ;; +simpleboot-tl-wdr4900-v1) + platformo="$object/fixed-head.o $object/simpleboot.o" -+ link_address='0x1000000' ++ link_address='0x1500000' + binary=y + ;; simpleboot-*) diff --git a/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch b/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch index bd731a2344..51da0f4527 100644 --- a/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch +++ b/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch @@ -62,4 +62,4 @@ WS-AP3825i AP. +simpleboot-ws-ap3825i|\ simpleboot-tl-wdr4900-v1) platformo="$object/fixed-head.o $object/simpleboot.o" - link_address='0x1000000' + link_address='0x1500000' diff --git a/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch b/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch index 7b9016d2fe..a7253a9794 100644 --- a/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch +++ b/target/linux/mpc85xx/patches-6.1/100-powerpc-85xx-tl-wdr4900-v1-support.patch @@ -44,7 +44,7 @@ Signed-off-by: Pawel Dembicki ;; +simpleboot-tl-wdr4900-v1) + platformo="$object/fixed-head.o $object/simpleboot.o" -+ link_address='0x1000000' ++ link_address='0x1500000' + binary=y + ;; simpleboot-*) diff --git a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch index 0fa1b4172b..fb697e1d1f 100644 --- a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch +++ b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch @@ -62,4 +62,4 @@ WS-AP3825i AP. +simpleboot-ws-ap3825i|\ simpleboot-tl-wdr4900-v1) platformo="$object/fixed-head.o $object/simpleboot.o" - link_address='0x1000000' + link_address='0x1500000' From a99dfd195ef4d555f5dec12366a44d79b530f15d Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Tue, 21 Nov 2023 10:50:23 +0100 Subject: [PATCH 23/31] mpc85xx: add 6.1 testing kernel Configure 6.1 testing kernel for mpc85xx target. Signed-off-by: Pawel Dembicki --- target/linux/mpc85xx/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/target/linux/mpc85xx/Makefile b/target/linux/mpc85xx/Makefile index 7e84be8624..7d90e1cbb3 100644 --- a/target/linux/mpc85xx/Makefile +++ b/target/linux/mpc85xx/Makefile @@ -12,6 +12,7 @@ FEATURES:=squashfs ramdisk nand SUBTARGETS:=p1010 p1020 p2020 KERNEL_PATCHVER:=5.15 +KERNEL_TESTING_PATCHVER:=6.1 KERNELNAME:=zImage From 102009f3ea48a49114485fb119072850f40ae1e8 Mon Sep 17 00:00:00 2001 From: Christian Lamparter Date: Thu, 7 Mar 2024 22:43:41 +0100 Subject: [PATCH 24/31] mpc85xx: p1020: convert Aerohive AP330/AP350 to simpleImage with 6.1, the kernel no longer fitted into the 16 MiB and kicking down the can and increasing KERNEL_SIZE to 20 MiB didn't help as the device failed to boot. Using 'kernel-bin | gzip | uimage gzip' didn't work since the uboot does not have enough heap to decompress these big kernels. And finally playing around with uboot was more a hassle than converting this device to take the simpleImage-boot-route in the future. Note: The device now takes even longer on the first boot-up after the flash due to JFFS2 initializing all the remaining flash. Be prepared to wait up to 10 minutes before the green status LED stops blinking and will shine a solid green! (On the plus site: the device now has ~10 MiB of additional space for rootfs+rootfs_data). Note2: This patch includes a kernel patch refresh. Signed-off-by: Christian Lamparter --- .../arch/powerpc/boot/dts/hiveap-330.dts | 142 +++++++++++++++--- target/linux/mpc85xx/image/p1020.mk | 7 +- target/linux/mpc85xx/p1020/target.mk | 2 +- .../101-powerpc-85xx-hiveap-330-support.patch | 28 ++++ ...-powerpc-85xx-add-ws-ap3825i-support.patch | 12 +- ...-powerpc-85xx-add-ws-ap3715i-support.patch | 8 +- .../110-powerpc-85xx-br200-wp-support.patch | 8 +- ...ootwrapper-disable-uImage-generation.patch | 4 +- .../101-powerpc-85xx-hiveap-330-support.patch | 28 ++++ ...-powerpc-85xx-add-ws-ap3825i-support.patch | 12 +- ...-powerpc-85xx-add-ws-ap3715i-support.patch | 8 +- .../110-powerpc-85xx-br200-wp-support.patch | 8 +- ...ootwrapper-disable-uImage-generation.patch | 4 +- 13 files changed, 219 insertions(+), 52 deletions(-) diff --git a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/hiveap-330.dts b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/hiveap-330.dts index 6ad5c4ccd6..7ba282766e 100644 --- a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/hiveap-330.dts +++ b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/hiveap-330.dts @@ -27,11 +27,105 @@ spi0 = &spi0; }; + chosen { + /* + * not yet implemented. + * stdout-path = &serial0 ":9600n8"; + * + * + * this should work... but it doesn't because CONFIG_CMDLINE in our + * OpenWrt's target config sets "console=ttyS0,115200" + * stdout-path = "/soc@ffe00000/serial@4500:9600n8"; + */ + + bootargs = "console=ttyS0,9600n8"; + }; + + cpus { + PowerPC,P1020@0 { + i-cache-sets = <0x80>; + i-cache-size = <0x8000>; + i-cache-block-size = <0x20>; + d-cache-sets = <0x80>; + d-cache-size = <0x8000>; + d-cache-block-size = <0x20>; + status = "okay"; + clock-frequency = <533333328>; /* 533.33 MHz */ + bus-frequency = <266666664>; /* 266.66 MHz */ + timebase-frequency = <33333333>; /* 33.33 MHz */ + }; + + PowerPC,P1020@1 { + i-cache-sets = <0x80>; + i-cache-size = <0x8000>; + i-cache-block-size = <0x20>; + d-cache-sets = <0x80>; + d-cache-size = <0x8000>; + d-cache-block-size = <0x20>; + cpu-release-addr = <0x00 0xffff240>; + enable-method = "spin-table"; + status = "disabled"; + clock-frequency = <533333328>; + bus-frequency = <266666664>; + timebase-frequency = <33333333>; + }; + }; + memory { + #address-cells = <2>; + #size-cells = <2>; + + reg = <0x00 0x00 0x00 0x10000000>; device_type = "memory"; }; + /* + * Usually, u-boot provided /memreserve/ properties by adding them during boot. + * these have been converted to reserved-memory entries. + */ + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + /* + * /memreserve/ 0x0000000000ffa000 0x0000000000004000; + * The kernel complains when booting: + * + * | OF: fdt: Reserved memory: failed to reserve memory for node + * 'firmware@ffa000': base 0x00ffa000, size 0 MiB + * + * But this likely uboot's bootargs + modified DTB. And if so, we don't care. + * This is because we rely on our own dtb that's in the simpleImage. + * + * Note: This is backed up by u-boot. just before the kernel executes + * it prints this final line: + * | Loading Device Tree to 00ff9000, end 00fff1c4 ... OK + * + * firmware@ffa000 { + * reg = <0x0 0xffa000 0x0 0x4000>; + * no-map; + * }; + */ + + // /memreserve/ 0x000000000fe2f000 0x0000000000000021; + firmware@fe2f000 { + reg = <0x0 0xfe2f000 0x0 0x21>; + no-map; + }; + + /* + * /memreserve/ 0x000000000ffff000 0x0000000000001000; + * that's the spin-table - see second CPU core binding. + */ + firmware@ffff000 { + reg = <0x0 0xffff000 0x0 0x1000>; + no-map; + }; + }; + board_lbc: lbc: localbus@ffe05000 { + bus-frequency = <16666666>; /* 16.66 MHz */ reg = <0 0xffe05000 0 0x1000>; ranges = <0x0 0x0 0x0 0xec000000 0x4000000>; @@ -117,8 +211,12 @@ board_soc: soc: soc@ffe00000 { ranges = <0x0 0x0 0xffe00000 0x100000>; + bus-frequency = <266666664>; spi0: spi@7000 { + #address-cells = <1>; + #size-cells = <0>; + temperature-sensor@1 { compatible = "ti,tmp125"; reg = <1>; @@ -136,6 +234,9 @@ compatible = "national,lp5521"; reg = <0x32>; clock-mode = /bits/ 8 <2>; + #address-cells = <1>; + #size-cells = <0>; + #if 1 led_fault_red: led@0 { reg = <0>; @@ -230,6 +331,9 @@ }; enet0: ethernet@b0000 { + rx-stash-idx = <0x00>; + rx-stash-len = <0x60>; + bd-stash; status = "okay"; phy-handle = <&phy0>; phy-connection-type = "rgmii-id"; @@ -242,6 +346,9 @@ }; enet2: ethernet@b2000 { + rx-stash-idx = <0x00>; + rx-stash-len = <0x60>; + bd-stash; status = "okay"; phy-handle = <&phy1>; phy-connection-type = "rgmii-id"; @@ -264,31 +371,22 @@ pci0: pcie@ffe09000 { reg = <0x0 0xffe09000 0x0 0x1000>; - ranges = <0x2000000 0x0 0xa0000000 0x0 0xa0000000 0x0 0x20000000 - 0x1000000 0x0 0x00000000 0x0 0xffc30000 0x0 0x10000>; + ranges = <0x2000000 0x0 0xa0000000 0x0 0xa0000000 0x0 0x20000000>, + <0x1000000 0x0 0x00000000 0x0 0xffc30000 0x0 0x10000>; pcie@0 { - ranges = <0x2000000 0x0 0xa0000000 - 0x2000000 0x0 0xa0000000 - 0x0 0x20000000 - - 0x1000000 0x0 0x0 - 0x1000000 0x0 0x0 - 0x0 0x100000>; + ranges = <0x2000000 0x0 0xa0000000 0x2000000 0x0 0xa0000000 0x0 0x20000000>, + <0x1000000 0x0 0x00000000 0x1000000 0x0 0x00000000 0x0 0x00100000>; }; }; pci1: pcie@ffe0a000 { reg = <0x0 0xffe0a000 0x0 0x1000>; - ranges = <0x2000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x20000000 - 0x1000000 0x0 0x00000000 0x0 0xffc20000 0x0 0x10000>; - pcie@0 { - ranges = <0x2000000 0x0 0xc0000000 - 0x2000000 0x0 0xc0000000 - 0x0 0x20000000 + ranges = <0x2000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x20000000>, + <0x1000000 0x0 0x00000000 0x0 0xffc20000 0x0 0x10000>; - 0x1000000 0x0 0x0 - 0x1000000 0x0 0x0 - 0x0 0x100000>; + pcie@0 { + ranges = <0x2000000 0x0 0xc0000000 0x2000000 0x0 0xc0000000 0x0 0x20000000>, + <0x1000000 0x0 0x00000000 0x1000000 0x0 0x00000000 0x0 0x00100000>; }; }; @@ -302,7 +400,15 @@ }; }; }; + /include/ "fsl/p1020si-post.dtsi" +&serial0 { + clock-frequency = <266666664>; +}; + +&serial1 { + clock-frequency = <266666664>; +}; /* * For the OpenWrt 22.03 release, since Linux 5.10.138 now uses diff --git a/target/linux/mpc85xx/image/p1020.mk b/target/linux/mpc85xx/image/p1020.mk index d3d7f93ddd..1d18a63dc0 100644 --- a/target/linux/mpc85xx/image/p1020.mk +++ b/target/linux/mpc85xx/image/p1020.mk @@ -18,9 +18,14 @@ define Device/aerohive_hiveap-330 DEVICE_PACKAGES := kmod-tpm-i2c-atmel kmod-hwmon-lm70 BLOCKSIZE := 128k KERNEL := kernel-bin | uImage none - KERNEL_INITRAMFS := kernel-bin | MultiImage none + KERNEL_INITRAMFS := kernel-bin | uImage none + KERNEL_NAME := simpleImage.hiveap-330 KERNEL_SIZE := 16m IMAGES := sysupgrade.bin + KERNEL_ENTRY := 0x1500000 + KERNEL_LOADADDR := 0x1500000 + # append-dtb is still needed, as otherwise u-boot bootm complains + # about not having a FDT to edit. IMAGE/sysupgrade.bin := append-dtb | pad-to 256k | append-kernel | \ append-rootfs | pad-rootfs | check-size | append-metadata IMAGE_SIZE = 63m diff --git a/target/linux/mpc85xx/p1020/target.mk b/target/linux/mpc85xx/p1020/target.mk index 8770edb9a9..5a5d0bf07d 100644 --- a/target/linux/mpc85xx/p1020/target.mk +++ b/target/linux/mpc85xx/p1020/target.mk @@ -1,5 +1,5 @@ BOARDNAME:=P1020 -KERNEL_IMAGES:=simpleImage.ws-ap3825i +KERNEL_IMAGES:=simpleImage.ws-ap3825i simpleImage.hiveap-330 define Target/Description Build firmware images for Freescale P1020 based boards. diff --git a/target/linux/mpc85xx/patches-5.15/101-powerpc-85xx-hiveap-330-support.patch b/target/linux/mpc85xx/patches-5.15/101-powerpc-85xx-hiveap-330-support.patch index da95cd2716..7d531e4ffc 100644 --- a/target/linux/mpc85xx/patches-5.15/101-powerpc-85xx-hiveap-330-support.patch +++ b/target/linux/mpc85xx/patches-5.15/101-powerpc-85xx-hiveap-330-support.patch @@ -28,3 +28,31 @@ obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -163,6 +163,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie + src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S + src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S + src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c ++src-plat-$(CONFIG_HIVEAP_330) += simpleboot.c fixed-head.S + src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S + + src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c +@@ -344,6 +345,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm + image-$(CONFIG_TQM8555) += cuImage.tqm8555 + image-$(CONFIG_TQM8560) += cuImage.tqm8560 + image-$(CONFIG_KSI8560) += cuImage.ksi8560 ++image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 + image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 + # Board ports in arch/powerpc/platform/86xx/Kconfig + image-$(CONFIG_MVME7100) += dtbImage.mvme7100 +--- a/arch/powerpc/boot/wrapper ++++ b/arch/powerpc/boot/wrapper +@@ -339,6 +339,7 @@ adder875-redboot) + platformo="$object/fixed-head.o $object/redboot-8xx.o" + binary=y + ;; ++simpleboot-hiveap-330|\ + simpleboot-tl-wdr4900-v1) + platformo="$object/fixed-head.o $object/simpleboot.o" + link_address='0x1500000' diff --git a/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch b/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch index 51da0f4527..9ccd9e877f 100644 --- a/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch +++ b/target/linux/mpc85xx/patches-5.15/107-powerpc-85xx-add-ws-ap3825i-support.patch @@ -37,17 +37,17 @@ WS-AP3825i AP. obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -164,6 +164,7 @@ src-plat-$(CONFIG_PPC_POWERNV) += pserie - src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S +@@ -165,6 +165,7 @@ src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c + src-plat-$(CONFIG_HIVEAP_330) += simpleboot.c fixed-head.S src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S +src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c -@@ -345,6 +346,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm - image-$(CONFIG_TQM8560) += cuImage.tqm8560 +@@ -347,6 +348,7 @@ image-$(CONFIG_TQM8560) += cuImage.tqm image-$(CONFIG_KSI8560) += cuImage.ksi8560 + image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 +image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i # Board ports in arch/powerpc/platform/86xx/Kconfig @@ -55,10 +55,10 @@ WS-AP3825i AP. --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -339,6 +339,7 @@ adder875-redboot) - platformo="$object/fixed-head.o $object/redboot-8xx.o" +@@ -340,6 +340,7 @@ adder875-redboot) binary=y ;; + simpleboot-hiveap-330|\ +simpleboot-ws-ap3825i|\ simpleboot-tl-wdr4900-v1) platformo="$object/fixed-head.o $object/simpleboot.o" diff --git a/target/linux/mpc85xx/patches-5.15/109-powerpc-85xx-add-ws-ap3715i-support.patch b/target/linux/mpc85xx/patches-5.15/109-powerpc-85xx-add-ws-ap3715i-support.patch index 692cef0417..59f3184295 100644 --- a/target/linux/mpc85xx/patches-5.15/109-powerpc-85xx-add-ws-ap3715i-support.patch +++ b/target/linux/mpc85xx/patches-5.15/109-powerpc-85xx-add-ws-ap3715i-support.patch @@ -30,9 +30,9 @@ obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -346,6 +346,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm - image-$(CONFIG_TQM8560) += cuImage.tqm8560 +@@ -348,6 +348,7 @@ image-$(CONFIG_TQM8560) += cuImage.tqm image-$(CONFIG_KSI8560) += cuImage.ksi8560 + image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 +image-$(CONFIG_WS_AP3715I) += simpleImage.ws-ap3715i image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i @@ -40,10 +40,10 @@ image-$(CONFIG_MVME7100) += dtbImage.mvme7100 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -339,6 +339,7 @@ adder875-redboot) - platformo="$object/fixed-head.o $object/redboot-8xx.o" +@@ -340,6 +340,7 @@ adder875-redboot) binary=y ;; + simpleboot-hiveap-330|\ +simpleboot-ws-ap3715i|\ simpleboot-ws-ap3825i|\ simpleboot-tl-wdr4900-v1) diff --git a/target/linux/mpc85xx/patches-5.15/110-powerpc-85xx-br200-wp-support.patch b/target/linux/mpc85xx/patches-5.15/110-powerpc-85xx-br200-wp-support.patch index eb70a4c4c4..21a26f1a73 100644 --- a/target/linux/mpc85xx/patches-5.15/110-powerpc-85xx-br200-wp-support.patch +++ b/target/linux/mpc85xx/patches-5.15/110-powerpc-85xx-br200-wp-support.patch @@ -34,17 +34,17 @@ src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c +src-plat-$(CONFIG_BR200_WP) += simpleboot.c fixed-head.S + src-plat-$(CONFIG_HIVEAP_330) += simpleboot.c fixed-head.S src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S - -@@ -345,6 +346,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm +@@ -346,6 +347,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm image-$(CONFIG_TQM8555) += cuImage.tqm8555 image-$(CONFIG_TQM8560) += cuImage.tqm8560 image-$(CONFIG_KSI8560) += cuImage.ksi8560 +image-$(CONFIG_BR200_WP) += simpleImage.br200-wp + image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 image-$(CONFIG_WS_AP3715I) += simpleImage.ws-ap3715i - image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper @@ -339,6 +339,7 @@ adder875-redboot) @@ -52,6 +52,6 @@ binary=y ;; +simpleboot-br200-wp|\ + simpleboot-hiveap-330|\ simpleboot-ws-ap3715i|\ simpleboot-ws-ap3825i|\ - simpleboot-tl-wdr4900-v1) diff --git a/target/linux/mpc85xx/patches-5.15/900-powerpc-bootwrapper-disable-uImage-generation.patch b/target/linux/mpc85xx/patches-5.15/900-powerpc-bootwrapper-disable-uImage-generation.patch index 1af5aefe0b..7f99bd5211 100644 --- a/target/linux/mpc85xx/patches-5.15/900-powerpc-bootwrapper-disable-uImage-generation.patch +++ b/target/linux/mpc85xx/patches-5.15/900-powerpc-bootwrapper-disable-uImage-generation.patch @@ -16,7 +16,7 @@ Signed-off-by: David Bauer --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -274,7 +274,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp +@@ -275,7 +275,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp image-$(CONFIG_PPC_EFIKA) += zImage.chrp image-$(CONFIG_PPC_PMAC) += zImage.pmac image-$(CONFIG_PPC_HOLLY) += dtbImage.holly @@ -24,7 +24,7 @@ Signed-off-by: David Bauer image-$(CONFIG_EPAPR_BOOT) += zImage.epapr # -@@ -409,15 +408,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits +@@ -411,15 +410,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits $(obj)/vmlinux.strip: vmlinux $(STRIP) -s -R .comment $< -o $@ diff --git a/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch b/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch index fe8745361d..e8b6632f2b 100644 --- a/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch +++ b/target/linux/mpc85xx/patches-6.1/101-powerpc-85xx-hiveap-330-support.patch @@ -28,3 +28,31 @@ obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o +--- a/arch/powerpc/boot/Makefile ++++ b/arch/powerpc/boot/Makefile +@@ -179,6 +179,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie + src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S + src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S + src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c ++src-plat-$(CONFIG_HIVEAP_330) += simpleboot.c fixed-head.S + src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S + + src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c +@@ -360,6 +361,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm + image-$(CONFIG_TQM8555) += cuImage.tqm8555 + image-$(CONFIG_TQM8560) += cuImage.tqm8560 + image-$(CONFIG_KSI8560) += cuImage.ksi8560 ++image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 + image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 + # Board ports in arch/powerpc/platform/86xx/Kconfig + image-$(CONFIG_MVME7100) += dtbImage.mvme7100 +--- a/arch/powerpc/boot/wrapper ++++ b/arch/powerpc/boot/wrapper +@@ -341,6 +341,7 @@ adder875-redboot) + platformo="$object/fixed-head.o $object/redboot-8xx.o" + binary=y + ;; ++simpleboot-hiveap-330|\ + simpleboot-tl-wdr4900-v1) + platformo="$object/fixed-head.o $object/simpleboot.o" + link_address='0x1500000' diff --git a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch index fb697e1d1f..63e7e46bbc 100644 --- a/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch +++ b/target/linux/mpc85xx/patches-6.1/107-powerpc-85xx-add-ws-ap3825i-support.patch @@ -37,17 +37,17 @@ WS-AP3825i AP. obj-$(CONFIG_RED_15W_REV1) += red15w_rev1.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -180,6 +180,7 @@ src-plat-$(CONFIG_PPC_POWERNV) += pserie - src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S +@@ -181,6 +181,7 @@ src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c + src-plat-$(CONFIG_HIVEAP_330) += simpleboot.c fixed-head.S src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S +src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S src-plat-$(CONFIG_PPC_MICROWATT) += fixed-head.S microwatt.c -@@ -361,6 +362,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm - image-$(CONFIG_TQM8560) += cuImage.tqm8560 +@@ -363,6 +364,7 @@ image-$(CONFIG_TQM8560) += cuImage.tqm image-$(CONFIG_KSI8560) += cuImage.ksi8560 + image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 +image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i # Board ports in arch/powerpc/platform/86xx/Kconfig @@ -55,10 +55,10 @@ WS-AP3825i AP. --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -341,6 +341,7 @@ adder875-redboot) - platformo="$object/fixed-head.o $object/redboot-8xx.o" +@@ -342,6 +342,7 @@ adder875-redboot) binary=y ;; + simpleboot-hiveap-330|\ +simpleboot-ws-ap3825i|\ simpleboot-tl-wdr4900-v1) platformo="$object/fixed-head.o $object/simpleboot.o" diff --git a/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch b/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch index 8f34f14d54..f8e33ae637 100644 --- a/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch +++ b/target/linux/mpc85xx/patches-6.1/109-powerpc-85xx-add-ws-ap3715i-support.patch @@ -30,9 +30,9 @@ obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -362,6 +362,7 @@ image-$(CONFIG_TQM8555) += cuImage.tqm - image-$(CONFIG_TQM8560) += cuImage.tqm8560 +@@ -364,6 +364,7 @@ image-$(CONFIG_TQM8560) += cuImage.tqm image-$(CONFIG_KSI8560) += cuImage.ksi8560 + image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 +image-$(CONFIG_WS_AP3715I) += simpleImage.ws-ap3715i image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i @@ -40,10 +40,10 @@ image-$(CONFIG_MVME7100) += dtbImage.mvme7100 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper -@@ -341,6 +341,7 @@ adder875-redboot) - platformo="$object/fixed-head.o $object/redboot-8xx.o" +@@ -342,6 +342,7 @@ adder875-redboot) binary=y ;; + simpleboot-hiveap-330|\ +simpleboot-ws-ap3715i|\ simpleboot-ws-ap3825i|\ simpleboot-tl-wdr4900-v1) diff --git a/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch b/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch index 430af1efb1..b063b3dab7 100644 --- a/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch +++ b/target/linux/mpc85xx/patches-6.1/110-powerpc-85xx-br200-wp-support.patch @@ -34,17 +34,17 @@ src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c +src-plat-$(CONFIG_BR200_WP) += simpleboot.c fixed-head.S + src-plat-$(CONFIG_HIVEAP_330) += simpleboot.c fixed-head.S src-plat-$(CONFIG_TL_WDR4900_V1) += simpleboot.c fixed-head.S src-plat-$(CONFIG_WS_AP3825I) += simpleboot.c fixed-head.S - -@@ -361,6 +362,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm +@@ -362,6 +363,7 @@ image-$(CONFIG_TQM8548) += cuImage.tqm image-$(CONFIG_TQM8555) += cuImage.tqm8555 image-$(CONFIG_TQM8560) += cuImage.tqm8560 image-$(CONFIG_KSI8560) += cuImage.ksi8560 +image-$(CONFIG_BR200_WP) += simpleImage.br200-wp + image-$(CONFIG_HIVEAP_330) += simpleImage.hiveap-330 image-$(CONFIG_TL_WDR4900_V1) += simpleImage.tl-wdr4900-v1 image-$(CONFIG_WS_AP3715I) += simpleImage.ws-ap3715i - image-$(CONFIG_WS_AP3825I) += simpleImage.ws-ap3825i --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper @@ -341,6 +341,7 @@ adder875-redboot) @@ -52,6 +52,6 @@ binary=y ;; +simpleboot-br200-wp|\ + simpleboot-hiveap-330|\ simpleboot-ws-ap3715i|\ simpleboot-ws-ap3825i|\ - simpleboot-tl-wdr4900-v1) diff --git a/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch b/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch index f1e0f73f88..648aa0421d 100644 --- a/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch +++ b/target/linux/mpc85xx/patches-6.1/900-powerpc-bootwrapper-disable-uImage-generation.patch @@ -16,7 +16,7 @@ Signed-off-by: David Bauer --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile -@@ -290,7 +290,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp +@@ -291,7 +291,6 @@ image-$(CONFIG_PPC_CHRP) += zImage.chrp image-$(CONFIG_PPC_EFIKA) += zImage.chrp image-$(CONFIG_PPC_PMAC) += zImage.pmac image-$(CONFIG_PPC_HOLLY) += dtbImage.holly @@ -24,7 +24,7 @@ Signed-off-by: David Bauer image-$(CONFIG_EPAPR_BOOT) += zImage.epapr # -@@ -425,15 +424,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits +@@ -427,15 +426,6 @@ $(obj)/dtbImage.%: vmlinux $(wrapperbits $(obj)/vmlinux.strip: vmlinux $(STRIP) -s -R .comment $< -o $@ From e0ee4195fc7b1a119cfb02bf292a9410af3b9fe4 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 4 Mar 2024 19:07:05 +0900 Subject: [PATCH 25/31] ath79: rename label of primary UART on QCA955x to "uart0" Rename the DT label of the primary UART on Qualcomm Atheros QCA955x series SoCs to "uart0" from "uart" for the preparation to add HighSpeed UART (uart1) support. Signed-off-by: INAGAKI Hiroshi --- target/linux/ath79/dts/qca955x.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/linux/ath79/dts/qca955x.dtsi b/target/linux/ath79/dts/qca955x.dtsi index c17a15c55e..13fbd03ccb 100644 --- a/target/linux/ath79/dts/qca955x.dtsi +++ b/target/linux/ath79/dts/qca955x.dtsi @@ -41,7 +41,7 @@ #qca,ddr-wb-channel-cells = <1>; }; - uart: uart@18020000 { + uart0: uart@18020000 { compatible = "ns16550a"; reg = <0x18020000 0x20>; From 35ae18fc061eda057ce531e516f9623ff8d94210 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 4 Mar 2024 19:08:07 +0900 Subject: [PATCH 26/31] ath79: add HighSpeed UART (uart1) support for QCA955x Add HighSpeed UART support to QCA955x series SoCs as a secondary UART (uart1). This UART is compatible with qca,ar9330-uart. Signed-off-by: INAGAKI Hiroshi --- target/linux/ath79/dts/qca955x.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/linux/ath79/dts/qca955x.dtsi b/target/linux/ath79/dts/qca955x.dtsi index 13fbd03ccb..c12a266cda 100644 --- a/target/linux/ath79/dts/qca955x.dtsi +++ b/target/linux/ath79/dts/qca955x.dtsi @@ -178,6 +178,18 @@ #reset-cells = <1>; }; + + uart1: uart@18500000 { + compatible = "qca,ar9330-uart"; + reg = <0x18500000 0x14>; + + interrupts = <6>; + + clocks = <&pll ATH79_CLK_REF>; + clock-names = "uart"; + + status = "disabled"; + }; }; gmac: gmac@18070000 { From bb6d11e53487e397b1c1cec1767b593dd1025c18 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 4 Mar 2024 20:28:23 +0900 Subject: [PATCH 27/31] ath79: add aliases to qca955x.dtsi for uart0/1 Add aliases with "serialN = &uartN;" of uart0/1 on QCA955x SoCs to qca955x.dtsi, to enable uart1 on Linux Kernel. without this: [ 0.342915] ar933x-uart 18500000.uart: unable to get alias id, err=-19 Additionally, remove "serial0 = &uart;" alias from QCA955x device dts/dtsi files. Signed-off-by: INAGAKI Hiroshi --- .../dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts | 1 - target/linux/ath79/dts/qca9558_comfast_cf-e380ac-v2.dts | 1 - target/linux/ath79/dts/qca9558_dlink_dir-629-a1.dts | 1 - target/linux/ath79/dts/qca9558_mikrotik_routerboard-92x.dtsi | 1 - target/linux/ath79/dts/qca9558_mikrotik_routerboard-96x.dtsi | 1 - target/linux/ath79/dts/qca9558_openmesh_a60.dtsi | 1 - target/linux/ath79/dts/qca9558_openmesh_mr.dtsi | 1 - target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v1.dts | 1 - target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts | 1 - target/linux/ath79/dts/qca955x.dtsi | 5 +++++ 10 files changed, 5 insertions(+), 9 deletions(-) diff --git a/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts b/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts index 485ef30e2c..9ae4dbe2d5 100644 --- a/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts +++ b/target/linux/ath79/dts/qca9556_mikrotik_routerboard-wap-g-5hact2hnd.dts @@ -11,7 +11,6 @@ aliases { mdio-gpio1 = &mdio2; - serial0 = &uart; }; keys { diff --git a/target/linux/ath79/dts/qca9558_comfast_cf-e380ac-v2.dts b/target/linux/ath79/dts/qca9558_comfast_cf-e380ac-v2.dts index febbccb4cb..703eead178 100644 --- a/target/linux/ath79/dts/qca9558_comfast_cf-e380ac-v2.dts +++ b/target/linux/ath79/dts/qca9558_comfast_cf-e380ac-v2.dts @@ -11,7 +11,6 @@ model = "COMFAST CF-E380AC"; aliases { - serial0 = &uart; label-mac-device = ð1; led-boot = &led_lan; led-failsafe = &led_lan; diff --git a/target/linux/ath79/dts/qca9558_dlink_dir-629-a1.dts b/target/linux/ath79/dts/qca9558_dlink_dir-629-a1.dts index 137bff732c..2d490dcf48 100644 --- a/target/linux/ath79/dts/qca9558_dlink_dir-629-a1.dts +++ b/target/linux/ath79/dts/qca9558_dlink_dir-629-a1.dts @@ -16,7 +16,6 @@ led-failsafe = &led_power; led-running = &led_power; led-upgrade = &led_power; - serial0 = &uart; }; keys { diff --git a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-92x.dtsi b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-92x.dtsi index bc85cad9b3..c2e1ab765b 100644 --- a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-92x.dtsi +++ b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-92x.dtsi @@ -10,7 +10,6 @@ led-boot = &led_user; led-failsafe = &led_user; led-upgrade = &led_user; - serial0 = &uart; }; leds { diff --git a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-96x.dtsi b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-96x.dtsi index 3cfc40cd86..684ca8632a 100644 --- a/target/linux/ath79/dts/qca9558_mikrotik_routerboard-96x.dtsi +++ b/target/linux/ath79/dts/qca9558_mikrotik_routerboard-96x.dtsi @@ -10,7 +10,6 @@ led-boot = &led_user; led-failsafe = &led_user; led-upgrade = &led_user; - serial0 = &uart; }; leds { diff --git a/target/linux/ath79/dts/qca9558_openmesh_a60.dtsi b/target/linux/ath79/dts/qca9558_openmesh_a60.dtsi index 11a6e81f9f..e908c26c0d 100644 --- a/target/linux/ath79/dts/qca9558_openmesh_a60.dtsi +++ b/target/linux/ath79/dts/qca9558_openmesh_a60.dtsi @@ -12,7 +12,6 @@ }; aliases { - serial0 = &uart; led-boot = &led_status_green; led-failsafe = &led_status_green; led-running = &led_status_green; diff --git a/target/linux/ath79/dts/qca9558_openmesh_mr.dtsi b/target/linux/ath79/dts/qca9558_openmesh_mr.dtsi index a5d3d37987..03f2999083 100644 --- a/target/linux/ath79/dts/qca9558_openmesh_mr.dtsi +++ b/target/linux/ath79/dts/qca9558_openmesh_mr.dtsi @@ -12,7 +12,6 @@ }; aliases { - serial0 = &uart; led-boot = &led_power_blue; led-failsafe = &led_power_blue; led-running = &led_power_blue; diff --git a/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v1.dts b/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v1.dts index f7c51578ba..8fd35a99d4 100644 --- a/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v1.dts +++ b/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v1.dts @@ -15,7 +15,6 @@ }; aliases { - serial0 = &uart; led-boot = &led_power_blue; led-failsafe = &led_power_blue; led-running = &led_power_blue; diff --git a/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts b/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts index b9eb0e91a9..2e27d3d6ee 100644 --- a/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts +++ b/target/linux/ath79/dts/qca9558_openmesh_om5p-ac-v2.dts @@ -15,7 +15,6 @@ }; aliases { - serial0 = &uart; led-boot = &led_power_blue; led-failsafe = &led_power_blue; led-running = &led_power_blue; diff --git a/target/linux/ath79/dts/qca955x.dtsi b/target/linux/ath79/dts/qca955x.dtsi index c12a266cda..9d410ceb46 100644 --- a/target/linux/ath79/dts/qca955x.dtsi +++ b/target/linux/ath79/dts/qca955x.dtsi @@ -8,6 +8,11 @@ #address-cells = <1>; #size-cells = <1>; + aliases { + serial0 = &uart0; + serial1 = &uart1; + }; + chosen { bootargs = "console=ttyS0,115200n8"; }; From a9f780a78e72db66efd80aef75d0f0080212345a Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 4 Mar 2024 19:11:36 +0900 Subject: [PATCH 28/31] ath79: drop unnecessary &uart node from dtsi of QCA955x devices &uart (uart0) is already enabled in qca955x.dtsi by default. Signed-off-by: INAGAKI Hiroshi --- target/linux/ath79/dts/qca9557_meraki_mr18.dts | 4 ---- target/linux/ath79/dts/qca955x_elecom_wab.dtsi | 4 ---- 2 files changed, 8 deletions(-) diff --git a/target/linux/ath79/dts/qca9557_meraki_mr18.dts b/target/linux/ath79/dts/qca9557_meraki_mr18.dts index 1df5d6125c..4e9b3d1e9a 100644 --- a/target/linux/ath79/dts/qca9557_meraki_mr18.dts +++ b/target/linux/ath79/dts/qca9557_meraki_mr18.dts @@ -171,10 +171,6 @@ }; }; -&uart { - status = "okay"; -}; - &mdio0 { status = "okay"; diff --git a/target/linux/ath79/dts/qca955x_elecom_wab.dtsi b/target/linux/ath79/dts/qca955x_elecom_wab.dtsi index f94f582468..3e24c514a9 100644 --- a/target/linux/ath79/dts/qca955x_elecom_wab.dtsi +++ b/target/linux/ath79/dts/qca955x_elecom_wab.dtsi @@ -227,10 +227,6 @@ }; }; -&uart { - status = "okay"; -}; - &usb_phy0 { status = "okay"; }; From 8efd1f98a910d9af2fb92accce62d03200e47f0a Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 4 Mar 2024 19:12:07 +0900 Subject: [PATCH 29/31] ath79: cleanup and enable uart1 on ELECOM WAB-I1750-PS Cleanup uart1-related node on ELECOM WAB-I1750-PS and enable it for "SERIAL" port on the case. "SERIAL" port can be used for OpenWrt console by adding the following line to /etc/inittab and rebooting: ttyATH1::askfirst:/usr/libexec/login.sh Signed-off-by: INAGAKI Hiroshi --- .../ath79/dts/qca9558_elecom_wab-i1750-ps.dts | 31 +++++-------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/target/linux/ath79/dts/qca9558_elecom_wab-i1750-ps.dts b/target/linux/ath79/dts/qca9558_elecom_wab-i1750-ps.dts index 6f157cf932..668f0ceadd 100644 --- a/target/linux/ath79/dts/qca9558_elecom_wab-i1750-ps.dts +++ b/target/linux/ath79/dts/qca9558_elecom_wab-i1750-ps.dts @@ -5,29 +5,6 @@ / { compatible = "elecom,wab-i1750-ps", "qca,qca9558"; model = "ELECOM WAB-I1750-PS"; - - ahb { - apb { - /* "SERIAL" port (RJ-45) on the case */ - uart1: uart@18500000 { - compatible = "qca,ar9330-uart"; - reg = <0x18500000 0x14>; - - pinctrl-names = "default"; - pinctrl-0 = <&pmx_uart1_in_pins &pmx_uart1_out_pins - &jtag_disable_pins>; - - interrupts = <6>; - interrupt-parent = <&miscintc>; - - clocks = <&pll ATH79_CLK_UART1>; - clock-names = "uart"; - - /* QCA955x HS UART is not supported */ - status = "disabled"; - }; - }; - }; }; &gpio { @@ -67,3 +44,11 @@ pinctrl-single,bits = <0x3c 0x3010000 0xffff0000>; }; }; + +/* "SERIAL" port (RJ-45) on the case */ +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pmx_uart1_in_pins &pmx_uart1_out_pins + &jtag_disable_pins>; + status = "okay"; +}; From e3bb01b30ea524e0004de6eb66466a514591ef42 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 5 Mar 2024 19:13:52 +0100 Subject: [PATCH 30/31] mbedtls: enable threading support Fixes libssh, which requires it. Bump ABI_VERSION, since enabling this option affects data structures in mbedtls include files. Signed-off-by: Felix Fietkau --- package/libs/mbedtls/Config.in | 7 +++++++ package/libs/mbedtls/Makefile | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/package/libs/mbedtls/Config.in b/package/libs/mbedtls/Config.in index 9fbe9f8a4a..ad0ecb6e61 100644 --- a/package/libs/mbedtls/Config.in +++ b/package/libs/mbedtls/Config.in @@ -172,6 +172,13 @@ config MBEDTLS_SSL_TRUNCATED_HMAC bool "MBEDTLS_SSL_TRUNCATED_HMAC" default n +config MBEDTLS_THREADING_C + bool "MBEDTLS_THREADING_C" + default y + +config MBEDTLS_THREADING_PTHREAD + def_bool MBEDTLS_THREADING_C + config MBEDTLS_VERSION_C bool "MBEDTLS_VERSION_C" default n diff --git a/package/libs/mbedtls/Makefile b/package/libs/mbedtls/Makefile index ad13bbe846..502bf65ffc 100644 --- a/package/libs/mbedtls/Makefile +++ b/package/libs/mbedtls/Makefile @@ -70,6 +70,8 @@ MBEDTLS_BUILD_OPTS= \ CONFIG_MBEDTLS_SELF_TEST \ CONFIG_MBEDTLS_SSL_RENEGOTIATION \ CONFIG_MBEDTLS_SSL_TRUNCATED_HMAC \ + CONFIG_MBEDTLS_THREADING_C \ + CONFIG_MBEDTLS_THREADING_PTHREAD \ CONFIG_MBEDTLS_VERSION_C \ CONFIG_MBEDTLS_VERSION_FEATURES @@ -94,7 +96,7 @@ $(call Package/mbedtls/Default) CATEGORY:=Libraries SUBMENU:=SSL TITLE+= (library) - ABI_VERSION:=12 + ABI_VERSION:=13 MENU:=1 endef From 1f5fd5cb971166ba57996d41b7ce71e697c186b2 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 8 Mar 2024 22:42:50 +0100 Subject: [PATCH 31/31] mac80211: fix a regression in the broadcast AQL patch The AQL limit for buffered broadcast packets is higher than the maximum total pending airtime limit. This can get unicast data stuck whenever there is too much pending broadcast data. Fix this by excluding broadcast AQL from the total limit. Signed-off-by: Felix Fietkau --- ...dd-AQL-support-for-broadcast-packets.patch | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch b/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch index 6f64467b66..f117a68c16 100644 --- a/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch +++ b/package/kernel/mac80211/patches/subsys/330-mac80211-add-AQL-support-for-broadcast-packets.patch @@ -95,12 +95,13 @@ Signed-off-by: Felix Fietkau spin_lock_init(&local->active_txq_lock[i]); --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c -@@ -2341,28 +2341,27 @@ void ieee80211_sta_update_pending_airtim +@@ -2341,29 +2341,33 @@ void ieee80211_sta_update_pending_airtim struct sta_info *sta, u8 ac, u16 tx_airtime, bool tx_completed) { +- int tx_pending; ++ int tx_pending = 0; + atomic_t *counter; - int tx_pending; if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) return; @@ -113,9 +114,18 @@ Signed-off-by: Felix Fietkau + counter = &sta->airtime[ac].aql_tx_pending; + else + counter = &local->aql_bc_pending_airtime; ++ ++ if (!tx_completed) ++ atomic_add(tx_airtime, counter); ++ else ++ tx_pending = atomic_sub_return(tx_airtime, counter); ++ if (tx_pending < 0) ++ atomic_cmpxchg(counter, tx_pending, 0); ++ ++ if (!sta) ++ return; + if (!tx_completed) { -+ atomic_add(tx_airtime, counter); atomic_add(tx_airtime, &local->aql_total_pending_airtime); atomic_add(tx_airtime, &local->aql_ac_pending_airtime[ac]); return; @@ -128,12 +138,10 @@ Signed-off-by: Felix Fietkau - atomic_cmpxchg(&sta->airtime[ac].aql_tx_pending, - tx_pending, 0); - } -+ tx_pending = atomic_sub_return(tx_airtime, counter); -+ if (tx_pending < 0) -+ atomic_cmpxchg(counter, tx_pending, 0); - +- atomic_sub(tx_airtime, &local->aql_total_pending_airtime); tx_pending = atomic_sub_return(tx_airtime, + &local->aql_ac_pending_airtime[ac]); --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -3958,9 +3958,8 @@ begin: