Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen
2026-03-18 11:05:27 +08:00
136 changed files with 3456 additions and 2218 deletions
+12 -1
View File
@@ -54,11 +54,22 @@ define U-Boot/an7581_gemtek_w1700k
UBOOT_IMAGE:=u-boot.bin
endef
define U-Boot/an7581_nokia_valyrian
NAME:=Nokia Valyrian
UBOOT_CONFIG:=an7581_nokia_valyrian
BUILD_DEVICES:=nokia_valyrian
BUILD_SUBTARGET:=an7581
UBOOT_IMAGE:=u-boot.fip
BL2_IMAGE:=an7581-bl2.bin
BL31_IMAGE:=an7581-bl31.bin
endef
UBOOT_TARGETS := \
en7523_rfb \
an7581_rfb \
an7583_rfb \
an7581_gemtek_w1700k
an7581_gemtek_w1700k \
an7581_nokia_valyrian
UBOOT_CUSTOMIZE_CONFIG := \
--disable TOOLS_KWBIMAGE \
@@ -0,0 +1,242 @@
--- /dev/null
+++ b/arch/arm/dts/an7581-nokia-valyrian-u-boot.dtsi
@@ -0,0 +1,104 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+
+/ {
+ /* When running as a first-stage bootloader this isn't filled in automatically */
+ memory@80000000 {
+ device_type = "memory";
+ reg = <0x0 0x80000000 0x0 0x40000000>;
+ };
+};
+
+#include "an7581-u-boot.dtsi"
+
+&mmc0 {
+ status = "okay";
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ card@0 {
+ compatible = "mmc-card";
+ reg = <0>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ bl@800 {
+ label = "bl2";
+ reg = <0x00000800 0x0001f800>;
+ };
+
+ bootloader@20000 {
+ label = "bootloader";
+ reg = <0x00020000 0x000e0000>;
+ };
+
+ bootloader-inactive@100000 {
+ label = "bootloader-inactive";
+ reg = <0x00100000 0x000e0000>;
+ };
+
+ u-boot-env@1e0000 {
+ label = "u-boot-env";
+ reg = <0x001e0000 0x00020000>;
+
+ u-boot,mmc-env-partition;
+ };
+
+ factory@200000 {
+ label = "factory";
+ reg = <0x00200000 0x00800000>;
+ };
+
+ mfgdata@a00000 {
+ label = "mfgdata";
+ reg = <0x00a00000 0x00100000>;
+ };
+
+ kernel-active@b00000 {
+ label = "kernel-active";
+ reg = <0x00b00000 0x00800000>;
+ };
+
+ kernel-inactive@1300000 {
+ label = "kernel-inactive";
+ reg = <0x01300000 0x00800000>;
+ };
+
+ rootfs-active@1b00000 {
+ label = "rootfs-active";
+ reg = <0x01b00000 0x06400000>;
+ };
+
+ rootfs-inactive@7f00000 {
+ label = "rootfs-inactive";
+ reg = <0x07f00000 0x06400000>;
+ };
+
+ rootfs-data@e300000 {
+ label = "rootfs_data";
+ reg = <0x0e300000 0x02000000>;
+ };
+
+ securestore@10300000 {
+ label = "securestore";
+ reg = <0x10300000 0x1000000>;
+ };
+
+ lcm-data@11300000 {
+ label = "lcm_data";
+ reg = <0x11300000 0x40000000>;
+ };
+ };
+ };
+};
+
+&eth {
+ status = "okay";
+};
+
+&gdm1 {
+ status = "okay";
+};
--- /dev/null
+++ b/configs/an7581_nokia_valyrian_defconfig
@@ -0,0 +1,85 @@
+CONFIG_ARM=y
+CONFIG_ARCH_AIROHA=y
+CONFIG_AUTOBOOT_USE_MENUKEY=y
+CONFIG_AUTOBOOT_MENU_SHOW=y
+CONFIG_TARGET_AN7581=y
+CONFIG_TEXT_BASE=0x81e00000
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_ENV_SIZE=0x20000
+CONFIG_ENV_OFFSET=0x1e0000
+CONFIG_DM_GPIO=y
+CONFIG_DEFAULT_DEVICE_TREE="airoha/an7581-nokia-valyrian"
+CONFIG_SYS_LOAD_ADDR=0x81800000
+CONFIG_BUILD_TARGET="u-boot.bin"
+# CONFIG_EFI_LOADER is not set
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_BOOTDELAY=3
+CONFIG_DEFAULT_FDT_FILE="airoha/an7581-nokia-valyrian.dtb"
+CONFIG_SYS_PBSIZE=1049
+CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_HUSH_PARSER=y
+CONFIG_SYS_PROMPT="AN7581> "
+CONFIG_SYS_MAXARGS=8
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_BOOTMENU=y
+# CONFIG_CMD_ELF is not set
+# CONFIG_CMD_XIMG is not set
+CONFIG_CMD_BIND=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_SF_TEST=y
+CONFIG_CMD_SPI=y
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_PING=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_CMD_MTDPARTS=y
+CONFIG_CMD_LOG=y
+CONFIG_OF_UPSTREAM=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_SYS_RX_ETH_BUFFER=8
+CONFIG_REGMAP=y
+CONFIG_SYSCON=y
+CONFIG_CLK=y
+CONFIG_DMA=y
+CONFIG_LED=y
+CONFIG_LED_GPIO=y
+CONFIG_MMC_HS200_SUPPORT=y
+CONFIG_MMC_MTK=y
+CONFIG_AIROHA_ETH=y
+CONFIG_DM_MDIO=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_MDIO=y
+CONFIG_PCS_AIROHA_AN7581=y
+CONFIG_PHY=y
+CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
+CONFIG_POWER_DOMAIN=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_RAM=y
+CONFIG_DM_SERIAL=y
+CONFIG_SYS_NS16550=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_AIROHA_SNFI_SPI=y
+CONFIG_SHA512=y
+CONFIG_USE_DEFAULT_ENV_FILE=y
+CONFIG_DEFAULT_ENV_FILE="defenvs/an7581_nokia_valyrian_env"
+CONFIG_FIP_LOADER=y
+CONFIG_PCS_AIROHA_AN7581=y
+CONFIG_PHY_AIROHA_EN8811=y
+CONFIG_PHY_ANEG_TIMEOUT=10000
+CONFIG_PHY_ETHERNET_ID=y
+CONFIG_PHY_AS21XXX=y
--- /dev/null
+++ b/defenvs/an7581_nokia_valyrian_env
@@ -0,0 +1,25 @@
+loadaddr=0x90000000
+ipaddr=192.168.1.1
+serverip=192.168.1.10
+emmc_bootfile_bl2=immortalwrt-airoha-an7581-nokia_valyrian-preloader.bin
+emmc_bootfile_fip=immortalwrt-airoha-an7581-nokia_valyrian-bl31-uboot.fip
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
+bootmenu_default=0
+bootmenu_delay=0
+bootmenu_title= ( ( ( OpenWrt ) ) ) [EMMC]
+bootmenu_0=Initialize environment.=run _firstboot
+bootmenu_0d=Run default boot command.=run boot_default
+bootmenu_1=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run emmc_boot_tftp_write_fip ; run bootmenu_confirm_return
+bootmenu_2=Load BL2 preloader via TFTP then write to eMMC.=run emmc_boot_tftp_write_bl2 ; run bootmenu_confirm_return
+bootmenu_3=Reboot.=reset
+bootmenu_4=Reset all settings to factory defaults.=run reset_factory ; reset
+boot_default=bootm
+reset_factory=eraseenv && reset
+emmc_boot_tftp_write_fip=tftpboot $loadaddr $emmc_bootfile_fip && run emmc_write_fip
+emmc_boot_tftp_write_bl2=tftpboot $loadaddr $emmc_bootfile_bl2 && run emmc_write_bl2
+emmc_write_bl2=mmc erase 0x4 0xfc && mmc write $fileaddr 0x4 0xfc
+emmc_write_fip=mmc erase 0x100 0x700 && mmc write $fileaddr 0x100 0x700
+_init_env=setenv _init_env ; saveenv
+_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; bootmenu
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"
--- /dev/null
+++ b/dts/upstream/src/arm64/airoha/an7581-nokia-valyrian.dts
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+/dts-v1/;
+
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "en7581.dtsi"
+
+/ {
+ model = "Nokia Valyrian";
+ compatible = "nokia,valyrian", "airoha,an7581", "airoha,en7581";
+
+ chosen {
+ stdout-path = &uart1;
+ };
+};
+3 -3
View File
@@ -10,9 +10,9 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_SOURCE_URL:=https://github.com/chunkeey/FritzBox-4040-UBOOT
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=6909090cb82db96f8ef0cd211ca91e87d69a07fc
PKG_SOURCE_DATE:=2026-03-04
PKG_MIRROR_HASH:=741da058f24e559befff1f2d28d057dbfe9b3a6af67e60191cbefdbacc9143bb
PKG_SOURCE_VERSION:=056376fc703f2af0b93d673bf8ab4184689c5403
PKG_SOURCE_DATE:=2026-03-08
PKG_MIRROR_HASH:=1d7e4fe9116dc9378ee5569b48a1ce7bd41a8138928905010ebe79b8771c39dc
PKG_RELEASE:=1
@@ -7,6 +7,12 @@ touch /etc/config/ubootenv
board=$(board_name)
ubootenv_add_mtd() {
local idx="$(find_mtd_index "${1}")"
[ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "${2}" "${3}" "${4}"
}
case "$board" in
8devices,mango-dvk|\
8devices,mango-dvk-sfp|\
@@ -25,7 +31,7 @@ netgear,wax214|\
netgear,wax610|\
netgear,wax610y|\
tplink,eap610-outdoor|\
tplink,eap623od-hd-v1|\
tplink,eap623-outdoor-hd-v1|\
tplink,eap620-hd-v3|\
tplink,eap625-outdoor-hd-v1)
ubootenv_add_mtd "0:appsblenv" "0x0" "0x40000" "0x20000"
-41
View File
@@ -47,11 +47,6 @@ define Package/ath11k-firmware-default
DEPENDS:=
endef
define Package/ath11k-firmware-ipq5018
$(Package/ath11k-firmware-default)
TITLE:=IPQ5018 ath11k firmware
endef
define Package/ath11k-firmware-ipq5018-qcn6122
$(Package/ath11k-firmware-default)
TITLE:=IPQ5018/QCN6122 ath11k firmware
@@ -62,16 +57,6 @@ $(Package/ath11k-firmware-default)
TITLE:=IPQ6018 ath11k firmware
endef
define Package/ath11k-firmware-ipq8074
$(Package/ath11k-firmware-default)
TITLE:=IPQ8074 ath11k firmware
endef
define Package/ath11k-firmware-qcn9074
$(Package/ath11k-firmware-default)
TITLE:=QCN9074 ath11k firmware
endef
define Build/Clean
$(call Build/Clean/Default,)
@@ -91,13 +76,6 @@ define Build/Compile
endef
define Package/ath11k-firmware-ipq5018/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0
$(INSTALL_DATA) \
$(PKG_BUILD_DIR)/IPQ5018/hw1.0/2.6.0.1/WLAN.HK.2.6.0.1-01291-QCAHKSWPL_SILICONZ-1/* \
$(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
endef
define Package/ath11k-firmware-ipq5018-qcn6122/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0
$(INSTALL_DATA) \
@@ -116,24 +94,5 @@ define Package/ath11k-firmware-ipq6018/install
$(1)/lib/firmware/IPQ6018/
endef
define Package/ath11k-firmware-ipq8074/install
$(INSTALL_DIR) $(1)/lib/firmware/IPQ8074
$(INSTALL_DATA) \
$(PKG_BUILD_DIR)/IPQ8074/hw2.0/2.9.0.1/WLAN.HK.2.9.0.1-02146-QCAHKSWPL_SILICONZ-1/* \
$(1)/lib/firmware/IPQ8074/
endef
define Package/ath11k-firmware-qcn9074/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0
$(INSTALL_DATA) \
$(PKG_BUILD_DIR)/QCN9074/hw1.0/2.9.0.1/WLAN.HK.2.9.0.1-02146-QCAHKSWPL_SILICONZ-1/* \
$(1)/lib/firmware/ath11k/QCN9074/hw1.0/
$(INSTALL_BIN) \
$(PKG_BUILD_DIR)/QCN9074/hw1.0/board-2.bin $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board-2.bin
endef
$(eval $(call BuildPackage,ath11k-firmware-ipq5018))
$(eval $(call BuildPackage,ath11k-firmware-ipq5018-qcn6122))
$(eval $(call BuildPackage,ath11k-firmware-ipq6018))
$(eval $(call BuildPackage,ath11k-firmware-ipq8074))
$(eval $(call BuildPackage,ath11k-firmware-qcn9074))
+2 -2
View File
@@ -8,12 +8,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=intel-microcode
PKG_VERSION:=20251111
PKG_VERSION:=20260227
PKG_RELEASE:=1
PKG_SOURCE:=intel-microcode_3.$(PKG_VERSION).1.tar.xz
PKG_SOURCE_URL:=@DEBIAN/pool/non-free-firmware/i/intel-microcode/
PKG_HASH:=9b6d11cf851dbe483d3afe73e93049263f06b2f93c78a5f7b0068fb2f7ea3411
PKG_HASH:=15289edaaa2db7976e005628027f16d19945f1eab1bb2d5dd44133cd06c4ad25
PKG_BUILD_DIR:=$(BUILD_DIR)/intel-microcode-3.$(PKG_VERSION).1
PKG_CPE_ID:=cpe:/a:intel:microcode
+2 -2
View File
@@ -8,12 +8,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=linux-firmware
PKG_VERSION:=20260221
PKG_VERSION:=20260309
PKG_RELEASE:=1
PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_HASH:=bd19acc4c1a02548e09d3df67f987fe6e378df735bab138c1d9e917962056d94
PKG_HASH:=c74cc6f562b58ad5bc6b2b00a61abc29c9e49e06126e7ba34fbca9928e07a96c
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
@@ -1,3 +1,19 @@
Package/ath11k-firmware-ipq5018 = $(call Package/firmware-default,IPQ5018 ath11k firmware,,LICENCE.atheros_firmware)
define Package/ath11k-firmware-ipq5018/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0
$(INSTALL_DATA) \
$(PKG_BUILD_DIR)/ath11k/IPQ5018/hw1.0/* $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
endef
$(eval $(call BuildPackage,ath11k-firmware-ipq5018))
Package/ath11k-firmware-ipq8074 = $(call Package/firmware-default,IPQ8074 ath11k firmware,,LICENCE.atheros_firmware)
define Package/ath11k-firmware-ipq8074/install
$(INSTALL_DIR) $(1)/lib/firmware/IPQ8074
$(INSTALL_DATA) \
$(PKG_BUILD_DIR)/ath11k/IPQ8074/hw2.0/* $(1)/lib/firmware/IPQ8074/
endef
$(eval $(call BuildPackage,ath11k-firmware-ipq8074))
Package/ath11k-firmware-qca2066 = $(call Package/firmware-default,QCA2066 ath11k firmware,,LICENCE.atheros_firmware)
define Package/ath11k-firmware-qca2066/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCA2066/hw2.1
@@ -14,6 +30,14 @@ define Package/ath11k-firmware-qca6390/install
endef
$(eval $(call BuildPackage,ath11k-firmware-qca6390))
Package/ath11k-firmware-qcn9074 = $(call Package/firmware-default,QCN9074 ath11k firmware,,LICENCE.atheros_firmware)
define Package/ath11k-firmware-qcn9074/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0
$(INSTALL_DATA) \
$(PKG_BUILD_DIR)/ath11k/QCN9074/hw1.0/* $(1)/lib/firmware/ath11k/QCN9074/hw1.0/
endef
$(eval $(call BuildPackage,ath11k-firmware-qcn9074))
Package/ath11k-firmware-wcn6750 = $(call Package/firmware-default,WCN6750 ath11k firmware,,LICENCE.atheros_firmware)
define Package/ath11k-firmware-wcn6750/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/WCN6750/hw1.0
@@ -705,6 +705,64 @@ endef
$(eval $(call KernelPackage,dsa-b53-mdio))
define KernelPackage/dsa-ksz9477
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Microchip KSZ9477 family managed switch DSA support
DEPENDS:=@TARGET_imx_cortexa53 +kmod-dsa +kmod-dsa-notag +kmod-phy-micrel +kmod-regmap-core
KCONFIG:= \
CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON \
CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=n \
CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=n \
CONFIG_NET_DSA_MICROCHIP_KSZ_PTP=n \
CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=n \
CONFIG_NET_DSA_TAG_KSZ=y
FILES:= \
$(LINUX_DIR)/drivers/net/dsa/microchip/ksz_switch.ko \
$(LINUX_DIR)/net/dsa/tag_ksz.ko
AUTOLOAD:=$(call AutoProbe,ksz_switch)
endef
define KernelPackage/dsa-ksz9477/description
Microchip KSZ9477 family managed switch support. Note that this should be target
specific as the driver enables DCB which grows the static kernel code.
endef
$(eval $(call KernelPackage,dsa-ksz9477))
define KernelPackage/dsa-ksz9477-i2c
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Microchip KSZ9477 family managed switch DSA support via I2C
DEPENDS:=+kmod-dsa-ksz9477 +kmod-regmap-i2c
KCONFIG:=CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C
FILES:= $(LINUX_DIR)/drivers/net/dsa/microchip/ksz9477_i2c.ko
AUTOLOAD:=$(call AutoProbe,ksz9477_i2c)
endef
define KernelPackage/dsa-ksz9477-i2c/description
Microchip KSZ9477 family managed switch support via I2C
endef
$(eval $(call KernelPackage,dsa-ksz9477-i2c))
define KernelPackage/dsa-ksz9477-spi
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Microchip KSZ9477 family managed switch DSA support via SPI
DEPENDS:=+kmod-dsa-ksz9477 +kmod-regmap-spi
KCONFIG:=CONFIG_NET_DSA_MICROCHIP_KSZ_SPI
FILES:= $(LINUX_DIR)/drivers/net/dsa/microchip/ksz_spi.ko
AUTOLOAD:=$(call AutoProbe,ksz_spi)
endef
define KernelPackage/dsa-ksz9477-spi/description
Microchip KSZ9477 family managed switch support via SPI
endef
$(eval $(call KernelPackage,dsa-ksz9477-spi))
define KernelPackage/dsa-mv88e6060
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell MV88E6060 DSA Switch
+12 -1
View File
@@ -13,6 +13,7 @@ PKG_CONFIG_DEPENDS += \
CONFIG_ATH10K_LEDS \
CONFIG_ATH10K_THERMAL \
CONFIG_ATH11K_THERMAL \
CONFIG_ATH12K_THERMAL \
CONFIG_ATH_USER_REGD
ifdef CONFIG_PACKAGE_MAC80211_DEBUGFS
@@ -59,6 +60,7 @@ config-$(CONFIG_ATH9K_UBNTHSR) += ATH9K_UBNTHSR
config-$(CONFIG_ATH10K_LEDS) += ATH10K_LEDS
config-$(CONFIG_ATH10K_THERMAL) += ATH10K_THERMAL
config-$(CONFIG_ATH11K_THERMAL) += ATH11K_THERMAL
config-$(CONFIG_ATH12K_THERMAL) += ATH12K_THERMAL
config-$(call config_package,ath9k-htc) += ATH9K_HTC
config-$(call config_package,ath10k,regular) += ATH10K ATH10K_PCI
@@ -389,7 +391,8 @@ define KernelPackage/ath12k
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath12k
DEPENDS+= @PCI_SUPPORT +kmod-ath +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT \
+kmod-crypto-michael-mic +kmod-qrtr-mhi \
+kmod-qcom-qmi-helpers +@DRIVER_11BE_SUPPORT
+kmod-qcom-qmi-helpers +@DRIVER_11BE_SUPPORT \
+ATH12K_THERMAL:kmod-hwmon-core +ATH12K_THERMAL:kmod-thermal
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath12k/ath12k.ko
AUTOLOAD:=$(call AutoProbe,ath12k)
endef
@@ -399,6 +402,14 @@ This module adds support for Qualcomm Technologies 802.11be family of
chipsets with PCI bus.
endef
define KernelPackage/ath12k/config
config ATH12K_THERMAL
bool "Enable ath12k thermal sensor support"
depends on PACKAGE_kmod-ath12k
endef
define KernelPackage/carl9170
$(call KernelPackage/mac80211/Default)
TITLE:=Driver for Atheros AR9170 USB sticks
+2 -20
View File
@@ -35,14 +35,6 @@ config-$(CONFIG_PACKAGE_BRCM80211_DEBUG) += BRCMDBG
config-$(CONFIG_LEDS_TRIGGERS) += B43_LEDS B43LEGACY_LEDS
#Broadcom firmware
ifneq ($(CONFIG_B43_FW_6_30),)
PKG_B43_FWV4_NAME:=broadcom-wl
PKG_B43_FWV4_VERSION:=6.30.163.46
PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).wl_apsta.o
PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
PKG_B43_FWV4_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
PKG_B43_FWV4_HASH:=a07c3b6b277833c7dbe61daa511f908cd66c5e2763eb7a0859abc36cd9335c2d
else
ifneq ($(CONFIG_B43_FW_5_10),)
PKG_B43_FWV4_NAME:=broadcom-wl
PKG_B43_FWV4_VERSION:=5.10.56.27.3
@@ -64,7 +56,7 @@ ifneq ($(CONFIG_B43_FW_5_100_138),)
PKG_B43_FWV4_VERSION:=5.100.138
PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/linux/wl_apsta.o
PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION).tar.bz2
PKG_B43_FWV4_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
PKG_B43_FWV4_SOURCE_URL:=@OPENWRT
PKG_B43_FWV4_HASH:=f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f
else
PKG_B43_FWV4_NAME:=broadcom-wl
@@ -76,7 +68,6 @@ else
endif
endif
endif
endif
ifneq ($(CONFIG_B43_OPENFIRMWARE),)
PKG_B43_FWV4_NAME:=broadcom-wl
PKG_B43_FWV4_VERSION:=5.2
@@ -164,15 +155,6 @@ config PACKAGE_B43_USE_BCMA
If unsure, select the this firmware.
config B43_FW_6_30
bool "Firmware 784.2 from driver 6.30.163.46 (experimental)"
help
Newer experimental firmware for BCM43xx devices.
This firmware is mostly untested.
If unsure, select the "stable" firmware.
config B43_OPENFIRMWARE
bool "Open FirmWare for WiFi networks"
help
@@ -367,7 +349,7 @@ PKG_BRCMSMAC_FW_NAME:=broadcom-wl
PKG_BRCMSMAC_FW_VERSION:=5.100.138
PKG_BRCMSMAC_FW_OBJECT:=$(PKG_BRCMSMAC_FW_NAME)-$(PKG_BRCMSMAC_FW_VERSION)/linux/wl_apsta.o
PKG_BRCMSMAC_FW_SOURCE:=$(PKG_BRCMSMAC_FW_NAME)-$(PKG_BRCMSMAC_FW_VERSION).tar.bz2
PKG_BRCMSMAC_FW_SOURCE_URL:=http://www.lwfinger.com/b43-firmware/
PKG_BRCMSMAC_FW_SOURCE_URL:=@OPENWRT
PKG_BRCMSMAC_FW_HASH:=f1e7067aac5b62b67b8b6e4c517990277804339ac16065eb13c731ff909ae46f
define Download/brcmsmac
@@ -16,7 +16,7 @@ Signed-off-by: Ziyang Huang <hzyitc@outlook.com>
break;
+ case M3_DUMP_REGION_TYPE:
+ if (of_property_read_u32(dev->of_node, "qcom,m3-dump-addr", &addr)) {
+ ath11k_warn(ab, "qmi fail to get qcom,m3-dump-addr, ignore m3 dump mem req\n");
+ ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi fail to get qcom,m3-dump-addr, ignore m3 dump mem req\n");
+ break;
+ }
+
@@ -22,10 +22,8 @@ This patch:
This targets monitor capture length correctness only and keeps the fix scoped
to the monitor RX delivery path.
Index: backports-6.18.7/drivers/net/wireless/ath/ath11k/dp_rx.c
===================================================================
--- backports-6.18.7.orig/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ backports-6.18.7/drivers/net/wireless/ath/ath11k/dp_rx.c
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
@@ -4931,8 +4931,13 @@ ath11k_dp_rx_mon_merg_msdus(struct ath11
}
@@ -0,0 +1,380 @@
From 151322bccdbdb132f5a73cc8ad5d3ab89b90ed52 Mon Sep 17 00:00:00 2001
From: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>
Date: Mon, 23 Feb 2026 18:56:22 +0530
Subject: wifi: ath12k: add basic hwmon temperature reporting
Add initial thermal support by wiring up a per-radio (pdev) hwmon temperature
sensor backed by the existing WMI pdev temperature command and event.
When userspace reads the sysfs file temp1_input, the driver sends
WMI_PDEV_GET_TEMPERATURE_CMDID (tag WMI_TAG_PDEV_GET_TEMPERATURE_CMD) and waits
for the corresponding WMI_PDEV_TEMPERATURE_EVENTID
(tag WMI_TAG_PDEV_TEMPERATURE_EVENT) to get the temperature and pdev_id.
Export the reported value in millidegrees Celsius as required by hwmon.
The temperature reported is per-radio (pdev). In a multi-radio wiphy under a
single phy, a separate hwmon device is created for each radio.
Sample command and output:
$ cat /sys/devices/pci0000:00/.../ieee80211/phyX/hwmonY/temp1_input
$ 50000
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01243-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3
Co-developed-by: Aishwarya R <aishwarya.r@oss.qualcomm.com>
Signed-off-by: Aishwarya R <aishwarya.r@oss.qualcomm.com>
Signed-off-by: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20260223132622.43464-1-maharaja.kennadyrajan@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
---
drivers/net/wireless/ath/ath12k/Makefile | 1 +
drivers/net/wireless/ath/ath12k/core.c | 13 ++++
drivers/net/wireless/ath/ath12k/core.h | 3 +
drivers/net/wireless/ath/ath12k/mac.c | 4 +
drivers/net/wireless/ath/ath12k/thermal.c | 124 ++++++++++++++++++++++++++++++
drivers/net/wireless/ath/ath12k/thermal.h | 40 ++++++++++
drivers/net/wireless/ath/ath12k/wmi.c | 57 +++++++-------
7 files changed, 211 insertions(+), 31 deletions(-)
create mode 100644 drivers/net/wireless/ath/ath12k/thermal.c
create mode 100644 drivers/net/wireless/ath/ath12k/thermal.h
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -857,11 +857,22 @@ static int ath12k_core_pdev_create(struc
return ret;
}
+ ret = ath12k_thermal_register(ab);
+ if (ret) {
+ ath12k_err(ab, "could not register thermal device: %d\n", ret);
+ goto err_dp_pdev_free;
+ }
+
return 0;
+
+err_dp_pdev_free:
+ ath12k_dp_pdev_free(ab);
+ return ret;
}
static void ath12k_core_pdev_destroy(struct ath12k_base *ab)
{
+ ath12k_thermal_unregister(ab);
ath12k_dp_pdev_free(ab);
}
@@ -1350,6 +1361,7 @@ static int ath12k_core_reconfigure_on_cr
int ret, total_vdev;
mutex_lock(&ab->core_lock);
+ ath12k_thermal_unregister(ab);
ath12k_dp_pdev_free(ab);
ath12k_ce_cleanup_pipes(ab);
ath12k_wmi_detach(ab);
@@ -1491,6 +1503,7 @@ static void ath12k_core_pre_reconfigure_
complete(&ar->vdev_delete_done);
complete(&ar->bss_survey_done);
complete_all(&ar->regd_update_completed);
+ complete_all(&ar->thermal.wmi_sync);
wake_up(&ar->dp.tx_empty_waitq);
idr_for_each(&ar->txmgmt_idr,
--- a/drivers/net/wireless/ath/ath12k/core.h
+++ b/drivers/net/wireless/ath/ath12k/core.h
@@ -34,6 +34,7 @@
#include "wow.h"
#include "debugfs_htt_stats.h"
#include "coredump.h"
+#include "thermal.h"
#define SM(_v, _f) (((_v) << _f##_LSB) & _f##_MASK)
@@ -846,6 +847,8 @@ struct ath12k {
s8 max_allowed_tx_power;
struct ath12k_pdev_rssi_offsets rssi_info;
+
+ struct ath12k_thermal thermal;
};
struct ath12k_hw {
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -14057,6 +14057,10 @@ static void ath12k_mac_setup(struct ath1
init_completion(&ar->mlo_setup_done);
init_completion(&ar->completed_11d_scan);
init_completion(&ar->regd_update_completed);
+ init_completion(&ar->thermal.wmi_sync);
+
+ ar->thermal.temperature = 0;
+ ar->thermal.hwmon_dev = NULL;
INIT_DELAYED_WORK(&ar->scan.timeout, ath12k_scan_timeout_work);
wiphy_work_init(&ar->scan.vdev_clean_wk, ath12k_scan_vdev_clean_work);
--- a/drivers/net/wireless/ath/ath12k/Makefile
+++ b/drivers/net/wireless/ath/ath12k/Makefile
@@ -30,6 +30,7 @@ ath12k-$(CPTCFG_ATH12K_TRACING) += trace
ath12k-$(CONFIG_PM) += wow.o
ath12k-$(CPTCFG_ATH12K_COREDUMP) += coredump.o
ath12k-$(CPTCFG_NL80211_TESTMODE) += testmode.o
+ath12k-$(CONFIG_THERMAL) += thermal.o
# for tracing framework to find trace.h
CFLAGS_trace.o := -I$(src)
--- /dev/null
+++ b/drivers/net/wireless/ath/ath12k/thermal.c
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: BSD-3-Clause-Clear
+/*
+ * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#include <linux/device.h>
+#include <linux/hwmon.h>
+#include <linux/hwmon-sysfs.h>
+#include <linux/sysfs.h>
+#include <linux/thermal.h>
+#include "core.h"
+#include "debug.h"
+
+static ssize_t ath12k_thermal_temp_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct ath12k *ar = dev_get_drvdata(dev);
+ unsigned long time_left;
+ int ret, temperature;
+
+ guard(wiphy)(ath12k_ar_to_hw(ar)->wiphy);
+
+ if (ar->ah->state != ATH12K_HW_STATE_ON)
+ return -ENETDOWN;
+
+ reinit_completion(&ar->thermal.wmi_sync);
+ ret = ath12k_wmi_send_pdev_temperature_cmd(ar);
+ if (ret) {
+ ath12k_warn(ar->ab, "failed to read temperature %d\n", ret);
+ return ret;
+ }
+
+ if (test_bit(ATH12K_FLAG_CRASH_FLUSH, &ar->ab->dev_flags))
+ return -ESHUTDOWN;
+
+ time_left = wait_for_completion_timeout(&ar->thermal.wmi_sync,
+ ATH12K_THERMAL_SYNC_TIMEOUT_HZ);
+ if (!time_left) {
+ ath12k_warn(ar->ab, "failed to synchronize thermal read\n");
+ return -ETIMEDOUT;
+ }
+
+ spin_lock_bh(&ar->data_lock);
+ temperature = ar->thermal.temperature;
+ spin_unlock_bh(&ar->data_lock);
+
+ /* display in millidegree celsius */
+ return sysfs_emit(buf, "%d\n", temperature * 1000);
+}
+
+void ath12k_thermal_event_temperature(struct ath12k *ar, int temperature)
+{
+ spin_lock_bh(&ar->data_lock);
+ ar->thermal.temperature = temperature;
+ spin_unlock_bh(&ar->data_lock);
+ complete_all(&ar->thermal.wmi_sync);
+}
+
+static SENSOR_DEVICE_ATTR_RO(temp1_input, ath12k_thermal_temp, 0);
+
+static struct attribute *ath12k_hwmon_attrs[] = {
+ &sensor_dev_attr_temp1_input.dev_attr.attr,
+ NULL,
+};
+ATTRIBUTE_GROUPS(ath12k_hwmon);
+
+int ath12k_thermal_register(struct ath12k_base *ab)
+{
+ struct ath12k *ar;
+ int i, j, ret;
+
+ if (!IS_REACHABLE(CONFIG_HWMON))
+ return 0;
+
+ for (i = 0; i < ab->num_radios; i++) {
+ ar = ab->pdevs[i].ar;
+ if (!ar)
+ continue;
+
+ ar->thermal.hwmon_dev =
+ hwmon_device_register_with_groups(&ar->ah->hw->wiphy->dev,
+ "ath12k_hwmon", ar,
+ ath12k_hwmon_groups);
+ if (IS_ERR(ar->thermal.hwmon_dev)) {
+ ret = PTR_ERR(ar->thermal.hwmon_dev);
+ ar->thermal.hwmon_dev = NULL;
+ ath12k_err(ar->ab, "failed to register hwmon device: %d\n",
+ ret);
+ for (j = i - 1; j >= 0; j--) {
+ ar = ab->pdevs[j].ar;
+ if (!ar)
+ continue;
+
+ hwmon_device_unregister(ar->thermal.hwmon_dev);
+ ar->thermal.hwmon_dev = NULL;
+ }
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+void ath12k_thermal_unregister(struct ath12k_base *ab)
+{
+ struct ath12k *ar;
+ int i;
+
+ if (!IS_REACHABLE(CONFIG_HWMON))
+ return;
+
+ for (i = 0; i < ab->num_radios; i++) {
+ ar = ab->pdevs[i].ar;
+ if (!ar)
+ continue;
+
+ if (ar->thermal.hwmon_dev) {
+ hwmon_device_unregister(ar->thermal.hwmon_dev);
+ ar->thermal.hwmon_dev = NULL;
+ }
+ }
+}
--- /dev/null
+++ b/drivers/net/wireless/ath/ath12k/thermal.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: BSD-3-Clause-Clear */
+/*
+ * Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#ifndef _ATH12K_THERMAL_
+#define _ATH12K_THERMAL_
+
+#define ATH12K_THERMAL_SYNC_TIMEOUT_HZ (5 * HZ)
+
+struct ath12k_thermal {
+ struct completion wmi_sync;
+
+ /* temperature value in Celsius degree protected by data_lock. */
+ int temperature;
+ struct device *hwmon_dev;
+};
+
+#if IS_REACHABLE(CONFIG_THERMAL)
+int ath12k_thermal_register(struct ath12k_base *ab);
+void ath12k_thermal_unregister(struct ath12k_base *ab);
+void ath12k_thermal_event_temperature(struct ath12k *ar, int temperature);
+#else
+static inline int ath12k_thermal_register(struct ath12k_base *ab)
+{
+ return 0;
+}
+
+static inline void ath12k_thermal_unregister(struct ath12k_base *ab)
+{
+}
+
+static inline void ath12k_thermal_event_temperature(struct ath12k *ar,
+ int temperature)
+{
+}
+
+#endif
+#endif /* _ATH12K_THERMAL_ */
--- a/drivers/net/wireless/ath/ath12k/wmi.c
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
@@ -6674,31 +6674,6 @@ static int ath12k_pull_peer_assoc_conf_e
return 0;
}
-static int
-ath12k_pull_pdev_temp_ev(struct ath12k_base *ab, struct sk_buff *skb,
- const struct wmi_pdev_temperature_event *ev)
-{
- const void **tb;
- int ret;
-
- tb = ath12k_wmi_tlv_parse_alloc(ab, skb, GFP_ATOMIC);
- if (IS_ERR(tb)) {
- ret = PTR_ERR(tb);
- ath12k_warn(ab, "failed to parse tlv: %d\n", ret);
- return ret;
- }
-
- ev = tb[WMI_TAG_PDEV_TEMPERATURE_EVENT];
- if (!ev) {
- ath12k_warn(ab, "failed to fetch pdev temp ev");
- kfree(tb);
- return -EPROTO;
- }
-
- kfree(tb);
- return 0;
-}
-
static void ath12k_wmi_op_ep_tx_credits(struct ath12k_base *ab)
{
/* try to send pending beacons first. they take priority */
@@ -8713,25 +8688,45 @@ static void
ath12k_wmi_pdev_temperature_event(struct ath12k_base *ab,
struct sk_buff *skb)
{
+ const struct wmi_pdev_temperature_event *ev;
struct ath12k *ar;
- struct wmi_pdev_temperature_event ev = {};
+ const void **tb;
+ int temp;
+ u32 pdev_id;
- if (ath12k_pull_pdev_temp_ev(ab, skb, &ev) != 0) {
- ath12k_warn(ab, "failed to extract pdev temperature event");
+ tb = ath12k_wmi_tlv_parse_alloc(ab, skb, GFP_ATOMIC);
+ if (IS_ERR(tb)) {
+ ath12k_warn(ab, "failed to parse tlv: %ld\n", PTR_ERR(tb));
return;
}
+ ev = tb[WMI_TAG_PDEV_TEMPERATURE_EVENT];
+ if (!ev) {
+ ath12k_warn(ab, "failed to fetch pdev temp ev\n");
+ kfree(tb);
+ return;
+ }
+
+ temp = a_sle32_to_cpu(ev->temp);
+ pdev_id = le32_to_cpu(ev->pdev_id);
+
+ kfree(tb);
+
ath12k_dbg(ab, ATH12K_DBG_WMI,
- "pdev temperature ev temp %d pdev_id %d\n", ev.temp, ev.pdev_id);
+ "pdev temperature ev temp %d pdev_id %u\n",
+ temp, pdev_id);
rcu_read_lock();
- ar = ath12k_mac_get_ar_by_pdev_id(ab, le32_to_cpu(ev.pdev_id));
+ ar = ath12k_mac_get_ar_by_pdev_id(ab, pdev_id);
if (!ar) {
- ath12k_warn(ab, "invalid pdev id in pdev temperature ev %d", ev.pdev_id);
+ ath12k_warn(ab, "invalid pdev id %u in pdev temperature ev\n",
+ pdev_id);
goto exit;
}
+ ath12k_thermal_event_temperature(ar, temp);
+
exit:
rcu_read_unlock();
}
@@ -0,0 +1,62 @@
From b6a3bb1561e98980b24f08bffe91327b29091c82 Mon Sep 17 00:00:00 2001
From: Matt Merhar <mattmerhar@protonmail.com>
Date: Wed, 4 Mar 2026 22:07:15 -0500
Subject: [PATCH] ath12k: control thermal support via symbol
As is already done for ath10k and ath11k, add a new ATH12K_THERMAL
symbol to decouple the enablement of thermal support from
CONFIG_THERMAL.
Signed-off-by: Matt Merhar <mattmerhar@protonmail.com>
---
drivers/net/wireless/ath/ath12k/Kconfig | 7 +++++++
drivers/net/wireless/ath/ath12k/Makefile | 2 +-
drivers/net/wireless/ath/ath12k/thermal.h | 2 +-
local-symbols | 1 +
4 files changed, 10 insertions(+), 2 deletions(-)
--- a/drivers/net/wireless/ath/ath12k/Kconfig
+++ b/drivers/net/wireless/ath/ath12k/Kconfig
@@ -61,3 +61,10 @@ config ATH12K_COREDUMP
If unsure, say Y to make it easier to debug problems. But if
dump collection not required choose N.
+
+config ATH12K_THERMAL
+ bool "ath12k thermal sensor support"
+ depends on ATH12K
+ depends on THERMAL
+ help
+ Enable ath12k thermal sensor support.
--- a/drivers/net/wireless/ath/ath12k/Makefile
+++ b/drivers/net/wireless/ath/ath12k/Makefile
@@ -30,7 +30,7 @@ ath12k-$(CPTCFG_ATH12K_TRACING) += trace
ath12k-$(CONFIG_PM) += wow.o
ath12k-$(CPTCFG_ATH12K_COREDUMP) += coredump.o
ath12k-$(CPTCFG_NL80211_TESTMODE) += testmode.o
-ath12k-$(CONFIG_THERMAL) += thermal.o
+ath12k-$(CPTCFG_ATH12K_THERMAL) += thermal.o
# for tracing framework to find trace.h
CFLAGS_trace.o := -I$(src)
--- a/drivers/net/wireless/ath/ath12k/thermal.h
+++ b/drivers/net/wireless/ath/ath12k/thermal.h
@@ -17,7 +17,7 @@ struct ath12k_thermal {
struct device *hwmon_dev;
};
-#if IS_REACHABLE(CONFIG_THERMAL)
+#if IS_REACHABLE(CPTCFG_ATH12K_THERMAL)
int ath12k_thermal_register(struct ath12k_base *ab);
void ath12k_thermal_unregister(struct ath12k_base *ab);
void ath12k_thermal_event_temperature(struct ath12k *ar, int temperature);
--- a/local-symbols
+++ b/local-symbols
@@ -170,6 +170,7 @@ ATH12K_DEBUG=
ATH12K_DEBUGFS=
ATH12K_TRACING=
ATH12K_COREDUMP=
+ATH12K_THERMAL=
WLAN_VENDOR_ATMEL=
AT76C50X_USB=
WLAN_VENDOR_BROADCOM=
@@ -21,7 +21,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
--- a/local-symbols
+++ b/local-symbols
@@ -336,6 +336,7 @@ RT2X00_LIB_FIRMWARE=
@@ -337,6 +337,7 @@ RT2X00_LIB_FIRMWARE=
RT2X00_LIB_CRYPTO=
RT2X00_LIB_LEDS=
RT2X00_LIB_DEBUGFS=
+1 -1
View File
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=mt76
PKG_RELEASE=1
PKG_RELEASE=2
PKG_LICENSE:=BSD-3-Clause-Clear
PKG_LICENSE_FILES:=
@@ -0,0 +1,42 @@
From e78688a4f44478a9270813ac494fc548ed6b3be9 Mon Sep 17 00:00:00 2001
From: David Bauer <mail@david-bauer.net>
Date: Fri, 13 Mar 2026 12:19:37 +0100
Subject: [PATCH] wifi: mt76: mt7915: set mt76 specific PS flag
mt76 tracks the PSM state of a sta internally with a wcid flag. TX to
such clients is skipped based on the presence of this flag.
This flag was not added to the PS state notify handler for MT7915 chips.
Without this flag, mt76 queues pending frames to the hardware,
accounting for airtime when a PSM notification is received while in a TX
iteration.
Set the PS flag for the STA WCID to prevent this from happening. TX gets
skipped in presence of this flag.
Link: https://patchwork.kernel.org/project/linux-wireless/patch/20260313112502.2026974-1-mail@david-bauer.net/
Signed-off-by: David Bauer <mail@david-bauer.net>
---
mt7915/mcu.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/mt7915/mcu.c b/mt7915/mcu.c
index 6625f905..52c89d2b 100644
--- a/mt7915/mcu.c
+++ b/mt7915/mcu.c
@@ -421,6 +421,11 @@ static void mt7915_mcu_rx_ps_sync(struct mt7915_dev *dev, struct sk_buff *skb)
if (!sta)
goto out;
+ if (p->ps_bit)
+ set_bit(MT_WCID_FLAG_PS, &wcid->flags);
+ else
+ clear_bit(MT_WCID_FLAG_PS, &wcid->flags);
+
ieee80211_sta_ps_transition_ni(sta, !!p->ps_bit);
out:
--
2.51.0
+3 -3
View File
@@ -5,9 +5,9 @@ PKG_RELEASE:=1
PKG_SOURCE_URL:=https://github.com/openwrt/qca-nss-dp.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2025-11-24
PKG_SOURCE_VERSION:=19c51af0c5be0afcbd57a9e0e50928759d7d08da
PKG_MIRROR_HASH:=96aafb7c8f09ecde036ed706535111368874b06cd412a7b9df950415e5b4b334
PKG_SOURCE_DATE:=2026-03-13
PKG_SOURCE_VERSION:=6a5c4716ca258d67202fc7964c9294dfefa3ccfa
PKG_MIRROR_HASH:=5f9a9a44f91842492d8c9038670379011b90e68fda7af291b2bdd81889a9ea1a
PKG_BUILD_PARALLEL:=1
PKG_FLAGS:=nonshared
+1 -1
View File
@@ -152,7 +152,7 @@ static int trelay_do_add(char *name, char *devn1, char *devn2)
struct trelay *tr, *tr1;
int ret;
tr = kzalloc(sizeof(*tr) + strlen(name) + 1, GFP_KERNEL);
tr = kzalloc(struct_size(tr, name, strlen(name) + 1), GFP_KERNEL);
if (!tr)
return -ENOMEM;
+3 -3
View File
@@ -5,9 +5,9 @@ PKG_RELEASE=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/libubox.git
PKG_MIRROR_HASH:=fb43a86d13bbbf16d47358caa2fe7eec3b802e3a57ba5142520add159469c927
PKG_SOURCE_DATE:=2026-02-13
PKG_SOURCE_VERSION:=1aa36ee774c8db4d7a396903e0d2e1fb79ee8bf1
PKG_MIRROR_HASH:=55b2298ea74bb4c7267e4b615d442aeff601e0de88ec0e641e4c40eed8454e85
PKG_SOURCE_DATE:=2026-03-13
PKG_SOURCE_VERSION:=815633847cd32ffe6da28943cbeb37edc88265c8
PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE))
CMAKE_INSTALL:=1
+6 -7
View File
@@ -8,13 +8,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=zlib
PKG_VERSION:=1.3.1
PKG_VERSION:=1.3.2
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/madler/zlib
PKG_SOURCE_VERSION:=51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf
PKG_MIRROR_HASH:=6558577038f4839057fad93afb295bf32e84dc9bd2c33512d40a5eab6d4889ef
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/madler/zlib/releases/download/v$(PKG_VERSION)
PKG_HASH:=d7a0654783a4da529d1bb793b7ad9c3318020af77667bcae35f95d0e42a792f3
PKG_LICENSE:=Zlib
PKG_LICENSE_FILES:=LICENSE
@@ -71,7 +70,7 @@ define Build/InstallDev
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libz.{a,so*} \
$(1)/usr/lib/
mkdir -p $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/share/pkgconfig/zlib.pc \
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/zlib.pc \
$(1)/usr/lib/pkgconfig/
endef
@@ -91,7 +90,7 @@ define Package/zlib-dev/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libz.a $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/pkgconfig/zlib.pc \
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/zlib.pc \
$(1)/usr/lib/pkgconfig/
endef
@@ -1,9 +1,9 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -93,34 +93,67 @@ set(ZLIB_PUBLIC_HDRS
${CMAKE_CURRENT_BINARY_DIR}/zconf.h
zlib.h
)
@@ -121,33 +121,64 @@ configure_file(${zlib_BINARY_DIR}/zconf.
set(ZLIB_PUBLIC_HDRS ${zlib_BINARY_DIR}/zconf.h zlib.h)
-set(ZLIB_PRIVATE_HDRS
- crc32.h
- deflate.h
@@ -13,8 +13,20 @@
- inflate.h
- inftrees.h
- trees.h
- zutil.h
-)
- zutil.h)
+if(ARMv8)
+ set(ZLIB_PRIVATE_HDRS
+ crc32.h
+ deflate.h
+ gzguts.h
+ inffast.h
+ inffixed.h
+ inflate.h
+ inftrees.h
+ trees.h
+ zutil.h
+ contrib/arm/chunkcopy.h)
-set(ZLIB_SRCS
- adler32.c
- compress.c
@@ -30,22 +42,7 @@
- inffast.c
- trees.c
- uncompr.c
- zutil.c
-)
+
+if(ARMv8)
+ set(ZLIB_PRIVATE_HDRS
+ crc32.h
+ deflate.h
+ gzguts.h
+ inffast.h
+ inffixed.h
+ inflate.h
+ inftrees.h
+ trees.h
+ zutil.h
+ contrib/arm/chunkcopy.h
+ )
- zutil.c)
+ set(ZLIB_SRCS
+ adler32.c
+ compress.c
@@ -61,9 +58,8 @@
+ contrib/arm/inffast.c
+ trees.c
+ uncompr.c
+ zutil.c
+ )
+ else()
+ zutil.c)
+else()
+ set(ZLIB_PRIVATE_HDRS
+ crc32.h
+ deflate.h
@@ -73,8 +69,8 @@
+ inflate.h
+ inftrees.h
+ trees.h
+ zutil.h
+ )
+ zutil.h)
+
+ set(ZLIB_SRCS
+ adler32.c
+ compress.c
@@ -90,9 +86,8 @@
+ inffast.c
+ trees.c
+ uncompr.c
+ zutil.c
+ )
+ zutil.c)
+endif()
if(NOT MINGW)
set(ZLIB_DLL_SRCS
if(WIN32)
set(zlib_static_suffix "s")
@@ -1,14 +0,0 @@
--- a/zlib.pc.cmakein
+++ b/zlib.pc.cmakein
@@ -1,8 +1,8 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@INSTALL_LIB_DIR@
-sharedlibdir=@INSTALL_LIB_DIR@
-includedir=@INSTALL_INC_DIR@
+libdir=${exec_prefix}/lib
+sharedlibdir=${exec_prefix}/lib
+includedir=${prefix}/include
Name: zlib
Description: zlib compression library
@@ -354,10 +354,10 @@ function device_htmode_append(config) {
config.vht_capab += '[BF-ANTENNA-' + min(((vht_capab >> 13) & 3) + 1, config.beamformer_antennas) + ']';
/* supported Channel widths */
if ((vht_capab & 0xc) == 8 && config.vht160 <= 2)
config.vht_capab += '[VHT160-80PLUS80]';
else if ((vht_capab & 0xc) == 4 && config.vht160 <= 2)
if (((vht_capab & 0xc) == 4 || (vht_capab & 0xc) == 8) && config.vht160 >= 1)
config.vht_capab += '[VHT160]';
if ((vht_capab & 0xc) == 8 && config.vht160 >= 2)
config.vht_capab += '[VHT160-80PLUS80]';
/* maximum MPDU length */
if ((vht_capab & 3) > 1 && config.vht_max_mpdu >= 11454)
+3 -3
View File
@@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/odhcpd.git
PKG_MIRROR_HASH:=89af53f1b6db61a5cc31eb39713f52eaa521e3ed3da12a742ad55b0bd8e5c248
PKG_SOURCE_DATE:=2026-01-19
PKG_SOURCE_VERSION:=13ef483716a504378b223d668c2482c93a804336
PKG_MIRROR_HASH:=1d0008c049d98c7e663d59fe7285e9d4a47552df3806494fe0fdba4658829904
PKG_SOURCE_DATE:=2026-03-16
PKG_SOURCE_VERSION:=160e5fa3957cfd9d89f8ff7493f28a8baaf6ced7
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=GPL-2.0
+3 -3
View File
@@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_URL=$(PROJECT_GIT)/project/mdnsd.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2025-10-04
PKG_SOURCE_VERSION:=2f75344fd0cc848558bf2ea3a94c0bf8b903ff89
PKG_MIRROR_HASH:=ca03392a39e3e38b276514d4627bab25093cf873abf361352c82dfec0c4bdc93
PKG_SOURCE_DATE:=2026-02-06
PKG_SOURCE_VERSION:=a52cdb354d13c179150d2ba26f9f8a51d418b43d
PKG_MIRROR_HASH:=64d6b454aefd208881a130ec0d503e690375565ed3de0171a8c70f5d1a4a25bf
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_LICENSE:=LGPL-2.1
+3 -1
View File
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=iptables
PKG_VERSION:=1.8.10
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_SOURCE_URL:=https://netfilter.org/projects/iptables/files
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
@@ -144,6 +144,7 @@ $(call Package/iptables/Default)
TITLE:=IP firewall administration tool nft
DEPENDS:=+kmod-ipt-core +xtables-nft
PROVIDES:=iptables
DEFAULT_VARIANT:=1
ALTERNATIVES:=\
300:/usr/sbin/iptables:xtables-nft-multi \
300:/usr/sbin/iptables-restore:xtables-nft-multi \
@@ -489,6 +490,7 @@ $(call Package/iptables/Default)
DEPENDS:=@IPV6 +kmod-ip6tables +xtables-nft
TITLE:=IP firewall administration tool nft
PROVIDES:=ip6tables
DEFAULT_VARIANT:=1
ALTERNATIVES:=\
300:/usr/sbin/ip6tables:xtables-nft-multi \
300:/usr/sbin/ip6tables-restore:xtables-nft-multi \
@@ -10,12 +10,12 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=wireguard-tools
PKG_VERSION:=1.0.20250521
PKG_VERSION:=1.0.20260223
PKG_RELEASE:=1
PKG_SOURCE:=wireguard-tools-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://git.zx2c4.com/wireguard-tools/snapshot/
PKG_HASH:=b6f2628b85b1b23cc06517ec9c74f82d52c4cdbd020f3dd2f00c972a1782950e
PKG_HASH:=af459827b80bfd31b83b08077f4b5843acb7d18ad9a33a2ef532d3090f291fbf
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
+1 -1
View File
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=apk
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_SOURCE_URL=https://gitlab.alpinelinux.org/alpine/apk-tools.git
PKG_SOURCE_PROTO:=git
@@ -1,8 +1,6 @@
diff --git a/src/genhelp_apk.lua b/src/genhelp_apk.lua
index a62e84d22ed5..a97264f6ab3c 100644
--- a/src/genhelp_apk.lua
+++ b/src/genhelp_apk.lua
@@ -65,7 +65,7 @@ local function render_options(doc, out, options)
@@ -65,7 +65,7 @@ local function render_options(doc, out,
end
local function render_footer(doc, out)
@@ -46,3 +46,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
}
r = apk_solver_commit(db, 0, world);
--- a/doc/apk-add.8.scd
+++ b/doc/apk-add.8.scd
@@ -30,6 +30,10 @@ To later upgrade or downgrade back to a
*apk add* supports the commit options described in *apk*(8), as well as the
following options:
+*--force-reinstall*
+ Allow reinstalling already-installed packages without a version
+ change. Only the named packages are reinstalled, not dependencies.
+
*--initdb*
Initialize a new package database.
+3 -3
View File
@@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
PKG_MIRROR_HASH:=123c54964fd8048931002bd74181335dfcbff8ed949af2055e367e03180fe287
PKG_SOURCE_DATE:=2026-02-20
PKG_SOURCE_VERSION:=2881a59f304326cf0a71c849738d052ba317b4cb
PKG_MIRROR_HASH:=8bd86938479609045e1ceebed904e4f5cb96fdb38220d41c3579b7e764fbb05b
PKG_SOURCE_DATE:=2026-03-13
PKG_SOURCE_VERSION:=58eb263d5abe03f8c1280bdfa65a3b052614215d
CMAKE_INSTALL:=1
PKG_LICENSE:=GPL-2.0
+3 -3
View File
@@ -5,9 +5,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/jsonpath.git
PKG_SOURCE_DATE:=2025-10-04
PKG_SOURCE_VERSION:=f4fe702d0e8d9f8704b42f5d5c10950470ada231
PKG_MIRROR_HASH:=799b630107aedb5bfd4b0494af82843f803759324140cce89256b479124d5b1c
PKG_SOURCE_DATE:=2026-03-16
PKG_SOURCE_VERSION:=b9034210bd331749673416c6bf389cccd4e23610
PKG_MIRROR_HASH:=e8616b3eee53c6dd3420a7d800337e13a61e1333dfbd8551b50ab15bafd94a0e
CMAKE_INSTALL:=1
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
+3 -2
View File
@@ -36,8 +36,9 @@ def add_artifact(artifact, prefix="openwrt-"):
output[artifact] = {}
for file in files:
file = str(file.name)
arch = re.match(r".*Linux-([^.]*)\.", file).group(1)
output[artifact][arch] = file
arch = re.match(r".*Linux-([^.]*)\.", file)
if arch:
output[artifact][arch.group(1)] = file
for json_file in work_dir.glob("*.json"):
@@ -17,6 +17,8 @@ an7581_setup_interfaces()
gemtek,w1700k-ubi)
ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "wan"
;;
nokia,valyrian)
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 10g" "wan"
*)
echo "Unsupported hardware. Network interfaces not initialized"
;;
+2 -1
View File
@@ -1,3 +1,4 @@
#!/bin/sh /etc/rc.common
#
# Copyright (C) 2025 openwrt.org
#
@@ -14,7 +15,7 @@ find_nct7802()
return
fi
done
echo "/sys/class/hwmon/hwmon5" # fallback
echo "/sys/class/hwmon/hwmon3" # fallback
}
boot()
@@ -0,0 +1,539 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
/dts-v1/;
#include <dt-bindings/leds/common.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "an7581.dtsi"
/ {
model = "Nokia Valyrian";
compatible = "nokia,valyrian", "airoha,an7581", "airoha,en7581";
aliases {
serial0 = &uart1;
led-boot = &led_status_white;
led-failsafe = &led_status_red;
led-running = &led_status_green;
led-upgrade = &led_status_blue;
};
chosen {
bootargs = "earlycon";
stdout-path = "serial0:115200n8";
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x2 0x00000000>;
};
gpio-keys {
compatible = "gpio-keys";
btn-0 {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&en7581_pinctrl 0 GPIO_ACTIVE_LOW>;
};
btn-1 {
label = "wps";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&en7581_pinctrl 13 GPIO_ACTIVE_LOW>;
};
btn-2 {
label = "wifi";
linux,code = <KEY_RFKILL>;
gpios = <&en7581_pinctrl 16 GPIO_ACTIVE_LOW>;
};
};
leds {
compatible = "gpio-leds";
led_status_red: led-0 {
function = LED_FUNCTION_STATUS;
color = <LED_COLOR_ID_RED>;
gpios = <&leds_shift_reg 0 GPIO_ACTIVE_LOW>;
};
led_status_green: led-1 {
function = LED_FUNCTION_STATUS;
color = <LED_COLOR_ID_GREEN>;
gpios = <&leds_shift_reg 1 GPIO_ACTIVE_LOW>;
};
led_status_blue: led-2 {
function = LED_FUNCTION_STATUS;
color = <LED_COLOR_ID_BLUE>;
gpios = <&leds_shift_reg 2 GPIO_ACTIVE_LOW>;
};
led_status_white: led-3 {
function = LED_FUNCTION_STATUS;
color = <LED_COLOR_ID_WHITE>;
gpios = <&leds_shift_reg 3 GPIO_ACTIVE_LOW>;
};
led-4 {
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_AMBER>;
gpios = <&leds_shift_reg 4 GPIO_ACTIVE_LOW>;
};
led-5 {
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_GREEN>;
gpios = <&leds_shift_reg 5 GPIO_ACTIVE_LOW>;
default-state = "on";
};
led-6 {
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_RED>;
gpios = <&leds_shift_reg 6 GPIO_ACTIVE_LOW>;
};
led-7 {
function = LED_FUNCTION_MOBILE;
color = <LED_COLOR_ID_GREEN>;
gpios = <&leds_shift_reg 7 GPIO_ACTIVE_LOW>;
};
led-8 {
function = LED_FUNCTION_WAN;
color = <LED_COLOR_ID_GREEN>;
gpios = <&leds_shift_reg 8 GPIO_ACTIVE_LOW>;
};
led-9 {
function = LED_FUNCTION_WAN;
color = <LED_COLOR_ID_RED>;
gpios = <&leds_shift_reg 9 GPIO_ACTIVE_LOW>;
};
led-10 {
function = LED_FUNCTION_USB;
color = <LED_COLOR_ID_GREEN>;
gpios = <&leds_shift_reg 10 GPIO_ACTIVE_LOW>;
};
};
sfp: sfp {
compatible = "sff,sfp";
i2c-bus = <&i2c0>;
mod-def0-gpios = <&en7581_pinctrl 33 GPIO_ACTIVE_LOW>;
los-gpios = <&en7581_pinctrl 36 GPIO_ACTIVE_HIGH>;
tx-disable-gpios = <&en7581_pinctrl 41 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&en7581_pinctrl 40 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
};
i2c-1 {
compatible = "i2c-gpio";
sda-gpios = <&en7581_pinctrl 2 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
scl-gpios = <&en7581_pinctrl 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
i2c-gpio,delay-us = <2>; /* ~100 kHz */
#address-cells = <1>;
#size-cells = <0>;
adc@40 {
compatible = "richtek,rtq6059";
reg = <0x40>;
#io-channel-cells = <1>;
};
};
spi-0 {
compatible = "spi-gpio";
sck-gpios = <&en7581_pinctrl 4 GPIO_ACTIVE_HIGH>;
mosi-gpios = <&en7581_pinctrl 3 GPIO_ACTIVE_HIGH>;
cs-gpios = <&en7581_pinctrl 30 GPIO_ACTIVE_LOW>;
num-chipselects = <1>;
#address-cells = <1>;
#size-cells = <0>;
leds_shift_reg: gpio-expander@0 {
compatible = "fairchild,74hc595";
reg = <0>;
enable-gpios = <&en7581_pinctrl 14 GPIO_ACTIVE_LOW>;
gpio-controller;
registers-number = <2>;
spi-max-frequency = <100000>;
#gpio-cells = <2>;
};
};
};
&en7581_pinctrl {
gpio-ranges = <&en7581_pinctrl 0 13 47>;
pcie1_rst_pins: pcie1-rst-pins {
conf {
pins = "pcie_reset1";
drive-open-drain = <1>;
};
};
pcie2_rst_pins: pcie2-rst-pins {
conf {
pins = "pcie_reset2";
drive-open-drain = <1>;
};
};
gswp1_led0_pins: gswp1-led1-pins {
mux {
function = "phy1_led0";
pins = "gpio43";
};
};
gswp2_led0_pins: gswp2-led1-pins {
mux {
function = "phy2_led0";
pins = "gpio44";
};
};
gswp3_led0_pins: gswp3-led1-pins {
mux {
function = "phy3_led0";
pins = "gpio45";
};
};
mmc_pins: mmc-pins {
mux {
function = "emmc";
groups = "emmc";
};
};
};
&mmc0 {
pinctrl-names = "default", "state_uhs";
pinctrl-0 = <&mmc_pins>;
pinctrl-1 = <&mmc_pins>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
card@0 {
compatible = "mmc-card";
reg = <0>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
bl@800 {
label = "bl2";
reg = <0x00000800 0x0001f800>;
};
bootloader@20000 {
label = "bootloader";
reg = <0x00020000 0x000e0000>;
};
bootloader-inactive@100000 {
label = "bootloader-inactive";
reg = <0x00100000 0x000e0000>;
};
u-boot-env@1e0000 {
label = "u-boot-env";
reg = <0x001e0000 0x00020000>;
nvmem-layout {
compatible = "u-boot,env-layout";
};
};
factory@200000 {
label = "factory";
reg = <0x00200000 0x00800000>;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
eeprom_factory_0: eeprom@0 {
reg = <0x40000 0x1e00>;
};
mac_factory_2c0000: mac@2c0000 {
compatible = "mac-base";
reg = <0x2c0000 0x6>;
#nvmem-cell-cells = <1>;
};
onu_type_factory_2e0000: onu_type@2e0000 {
reg = <0x2e0000 0x10>;
};
board_config_factory_2e0010: board_config@2e0010 {
reg = <0x2e0010 0x8>;
};
};
};
mfgdata@a00000 {
label = "mfgdata";
reg = <0x00a00000 0x00100000>;
};
kernel-active@b00000 {
label = "kernel-active";
reg = <0x00b00000 0x00800000>;
};
kernel-inactive@1300000 {
label = "kernel-inactive";
reg = <0x01300000 0x00800000>;
};
rootfs-active@1b00000 {
label = "rootfs-active";
reg = <0x01b00000 0x06400000>;
};
rootfs-inactive@7f00000 {
label = "rootfs-inactive";
reg = <0x07f00000 0x06400000>;
};
rootfs-data@e300000 {
label = "rootfs_data";
reg = <0x0e300000 0x02000000>;
};
securestore@10300000 {
label = "securestore";
reg = <0x10300000 0x1000000>;
};
lcm-data@11300000 {
label = "lcm_data";
reg = <0x11300000 0x40000000>;
};
};
};
};
&usb0 {
status = "okay";
mediatek,u3p-dis-msk = <0x1>;
phys = <&usb0_phy PHY_TYPE_USB2>;
};
&i2c0 {
status = "okay";
};
&pciephy {
status = "okay";
};
&pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&pcie1_rst_pins>;
status = "okay";
pcie@0,0 {
reg = <0x0000 0 0 0 0>;
wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
nvmem-cells = <&eeprom_factory_0>;
nvmem-cell-names = "eeprom";
airoha,npu = <&npu>;
airoha,eth = <&eth>;
band@0 {
/* 2.4 GHz */
reg = <0>;
nvmem-cells = <&mac_factory_2c0000 6>;
nvmem-cell-names = "mac-address";
};
band@1 {
/* 5 GHz */
reg = <1>;
nvmem-cells = <&mac_factory_2c0000 7>;
nvmem-cell-names = "mac-address";
};
band@2 {
/* 6 GHz */
reg = <2>;
nvmem-cells =<&mac_factory_2c0000 8>;
nvmem-cell-names = "mac-address";
};
};
};
};
&pcie2 {
pinctrl-names = "default";
pinctrl-0 = <&pcie2_rst_pins>;
status = "okay";
};
&eth {
status = "okay";
};
&gdm1 {
status = "okay";
nvmem-cells = <&mac_factory_2c0000 3>;
nvmem-cell-names = "mac-address";
};
&mdio {
as21xx: ethernet-phy@1c {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <0x1c>;
firmware-name = "as21x1x_fw.bin";
reset-deassert-us = <1000000>;
reset-assert-us = <1000000>;
reset-gpios = <&en7581_pinctrl 31 GPIO_ACTIVE_LOW>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
};
&switch {
status = "okay";
};
&pon_pcs {
status = "okay";
};
&gdm2 {
status = "okay";
sfp = <&sfp>;
managed = "in-band-status";
phy-mode = "usxgmii";
nvmem-cells = <&mac_factory_2c0000 4>;
nvmem-cell-names = "mac-address";
openwrt,netdev-name = "wan";
};
&eth_pcs {
status = "okay";
};
&gdm4 {
status = "okay";
managed = "in-band-status";
phy-handle = <&as21xx>;
phy-mode = "usxgmii";
nvmem-cells = <&mac_factory_2c0000 5>;
nvmem-cell-names = "mac-address";
openwrt,netdev-name = "10g";
};
&gsw_port1 {
label = "lan1";
status = "okay";
};
&gsw_phy1 {
pinctrl-names = "gbe-led";
pinctrl-0 = <&gswp1_led0_pins>;
status = "okay";
};
&gsw_phy1_led0 {
function = LED_FUNCTION_LAN;
active-low;
status = "okay";
};
&gsw_port2 {
label = "lan2";
status = "okay";
};
&gsw_phy2 {
pinctrl-names = "gbe-led";
pinctrl-0 = <&gswp2_led0_pins>;
status = "okay";
};
&gsw_phy2_led0 {
function = LED_FUNCTION_LAN;
active-low;
status = "okay";
};
&gsw_port3 {
label = "lan3";
status = "okay";
};
&gsw_phy3 {
pinctrl-names = "gbe-led";
pinctrl-0 = <&gswp3_led0_pins>;
status = "okay";
};
&gsw_phy3_led0 {
function = LED_FUNCTION_LAN;
active-low;
status = "okay";
};
+14
View File
@@ -104,3 +104,17 @@ define Device/gemtek_w1700k-ubi
SOC := an7581
endef
TARGET_DEVICES += gemtek_w1700k-ubi
define Device/nokia_valyrian
DEVICE_VENDOR := Nokia
DEVICE_MODEL := Valyrian
DEVICE_DTS := an7581-nokia-valyrian
DEVICE_PACKAGES := kmod-spi-gpio kmod-gpio-nxp-74hc164 kmod-leds-gpio \
kmod-i2c-an7581 kmod-i2c-gpio kmod-iio-richtek-rtq6056 \
kmod-sfp kmod-phy-aeonsemi-as21xxx \
kmod-mt7996-firmware
ARTIFACT/preloader.bin := an7581-preloader nokia_valyrian
ARTIFACT/bl31-uboot.fip := an7581-bl31-uboot nokia_valyrian
ARTIFACTS := preloader.bin bl31-uboot.fip
endef
TARGET_DEVICES += nokia_valyrian
+5 -5
View File
@@ -20,10 +20,10 @@ endef
$(eval $(call KernelPackage,i2c-an7581))
define KernelPackage/pwm-an7581
define KernelPackage/pwm-airoha
SUBMENU:=$(OTHER_MENU)
TITLE:=Airoha EN7581 PWM
DEPENDS:=@(TARGET_airoha_an7581)
TITLE:=Airoha AN7581 and AN7583 PWM
DEPENDS:=@TARGET_airoha_an7581||TARGET_airoha_an7583
KCONFIG:= \
CONFIG_PWM=y \
CONFIG_PWM_AIROHA=y \
@@ -33,10 +33,10 @@ define KernelPackage/pwm-an7581
AUTOLOAD:=$(call AutoProbe,pwm-airoha)
endef
define KernelPackage/pwm-an7581/description
define KernelPackage/pwm-airoha/description
Kernel module to use the PWM channel on Airoha SoC
endef
$(eval $(call KernelPackage,pwm-an7581))
$(eval $(call KernelPackage,pwm-airoha))
@@ -29,7 +29,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -18198,6 +18198,13 @@ F: drivers/pinctrl/
@@ -18204,6 +18204,13 @@ F: drivers/pinctrl/
F: include/dt-bindings/pinctrl/
F: include/linux/pinctrl/
@@ -107,7 +107,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
module_phy_driver(as21xxx_drivers);
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2074,7 +2074,8 @@ void phy_detach(struct phy_device *phyde
@@ -2069,7 +2069,8 @@ void phy_detach(struct phy_device *phyde
device_release_driver(&phydev->mdio.dev);
/* Assert the reset signal */
@@ -13,11 +13,9 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_npu.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c
index 22f72c14606599..a56b3780bb627c 100644
--- a/drivers/net/ethernet/airoha/airoha_npu.c
+++ b/drivers/net/ethernet/airoha/airoha_npu.c
@@ -519,6 +519,14 @@ static int airoha_npu_wlan_init_memory(struct airoha_npu *npu)
@@ -519,6 +519,14 @@ static int airoha_npu_wlan_init_memory(s
if (err)
return err;
@@ -20,8 +20,6 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_npu.c | 46 ++++++++++++++++++++----
1 file changed, 40 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c
index a56b3780bb627c..89f22f3f47dc56 100644
--- a/drivers/net/ethernet/airoha/airoha_npu.c
+++ b/drivers/net/ethernet/airoha/airoha_npu.c
@@ -16,6 +16,8 @@
@@ -33,7 +31,7 @@ index a56b3780bb627c..89f22f3f47dc56 100644
#define NPU_AN7583_FIRMWARE_DATA "airoha/an7583_npu_data.bin"
#define NPU_AN7583_FIRMWARE_RV32 "airoha/an7583_npu_rv32.bin"
#define NPU_EN7581_FIRMWARE_RV32_MAX_SIZE 0x200000
@@ -195,18 +197,18 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
@@ -195,18 +197,18 @@ static int airoha_npu_send_msg(struct ai
}
static int airoha_npu_load_firmware(struct device *dev, void __iomem *addr,
@@ -56,7 +54,7 @@ index a56b3780bb627c..89f22f3f47dc56 100644
ret = -E2BIG;
goto out;
}
@@ -218,6 +220,28 @@ static int airoha_npu_load_firmware(struct device *dev, void __iomem *addr,
@@ -218,6 +220,28 @@ out:
return ret;
}
@@ -83,9 +81,9 @@ index a56b3780bb627c..89f22f3f47dc56 100644
+}
+
static int airoha_npu_run_firmware(struct device *dev, void __iomem *base,
struct resource *res)
struct reserved_mem *rmem)
{
@@ -233,14 +257,22 @@ static int airoha_npu_run_firmware(struct device *dev, void __iomem *base,
@@ -233,14 +257,22 @@ static int airoha_npu_run_firmware(struc
if (IS_ERR(addr))
return PTR_ERR(addr);
@@ -110,7 +108,7 @@ index a56b3780bb627c..89f22f3f47dc56 100644
}
static irqreturn_t airoha_npu_mbox_handler(int irq, void *npu_instance)
@@ -790,6 +822,8 @@ module_platform_driver(airoha_npu_driver);
@@ -791,6 +823,8 @@ module_platform_driver(airoha_npu_driver
MODULE_FIRMWARE(NPU_EN7581_FIRMWARE_DATA);
MODULE_FIRMWARE(NPU_EN7581_FIRMWARE_RV32);
@@ -25,7 +25,7 @@ Signed-off-by: Rosen Penev <rosenp@gmail.com>
status = "disabled";
};
+&pcie0 {
+&pcie_bridge0 {
+ wifi@0,0 {
+ reg = <0x0000 0 0 0 0>;
+ compatible = "brcm,bcm43431";
@@ -34,7 +34,7 @@ Signed-off-by: Rosen Penev <rosenp@gmail.com>
+ };
+};
+
+&pcie1 {
+&pcie_bridge1 {
+ wifi@0,0 {
+ reg = <0x0000 0 0 0 0>;
+ compatible = "brcm,bcm43431";
@@ -43,7 +43,7 @@ Signed-off-by: Rosen Penev <rosenp@gmail.com>
+ };
+};
+
+&pcie2 {
+&pcie_bridge2 {
+ wifi@0,0 {
+ reg = <0x0000 0 0 0 0>;
+ compatible = "brcm,bcm43428";
@@ -310,7 +310,7 @@ static struct phy_driver rtk_phy_drivers[] = {
module_phy_driver(rtk_phy_drivers);
static struct mdio_device_id __maybe_unused rtk_phy_tbl[] = {
static const struct mdio_device_id __maybe_unused rtk_phy_tbl[] = {
{ PHY_ID_MATCH_EXACT(REALTEK_PHY_ID_RTL8261N) },
{ PHY_ID_MATCH_EXACT(REALTEK_PHY_ID_RTL8264B) },
{ PHY_ID_MATCH_EXACT(REALTEK_PHY_ID_RTL8264) },
@@ -0,0 +1,85 @@
From 63161fb6353493c648a260244f6ac7eca65fd48e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Van=C4=9Bk?= <linuxtardis@gmail.com>
Date: Mon, 2 Mar 2026 20:31:37 +0100
Subject: [PATCH] net: phy: Work around MDIO collisions in the YT8821 driver
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The Cudy M3000 router suffers from a MDIO bus collision:
- The MT7981B internal gigabit PHY listens on address 0.
- The Motorcomm YT8821 is strapped to listen on address 1,
but it initially also listens on address 0 (Motorcomm
incorrectly considers that address a broadcast address).
Without this patch, the YT8821 reacts to MDIO commands intended
for the internal gigabit PHY and that makes it work unreliably.
The YT8821 state somehow gets corrupted by the commands for the MT7981
(e.g. we get 100Mbps speeds on gigabit links).
This dirty workaround resets the PHY to cancel out any earlier
YT8821 register corruption and then it disables the address 0
as soon as possible. This should make the YT8821 work reliably.
BEWARE though: the PHY will be reset only if the device tree
node that defines the PHY carries the reset-gpios attribute.
The PHY will not be reset if the reset GPIO is either on the MDIO
bus node or is not defined at all. This might not always be a problem --
some routers do not require the PHY to be reset (e.g. Cudy WR3000H,
where there likely is less communication with the MT7981B PHY,
and so the YT8821 PHY works reasonably well there even without this patch).
This patch also does not address the possible MDIO bus collisions
when the MT7981B PHY driver initially configures that PHY and invokes
some read transactions on the bus. I am hoping that the MT7981B MDIO
bus controller gives priority to the internal PHY and so it would
not be affected by these collisions. However, I don't have anything
to base this on apart from it "seeming to be working okay".
This patch is unlikely to be mergeable into the mainline kernel.
Upstream has strongly indicated that they would prefer this problem
to be resolved by the platform bootloader (e.g. U-Boot), see
- https://lore.kernel.org/all/d3bb9c36-5a0e-4339-901d-2dd21bdba395@gmail.com/
- https://lore.kernel.org/all/20260228232241.1274236-1-linuxtardis@gmail.com/
Signed-off-by: Jakub Vaněk <linuxtardis@gmail.com>
---
drivers/net/phy/motorcomm.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
--- a/drivers/net/phy/motorcomm.c
+++ b/drivers/net/phy/motorcomm.c
@@ -214,6 +214,9 @@
#define YT8521_RC1R_RGMII_2_100_NS 14
#define YT8521_RC1R_RGMII_2_250_NS 15
+#define YTPHY_MDIO_ADDRESS_CONTROL_REG 0xA005
+#define YTPHY_MACR_EN_PHY_ADDR_0 BIT(6)
+
#define YTPHY_MISC_CONFIG_REG 0xA006
#define YTPHY_MCR_FIBER_SPEED_MASK BIT(0)
#define YTPHY_MCR_FIBER_1000BX (0x1 << 0)
@@ -2659,6 +2662,23 @@ static int yt8821_config_init(struct phy
int ret;
u16 set;
+ /* Hard-reset the PHY to clear out any register corruption
+ * from preceding MDIO bus conflicts.
+ */
+ phy_device_reset(phydev, 1);
+
+ /* Deassert the reset GPIO under the MDIO bus lock to make
+ * sure that nothing will communicate on the bus until we
+ * disable the broadcast address in the YT8821.
+ */
+ phy_lock_mdio_bus(phydev);
+ phy_device_reset(phydev, 0);
+ ret = ytphy_modify_ext(phydev,
+ YTPHY_MDIO_ADDRESS_CONTROL_REG,
+ YTPHY_MACR_EN_PHY_ADDR_0,
+ 0);
+ phy_unlock_mdio_bus(phydev);
+
if (phydev->interface == PHY_INTERFACE_MODE_2500BASEX)
mode = YT8821_CHIP_MODE_FORCE_BX2500;
@@ -108,11 +108,6 @@ CONFIG_MFD_ROHM_BD718XX=y
# CONFIG_MMC_SDHCI_PCI is not set
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_NEED_SG_DMA_LENGTH=y
# CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI is not set
CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=y
CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=y
# CONFIG_NET_DSA_MICROCHIP_KSZ_SPI is not set
CONFIG_NET_DSA_TAG_KSZ=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_PARTITION_PERCPU=y
CONFIG_PCI=y
+2 -1
View File
@@ -74,7 +74,8 @@ define Device/gateworks_venice
kmod-hwmon-gsc kmod-rtc-ds1672 kmod-eeprom-at24 \
kmod-gpio-button-hotplug kmod-leds-gpio kmod-pps-gpio \
kmod-lan743x kmod-sky2 kmod-iio-st_accel-i2c \
kmod-can kmod-can-flexcan kmod-can-mcp251x
kmod-can kmod-can-flexcan kmod-can-mcp251x \
kmod-dsa-ksz9477-i2c
IMAGES := img.gz
IMAGE/img.gz := boot-scr | boot-img-ext4 | sdcard-img-ext4 | gzip | append-metadata
endef
+76 -3
View File
@@ -11,7 +11,6 @@
compatible = "pakedge,wr-1";
aliases {
// TODO: Verify if the ethernet0 alias is needed
ethernet0 = &gmac;
label-mac-device = &gmac;
led-boot = &led_power;
@@ -46,14 +45,14 @@
wlan2g {
gpios = <&tlmm 1 GPIO_ACTIVE_LOW>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WLAN;
function = LED_FUNCTION_WLAN_2GHZ;
linux,default-trigger = "phy0tpt";
};
wlan5g {
gpios = <&tlmm 2 GPIO_ACTIVE_LOW>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WLAN;
function = LED_FUNCTION_WLAN_5GHZ;
linux,default-trigger = "phy1tpt";
};
};
@@ -177,6 +176,80 @@
status = "okay";
};
&ethphy0 {
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <4>;
default-state = "keep";
};
};
};
&ethphy1 {
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <3>;
default-state = "keep";
};
};
};
&ethphy2 {
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
default-state = "keep";
};
};
};
&ethphy3 {
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
default-state = "keep";
};
};
};
&ethphy4 {
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WAN;
default-state = "keep";
};
};
};
&gmac {
status = "okay";
};
@@ -9,11 +9,6 @@
model = "Luma Home WRTQ-329ACN";
compatible = "luma,wrtq-329acn";
aliases {
// TODO: Verify if the ethernet0 alias is needed
ethernet0 = &gmac;
};
i2c-gpio {
compatible = "i2c-gpio";
sda-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
-1
View File
@@ -392,7 +392,6 @@ define Device/devolo_magic-2-wifi-next
IMAGE_SIZE := 26624k
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata
DEFAULT := n
endef
TARGET_DEVICES += devolo_magic-2-wifi-next
@@ -314,7 +314,7 @@
};
};
stp: stp@e100bb0 {
stp: gpio@e100bb0 {
#gpio-cells = <2>;
compatible = "lantiq,gpio-stp-xway";
gpio-controller;
@@ -354,7 +354,7 @@
};
};
stp: stp@e100bb0 {
stp: gpio@e100bb0 {
status = "disabled";
compatible = "lantiq,gpio-stp-xway";
reg = <0xe100bb0 0x40>;
@@ -2,6 +2,7 @@ set_preinit_iface() {
case $(board_name) in
bazis,ax3000wm|\
cudy,m3000-v1|\
cudy,m3000-v2-yt8821|\
cudy,tr3000-256mb-v1|\
cudy,tr3000-v1|\
cudy,tr3000-v1-ubootmod|\
@@ -2,106 +2,15 @@
/dts-v1/;
#include "mt7981b.dtsi"
#include "mt7981b-cudy-m3000.dtsi"
/ {
model = "Cudy M3000 v1";
model = "Cudy M3000 v1/v2";
compatible = "cudy,m3000-v1", "mediatek,mt7981";
aliases {
label-mac-device = &gmac0;
led-boot = &led_status;
led-failsafe = &led_status;
led-running = &led_status;
led-upgrade = &led_status;
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
gpio-keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&pio 1 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&pio 0 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};
};
leds {
compatible = "gpio-leds";
led_status: internet-white {
function = LED_FUNCTION_WAN_ONLINE;
color = <LED_COLOR_ID_WHITE>;
gpios = <&pio 10 GPIO_ACTIVE_LOW>;
};
internet-red {
function = LED_FUNCTION_WAN_ONLINE;
color = <LED_COLOR_ID_RED>;
gpios = <&pio 4 GPIO_ACTIVE_LOW>;
};
wan {
function = LED_FUNCTION_WAN;
color = <LED_COLOR_ID_GREEN>;
gpios = <&pio 5 GPIO_ACTIVE_LOW>;
};
lan {
function = LED_FUNCTION_LAN;
color = <LED_COLOR_ID_GREEN>;
gpios = <&pio 9 GPIO_ACTIVE_LOW>;
};
};
};
&uart0 {
status = "okay";
};
&watchdog {
status = "okay";
};
&eth {
pinctrl-names = "default";
pinctrl-0 = <&mdio_pins>;
status = "okay";
gmac0: mac@0 {
compatible = "mediatek,eth-mac";
reg = <0>;
phy-mode = "2500base-x";
phy-handle = <&rtl8221b_phy>;
nvmem-cell-names = "mac-address";
nvmem-cells = <&macaddr_bdinfo_de00 0>;
};
gmac1: mac@1 {
compatible = "mediatek,eth-mac";
reg = <1>;
phy-mode = "gmii";
phy-handle = <&int_gbe_phy>;
nvmem-cell-names = "mac-address";
nvmem-cells = <&macaddr_bdinfo_de00 1>;
};
};
&mdio_bus {
rtl8221b_phy: ethernet-phy@1 {
wan_phy: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <1>;
reset-assert-us = <100000>;
@@ -111,100 +20,3 @@
interrupt-parent = <&pio>;
};
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_flash_pins>;
status = "okay";
spi_nand: spi_nand@0 {
compatible = "spi-nand";
reg = <0>;
spi-max-frequency = <52000000>;
spi-tx-bus-width = <4>;
spi-rx-bus-width = <4>;
mediatek,nmbm;
mediatek,bmt-max-ratio = <1>;
mediatek,bmt-max-reserved-blocks = <64>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "BL2";
reg = <0x0000000 0x0100000>;
read-only;
};
partition@100000 {
label = "u-boot-env";
reg = <0x0100000 0x0080000>;
};
factory: partition@180000 {
label = "Factory";
reg = <0x0180000 0x0200000>;
read-only;
};
bdinfo: partition@380000 {
label = "bdinfo";
reg = <0x0380000 0x0040000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_bdinfo_de00: macaddr@de00 {
#nvmem-cell-cells = <1>;
compatible = "mac-base";
reg = <0xde00 0x6>;
};
};
};
partition@3c0000 {
label = "FIP";
reg = <0x03c0000 0x0200000>;
read-only;
};
partition@5c0000 {
label = "ubi";
reg = <0x05c0000 0x4000000>;
};
};
};
};
&pio {
spi0_flash_pins: spi0-pins {
mux {
function = "spi";
groups = "spi0", "spi0_wp_hold";
};
conf-pu {
pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
drive-strength = <MTK_DRIVE_8mA>;
bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
};
conf-pd {
pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
drive-strength = <MTK_DRIVE_8mA>;
bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
};
};
};
&wifi {
status = "okay";
mediatek,mtd-eeprom = <&factory 0x0>;
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/dts-v1/;
#include "mt7981b-cudy-m3000.dtsi"
/ {
model = "Cudy M3000 v2 with Motorcomm YT8821";
compatible = "cudy,m3000-v2-yt8821", "mediatek,mt7981";
};
&mdio_bus {
wan_phy: ethernet-phy@1 {
compatible = "ethernet-phy-id4f51.ea19";
reg = <1>;
reset-assert-us = <100000>;
reset-deassert-us = <100000>;
reset-gpios = <&pio 39 GPIO_ACTIVE_LOW>;
interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
interrupt-parent = <&pio>;
};
};
@@ -0,0 +1,195 @@
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/dts-v1/;
#include "mt7981b.dtsi"
/ {
aliases {
label-mac-device = &gmac0;
led-boot = &led_status;
led-failsafe = &led_status;
led-running = &led_status;
led-upgrade = &led_status;
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
gpio-keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&pio 1 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&pio 0 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};
};
leds {
compatible = "gpio-leds";
led_status: internet-white {
function = LED_FUNCTION_WAN_ONLINE;
color = <LED_COLOR_ID_WHITE>;
gpios = <&pio 10 GPIO_ACTIVE_LOW>;
};
internet-red {
function = LED_FUNCTION_WAN_ONLINE;
color = <LED_COLOR_ID_RED>;
gpios = <&pio 4 GPIO_ACTIVE_LOW>;
};
wan {
function = LED_FUNCTION_WAN;
color = <LED_COLOR_ID_GREEN>;
gpios = <&pio 5 GPIO_ACTIVE_LOW>;
};
lan {
function = LED_FUNCTION_LAN;
color = <LED_COLOR_ID_GREEN>;
gpios = <&pio 9 GPIO_ACTIVE_LOW>;
};
};
};
&uart0 {
status = "okay";
};
&watchdog {
status = "okay";
};
&eth {
pinctrl-names = "default";
pinctrl-0 = <&mdio_pins>;
status = "okay";
gmac0: mac@0 {
compatible = "mediatek,eth-mac";
reg = <0>;
phy-mode = "2500base-x";
phy-handle = <&wan_phy>;
nvmem-cell-names = "mac-address";
nvmem-cells = <&macaddr_bdinfo_de00 0>;
};
gmac1: mac@1 {
compatible = "mediatek,eth-mac";
reg = <1>;
phy-mode = "gmii";
phy-handle = <&int_gbe_phy>;
nvmem-cell-names = "mac-address";
nvmem-cells = <&macaddr_bdinfo_de00 1>;
};
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_flash_pins>;
status = "okay";
spi_nand: spi_nand@0 {
compatible = "spi-nand";
reg = <0>;
spi-max-frequency = <52000000>;
spi-tx-bus-width = <4>;
spi-rx-bus-width = <4>;
mediatek,nmbm;
mediatek,bmt-max-ratio = <1>;
mediatek,bmt-max-reserved-blocks = <64>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "BL2";
reg = <0x0000000 0x0100000>;
read-only;
};
partition@100000 {
label = "u-boot-env";
reg = <0x0100000 0x0080000>;
};
factory: partition@180000 {
label = "Factory";
reg = <0x0180000 0x0200000>;
read-only;
};
bdinfo: partition@380000 {
label = "bdinfo";
reg = <0x0380000 0x0040000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_bdinfo_de00: macaddr@de00 {
#nvmem-cell-cells = <1>;
compatible = "mac-base";
reg = <0xde00 0x6>;
};
};
};
partition@3c0000 {
label = "FIP";
reg = <0x03c0000 0x0200000>;
read-only;
};
partition@5c0000 {
label = "ubi";
reg = <0x05c0000 0x4000000>;
};
};
};
};
&pio {
spi0_flash_pins: spi0-pins {
mux {
function = "spi";
groups = "spi0", "spi0_wp_hold";
};
conf-pu {
pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
drive-strength = <MTK_DRIVE_8mA>;
bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
};
conf-pd {
pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
drive-strength = <MTK_DRIVE_8mA>;
bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
};
};
};
&wifi {
status = "okay";
mediatek,mtd-eeprom = <&factory 0x0>;
};
@@ -27,7 +27,7 @@
};
memory@40000000 {
reg = <0x0 0x40000000 0x0 0x40000000>;
reg = <0x0 0x40000000 0x0 0x20000000>;
device_type = "memory";
};
@@ -69,6 +69,12 @@
linux,code = <KEY_WPS_BUTTON>;
gpios = <&pio 14 GPIO_ACTIVE_LOW>;
};
wifi {
label = "wlan";
linux,code = <KEY_WLAN>;
gpios = <&pio 34 GPIO_ACTIVE_LOW>;
};
};
gpio-leds {
@@ -121,7 +127,7 @@
gpios = <&pio 68 GPIO_ACTIVE_HIGH>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_USB;
};
};
};
};
@@ -148,7 +154,6 @@
spi_nand: spi_nand@0 {
compatible = "spi-nand";
reg = <0>;
spi-cal-addr = /bits/ 32 <0x0 0x0 0x0 0x0 0x0>;
@@ -156,7 +161,7 @@
spi-cal-data = /bits/ 8 <0x53 0x50 0x49 0x4E 0x41 0x4E 0x44>;
spi-cal-datalen = <7>;
spi-cal-enable;
spi-cal-mode = "read-data";
spi-cal-mode = "read-data";
spi-max-frequency = <52000000>;
spi-rx-bus-width = <4>;
@@ -240,7 +245,7 @@
reset-gpios = <&pio 3 GPIO_ACTIVE_LOW>;
reset-assert-us = <100000>;
reset-deassert-us = <100000>;
reset-deassert-us = <221000>;
};
};
@@ -323,8 +328,8 @@
&pio {
button_pins: button-pins {
pins = "GPIO_RESET", "GPIO_WPS";
bias-disable; /* bias-disable */
pins = "GPIO_RESET", "GPIO_WPS", "SPI2_MISO";
bias-disable;
};
mdio0_pins: mdio0-pins {
@@ -361,11 +366,11 @@
};
enable-usb-power {
gpio-hog;
gpios = <32 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "USB power";
};
gpio-hog;
gpios = <32 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "USB power";
};
};
&ssusb1 {
@@ -255,7 +255,7 @@ static struct phy_driver an8855_driver[] = {
module_phy_driver(an8855_driver);
static struct mdio_device_id __maybe_unused an8855_tbl[] = {
static const struct mdio_device_id __maybe_unused an8855_tbl[] = {
{ PHY_ID_MATCH_EXACT(AN8855_PHY_ID) },
{ }
};
@@ -1109,7 +1109,7 @@ static struct phy_driver Airoha_driver[] = {
module_phy_driver(Airoha_driver);
static struct mdio_device_id __maybe_unused Airoha_tbl[] = {
static const struct mdio_device_id __maybe_unused Airoha_tbl[] = {
{ EN8801SC_PHY_ID, 0x0ffffff0 },
{ }
};
@@ -135,6 +135,7 @@ mediatek_setup_interfaces()
;;
bazis,ax3000wm|\
cudy,m3000-v1|\
cudy,m3000-v2-yt8821|\
cudy,tr3000-256mb-v1|\
cudy,tr3000-v1|\
cudy,tr3000-v1-ubootmod|\
@@ -83,6 +83,7 @@ case "$board" in
cudy,ap3000wall-v1|\
cudy,ap3000-v1|\
cudy,m3000-v1|\
cudy,m3000-v2-yt8821|\
cudy,re3000-v1|\
cudy,tr3000-256mb-v1|\
cudy,tr3000-v1|\
+23 -1
View File
@@ -1190,7 +1190,7 @@ TARGET_DEVICES += cudy_ap3000-v1
define Device/cudy_m3000-v1
DEVICE_VENDOR := Cudy
DEVICE_MODEL := M3000
DEVICE_VARIANT := v1
DEVICE_VARIANT := v1/v2
DEVICE_DTS := mt7981b-cudy-m3000-v1
DEVICE_DTS_DIR := ../dts
SUPPORTED_DEVICES += R37
@@ -1209,6 +1209,28 @@ define Device/cudy_m3000-v1
endef
TARGET_DEVICES += cudy_m3000-v1
define Device/cudy_m3000-v2-yt8821
DEVICE_VENDOR := Cudy
DEVICE_MODEL := M3000
DEVICE_VARIANT := v2 with Motorcomm YT8821
DEVICE_DTS := mt7981b-cudy-m3000-v2-yt8821
DEVICE_DTS_DIR := ../dts
SUPPORTED_DEVICES += R37
DEVICE_DTS_LOADADDR := 0x44000000
BLOCKSIZE := 128k
PAGESIZE := 2048
IMAGE_SIZE := 65536k
KERNEL_IN_UBI := 1
KERNEL := kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
KERNEL_INITRAMFS := kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
DEVICE_PACKAGES := kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware kmod-phy-motorcomm
endef
TARGET_DEVICES += cudy_m3000-v2-yt8821
define Device/cudy_re3000-v1
DEVICE_VENDOR := Cudy
DEVICE_MODEL := RE3000
@@ -1,14 +1,15 @@
From 1861c63ba7bb7f8a5145d4ceabcf346f274da61f Mon Sep 17 00:00:00 2001
From 2400b24dfecea9a628f63089bf7eeb9a43b91021 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Tue, 22 Apr 2025 15:24:30 +0200
Subject: [PATCH 28/32] arm64: dts: mediatek: mt7988: Add xsphy for
ssusb0/pcie2
Subject: [PATCH 28/32] arm64: dts: mediatek: mt7988: Add xsphy for ssusb0/pcie2
First usb and third pcie controller on mt7988 need a xs-phy to work
properly.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20250422132438.15735-8-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 36 +++++++++++++++++++++++
1 file changed, 36 insertions(+)
@@ -1,4 +1,4 @@
From d326d21a44fbc48663840316c35524002029fbb1 Mon Sep 17 00:00:00 2001
From bb5872c4b6cb0a8687b424b9970b2c3cca2ededd Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Tue, 22 Apr 2025 15:24:31 +0200
Subject: [PATCH 29/32] arm64: dts: mediatek: mt7988a-bpi-r4: enable xsphy
@@ -7,6 +7,8 @@ Enable XS-Phy on Bananapi R4 for pcie2.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20250422132438.15735-9-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 4 ++++
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 2 +-
@@ -1,112 +0,0 @@
From patchwork Sun May 11 14:19:20 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <linux@fw-web.de>
X-Patchwork-Id: 14084127
From: Frank Wunderlich <linux@fw-web.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 04/14] arm64: dts: mediatek: mt7988: add spi controllers
Date: Sun, 11 May 2025 16:19:20 +0200
Message-ID: <20250511141942.10284-5-linux@fw-web.de>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250511141942.10284-1-linux@fw-web.de>
References: <20250511141942.10284-1-linux@fw-web.de>
MIME-Version: 1.0
X-Mail-ID: 5110cbfc-28b8-49e4-b9da-560d0bd630a5
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
From: Frank Wunderlich <frank-w@public-files.de>
Add SPI controllers for mt7988.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 45 +++++++++++++++++++++++
1 file changed, 45 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -311,6 +311,51 @@
status = "disabled";
};
+ spi0: spi@11007000 {
+ compatible = "mediatek,mt7988-spi-quad", "mediatek,spi-ipm";
+ reg = <0 0x11007000 0 0x100>;
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&topckgen CLK_TOP_MPLL_D2>,
+ <&topckgen CLK_TOP_SPI_SEL>,
+ <&infracfg CLK_INFRA_104M_SPI0>,
+ <&infracfg CLK_INFRA_66M_SPI0_HCK>;
+ clock-names = "parent-clk", "sel-clk", "spi-clk",
+ "hclk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi1: spi@11008000 {
+ compatible = "mediatek,mt7988-spi-single", "mediatek,spi-ipm";
+ reg = <0 0x11008000 0 0x100>;
+ interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&topckgen CLK_TOP_MPLL_D2>,
+ <&topckgen CLK_TOP_SPIM_MST_SEL>,
+ <&infracfg CLK_INFRA_104M_SPI1>,
+ <&infracfg CLK_INFRA_66M_SPI1_HCK>;
+ clock-names = "parent-clk", "sel-clk", "spi-clk",
+ "hclk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi2: spi@11009000 {
+ compatible = "mediatek,mt7988-spi-quad", "mediatek,spi-ipm";
+ reg = <0 0x11009000 0 0x100>;
+ interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&topckgen CLK_TOP_MPLL_D2>,
+ <&topckgen CLK_TOP_SPI_SEL>,
+ <&infracfg CLK_INFRA_104M_SPI2_BCK>,
+ <&infracfg CLK_INFRA_66M_SPI2_HCK>;
+ clock-names = "parent-clk", "sel-clk", "spi-clk",
+ "hclk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
lvts: lvts@1100a000 {
compatible = "mediatek,mt7988-lvts-ap";
#thermal-sensor-cells = <1>;
@@ -0,0 +1,69 @@
From bf7c2ce439ca811dc1697b4bc19ab57bd8f13be3 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Fri, 16 May 2025 20:01:35 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988: add spi controllers
Add SPI controllers for mt7988.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Link: https://lore.kernel.org/r/20250516180147.10416-6-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 45 +++++++++++++++++++++++
1 file changed, 45 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -311,6 +311,51 @@
status = "disabled";
};
+ spi0: spi@11007000 {
+ compatible = "mediatek,mt7988-spi-quad", "mediatek,spi-ipm";
+ reg = <0 0x11007000 0 0x100>;
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&topckgen CLK_TOP_MPLL_D2>,
+ <&topckgen CLK_TOP_SPI_SEL>,
+ <&infracfg CLK_INFRA_104M_SPI0>,
+ <&infracfg CLK_INFRA_66M_SPI0_HCK>;
+ clock-names = "parent-clk", "sel-clk", "spi-clk",
+ "hclk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi1: spi@11008000 {
+ compatible = "mediatek,mt7988-spi-single", "mediatek,spi-ipm";
+ reg = <0 0x11008000 0 0x100>;
+ interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&topckgen CLK_TOP_MPLL_D2>,
+ <&topckgen CLK_TOP_SPIM_MST_SEL>,
+ <&infracfg CLK_INFRA_104M_SPI1>,
+ <&infracfg CLK_INFRA_66M_SPI1_HCK>;
+ clock-names = "parent-clk", "sel-clk", "spi-clk",
+ "hclk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi2: spi@11009000 {
+ compatible = "mediatek,mt7988-spi-quad", "mediatek,spi-ipm";
+ reg = <0 0x11009000 0 0x100>;
+ interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&topckgen CLK_TOP_MPLL_D2>,
+ <&topckgen CLK_TOP_SPI_SEL>,
+ <&infracfg CLK_INFRA_104M_SPI2_BCK>,
+ <&infracfg CLK_INFRA_66M_SPI2_HCK>;
+ clock-names = "parent-clk", "sel-clk", "spi-clk",
+ "hclk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
lvts: lvts@1100a000 {
compatible = "mediatek,mt7988-lvts-ap";
#thermal-sensor-cells = <1>;
@@ -1,133 +0,0 @@
From patchwork Sun May 11 14:19:21 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <linux@fw-web.de>
X-Patchwork-Id: 14084155
From: Frank Wunderlich <linux@fw-web.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 05/14] arm64: dts: mediatek: mt7988: move uart0 and spi1
pins to soc dtsi
Date: Sun, 11 May 2025 16:19:21 +0200
Message-ID: <20250511141942.10284-6-linux@fw-web.de>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250511141942.10284-1-linux@fw-web.de>
References: <20250511141942.10284-1-linux@fw-web.de>
MIME-Version: 1.0
X-Mail-ID: 730e5bd4-362e-4c00-a35e-0ec77e8f4691
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
From: Frank Wunderlich <frank-w@public-files.de>
In order to use uart0 or spi1 there is only 1 possible pin definition
so move them to soc dtsi to reuse them in other boards and avoiding
conflict if defined twice.
Suggested-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
.../dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 14 --------------
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 18 ++++++++++++++++++
2 files changed, 18 insertions(+), 14 deletions(-)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -328,13 +328,6 @@
};
};
- uart0_pins: uart0-pins {
- mux {
- function = "uart";
- groups = "uart0";
- };
- };
-
snfi_pins: snfi-pins {
mux {
function = "flash";
@@ -356,13 +349,6 @@
};
};
- spi1_pins: spi1-pins {
- mux {
- function = "spi";
- groups = "spi1";
- };
- };
-
spi2_pins: spi2-pins {
mux {
function = "spi";
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -209,6 +209,20 @@
"pcie_wake_n3_0";
};
};
+
+ spi1_pins: spi1-pins {
+ mux {
+ function = "spi";
+ groups = "spi1";
+ };
+ };
+
+ uart0_pins: uart0-pins {
+ mux {
+ function = "uart";
+ groups = "uart0";
+ };
+ };
};
pwm: pwm@10048000 {
@@ -244,6 +258,8 @@
clocks = <&topckgen CLK_TOP_UART_SEL>,
<&infracfg CLK_INFRA_52M_UART0_CK>;
clock-names = "baud", "bus";
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins>;
status = "disabled";
};
@@ -338,6 +354,8 @@
"hclk";
#address-cells = <1>;
#size-cells = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi1_pins>;
status = "disabled";
};
@@ -0,0 +1,90 @@
From b9ebd166b006f77cef4530b4bf4a291a112da4f2 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Fri, 16 May 2025 20:01:36 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988: move uart0 and spi1 pins to soc
dtsi
In order to use uart0 or spi1 there is only 1 possible pin definition
so move them to soc dtsi to reuse them in other boards and avoiding
conflict if defined twice.
Suggested-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Link: https://lore.kernel.org/r/20250516180147.10416-7-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
.../dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 14 --------------
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 18 ++++++++++++++++++
2 files changed, 18 insertions(+), 14 deletions(-)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -328,13 +328,6 @@
};
};
- uart0_pins: uart0-pins {
- mux {
- function = "uart";
- groups = "uart0";
- };
- };
-
snfi_pins: snfi-pins {
mux {
function = "flash";
@@ -356,13 +349,6 @@
};
};
- spi1_pins: spi1-pins {
- mux {
- function = "spi";
- groups = "spi1";
- };
- };
-
spi2_pins: spi2-pins {
mux {
function = "spi";
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -209,6 +209,20 @@
"pcie_wake_n3_0";
};
};
+
+ spi1_pins: spi1-pins {
+ mux {
+ function = "spi";
+ groups = "spi1";
+ };
+ };
+
+ uart0_pins: uart0-pins {
+ mux {
+ function = "uart";
+ groups = "uart0";
+ };
+ };
};
pwm: pwm@10048000 {
@@ -244,6 +258,8 @@
clocks = <&topckgen CLK_TOP_UART_SEL>,
<&infracfg CLK_INFRA_52M_UART0_CK>;
clock-names = "baud", "bus";
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins>;
status = "disabled";
};
@@ -338,6 +354,8 @@
"hclk";
#address-cells = <1>;
#size-cells = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi1_pins>;
status = "disabled";
};
@@ -1,128 +0,0 @@
From patchwork Sun May 11 14:19:22 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <linux@fw-web.de>
X-Patchwork-Id: 14084106
From: Frank Wunderlich <linux@fw-web.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 06/14] arm64: dts: mediatek: mt7988: add cci node
Date: Sun, 11 May 2025 16:19:22 +0200
Message-ID: <20250511141942.10284-7-linux@fw-web.de>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250511141942.10284-1-linux@fw-web.de>
References: <20250511141942.10284-1-linux@fw-web.de>
MIME-Version: 1.0
X-Mail-ID: beeb7784-23fa-410f-9e58-cc51116d869e
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
From: Frank Wunderlich <frank-w@public-files.de>
Add cci devicetree node for cpu frequency scaling.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 33 +++++++++++++++++++++++
1 file changed, 33 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -12,6 +12,35 @@
#address-cells = <2>;
#size-cells = <2>;
+ cci: cci {
+ compatible = "mediatek,mt8183-cci";
+ clocks = <&mcusys CLK_MCU_BUS_DIV_SEL>,
+ <&topckgen CLK_TOP_XTAL>;
+ clock-names = "cci", "intermediate";
+ operating-points-v2 = <&cci_opp>;
+ };
+
+ cci_opp: opp-table-cci {
+ compatible = "operating-points-v2";
+ opp-shared;
+ opp-480000000 {
+ opp-hz = /bits/ 64 <480000000>;
+ opp-microvolt = <850000>;
+ };
+ opp-660000000 {
+ opp-hz = /bits/ 64 <660000000>;
+ opp-microvolt = <850000>;
+ };
+ opp-900000000 {
+ opp-hz = /bits/ 64 <900000000>;
+ opp-microvolt = <850000>;
+ };
+ opp-1080000000 {
+ opp-hz = /bits/ 64 <1080000000>;
+ opp-microvolt = <900000>;
+ };
+ };
+
cpus {
#address-cells = <1>;
#size-cells = <0>;
@@ -25,6 +54,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cpu1: cpu@1 {
@@ -36,6 +66,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cpu2: cpu@2 {
@@ -47,6 +78,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cpu3: cpu@3 {
@@ -58,6 +90,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cluster0_opp: opp-table-0 {
@@ -0,0 +1,86 @@
From 0cbdb6d04689f8c05074e348c8e0a42b229ef9a3 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Sun, 6 Jul 2025 15:22:03 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988: add cci node
Add cci devicetree node for cpu frequency scaling.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20250706132213.20412-9-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 33 +++++++++++++++++++++++
1 file changed, 33 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -12,6 +12,35 @@
#address-cells = <2>;
#size-cells = <2>;
+ cci: cci {
+ compatible = "mediatek,mt7988-cci", "mediatek,mt8183-cci";
+ clocks = <&mcusys CLK_MCU_BUS_DIV_SEL>,
+ <&topckgen CLK_TOP_XTAL>;
+ clock-names = "cci", "intermediate";
+ operating-points-v2 = <&cci_opp>;
+ };
+
+ cci_opp: opp-table-cci {
+ compatible = "operating-points-v2";
+ opp-shared;
+ opp-480000000 {
+ opp-hz = /bits/ 64 <480000000>;
+ opp-microvolt = <850000>;
+ };
+ opp-660000000 {
+ opp-hz = /bits/ 64 <660000000>;
+ opp-microvolt = <850000>;
+ };
+ opp-900000000 {
+ opp-hz = /bits/ 64 <900000000>;
+ opp-microvolt = <850000>;
+ };
+ opp-1080000000 {
+ opp-hz = /bits/ 64 <1080000000>;
+ opp-microvolt = <900000>;
+ };
+ };
+
cpus {
#address-cells = <1>;
#size-cells = <0>;
@@ -25,6 +54,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cpu1: cpu@1 {
@@ -36,6 +66,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cpu2: cpu@2 {
@@ -47,6 +78,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cpu3: cpu@3 {
@@ -58,6 +90,7 @@
<&topckgen CLK_TOP_XTAL>;
clock-names = "cpu", "intermediate";
operating-points-v2 = <&cluster0_opp>;
+ mediatek,cci = <&cci>;
};
cluster0_opp: opp-table-0 {
@@ -1,85 +0,0 @@
From patchwork Sun May 11 14:19:23 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <linux@fw-web.de>
X-Patchwork-Id: 14084124
From: Frank Wunderlich <linux@fw-web.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 07/14] arm64: dts: mediatek: mt7988: add phy calibration
efuse subnodes
Date: Sun, 11 May 2025 16:19:23 +0200
Message-ID: <20250511141942.10284-8-linux@fw-web.de>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250511141942.10284-1-linux@fw-web.de>
References: <20250511141942.10284-1-linux@fw-web.de>
MIME-Version: 1.0
X-Mail-ID: b7327c0d-db13-43b6-8ec5-709b71d19c3b
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
From: Frank Wunderlich <frank-w@public-files.de>
MT7988 contains buildin mt753x switch which needs calibration data from
efuse.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -702,6 +702,22 @@
lvts_calibration: calib@918 {
reg = <0x918 0x28>;
};
+
+ phy_calibration_p0: calib@940 {
+ reg = <0x940 0x10>;
+ };
+
+ phy_calibration_p1: calib@954 {
+ reg = <0x954 0x10>;
+ };
+
+ phy_calibration_p2: calib@968 {
+ reg = <0x968 0x10>;
+ };
+
+ phy_calibration_p3: calib@97c {
+ reg = <0x97c 0x10>;
+ };
};
clock-controller@15000000 {
@@ -0,0 +1,42 @@
From e4950b016c727feb0c39ad12cfcb6182c9ef3814 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Fri, 16 May 2025 20:01:38 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988: add phy calibration efuse
subnodes
MT7988 contains buildin mt753x switch which needs calibration data from
efuse.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Link: https://lore.kernel.org/r/20250516180147.10416-9-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt7988a.dtsi | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
@@ -702,6 +702,22 @@
lvts_calibration: calib@918 {
reg = <0x918 0x28>;
};
+
+ phy_calibration_p0: calib@940 {
+ reg = <0x940 0x10>;
+ };
+
+ phy_calibration_p1: calib@954 {
+ reg = <0x954 0x10>;
+ };
+
+ phy_calibration_p2: calib@968 {
+ reg = <0x968 0x10>;
+ };
+
+ phy_calibration_p3: calib@97c {
+ reg = <0x97c 0x10>;
+ };
};
clock-controller@15000000 {
@@ -1,98 +0,0 @@
From patchwork Sun May 11 14:26:50 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <frank-w@public-files.de>
X-Patchwork-Id: 14084133
From: Frank Wunderlich <frank-w@public-files.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 10/14] arm64: dts: mediatek: mt7988a-bpi-r4: Add fan and
coolingmaps
Date: Sun, 11 May 2025 16:26:50 +0200
Message-ID: <20250511142655.11007-1-frank-w@public-files.de>
X-Mailer: git-send-email 2.43.0
MIME-Version: 1.0
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
Add Fan and cooling maps for Bananpi-R4 board.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
.../dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -12,6 +12,15 @@
stdout-path = "serial0:115200n8";
};
+ fan: pwm-fan {
+ compatible = "pwm-fan";
+ /* cooling level (0, 1, 2, 3) : (0% duty, 30% duty, 50% duty, 100% duty) */
+ cooling-levels = <0 80 128 255>;
+ #cooling-cells = <2>;
+ pwms = <&pwm 0 50000>;
+ status = "okay";
+ };
+
reg_1p8v: regulator-1p8v {
compatible = "regulator-fixed";
regulator-name = "fixed-1.8V";
@@ -73,6 +82,26 @@
type = "active";
};
};
+
+ cooling-maps {
+ map-cpu-active-high {
+ /* active: set fan to cooling level 2 */
+ cooling-device = <&fan 3 3>;
+ trip = <&cpu_trip_active_high>;
+ };
+
+ map-cpu-active-med {
+ /* active: set fan to cooling level 1 */
+ cooling-device = <&fan 2 2>;
+ trip = <&cpu_trip_active_med>;
+ };
+
+ map-cpu-active-low {
+ /* active: set fan to cooling level 0 */
+ cooling-device = <&fan 1 1>;
+ trip = <&cpu_trip_active_low>;
+ };
+ };
};
&i2c0 {
@@ -0,0 +1,59 @@
From 0f63e96e2ab422d1d35def1da75d3df299bf503e Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Fri, 16 May 2025 20:01:41 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988a-bpi-r4: Add fan and coolingmaps
Add Fan and cooling maps for Bananapi-R4 board.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Link: https://lore.kernel.org/r/20250516180147.10416-12-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
.../dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -12,6 +12,15 @@
stdout-path = "serial0:115200n8";
};
+ fan: pwm-fan {
+ compatible = "pwm-fan";
+ /* cooling level (0, 1, 2, 3) : (0% duty, 30% duty, 50% duty, 100% duty) */
+ cooling-levels = <0 80 128 255>;
+ #cooling-cells = <2>;
+ pwms = <&pwm 0 50000>;
+ status = "okay";
+ };
+
reg_1p8v: regulator-1p8v {
compatible = "regulator-fixed";
regulator-name = "fixed-1.8V";
@@ -73,6 +82,26 @@
type = "active";
};
};
+
+ cooling-maps {
+ map-cpu-active-high {
+ /* active: set fan to cooling level 2 */
+ cooling-device = <&fan 3 3>;
+ trip = <&cpu_trip_active_high>;
+ };
+
+ map-cpu-active-med {
+ /* active: set fan to cooling level 1 */
+ cooling-device = <&fan 2 2>;
+ trip = <&cpu_trip_active_med>;
+ };
+
+ map-cpu-active-low {
+ /* active: set fan to cooling level 0 */
+ cooling-device = <&fan 1 1>;
+ trip = <&cpu_trip_active_low>;
+ };
+ };
};
&i2c0 {
@@ -1,99 +0,0 @@
From patchwork Sun May 11 14:26:51 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <frank-w@public-files.de>
X-Patchwork-Id: 14084136
Received: from frank-u24 ([194.15.84.99]) by mail.gmx.net (mrgmx104
[212.227.17.168]) with ESMTPSA (Nemesis) id 1MD9XF-1u5YvB0cIj-00FOt5; Sun, 11
May 2025 16:27:04 +0200
From: Frank Wunderlich <frank-w@public-files.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 11/14] arm64: dts: mediatek: mt7988a-bpi-r4: configure
spi-nodes
Date: Sun, 11 May 2025 16:26:51 +0200
Message-ID: <20250511142655.11007-2-frank-w@public-files.de>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250511142655.11007-1-frank-w@public-files.de>
References: <20250511142655.11007-1-frank-w@public-files.de>
MIME-Version: 1.0
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
Configure and enable SPI nodes on Bananapi R4 board.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
.../dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -401,6 +401,38 @@
status = "okay";
};
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_flash_pins>;
+ status = "okay";
+
+ spi_nand: flash@0 {
+ compatible = "spi-nand";
+ reg = <0>;
+ spi-max-frequency = <52000000>;
+ spi-tx-bus-width = <4>;
+ spi-rx-bus-width = <4>;
+ };
+};
+
+&spi1 {
+ status = "okay";
+};
+
+&spi_nand {
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "bl2";
+ reg = <0x0 0x200000>;
+ read-only;
+ };
+ };
+};
+
&ssusb1 {
status = "okay";
};
@@ -0,0 +1,55 @@
From 6b7642e9d095d33d8034b8b396a2de9e5ecb25a7 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Fri, 16 May 2025 20:01:42 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988a-bpi-r4: configure spi-nodes
Configure and enable SPI nodes on Bananapi R4 board.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Link: https://lore.kernel.org/r/20250516180147.10416-13-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
.../dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -401,6 +401,38 @@
status = "okay";
};
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_flash_pins>;
+ status = "okay";
+
+ spi_nand: flash@0 {
+ compatible = "spi-nand";
+ reg = <0>;
+ spi-max-frequency = <52000000>;
+ spi-tx-bus-width = <4>;
+ spi-rx-bus-width = <4>;
+ };
+};
+
+&spi1 {
+ status = "okay";
+};
+
+&spi_nand {
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "bl2";
+ reg = <0x0 0x200000>;
+ read-only;
+ };
+ };
+};
+
&ssusb1 {
status = "okay";
};
@@ -1,68 +0,0 @@
From patchwork Sun May 11 14:26:52 2025
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Frank Wunderlich <frank-w@public-files.de>
X-Patchwork-Id: 14084137
From: Frank Wunderlich <frank-w@public-files.de>
To: Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Subject: [PATCH v1 12/14] arm64: dts: mediatek: mt7988a-bpi-r4: add
proc-supply for cci
Date: Sun, 11 May 2025 16:26:52 +0200
Message-ID: <20250511142655.11007-3-frank-w@public-files.de>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <20250511142655.11007-1-frank-w@public-files.de>
References: <20250511142655.11007-1-frank-w@public-files.de>
MIME-Version: 1.0
X-BeenThere: linux-mediatek@lists.infradead.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: <linux-mediatek.lists.infradead.org>
List-Unsubscribe: <http://lists.infradead.org/mailman/options/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=unsubscribe>
List-Archive: <http://lists.infradead.org/pipermail/linux-mediatek/>
List-Post: <mailto:linux-mediatek@lists.infradead.org>
List-Help: <mailto:linux-mediatek-request@lists.infradead.org?subject=help>
List-Subscribe: <http://lists.infradead.org/mailman/listinfo/linux-mediatek>,
<mailto:linux-mediatek-request@lists.infradead.org?subject=subscribe>
Cc: devicetree@vger.kernel.org, Landen Chao <Landen.Chao@mediatek.com>,
=?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com>,
netdev@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Daniel Golle <daniel@makrotopia.org>, linux-kernel@vger.kernel.org,
DENG Qingfang <dqfext@gmail.com>, linux-mediatek@lists.infradead.org,
Lorenzo Bianconi <lorenzo@kernel.org>, linux-arm-kernel@lists.infradead.org,
Felix Fietkau <nbd@nbd.name>
Sender: "Linux-mediatek" <linux-mediatek-bounces@lists.infradead.org>
Errors-To:
linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org
CCI requires proc-supply. Add it on board level.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 4 ++++
1 file changed, 4 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -40,6 +40,10 @@
};
};
+&cci {
+ proc-supply = <&rt5190_buck3>;
+};
+
&cpu0 {
proc-supply = <&rt5190_buck3>;
};
@@ -0,0 +1,28 @@
From b5a4ad957114b59a74b3e3f598ae0785dd86cd32 Mon Sep 17 00:00:00 2001
From: Frank Wunderlich <frank-w@public-files.de>
Date: Sun, 6 Jul 2025 15:22:06 +0200
Subject: [PATCH] arm64: dts: mediatek: mt7988a-bpi-r4: add proc-supply for cci
CCI requires proc-supply. Add it on board level.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20250706132213.20412-12-linux@fw-web.de
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi | 4 ++++
1 file changed, 4 insertions(+)
--- a/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dtsi
@@ -40,6 +40,10 @@
};
};
+&cci {
+ proc-supply = <&rt5190_buck3>;
+};
+
&cpu0 {
proc-supply = <&rt5190_buck3>;
};
@@ -386,7 +386,7 @@ Signed-off-by: Sky Huang <skylake.huang@mediatek.com>
+
+module_phy_driver(mtk_2p5gephy_driver);
+
+static struct mdio_device_id __maybe_unused mtk_2p5ge_phy_tbl[] = {
+static const struct mdio_device_id __maybe_unused mtk_2p5ge_phy_tbl[] = {
+ { PHY_ID_MATCH_VENDOR(0x00339c00) },
+ { }
+};
@@ -58,7 +58,7 @@
<&sgpio_out 0 3 GPIO_ACTIVE_HIGH>;
settle-time-us = <100>;
i2c_sfp0: i2c@0 {
i2c_sfp2: i2c@0 {
reg = <0x0>;
};
@@ -66,7 +66,7 @@
reg = <0x1>;
};
i2c_sfp2: i2c@2 {
i2c_sfp0: i2c@2 {
reg = <0x2>;
};
@@ -585,6 +585,7 @@
phy-mode = "qsgmii";
phys = <&serdes 0>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan4";
};
port1: port@1 {
@@ -593,6 +594,7 @@
phy-mode = "qsgmii";
phys = <&serdes 0>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan3";
};
port2: port@2 {
@@ -601,6 +603,7 @@
phy-mode = "qsgmii";
phys = <&serdes 0>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan2";
};
port3: port@3 {
@@ -609,6 +612,7 @@
phy-mode = "qsgmii";
phys = <&serdes 0>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan1";
};
port4: port@4 {
@@ -617,6 +621,7 @@
phy-mode = "qsgmii";
phys = <&serdes 1>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan8";
};
port5: port@5 {
@@ -625,6 +630,7 @@
phy-mode = "qsgmii";
phys = <&serdes 1>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan7";
};
port6: port@6 {
@@ -633,6 +639,7 @@
phy-mode = "qsgmii";
phys = <&serdes 1>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan6";
};
port7: port@7 {
@@ -641,6 +648,7 @@
phy-mode = "qsgmii";
phys = <&serdes 1>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan5";
};
port8: port@8 {
@@ -649,6 +657,7 @@
phy-mode = "qsgmii";
phys = <&serdes 2>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan12";
};
port9: port@9 {
@@ -657,6 +666,7 @@
phy-mode = "qsgmii";
phys = <&serdes 2>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan11";
};
port10: port@10 {
@@ -665,6 +675,7 @@
phy-mode = "qsgmii";
phys = <&serdes 2>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan10";
};
port11: port@11 {
@@ -673,6 +684,7 @@
phy-mode = "qsgmii";
phys = <&serdes 2>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan9";
};
port12: port@12 {
@@ -681,6 +693,7 @@
phy-mode = "qsgmii";
phys = <&serdes 3>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan16";
};
port13: port@13 {
@@ -689,6 +702,7 @@
phy-mode = "qsgmii";
phys = <&serdes 3>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan15";
};
port14: port@14 {
@@ -697,6 +711,7 @@
phy-mode = "qsgmii";
phys = <&serdes 3>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan14";
};
port15: port@15 {
@@ -705,6 +720,7 @@
phy-mode = "qsgmii";
phys = <&serdes 3>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan13";
};
port16: port@16 {
@@ -713,6 +729,7 @@
phy-mode = "qsgmii";
phys = <&serdes 4>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan20";
};
port17: port@17 {
@@ -721,6 +738,7 @@
phy-mode = "qsgmii";
phys = <&serdes 4>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan19";
};
port18: port@18 {
@@ -729,6 +747,7 @@
phy-mode = "qsgmii";
phys = <&serdes 4>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan18";
};
port19: port@19 {
@@ -737,6 +756,7 @@
phy-mode = "qsgmii";
phys = <&serdes 4>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan17";
};
port20: port@20 {
@@ -745,6 +765,7 @@
phy-mode = "qsgmii";
phys = <&serdes 5>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan24";
};
port21: port@21 {
@@ -753,6 +774,7 @@
phy-mode = "qsgmii";
phys = <&serdes 5>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan23";
};
port22: port@22 {
@@ -761,6 +783,7 @@
phy-mode = "qsgmii";
phys = <&serdes 5>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan22";
};
port23: port@23 {
@@ -769,6 +792,7 @@
phy-mode = "qsgmii";
phys = <&serdes 5>;
microchip,bandwidth = <1000>;
openwrt,netdev-name = "lan21";
};
port24: port@24 {
@@ -779,6 +803,7 @@
managed = "in-band-status";
microchip,bandwidth = <10000>;
microchip,sd-sgpio = <24>;
openwrt,netdev-name = "sfp1";
};
port25: port@25 {
@@ -789,6 +814,7 @@
managed = "in-band-status";
microchip,bandwidth = <10000>;
microchip,sd-sgpio = <28>;
openwrt,netdev-name = "sfp2";
};
port26: port@26 {
@@ -799,6 +825,7 @@
managed = "in-band-status";
microchip,bandwidth = <10000>;
microchip,sd-sgpio = <32>;
openwrt,netdev-name = "sfp3";
};
port27: port@27 {
@@ -809,6 +836,7 @@
managed = "in-band-status";
microchip,bandwidth = <10000>;
microchip,sd-sgpio = <36>;
openwrt,netdev-name = "sfp4";
};
port29: port@29 {
@@ -817,6 +845,7 @@
phy-handle = <&phy3>;
phy-mode = "rgmii-id";
microchip,bandwidth = <1000>;
openwrt,netdev-name = "mgmt";
};
};
};
@@ -9,7 +9,7 @@ lan969x_setup_interfaces()
case "$board" in
microchip,ev23x71a|\
novarq,tactical-1000)
lan_list=$(ls -1 -v -d /sys/class/net/eth* | xargs -n1 basename | xargs)
lan_list=$(ls -1 -v -d /sys/class/net/eth* /sys/class/net/lan* /sys/class/net/sfp* /sys/class/net/mgmt* | xargs -n1 basename | xargs)
ucidef_set_interface_lan "$lan_list"
;;
*)
@@ -0,0 +1,15 @@
set_netdev_labels() {
local dir
local label
local netdev
for dir in /sys/class/net/*; do
[ -r "$dir/of_node/openwrt,netdev-name" ] || continue
read -r label < "$dir/of_node/openwrt,netdev-name"
netdev="${dir##*/}"
[ "$netdev" = "$label" ] && continue
ip link set "$netdev" name "$label"
done
}
boot_hook_add preinit_main set_netdev_labels
@@ -0,0 +1,26 @@
From fc6aa0e470e092873eddb213d996a8beee86bf4d Mon Sep 17 00:00:00 2001
From: Robert Marko <robert.marko@sartura.hr>
Date: Mon, 10 Nov 2025 13:42:53 +0100
Subject: [PATCH] net: sparx5/lan969x: populate netdev of_node
Populate of_node for the port netdevs, to make the individual ports
of_nodes available in sysfs.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Link: https://patch.msgid.link/20251110124342.199216-1-robert.marko@sartura.hr
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
@@ -396,6 +396,8 @@ static int sparx5_create_port(struct spa
spx5_port->phylink = phylink;
+ spx5_port->ndev->dev.of_node = spx5_port->of_node;
+
return 0;
}
@@ -0,0 +1,38 @@
From 6c28aa8dfdf24f554d4c5d4ff7d723a95360d94a Mon Sep 17 00:00:00 2001
From: Daniel Machon <daniel.machon@microchip.com>
Date: Tue, 10 Feb 2026 14:44:01 +0100
Subject: [PATCH] net: sparx5/lan969x: fix DWRR cost max to match hardware
register width
DWRR (Deficit Weighted Round Robin) scheduling distributes bandwidth
across traffic classes based on per-queue cost values, where lower cost
means higher bandwidth share.
The SPX5_DWRR_COST_MAX constant is 63 (6 bits) but the hardware
register field HSCH_DWRR_ENTRY_DWRR_COST is GENMASK(24, 20), only
5 bits wide (max 31). This causes sparx5_weight_to_hw_cost() to
compute cost values that silently overflow via FIELD_PREP, resulting
in incorrect scheduling weights.
Set SPX5_DWRR_COST_MAX to 31 to match the hardware register width.
Fixes: 211225428d65 ("net: microchip: sparx5: add support for offloading ets qdisc")
Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260210-sparx5-fix-dwrr-cost-max-v1-1-58fbdbc25652@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/ethernet/microchip/sparx5/sparx5_qos.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_qos.h
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_qos.h
@@ -35,7 +35,7 @@
#define SPX5_SE_BURST_UNIT 4096
/* Dwrr */
-#define SPX5_DWRR_COST_MAX 63
+#define SPX5_DWRR_COST_MAX 31
struct sparx5_shaper {
u32 mode;
+1
View File
@@ -89,6 +89,7 @@ CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_HAS_ASID=y
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPU_PABRT_V7=y
CONFIG_CPU_PJ4B=y
@@ -0,0 +1,21 @@
// SPDX-License-Identifier: MIT, GPL-2.0 or later
/* Copyright (c) 2025, Yang Xiwen <forbidden405@outlook.com> */
/dts-v1/;
#include "ipq6018-tplink-eap6xx-outdoor.dtsi"
/ {
model = "TP-Link EAP623-Outdoor HD V1.0";
compatible = "tplink,eap623-outdoor-hd-v1", "qcom,ipq6018";
};
&led_sys_yellow {
function = LED_FUNCTION_STATUS;
gpios = <&tlmm 32 GPIO_ACTIVE_HIGH>;
};
&wifi {
qcom,ath11k-calibration-variant = "TPLink-EAP623-Outdoor-HD-v1";
status = "okay";
};
@@ -1,150 +0,0 @@
// SPDX-License-Identifier: MIT, GPL-2.0 or later
/* Copyright (c) 2025, Yang Xiwen <forbidden405@outlook.com> */
/dts-v1/;
#include "ipq6018.dtsi"
#include "ipq6018-cp-cpu.dtsi"
#include "ipq6018-ess.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
/ {
model = "TP-Link EAP623-Outdoor HD V1.0";
compatible = "tplink,eap623od-hd-v1", "qcom,ipq6018";
aliases {
serial0 = &blsp1_uart3;
led-boot = &led_sys_green;
led-failsafe = &led_sys_yellow;
led-running = &led_sys_green;
led-upgrade = &led_sys_yellow;
};
chosen {
stdout-path = "serial0:115200n8";
bootargs-append = " root=/dev/ubiblock0_1";
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
};
leds {
compatible = "gpio-leds";
led_sys_green: led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_STATUS;
gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>;
};
led_sys_yellow: led-1 {
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_STATUS;
gpios = <&tlmm 32 GPIO_ACTIVE_HIGH>;
};
};
};
&blsp1_uart3 {
pinctrl-0 = <&serial_3_pins>;
pinctrl-names = "default";
status = "okay";
};
&tlmm {
mdio_pins: mdio-pins {
mdc {
pins = "gpio64";
function = "mdc";
drive-strength = <8>;
bias-pull-up;
};
mdio {
pins = "gpio65";
function = "mdio";
drive-strength = <8>;
bias-pull-up;
};
};
phy_pins: phy-reset-pin {
pins = "gpio77";
function = "gpio";
bias-pull-up;
};
};
&mdio {
status = "okay";
reset-gpios = <&tlmm 77 GPIO_ACTIVE_LOW>;
reset-delay-us = <10000>;
reset-post-delay-us = <50000>;
pinctrl-0 = <&mdio_pins>, <&phy_pins>;
pinctrl-names = "default";
rtl8211f: ethernet-phy@4 {
reg = <4>;
realtek,clkout-disable;
realtek,aldps-enable;
};
};
&switch {
status = "okay";
switch_lan_bmp = <ESS_PORT5>; /* lan port bitmap */
switch_mac_mode1 = <MAC_MODE_SGMII_PLUS>; /* mac mode for uniphy instance0*/
qcom,port_phyinfo {
port@5 {
port_id = <5>;
phy_address = <4>;
port_mac_sel = "QGMAC_PORT";
};
};
};
&edma {
status = "okay";
};
&dp5 {
status = "okay";
phy-handle = <&rtl8211f>;
phy-mode = "sgmii";
label = "lan";
};
&qpic_bam {
status = "okay";
};
&qpic_nand {
status = "okay";
nand@0 {
reg = <0>;
nand-ecc-strength = <4>;
nand-ecc-step-size = <512>;
nand-bus-width = <8>;
partitions {
compatible = "qcom,smem-part";
};
};
};
&wifi {
qcom,ath11k-calibration-variant = "TPLink-EAP623-Outdoor-HD-v1";
status = "okay";
};
@@ -14,9 +14,9 @@
aliases {
serial0 = &blsp1_uart3;
led-boot = &led_sys_green;
led-failsafe = &led_sys_amber;
led-failsafe = &led_sys_yellow;
led-running = &led_sys_green;
led-upgrade = &led_sys_amber;
led-upgrade = &led_sys_yellow;
};
chosen {
@@ -37,9 +37,9 @@
leds {
compatible = "gpio-leds";
led_sys_amber: led-0 {
led_sys_yellow: led-0 {
function = "system";
color = <LED_COLOR_ID_AMBER>;
color = <LED_COLOR_ID_YELLOW>;
gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>;
};
@@ -115,6 +115,8 @@
rtl8211f_4: ethernet-phy@4 {
reg = <4>;
realtek,clkout-disable;
realtek,aldps-enable;
};
};
+16 -24
View File
@@ -234,17 +234,22 @@ define Device/qihoo_360v6
endef
TARGET_DEVICES += qihoo_360v6
define Device/tplink_eap610-outdoor
define Device/tplink_eap6xx-common
$(call Device/FitImage)
$(call Device/UbiFit)
DEVICE_VENDOR := TP-Link
DEVICE_MODEL := EAP610-Outdoor
BLOCKSIZE := 128k
PAGESIZE := 2048
SOC := ipq6018
DEVICE_PACKAGES := ipq-wifi-tplink_eap610-outdoor
DEVICE_PACKAGES := kmod-phy-realtek
IMAGES += web-ui-factory.bin
IMAGE/web-ui-factory.bin := append-ubi | tplink-image-2022
endef
define Device/tplink_eap610-outdoor
$(call Device/tplink_eap6xx-common)
DEVICE_MODEL := EAP610-Outdoor
DEVICE_PACKAGES += ipq-wifi-tplink_eap610-outdoor
TPLINK_SUPPORT_STRING := SupportList:\r\n \
EAP610-Outdoor(TP-Link|UN|AX1800-D):1.0\r\n \
EAP610-Outdoor(TP-Link|JP|AX1800-D):1.0\r\n \
@@ -252,33 +257,20 @@ define Device/tplink_eap610-outdoor
endef
TARGET_DEVICES += tplink_eap610-outdoor
define Device/tplink_eap623od-hd-v1
$(call Device/FitImage)
$(call Device/UbiFit)
DEVICE_VENDOR := TP-Link
define Device/tplink_eap623-outdoor-hd-v1
$(call Device/tplink_eap6xx-common)
DEVICE_MODEL := EAP623-Outdoor HD
DEVICE_VARIANT := v1
BLOCKSIZE := 128k
PAGESIZE := 2048
SOC := ipq6018
DEVICE_PACKAGES := ipq-wifi-tplink_eap623-outdoor-hd-v1 kmod-phy-realtek
IMAGES += web-ui-factory.bin
IMAGE/web-ui-factory.bin := append-ubi | tplink-image-2022
DEVICE_PACKAGES += ipq-wifi-tplink_eap623-outdoor-hd-v1
TPLINK_SUPPORT_STRING := SupportList:\r\nEAP623-Outdoor HD(TP-Link|UN|AX1800-D):1.0\r\n
endef
TARGET_DEVICES += tplink_eap623od-hd-v1
TARGET_DEVICES += tplink_eap623-outdoor-hd-v1
define Device/tplink_eap625-outdoor-hd-v1
$(call Device/FitImage)
$(call Device/UbiFit)
DEVICE_VENDOR := TP-Link
DEVICE_MODEL := EAP625-Outdoor HD v1 and v1.6
BLOCKSIZE := 128k
PAGESIZE := 2048
SOC := ipq6018
DEVICE_PACKAGES := ipq-wifi-tplink_eap625-outdoor-hd-v1
IMAGES += web-ui-factory.bin
IMAGE/web-ui-factory.bin := append-ubi | tplink-image-2022
$(call Device/tplink_eap6xx-common)
DEVICE_MODEL := EAP625-Outdoor HD
DEVICE_VARIANT := v1
DEVICE_PACKAGES += ipq-wifi-tplink_eap625-outdoor-hd-v1
TPLINK_SUPPORT_STRING := SupportList:\r\n \
EAP625-Outdoor HD(TP-Link|UN|AX1800-D):1.0\r\n \
EAP625-Outdoor HD(TP-Link|CA|AX1800-D):1.0\r\n \
@@ -41,8 +41,8 @@ ipq60xx_setup_interfaces()
netgear,wax610|\
netgear,wax610y|\
tplink,eap610-outdoor|\
tplink,eap623od-hd-v1|\
tplink,eap620-hd-v3|\
tplink,eap623-outdoor-hd-v1|\
tplink,eap625-outdoor-hd-v1)
ucidef_set_interface_lan "lan" "dhcp"
;;
@@ -70,7 +70,7 @@ ipq60xx_setup_macs()
;;
tplink,eap610-outdoor|\
tplink,eap620-hd-v3|\
tplink,eap623od-hd-v1|\
tplink,eap623-outdoor-hd-v1|\
tplink,eap625-outdoor-hd-v1)
label_mac=$(get_mac_binary /tmp/factory_data/default-mac 0)
lan_mac=$label_mac
@@ -70,7 +70,7 @@ case "$FIRMWARE" in
ath11k_set_macflag
;;
tplink,eap610-outdoor|\
tplink,eap623od-hd-v1|\
tplink,eap623-outdoor-hd-v1|\
tplink,eap625-outdoor-hd-v1)
caldata_from_file "/tmp/factory_data/radio" 0 0x10000
label_mac=$(get_mac_binary /tmp/factory_data/default-mac 0)
@@ -9,7 +9,7 @@ preinit_mount_factory_data() {
case $(board_name) in
tplink,eap610-outdoor|\
tplink,eap620-hd-v3|\
tplink,eap623od-hd-v1|\
tplink,eap623-outdoor-hd-v1|\
tplink,eap625-outdoor-hd-v1)
mtd_path=$(find_mtd_chardev "factory_data")
ubiattach --dev-path="$mtd_path" --devn=1
@@ -205,7 +205,7 @@ platform_do_upgrade() {
;;
tplink,eap610-outdoor|\
tplink,eap620-hd-v3|\
tplink,eap623od-hd-v1|\
tplink,eap623-outdoor-hd-v1|\
tplink,eap625-outdoor-hd-v1)
tplink_do_upgrade "$1"
;;
@@ -78,6 +78,13 @@
label = "u-boot-env";
reg = <0x30000 0x10000>;
read-only;
nvmem-layout {
compatible = "u-boot,env";
macaddr_uboot_ethaddr: ethaddr {
};
};
};
partition@40000 {
@@ -160,21 +167,33 @@
port@1 {
status = "okay";
label = "lan4";
nvmem-cells = <&macaddr_uboot_ethaddr>;
nvmem-cell-names = "mac-address";
};
port@2 {
status = "okay";
label = "lan3";
nvmem-cells = <&macaddr_uboot_ethaddr>;
nvmem-cell-names = "mac-address";
};
port@3 {
status = "okay";
label = "lan2";
nvmem-cells = <&macaddr_uboot_ethaddr>;
nvmem-cell-names = "mac-address";
};
port@4 {
status = "okay";
label = "lan1";
nvmem-cells = <&macaddr_uboot_ethaddr>;
nvmem-cell-names = "mac-address";
};
};
};
@@ -12,6 +12,7 @@
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
label-mac-device = &gmac1;
};
leds {
@@ -109,6 +110,12 @@
reg = <0x0 0x4da8>;
};
macaddr_factory_4: mac-address@4 {
compatible = "mac-base";
reg = <0x4 0x6>;
#nvmem-cell-cells = <1>;
};
eeprom_factory_8000: eeprom@8000 {
reg = <0x8000 0x4da8>;
};
@@ -118,10 +125,18 @@
};
};
&gmac0 {
nvmem-cells = <&eeprom_factory_0 (-1)>;
nvmem-cell-names = "mac-address";
};
&gmac1 {
status = "okay";
label = "wan";
phy-handle = <&ethphy0>;
nvmem-cells = <&eeprom_factory_0 (-2)>;
nvmem-cell-names = "mac-address";
};
&ethphy0 {
@@ -8,6 +8,7 @@
/ {
aliases {
label-mac-device = &gmac1;
led-boot = &led_status_amber;
led-failsafe = &led_status_green;
led-running = &led_status_green;
@@ -52,10 +53,18 @@
};
};
&gmac0 {
nvmem-cells = <&macaddr_uboot_ethaddr 1>;
nvmem-cell-names = "mac-address";
};
&gmac1 {
status = "okay";
label = "wan";
phy-handle = <&ethphy4>;
nvmem-cells = <&macaddr_uboot_ethaddr 0>;
nvmem-cell-names = "mac-address";
};
&ethphy4 {
@@ -84,6 +93,15 @@
partition@80000 {
label = "u-boot-env";
reg = <0x0080000 0x0080000>;
nvmem-layout {
compatible = "u-boot,env";
env-size = <0x20000>;
macaddr_uboot_ethaddr: ethaddr {
#nvmem-cell-cells = <1>;
};
};
};
partition@100000 {
@@ -55,6 +55,15 @@
partition@80000 {
label = "u-boot-env";
reg = <0x80000 0xc0000>;
nvmem-layout {
compatible = "u-boot,env";
env-size = <0x1000>;
macaddr_uboot_ethaddr: ethaddr {
#nvmem-cell-cells = <1>;
};
};
};
partition@140000 {
@@ -85,10 +94,18 @@
};
};
&gmac0 {
nvmem-cells = <&macaddr_uboot_ethaddr 0>;
nvmem-cell-names = "mac-address";
};
&gmac1 {
status = "okay";
label = "wan";
phy-handle = <&ethphy0>;
nvmem-cells = <&macaddr_uboot_ethaddr 1>;
nvmem-cell-names = "mac-address";
};
&ethphy0 {
+9
View File
@@ -232,6 +232,15 @@
reg = <0x5000 0x1000>;
#pwm-cells = <2>;
clocks = <&sysc MT76X8_CLK_PWM_TOP>,
<&sysc MT76X8_CLK_PWM_MAIN>,
<&sysc MT76X8_CLK_PWM_CH1>,
<&sysc MT76X8_CLK_PWM_CH2>,
<&sysc MT76X8_CLK_PWM_CH3>,
<&sysc MT76X8_CLK_PWM_CH4>;
clock-names = "top", "main",
"pwm1", "pwm2", "pwm3", "pwm4";
pinctrl-names = "default";
pinctrl-0 = <&pwm0_pins>, <&pwm1_pins>;

Some files were not shown because too many files have changed in this diff Show More