Compare commits
146 Commits
v24.10.0-r
...
v24.10.0-r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d17274ca8 | ||
|
|
6dacba30a7 | ||
|
|
d92fc99360 | ||
|
|
785ea040ec | ||
|
|
b8c53881db | ||
|
|
5679b7aef6 | ||
|
|
e63d289bbd | ||
|
|
8931d617dd | ||
|
|
e80b7a63f1 | ||
|
|
3d0ed57b16 | ||
|
|
deb0f28b5e | ||
|
|
8b5f3ee940 | ||
|
|
676dfd1363 | ||
|
|
b0261c3861 | ||
|
|
d543a9ae66 | ||
|
|
976bfe61e0 | ||
|
|
09378395cd | ||
|
|
f311c9754c | ||
|
|
f81f707c05 | ||
|
|
4d9b06c571 | ||
|
|
cc733e7e2a | ||
|
|
fe8812ab96 | ||
|
|
096e3f26ef | ||
|
|
767ad64921 | ||
|
|
7a112661d5 | ||
|
|
2f60e7f006 | ||
|
|
6ba1f831c7 | ||
|
|
56b2d856a2 | ||
|
|
56b19f0d50 | ||
|
|
111c62a06a | ||
|
|
cf887640a3 | ||
|
|
993ade9eb3 | ||
|
|
43e1b47d70 | ||
|
|
14722242af | ||
|
|
09fcac8bc0 | ||
|
|
bbfebf8527 | ||
|
|
9b9622271e | ||
|
|
efebdf077c | ||
|
|
184d1c93cb | ||
|
|
933ae0699a | ||
|
|
19db092082 | ||
|
|
c22410e7a9 | ||
|
|
f97e729f8c | ||
|
|
83afb428b0 | ||
|
|
85d1d03cab | ||
|
|
3ad92b68f1 | ||
|
|
3bd2962c3d | ||
|
|
5330f62085 | ||
|
|
369d2f3bf9 | ||
|
|
d5f01971f7 | ||
|
|
36f7db978a | ||
|
|
f91d8e9f37 | ||
|
|
b80de63e9f | ||
|
|
35e02b31c0 | ||
|
|
a9ddc7432a | ||
|
|
812046971e | ||
|
|
a2b1aaee80 | ||
|
|
32981677bd | ||
|
|
7a0b76cf0f | ||
|
|
b66773aac3 | ||
|
|
11275bec82 | ||
|
|
1f94fa16d8 | ||
|
|
67e070c11b | ||
|
|
1eff737906 | ||
|
|
9a0a05d52a | ||
|
|
dad450b115 | ||
|
|
d1dd5b2301 | ||
|
|
684223c4a4 | ||
|
|
4b4f319931 | ||
|
|
3a5584e0df | ||
|
|
cccc7651ec | ||
|
|
17752bd9ce | ||
|
|
f4c5d0e77e | ||
|
|
3ca3ee6012 | ||
|
|
76a546a83a | ||
|
|
5b4a081f47 | ||
|
|
47e3413f6b | ||
|
|
7cbaa9e81f | ||
|
|
90f84a22b0 | ||
|
|
4cc1da1e44 | ||
|
|
db0300cb1b | ||
|
|
7271ee587c | ||
|
|
5829178074 | ||
|
|
d9bbed6507 | ||
|
|
48f9284232 | ||
|
|
738c9e5286 | ||
|
|
55d1fe4aa6 | ||
|
|
45bf30e062 | ||
|
|
ec49df8692 | ||
|
|
d036b42dd9 | ||
|
|
f7398101db | ||
|
|
08f1bde12b | ||
|
|
372afe10f0 | ||
|
|
1e530e5831 | ||
|
|
d55754ce0d | ||
|
|
654c9732dc | ||
|
|
feb7a2a232 | ||
|
|
f94c3af814 | ||
|
|
4111210b27 | ||
|
|
b2a172170c | ||
|
|
81c0cf031e | ||
|
|
975811921e | ||
|
|
dd04edfba2 | ||
|
|
8667ca841b | ||
|
|
5289460fd0 | ||
|
|
9f76cda378 | ||
|
|
5415fb06d2 | ||
|
|
21549dbf7b | ||
|
|
5a715cdbcd | ||
|
|
e40367fa99 | ||
|
|
f0ff244c69 | ||
|
|
cc69be0c13 | ||
|
|
6642ee73bc | ||
|
|
f760f74209 | ||
|
|
5dca1d6a41 | ||
|
|
e109caeec4 | ||
|
|
a964e96289 | ||
|
|
acf52fed43 | ||
|
|
25268f724b | ||
|
|
6435025f9c | ||
|
|
6d0d4ce72f | ||
|
|
28602452df | ||
|
|
28bde50c1d | ||
|
|
efcb0ec713 | ||
|
|
9af0e94fa6 | ||
|
|
bf284ed4af | ||
|
|
aa1241e979 | ||
|
|
28de3ffefa | ||
|
|
6c664135f9 | ||
|
|
620aa80064 | ||
|
|
24bddf68bd | ||
|
|
d79a70542b | ||
|
|
d48e499fc1 | ||
|
|
b9df2d79b6 | ||
|
|
5afd3daeba | ||
|
|
1eba94e67b | ||
|
|
8a4ce69eea | ||
|
|
2b45e93113 | ||
|
|
4bfe5ccd11 | ||
|
|
863d1a634e | ||
|
|
45f9f15512 | ||
|
|
f483de4767 | ||
|
|
c995dd97c7 | ||
|
|
66e76aa94f | ||
|
|
ea17e958b9 | ||
|
|
5601274444 |
@@ -423,11 +423,11 @@ menu "Global build settings"
|
||||
|
||||
endchoice
|
||||
|
||||
config SECCOMP
|
||||
config USE_SECCOMP
|
||||
bool "Enable SECCOMP"
|
||||
select KERNEL_SECCOMP
|
||||
select PACKAGE_procd-seccomp
|
||||
depends on (aarch64 || arm || armeb || mips || mipsel || mips64 || mips64el || i386 || powerpc || x86_64)
|
||||
depends on (aarch64 || arm || armeb || mips || mipsel || mips64 || mips64el || i386 || loongarch64 || powerpc || x86_64)
|
||||
depends on !TARGET_uml
|
||||
default y
|
||||
help
|
||||
|
||||
@@ -1239,6 +1239,13 @@ config KERNEL_MPTCP_IPV6
|
||||
default KERNEL_MPTCP
|
||||
endif
|
||||
|
||||
config KERNEL_NF_CONNTRACK_TIMEOUT
|
||||
bool "Per-connection connection tracking timeout"
|
||||
default y if !SMALL_FLASH
|
||||
help
|
||||
Select this option to enable support for per-connection conntrack timeouts.
|
||||
Increases the (uncompressed) size of nf_conntrack.ko by ~8kB.
|
||||
|
||||
#
|
||||
# NFS related symbols
|
||||
#
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
src-git packages https://git.openwrt.org/feed/packages.git^b5f11b79d2b0538d57103a8da05e7a7a87981ff3
|
||||
src-git luci https://git.openwrt.org/project/luci.git^094507c19372268d13679d2e6ad4325e08a333e2
|
||||
src-git routing https://git.openwrt.org/feed/routing.git^3f15699240c076d5ee9ed697fa5ef45355423f6f
|
||||
src-git packages https://git.openwrt.org/feed/packages.git^c84e022ee9fae5884a7c698746bfac4d74a12a2d
|
||||
src-git luci https://git.openwrt.org/project/luci.git^65c86ed3244f5ad3dc5fdfca93f40b20ab2f550c
|
||||
src-git routing https://git.openwrt.org/feed/routing.git^84d97e684bcb6a63dbfdfbfd9ec7407192861239
|
||||
src-git telephony https://git.openwrt.org/feed/telephony.git^fd605af7143165a2490681ec1752f259873b9147
|
||||
|
||||
5
include/default-packages.mk
Normal file
5
include/default-packages.mk
Normal file
@@ -0,0 +1,5 @@
|
||||
ifneq ($(CONFIG_USE_APK),)
|
||||
DEFAULT_PACKAGES += apk-mbedtls
|
||||
else
|
||||
DEFAULT_PACKAGES += opkg
|
||||
endif
|
||||
@@ -37,7 +37,7 @@ define FeedSourcesAppendOPKG
|
||||
echo 'src/gz %d_core %U/targets/%S/packages'; \
|
||||
$(strip $(if $(CONFIG_PER_FEED_REPO), \
|
||||
echo 'src/gz %d_base %U/packages/%A/base'; \
|
||||
$(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \
|
||||
$(if $(CONFIG_BUILDBOT), \
|
||||
echo 'src/gz %d_kmods %U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)';) \
|
||||
$(foreach feed,$(FEEDS_AVAILABLE), \
|
||||
$(if $(CONFIG_FEED_$(feed)), \
|
||||
@@ -51,7 +51,7 @@ define FeedSourcesAppendAPK
|
||||
echo '%U/targets/%S/packages/packages.adb'; \
|
||||
$(strip $(if $(CONFIG_PER_FEED_REPO), \
|
||||
echo '%U/packages/%A/base/packages.adb'; \
|
||||
$(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \
|
||||
$(if $(CONFIG_BUILDBOT), \
|
||||
echo '%U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)/packages.adb';) \
|
||||
$(foreach feed,$(FEEDS_AVAILABLE), \
|
||||
$(if $(CONFIG_FEED_$(feed)), \
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.6 = .63
|
||||
LINUX_KERNEL_HASH-6.6.63 = d1054ab4803413efe2850f50f1a84349c091631ec50a1cf9e891d1b1f9061835
|
||||
LINUX_VERSION-6.6 = .69
|
||||
LINUX_KERNEL_HASH-6.6.69 = 9c6305567b75d99514cde6eb9de39973f3d5c857a75bd9dcdfca57041f8d4f34
|
||||
|
||||
@@ -90,45 +90,9 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(DUMP),)
|
||||
# Parse generic config that might be set before a .config is generated to modify the
|
||||
# default package configuration
|
||||
# Keep DYNAMIC_DEF_PKG_CONF in sync with toplevel.mk to reflect the same configs
|
||||
DYNAMIC_DEF_PKG_CONF := CONFIG_USE_APK CONFIG_SELINUX CONFIG_SMALL_FLASH CONFIG_SECCOMP
|
||||
$(foreach config, $(DYNAMIC_DEF_PKG_CONF), \
|
||||
$(eval $(config) := $(shell grep "$(config)=y" $(TOPDIR)/.config 2>/dev/null)) \
|
||||
)
|
||||
# The config options that are enabled by default and where other default
|
||||
# packages depends on needs to be set if they are missing in the .config.
|
||||
ifeq ($(shell grep "CONFIG_SECCOMP" $(TOPDIR)/.config 2>/dev/null),)
|
||||
ifeq ($(filter $(BOARD), uml),)
|
||||
ifneq ($(filter $(ARCH), aarch64 arm armeb mips mipsel mips64 mips64el i386 powerpc x86_64),)
|
||||
CONFIG_SECCOMP := y
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_USE_APK),)
|
||||
DEFAULT_PACKAGES+=apk-mbedtls
|
||||
else
|
||||
DEFAULT_PACKAGES+=opkg
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_SELINUX),)
|
||||
DEFAULT_PACKAGES+=busybox-selinux procd-selinux
|
||||
else
|
||||
DEFAULT_PACKAGES+=busybox procd
|
||||
endif
|
||||
|
||||
# include ujail on systems with enough storage
|
||||
ifeq ($(CONFIG_SMALL_FLASH),)
|
||||
DEFAULT_PACKAGES+=procd-ujail
|
||||
endif
|
||||
|
||||
# include seccomp ld-preload hooks if kernel supports it
|
||||
ifneq ($(CONFIG_SECCOMP),)
|
||||
DEFAULT_PACKAGES+=procd-seccomp
|
||||
ifeq ($(filter small_flash,$(FEATURES)),)
|
||||
DEFAULT_PACKAGES+=procd-ujail
|
||||
endif
|
||||
|
||||
# Add device specific packages (here below to allow device type set from subtarget)
|
||||
|
||||
@@ -75,22 +75,7 @@ endif
|
||||
|
||||
_ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
|
||||
|
||||
# Config that will invalidate the .targetinfo as they will affect
|
||||
# DEFAULT_PACKAGES.
|
||||
# Keep DYNAMIC_DEF_PKG_CONF in sync with target.mk to reflect the same configs
|
||||
DYNAMIC_DEF_PKG_CONF := CONFIG_USE_APK CONFIG_SELINUX CONFIG_SMALL_FLASH CONFIG_SECCOMP
|
||||
check-dynamic-def-pkg: FORCE
|
||||
@+DEF_PKG_CONFS=""; \
|
||||
if [ -f $(TOPDIR)/.config ]; then \
|
||||
for config in $(DYNAMIC_DEF_PKG_CONF); do \
|
||||
DEF_PKG_CONFS="$$DEF_PKG_CONFS "$$(grep "$$config"=y $(TOPDIR)/.config); \
|
||||
done; \
|
||||
fi; \
|
||||
[ ! -f tmp/.packagedynamicdefault ] || OLD_DEF_PKG_CONFS=$$(cat tmp/.packagedynamicdefault); \
|
||||
[ "$$DEF_PKG_CONFS" = "$$OLD_DEF_PKG_CONFS" ] || rm -rf tmp/info/.targetinfo*; \
|
||||
mkdir -p tmp && echo "$$DEF_PKG_CONFS" > tmp/.packagedynamicdefault;
|
||||
|
||||
prepare-tmpinfo: check-dynamic-def-pkg FORCE
|
||||
prepare-tmpinfo: FORCE
|
||||
@+$(MAKE) -r -s $(STAGING_DIR_HOST)/.prereq-build $(PREP_MK)
|
||||
mkdir -p tmp/info feeds
|
||||
[ -e $(TOPDIR)/feeds/base ] || ln -sf $(TOPDIR)/package $(TOPDIR)/feeds/base
|
||||
|
||||
@@ -3,7 +3,7 @@ PKG_CPE_ID ?= cpe:/a:arm:trusted_firmware-a
|
||||
|
||||
ifndef PKG_SOURCE_PROTO
|
||||
PKG_SOURCE = trusted-firmware-a-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/TrustedFirmware-A/trusted-firmware-a/tar.gz/v$(PKG_VERSION)?
|
||||
endif
|
||||
|
||||
PKG_BUILD_DIR = $(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
@@ -23,13 +23,13 @@ PKG_CONFIG_DEPENDS += \
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),24.10.0-rc1)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),24.10.0-rc5)
|
||||
|
||||
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r28158-d276b4c91a)
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r28304-6dacba30a7)
|
||||
|
||||
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/releases/24.10.0-rc1)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/releases/24.10.0-rc5)
|
||||
|
||||
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)
|
||||
|
||||
@@ -39,7 +39,11 @@ endif
|
||||
define Package/base-files
|
||||
SECTION:=base
|
||||
CATEGORY:=Base system
|
||||
DEPENDS:=+netifd +libc +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:openwrt-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool
|
||||
DEPENDS:= \
|
||||
+netifd +libc +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:openwrt-keyring \
|
||||
+NAND_SUPPORT:ubi-utils +fstools +fwtool \
|
||||
+SELINUX:procd-selinux +!SELINUX:procd +USE_SECCOMP:procd-seccomp \
|
||||
+SELINUX:busybox-selinux +!SELINUX:busybox
|
||||
TITLE:=Base filesystem for OpenWrt
|
||||
URL:=http://openwrt.org/
|
||||
VERSION:=$(PKG_RELEASE)~$(lastword $(subst -, ,$(REVISION)))
|
||||
|
||||
@@ -100,10 +100,6 @@ service_triggers() {
|
||||
return 0
|
||||
}
|
||||
|
||||
service_data() {
|
||||
return 0
|
||||
}
|
||||
|
||||
service_running() {
|
||||
local instance="${1:-*}"
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ get_mac_ascii() {
|
||||
local key="$2"
|
||||
local mac_dirty
|
||||
|
||||
mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p')
|
||||
mac_dirty=$(strings "$part" | tr -d ' \t' | sed -n 's/^'"$key"'=//p' | head -n 1)
|
||||
|
||||
# "canonicalize" mac
|
||||
[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"
|
||||
|
||||
@@ -190,7 +190,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "https://downloads.openwrt.org/releases/24.10.0-rc1"
|
||||
default "https://downloads.openwrt.org/releases/24.10.0-rc5"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
|
||||
@@ -352,6 +352,15 @@ define Trusted-Firmware-A/mt7986-spim-nand-ddr3
|
||||
DDR_TYPE:=ddr3
|
||||
endef
|
||||
|
||||
define Trusted-Firmware-A/mt7986-spim-nand-ubi-ddr3
|
||||
NAME:=MediaTek MT7986 (SPI-NAND via SPIM using UBI, DDR3)
|
||||
BOOT_DEVICE:=spim-nand
|
||||
BUILD_SUBTARGET:=filogic
|
||||
PLAT:=mt7986
|
||||
DDR_TYPE:=ddr3
|
||||
USE_UBI:=1
|
||||
endef
|
||||
|
||||
define Trusted-Firmware-A/mt7988-nor-ddr3
|
||||
NAME:=MediaTek MT7988 (SPI-NOR, DDR3)
|
||||
BOOT_DEVICE:=nor
|
||||
@@ -531,6 +540,7 @@ TFA_TARGETS:= \
|
||||
mt7986-sdmmc-ddr3 \
|
||||
mt7986-snand-ddr3 \
|
||||
mt7986-spim-nand-ddr3 \
|
||||
mt7986-spim-nand-ubi-ddr3 \
|
||||
mt7986-ram-ddr4 \
|
||||
mt7986-emmc-ddr4 \
|
||||
mt7986-nor-ddr4 \
|
||||
@@ -570,6 +580,7 @@ TFA_MAKE_FLAGS += \
|
||||
$(if $(RAM_BOOT_UART_DL),RAM_BOOT_UART_DL=1) \
|
||||
$(if $(USE_UBI),UBI=1 $(if $(findstring mt7622,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x80000)) \
|
||||
$(if $(USE_UBI),UBI=1 $(if $(findstring mt7981,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x100000)) \
|
||||
$(if $(USE_UBI),UBI=1 $(if $(findstring mt7986,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x200000)) \
|
||||
$(if $(RAM_BOOT_UART_DL),bl2,all)
|
||||
|
||||
define Package/trusted-firmware-a-ram/install
|
||||
|
||||
@@ -30,7 +30,7 @@ define U-Boot/dongshan_nezha_stu
|
||||
OPENSBI:=generic
|
||||
DEPENDS:=+opensbi_generic
|
||||
UBOOT_DTS:=sun20i-d1-dongshan-nezha-stu.dtb
|
||||
BUILD_DEVICES:=dongshan_nezha_stu
|
||||
BUILD_DEVICES:=100ask_dongshan-nezha-stu
|
||||
endef
|
||||
|
||||
define U-Boot/lichee_rv_dock
|
||||
@@ -38,7 +38,7 @@ define U-Boot/lichee_rv_dock
|
||||
OPENSBI:=generic
|
||||
DEPENDS:=+opensbi_generic
|
||||
UBOOT_DTS:=sun20i-d1-lichee-rv-dock.dtb
|
||||
BUILD_DEVICES:=lichee_rv_dock
|
||||
BUILD_DEVICES:=sipeed_lichee-rv-dock
|
||||
endef
|
||||
|
||||
define U-Boot/mangopi_mq_pro
|
||||
@@ -46,7 +46,7 @@ define U-Boot/mangopi_mq_pro
|
||||
OPENSBI:=generic
|
||||
DEPENDS:=+opensbi_generic
|
||||
UBOOT_DTS:=sun20i-d1-mangopi-mq-pro.dtb
|
||||
BUILD_DEVICES:=mangopi_mq_pro
|
||||
BUILD_DEVICES:=widora_mangopi-mq-pro
|
||||
endef
|
||||
|
||||
define U-Boot/nezha
|
||||
@@ -54,7 +54,7 @@ define U-Boot/nezha
|
||||
OPENSBI:=generic
|
||||
DEPENDS:=+opensbi_generic
|
||||
UBOOT_DTS:=sun20i-d1-nezha.dtb
|
||||
BUILD_DEVICES:=nezha
|
||||
BUILD_DEVICES:=allwinner_d1-nezha
|
||||
endef
|
||||
|
||||
UBOOT_TARGETS := \
|
||||
@@ -74,7 +74,7 @@ endef
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(DTS_DIR)/$(UBOOT_DTS) $(STAGING_DIR_IMAGE)/$(UBOOT_DTS)
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-$(UBOOT_IMAGE)
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/$(BUILD_DEVICES)-$(UBOOT_IMAGE)
|
||||
mkimage -C none -A riscv -T script -d uEnv-$(UENV).txt \
|
||||
$(STAGING_DIR_IMAGE)/$(BUILD_DEVICES)-boot.scr
|
||||
endef
|
||||
|
||||
@@ -28,6 +28,7 @@ asus,rt-ac59u-v2|\
|
||||
asus,zenwifi-cd6n|\
|
||||
asus,zenwifi-cd6r|\
|
||||
buffalo,bhr-4grv2|\
|
||||
buffalo,wzr-450hp2|\
|
||||
devolo,magic-2-wifi|\
|
||||
engenius,eap300-v2|\
|
||||
engenius,eap350-v1|\
|
||||
|
||||
@@ -36,6 +36,7 @@ case "$board" in
|
||||
abt,asr3000|\
|
||||
h3c,magic-nx30-pro|\
|
||||
jcg,q30-pro|\
|
||||
mercusys,mr90x-v1-ubi|\
|
||||
netcore,n60|\
|
||||
nokia,ea0326gmp|\
|
||||
qihoo,360t7|\
|
||||
@@ -94,7 +95,8 @@ zbtlink,zbt-z8102ax|\
|
||||
zbtlink,zbt-z8103ax)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
|
||||
;;
|
||||
dlink,aquila-pro-ai-m30-a1)
|
||||
dlink,aquila-pro-ai-m30-a1|\
|
||||
dlink,aquila-pro-ai-m60-a1)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x40000"
|
||||
;;
|
||||
gatonetworks,gdsp)
|
||||
|
||||
@@ -570,6 +570,18 @@ define U-Boot/mt7986_jdcloud_re-cp-03
|
||||
DEPENDS:=+trusted-firmware-a-mt7986-emmc-ddr4
|
||||
endef
|
||||
|
||||
define U-Boot/mt7986_mercusys_mr90x-v1
|
||||
NAME:=MERCUSYS MR90X v1
|
||||
BUILD_SUBTARGET:=filogic
|
||||
BUILD_DEVICES:=mercusys_mr90x-v1-ubi
|
||||
UBOOT_CONFIG:=mt7986_mercusys_mr90x-v1
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=spim-nand-ubi
|
||||
BL2_SOC:=mt7986
|
||||
BL2_DDRTYPE:=ddr3
|
||||
DEPENDS:=+trusted-firmware-a-mt7986-spim-nand-ubi-ddr3
|
||||
endef
|
||||
|
||||
define U-Boot/mt7986_netcore_n60
|
||||
NAME:=Netcore N60
|
||||
BUILD_SUBTARGET:=filogic
|
||||
@@ -847,6 +859,7 @@ UBOOT_TARGETS := \
|
||||
mt7986_bananapi_bpi-r3-mini-snand \
|
||||
mt7986_glinet_gl-mt6000 \
|
||||
mt7986_jdcloud_re-cp-03 \
|
||||
mt7986_mercusys_mr90x-v1 \
|
||||
mt7986_netcore_n60 \
|
||||
mt7986_tplink_tl-xdr4288 \
|
||||
mt7986_tplink_tl-xdr6086 \
|
||||
|
||||
@@ -519,7 +519,7 @@
|
||||
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title [33m$ver[0m"
|
||||
--- /dev/null
|
||||
+++ b/openwrt-one-spi-nand_env
|
||||
@@ -0,0 +1,60 @@
|
||||
@@ -0,0 +1,61 @@
|
||||
+ethaddr_factory=mtd read factory 0x46000000 0x0 0x20000 && env readmem -b ethaddr 0x4600002a 0x6 ; setenv ethaddr_factory
|
||||
+ipaddr=192.168.11.11
|
||||
+serverip=192.168.11.23
|
||||
@@ -561,6 +561,7 @@
|
||||
+check_buttons=if button front ; then run boot_recovery ; run boot_tftp ; run led_loop_error ; else if button back ; then ; run usb_recover ; run led_loop_error ; fi ; fi
|
||||
+led_boot=led green on ; led white on ; led red on
|
||||
+led_done=led green on ; led white off ; led red off
|
||||
+led_loop_done=led white off ; led green on ; echo done ; while true ; do sleep 1 ; done
|
||||
+led_loop_error=led white off ; led green off ; while true ; do led red on ; sleep 1 ; led red off ; sleep 1 ; done
|
||||
+led_start=led white on ; led green off ; led red off
|
||||
+preboot=run led_boot
|
||||
|
||||
@@ -0,0 +1,343 @@
|
||||
--- /dev/null
|
||||
+++ b/configs/mt7986_mercusys_mr90x-v1_defconfig
|
||||
@@ -0,0 +1,107 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
|
||||
+CONFIG_POSITION_INDEPENDENT=y
|
||||
+CONFIG_ARCH_MEDIATEK=y
|
||||
+CONFIG_TEXT_BASE=0x41e00000
|
||||
+CONFIG_SYS_MALLOC_F_LEN=0x4000
|
||||
+CONFIG_NR_DRAM_BANKS=1
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="mt7986b-mercusys_mr90x-v1"
|
||||
+CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
+CONFIG_TARGET_MT7986=y
|
||||
+CONFIG_PRE_CON_BUF_ADDR=0x4007ef00
|
||||
+CONFIG_DEBUG_UART_BASE=0x11002000
|
||||
+CONFIG_DEBUG_UART_CLOCK=40000000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x46000000
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_BOOTDELAY=30
|
||||
+CONFIG_AUTOBOOT_KEYED=y
|
||||
+CONFIG_AUTOBOOT_MENU_SHOW=y
|
||||
+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986b-mercusys_mr90x-v1.dtb"
|
||||
+CONFIG_LOGLEVEL=7
|
||||
+CONFIG_PRE_CONSOLE_BUFFER=y
|
||||
+CONFIG_LOG=y
|
||||
+CONFIG_BOARD_LATE_INIT=y
|
||||
+CONFIG_HUSH_PARSER=y
|
||||
+CONFIG_SYS_PROMPT="MT7986> "
|
||||
+CONFIG_CMD_CPU=y
|
||||
+CONFIG_CMD_LICENSE=y
|
||||
+CONFIG_CMD_BOOTMENU=y
|
||||
+CONFIG_CMD_ASKENV=y
|
||||
+CONFIG_CMD_ERASEENV=y
|
||||
+CONFIG_CMD_ENV_FLAGS=y
|
||||
+CONFIG_CMD_STRINGS=y
|
||||
+CONFIG_CMD_DM=y
|
||||
+CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_MTD=y
|
||||
+CONFIG_CMD_DHCP=y
|
||||
+CONFIG_CMD_TFTPSRV=y
|
||||
+CONFIG_CMD_RARP=y
|
||||
+CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_CDP=y
|
||||
+CONFIG_CMD_SNTP=y
|
||||
+CONFIG_CMD_DNS=y
|
||||
+CONFIG_CMD_LINK_LOCAL=y
|
||||
+CONFIG_CMD_PXE=y
|
||||
+CONFIG_CMD_CACHE=y
|
||||
+CONFIG_CMD_PSTORE=y
|
||||
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
|
||||
+CONFIG_CMD_UUID=y
|
||||
+CONFIG_CMD_HASH=y
|
||||
+CONFIG_CMD_SMC=y
|
||||
+CONFIG_CMD_UBI=y
|
||||
+CONFIG_CMD_UBI_RENAME=y
|
||||
+CONFIG_OF_EMBED=y
|
||||
+CONFIG_ENV_OVERWRITE=y
|
||||
+CONFIG_ENV_IS_IN_UBI=y
|
||||
+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
||||
+CONFIG_ENV_UBI_PART="ubi"
|
||||
+CONFIG_ENV_UBI_VOLUME="ubootenv"
|
||||
+CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2"
|
||||
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
+CONFIG_USE_DEFAULT_ENV_FILE=y
|
||||
+CONFIG_DEFAULT_ENV_FILE="mercusys_mr90x-v1_env"
|
||||
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
+CONFIG_VERSION_VARIABLE=y
|
||||
+CONFIG_NET_RANDOM_ETHADDR=y
|
||||
+CONFIG_NETCONSOLE=y
|
||||
+CONFIG_USE_IPADDR=y
|
||||
+CONFIG_IPADDR="192.168.1.1"
|
||||
+CONFIG_USE_SERVERIP=y
|
||||
+CONFIG_SERVERIP="192.168.1.254"
|
||||
+CONFIG_REGMAP=y
|
||||
+CONFIG_SYSCON=y
|
||||
+CONFIG_BUTTON=y
|
||||
+CONFIG_BUTTON_GPIO=y
|
||||
+CONFIG_CLK=y
|
||||
+CONFIG_GPIO_HOG=y
|
||||
+# CONFIG_I2C is not set
|
||||
+# CONFIG_MMC is not set
|
||||
+CONFIG_LED=y
|
||||
+CONFIG_LED_BLINK=y
|
||||
+CONFIG_LED_GPIO=y
|
||||
+CONFIG_MTD=y
|
||||
+CONFIG_DM_MTD=y
|
||||
+CONFIG_MTD_SPI_NAND=y
|
||||
+CONFIG_MTD_UBI_FASTMAP=y
|
||||
+CONFIG_PHY_FIXED=y
|
||||
+CONFIG_MEDIATEK_ETH=y
|
||||
+CONFIG_PHY=y
|
||||
+CONFIG_PINCTRL=y
|
||||
+CONFIG_PINCONF=y
|
||||
+CONFIG_PINCTRL_MT7986=y
|
||||
+CONFIG_POWER_DOMAIN=y
|
||||
+CONFIG_MTK_POWER_DOMAIN=y
|
||||
+CONFIG_DM_REGULATOR=y
|
||||
+CONFIG_DM_REGULATOR_FIXED=y
|
||||
+CONFIG_DM_REGULATOR_GPIO=y
|
||||
+CONFIG_RAM=y
|
||||
+CONFIG_DM_SERIAL=y
|
||||
+CONFIG_MTK_SERIAL=y
|
||||
+CONFIG_SPI=y
|
||||
+CONFIG_DM_SPI=y
|
||||
+CONFIG_MTK_SPIM=y
|
||||
+CONFIG_RANDOM_UUID=y
|
||||
+CONFIG_ZSTD=y
|
||||
+CONFIG_HEXDUMP=y
|
||||
+CONFIG_LMB_MAX_REGIONS=64
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/mt7986b-mercusys_mr90x-v1.dts
|
||||
@@ -0,0 +1,174 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Copyright (c) 2024
|
||||
+ * Author: Mikhail Zhilkin <csharper2005@gmail.com>
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "mt7986.dtsi"
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/linux-event-codes.h>
|
||||
+
|
||||
+/ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ model = "MERCUSYS MR90X v1";
|
||||
+ compatible = "mediatek,mt7986", "mediatek,mt7986-rfb";
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = &uart0;
|
||||
+ tick-timer = &timer0;
|
||||
+ };
|
||||
+
|
||||
+ memory@40000000 {
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x40000000 0x20000000>;
|
||||
+ };
|
||||
+
|
||||
+ keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ reset {
|
||||
+ label = "reset";
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ led-0 {
|
||||
+ label = "green:lan2";
|
||||
+ gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ led-1 {
|
||||
+ label = "green:lan1";
|
||||
+ gpios = <&gpio 9 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ led-2 {
|
||||
+ label = "green:lan0";
|
||||
+ gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ led-3 {
|
||||
+ label = "green:wan";
|
||||
+ gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ led-4 {
|
||||
+ label = "amber:status";
|
||||
+ gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ led_status_green: led-5 {
|
||||
+ label = "green:status";
|
||||
+ gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>;
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+ð {
|
||||
+ status = "okay";
|
||||
+ mediatek,gmac-id = <0>;
|
||||
+ phy-mode = "2500base-x";
|
||||
+ mediatek,switch = "mt7531";
|
||||
+ reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
|
||||
+
|
||||
+ fixed-link {
|
||||
+ speed = <2500>;
|
||||
+ full-duplex;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ spi_flash_pins: spi0-pins-func-1 {
|
||||
+ mux {
|
||||
+ function = "flash";
|
||||
+ groups = "spi0", "spi0_wp_hold";
|
||||
+ };
|
||||
+
|
||||
+ conf-pu {
|
||||
+ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
|
||||
+ drive-strength = <MTK_DRIVE_8mA>;
|
||||
+ bias-pull-up = <MTK_PUPD_SET_R1R0_00>;
|
||||
+ };
|
||||
+
|
||||
+ conf-pd {
|
||||
+ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
|
||||
+ drive-strength = <MTK_DRIVE_8mA>;
|
||||
+ bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ spic_pins: spi1-pins-func-1 {
|
||||
+ mux {
|
||||
+ function = "spi";
|
||||
+ groups = "spi1_2";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ uart1_pins: spi1-pins-func-3 {
|
||||
+ mux {
|
||||
+ function = "uart";
|
||||
+ groups = "uart1_2";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&spi0 {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi_flash_pins>;
|
||||
+ status = "okay";
|
||||
+ must_tx;
|
||||
+ enhance_timing;
|
||||
+ dma_ext;
|
||||
+ ipm_design;
|
||||
+ tick_dly = <2>;
|
||||
+ sample_sel = <0>;
|
||||
+
|
||||
+ spi_nand@1 {
|
||||
+ compatible = "spi-nand";
|
||||
+ reg = <1>;
|
||||
+ spi-max-frequency = <20000000>;
|
||||
+
|
||||
+ partitions {
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ partition@0 {
|
||||
+ reg = <0x0 0x100000>;
|
||||
+ label = "bl2";
|
||||
+ };
|
||||
+
|
||||
+ partition@100000 {
|
||||
+ reg = <0x100000 0x100000>;
|
||||
+ label = "factory";
|
||||
+ };
|
||||
+
|
||||
+ partition@200000 {
|
||||
+ reg = <0x200000 0x7e00000>;
|
||||
+ label = "ubi";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&watchdog {
|
||||
+ status = "disabled";
|
||||
+};
|
||||
--- /dev/null
|
||||
+++ b/mercusys_mr90x-v1_env
|
||||
@@ -0,0 +1,53 @@
|
||||
+ipaddr=192.168.1.1
|
||||
+serverip=192.168.1.254
|
||||
+loadaddr=0x46000000
|
||||
+console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0
|
||||
+bootargs=console=ttyS0,115200n8 console_msg_format=syslog
|
||||
+bootcmd=run check_buttons ; run boot_production ; run boot_recovery
|
||||
+bootconf=config-1
|
||||
+bootdelay=0
|
||||
+bootfile=openwrt-mediatek-filogic-mercusys_mr90x-v1-ubi-initramfs-recovery.itb
|
||||
+bootfile_bl2=openwrt-mediatek-filogic-mercusys_mr90x-v1-ubi-preloader.bin
|
||||
+bootfile_fip=openwrt-mediatek-filogic-mercusys_mr90x-v1-ubi-bl31-uboot.fip
|
||||
+bootfile_upg=openwrt-mediatek-filogic-mercusys_mr90x-v1-ubi-squashfs-sysupgrade.itb
|
||||
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
|
||||
+bootmenu_default=0
|
||||
+bootmenu_delay=0
|
||||
+bootmenu_title= [0;34m( ( ( [1;39mOpenWrt[0;34m ) ) ) [0;36m[SPI-NAND][0m
|
||||
+bootmenu_0=Initialize environment.=run _firstboot
|
||||
+bootmenu_0d=Run default boot command.=run boot_default
|
||||
+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
|
||||
+bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return
|
||||
+bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return
|
||||
+bootmenu_4=Load production system via TFTP then write to NAND.=noboot=1 ; replacevol=1 ; run boot_tftp_production ; noboot= ; replacevol= ; run bootmenu_confirm_return
|
||||
+bootmenu_5=Load recovery system via TFTP then write to NAND.=noboot=1 ; replacevol=1 ; run boot_tftp_recovery ; noboot= ; replacevol= ; run bootmenu_confirm_return
|
||||
+bootmenu_6=[31mLoad BL31+U-Boot FIP via TFTP then write to NAND.[0m=run boot_tftp_write_fip ; run bootmenu_confirm_return
|
||||
+bootmenu_7=[31mLoad BL2 preloader via TFTP then write to NAND.[0m=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
|
||||
+bootmenu_8=Reboot.=reset
|
||||
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
|
||||
+boot_default=run led_boot ; run bootcmd ; run boot_recovery ; replacevol=1 ; run boot_tftp_forever
|
||||
+boot_production=run led_boot ; run ubi_read_production && bootm $loadaddr#$bootconf
|
||||
+boot_recovery=run led_boot ; run ubi_read_recovery && bootm $loadaddr#$bootconf
|
||||
+boot_tftp=run led_boot ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf
|
||||
+boot_tftp_forever=run led_boot ; while true ; do run boot_tftp ; sleep 1 ; done
|
||||
+boot_tftp_production=run led_boot ; tftpboot $loadaddr $bootfile_upg && test $replacevol = 1 && iminfo $loadaddr && run ubi_write_production ; if test $noboot = 1 ; then else bootm $loadaddr#$bootconf ; fi
|
||||
+boot_tftp_recovery=run led_boot ; tftpboot $loadaddr $bootfile && test $replacevol = 1 && iminfo $loadaddr && run ubi_write_recovery ; if test $noboot = 1 ; then else bootm $loadaddr#$bootconf ; fi
|
||||
+boot_tftp_write_fip=run led_boot ; tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory
|
||||
+boot_tftp_write_bl2=run led_boot ; tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2
|
||||
+check_buttons=if button reset ; then run boot_tftp ; fi
|
||||
+ethaddr_factory=mtd read factory 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x40088000 0x6 ; setenv ethaddr_factory
|
||||
+led_boot=led green:status off ; led amber:status on
|
||||
+reset_factory=mw $loadaddr 0xff 0x1f000 ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ; ubi remove rootfs_data
|
||||
+snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x40000
|
||||
+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x1f000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x1f000 dynamic
|
||||
+ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi
|
||||
+ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs
|
||||
+ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery
|
||||
+ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data
|
||||
+ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip $filesize static && ubi write $loadaddr fip $filesize
|
||||
+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize
|
||||
+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize
|
||||
+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv
|
||||
+_firstboot=setenv _firstboot ; run ethaddr_factory ; 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 [33m$ver[0m"
|
||||
@@ -1,6 +1,6 @@
|
||||
--- /dev/null
|
||||
+++ b/configs/mt7981_routerich_ax3000_defconfig
|
||||
@@ -0,0 +1,107 @@
|
||||
@@ -0,0 +1,108 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
|
||||
+CONFIG_POSITION_INDEPENDENT=y
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
From a63456b9191fae2fe49f4b121e025792022e3950 Mon Sep 17 00:00:00 2001
|
||||
From: Markus Volk <f_l_k@t-online.de>
|
||||
Date: Wed, 30 Oct 2024 06:07:16 +0100
|
||||
Subject: [PATCH] scripts/dtc/pylibfdt/libfdt.i_shipped: Use SWIG_AppendOutput
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Swig has changed language specific AppendOutput functions. The helper
|
||||
macro SWIG_AppendOutput remains unchanged. Use that instead
|
||||
of SWIG_Python_AppendOutput, which would require an extra parameter
|
||||
since swig 4.3.0.
|
||||
|
||||
/home/flk/poky/build-test/tmp/work/qemux86_64-poky-linux/u-boot/2024.10/git/arch/x86/cpu/u-boot-64.lds
|
||||
| scripts/dtc/pylibfdt/libfdt_wrap.c: In function ‘_wrap_fdt_next_node’:
|
||||
| scripts/dtc/pylibfdt/libfdt_wrap.c:5581:17: error: too few arguments to function ‘SWIG_Python_AppendOutput’
|
||||
| 5581 | resultobj = SWIG_Python_AppendOutput(resultobj, val);
|
||||
| | ^~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Signed-off-by: Markus Volk <f_l_k@t-online.de>
|
||||
Reported-by: Rudi Heitbaum <rudi@heitbaum.com>
|
||||
Link: https://github.com/dgibson/dtc/pull/154
|
||||
---
|
||||
scripts/dtc/pylibfdt/libfdt.i_shipped | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/scripts/dtc/pylibfdt/libfdt.i_shipped
|
||||
+++ b/scripts/dtc/pylibfdt/libfdt.i_shipped
|
||||
@@ -1037,7 +1037,7 @@ typedef uint32_t fdt32_t;
|
||||
fdt_string(fdt1, fdt32_to_cpu($1->nameoff)));
|
||||
buff = PyByteArray_FromStringAndSize(
|
||||
(const char *)($1 + 1), fdt32_to_cpu($1->len));
|
||||
- resultobj = SWIG_Python_AppendOutput(resultobj, buff);
|
||||
+ resultobj = SWIG_AppendOutput(resultobj, buff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1076,7 +1076,7 @@ typedef uint32_t fdt32_t;
|
||||
|
||||
%typemap(argout) int *depth {
|
||||
PyObject *val = Py_BuildValue("i", *arg$argnum);
|
||||
- resultobj = SWIG_Python_AppendOutput(resultobj, val);
|
||||
+ resultobj = SWIG_AppendOutput(resultobj, val);
|
||||
}
|
||||
|
||||
%apply int *depth { int *depth };
|
||||
@@ -1092,7 +1092,7 @@ typedef uint32_t fdt32_t;
|
||||
if (PyTuple_GET_SIZE(resultobj) == 0)
|
||||
resultobj = val;
|
||||
else
|
||||
- resultobj = SWIG_Python_AppendOutput(resultobj, val);
|
||||
+ resultobj = SWIG_AppendOutput(resultobj, val);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ define Package/dsl-vrx200-firmware-xdsl-a
|
||||
CATEGORY:=Firmware
|
||||
TITLE:=VRX200 / VR9 CPE xDSL Annex A firmware
|
||||
URL:=http://www.lantiq.com/
|
||||
DEPENDS:=@TARGET_lantiq_xrx200
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy)
|
||||
endef
|
||||
|
||||
define Package/dsl-vrx200-firmware-xdsl-a/description
|
||||
@@ -52,7 +52,7 @@ define Package/dsl-vrx200-firmware-xdsl-b
|
||||
CATEGORY:=Firmware
|
||||
TITLE:=VRX200 / VR9 CPE xDSL Annex B firmware
|
||||
URL:=http://www.lantiq.com/
|
||||
DEPENDS:=@TARGET_lantiq_xrx200
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy)
|
||||
endef
|
||||
|
||||
define Package/dsl-vrx200-firmware-xdsl-b/description
|
||||
@@ -64,7 +64,7 @@ define Package/dsl-vrx200-firmware-xdsl-a-patch
|
||||
CATEGORY:=Firmware
|
||||
TITLE:=VRX200 / VR9 CPE xDSL Annex B to Annex A firmware patch
|
||||
URL:=http://www.lantiq.com/
|
||||
DEPENDS:=@TARGET_lantiq_xrx200 +dsl-vrx200-firmware-xdsl-b +bspatch
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy) +dsl-vrx200-firmware-xdsl-b +bspatch
|
||||
endef
|
||||
|
||||
define Package/dsl-vrx200-firmware-xdsl-a-patch/description
|
||||
@@ -76,7 +76,7 @@ define Package/dsl-vrx200-firmware-xdsl-b-patch
|
||||
CATEGORY:=Firmware
|
||||
TITLE:=VRX200 / VR9 CPE xDSL Annex A to Annex B firmware patch
|
||||
URL:=http://www.lantiq.com/
|
||||
DEPENDS:=@TARGET_lantiq_xrx200 +dsl-vrx200-firmware-xdsl-a +bspatch
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy) +dsl-vrx200-firmware-xdsl-a +bspatch
|
||||
endef
|
||||
|
||||
define Package/dsl-vrx200-firmware-xdsl-b-patch/description
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=linux-firmware
|
||||
PKG_VERSION:=20241017
|
||||
PKG_VERSION:=20241110
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_HASH:=a26c38ef5a83272f2b98ce8bf8ca1865a852a3deea49ce5a8dd804b914351273
|
||||
PKG_HASH:=32e6d3eb5c7fcb69fe5d58976c6deafa0d6552719c6e74835064aff049d25bd7
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
|
||||
@@ -10,7 +10,11 @@ Package/ath11k-firmware-wcn6750 = $(call Package/firmware-default,WCN6750 ath11k
|
||||
define Package/ath11k-firmware-wcn6750/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/WCN6750/hw1.0
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/ath11k/WCN6750/hw1.0/* $(1)/lib/firmware/ath11k/WCN6750/hw1.0/
|
||||
$(PKG_BUILD_DIR)/ath11k/WCN6750/hw1.0/board-2.bin $(1)/lib/firmware/ath11k/WCN6750/hw1.0/
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/ath11k/WCN6750/hw1.0/Notice.txt $(1)/lib/firmware/ath11k/WCN6750/hw1.0/
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/ath11k/WCN6750/hw1.0/sc7280/wpss.mbn $(1)/lib/firmware/ath11k/WCN6750/hw1.0/
|
||||
endef
|
||||
$(eval $(call BuildPackage,ath11k-firmware-wcn6750))
|
||||
|
||||
|
||||
@@ -140,6 +140,20 @@ define Package/rtl8761bu-firmware/install
|
||||
endef
|
||||
$(eval $(call BuildPackage,rtl8761bu-firmware))
|
||||
|
||||
Package/rtl8812a-firmware = $(call Package/firmware-default,RealTek RTL8812AU firmware)
|
||||
define Package/rtl8812a-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/rtw88
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw88/rtw8812a_fw.bin $(1)/lib/firmware/rtw88
|
||||
endef
|
||||
$(eval $(call BuildPackage,rtl8812a-firmware))
|
||||
|
||||
Package/rtl8821a-firmware = $(call Package/firmware-default,RealTek RTL8821AU firmware)
|
||||
define Package/rtl8821a-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/rtw88
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw88/rtw8821a_fw.bin $(1)/lib/firmware/rtw88
|
||||
endef
|
||||
$(eval $(call BuildPackage,rtl8821a-firmware))
|
||||
|
||||
Package/rtl8821ae-firmware = $(call Package/firmware-default,RealTek RTL8821AE firmware,,LICENCE.rtlwifi_firmware.txt)
|
||||
define Package/rtl8821ae-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/rtlwifi
|
||||
|
||||
@@ -2,13 +2,13 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=bcm27xx-gpu-fw
|
||||
PKG_VERSION:=2024.10.08
|
||||
PKG_VERSION:=2024.11.26
|
||||
PKG_VERSION_REAL:=1.$(subst .,,$(PKG_VERSION))
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=raspi-firmware_$(PKG_VERSION_REAL).orig.tar.xz
|
||||
PKG_SOURCE_URL:=https://github.com/raspberrypi/firmware/releases/download/$(PKG_VERSION_REAL)
|
||||
PKG_HASH:=11e7bedcd0f52729bbc82ae8de3cb3f52eb4ae3d6bdb3e11fbfdbea9c4a2b1c3
|
||||
PKG_HASH:=020dbcdbb30af5942a62fc3eb355449aba45276b67e864dee2522ff53fd936e6
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ endef
|
||||
KernelPackage/ltq-atm-danube=$(call KernelPackage/ltq-atm-template,danube,(TARGET_lantiq_xway||TARGET_lantiq_xway_legacy))
|
||||
KernelPackage/ltq-atm-ar9=$(call KernelPackage/ltq-atm-template,ar9,TARGET_lantiq_xway)
|
||||
KernelPackage/ltq-atm-ase=$(call KernelPackage/ltq-atm-template,ase,TARGET_lantiq_ase)
|
||||
KernelPackage/ltq-atm-vr9=$(call KernelPackage/ltq-atm-template,vr9,TARGET_lantiq_xrx200)
|
||||
KernelPackage/ltq-atm-vr9=$(call KernelPackage/ltq-atm-template,vr9,(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy))
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
@@ -21,14 +21,14 @@ define KernelPackage/ltq-deu-template
|
||||
TITLE:=deu driver for $(1)
|
||||
URL:=http://www.lantiq.com/
|
||||
VARIANT:=$(1)
|
||||
DEPENDS:=@TARGET_lantiq_$(2) +kmod-crypto-manager +kmod-crypto-des
|
||||
DEPENDS:=@$(2) +kmod-crypto-manager +kmod-crypto-des
|
||||
FILES:=$(PKG_BUILD_DIR)/ltq_deu_$(1).ko
|
||||
AUTOLOAD:=$(call AutoProbe,ltq_deu_$(1))
|
||||
endef
|
||||
|
||||
KernelPackage/ltq-deu-danube=$(call KernelPackage/ltq-deu-template,danube,xway)
|
||||
KernelPackage/ltq-deu-ar9=$(call KernelPackage/ltq-deu-template,ar9,xway)
|
||||
KernelPackage/ltq-deu-vr9=$(call KernelPackage/ltq-deu-template,vr9,xrx200)
|
||||
KernelPackage/ltq-deu-danube=$(call KernelPackage/ltq-deu-template,danube,TARGET_lantiq_xway)
|
||||
KernelPackage/ltq-deu-ar9=$(call KernelPackage/ltq-deu-template,ar9,TARGET_lantiq_xway)
|
||||
KernelPackage/ltq-deu-vr9=$(call KernelPackage/ltq-deu-template,vr9,(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy))
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
@@ -22,7 +22,7 @@ define KernelPackage/ltq-ptm-template
|
||||
TITLE:=ptm driver for $(1)
|
||||
URL:=http://www.lantiq.com/
|
||||
VARIANT:=$(1)
|
||||
DEPENDS:=@TARGET_lantiq_$(2)
|
||||
DEPENDS:=@$(2)
|
||||
ifeq ($(1),vr9)
|
||||
DEPENDS+= +PACKAGE_kmod-ltq-ptm-$(1):kmod-ltq-vdsl-vr9-mei
|
||||
else
|
||||
@@ -34,10 +34,10 @@ endif
|
||||
FILES:=$(PKG_BUILD_DIR)/ltq_ptm_$(1).ko
|
||||
endef
|
||||
|
||||
KernelPackage/ltq-ptm-danube=$(call KernelPackage/ltq-ptm-template,danube,xway)
|
||||
KernelPackage/ltq-ptm-ar9=$(call KernelPackage/ltq-ptm-template,ar9,xway)
|
||||
KernelPackage/ltq-ptm-ase=$(call KernelPackage/ltq-ptm-template,ase,ase)
|
||||
KernelPackage/ltq-ptm-vr9=$(call KernelPackage/ltq-ptm-template,vr9,xrx200)
|
||||
KernelPackage/ltq-ptm-danube=$(call KernelPackage/ltq-ptm-template,danube,TARGET_lantiq_xway)
|
||||
KernelPackage/ltq-ptm-ar9=$(call KernelPackage/ltq-ptm-template,ar9,TARGET_lantiq_xway)
|
||||
KernelPackage/ltq-ptm-ase=$(call KernelPackage/ltq-ptm-template,ase,TARGET_lantiq_ase)
|
||||
KernelPackage/ltq-ptm-vr9=$(call KernelPackage/ltq-ptm-template,vr9,(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy))
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
@@ -19,7 +19,7 @@ define Package/ltq-vdsl-vr9-vectoring-fw-installer
|
||||
TITLE:=VDSL2 Vectoring Firmware installer
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=@TARGET_lantiq_xrx200 +kmod-ltq-vdsl-vr9
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy) +kmod-ltq-vdsl-vr9
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
|
||||
@@ -29,7 +29,7 @@ define KernelPackage/ltq-vdsl-vr9-mei
|
||||
TITLE:=mei driver for vdsl
|
||||
SECTION:=sys
|
||||
SUBMENU:=Network Devices
|
||||
DEPENDS:=@TARGET_lantiq_xrx200 +kmod-ltq-ifxos +kmod-ltq-vectoring
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy) +kmod-ltq-ifxos +kmod-ltq-vectoring
|
||||
FILES:=$(PKG_BUILD_DIR)/src/drv_mei_cpe.ko
|
||||
AUTOLOAD:=$(call AutoLoad,50,drv_mei_cpe)
|
||||
endef
|
||||
@@ -44,7 +44,7 @@ define Package/ltq-vdsl-vr9-mei-test
|
||||
CATEGORY:=Network
|
||||
TITLE:=Lantiq mei driver test tool
|
||||
URL:=http://www.lantiq.com/
|
||||
DEPENDS:=@TARGET_lantiq_xrx200
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy)
|
||||
endef
|
||||
|
||||
define Package/ltq-vdsl-vr9-mei-test/description
|
||||
|
||||
@@ -29,7 +29,7 @@ define KernelPackage/ltq-vdsl-vr9
|
||||
TITLE:=vdsl driver
|
||||
SECTION:=sys
|
||||
SUBMENU:=Network Devices
|
||||
DEPENDS:=@TARGET_lantiq_xrx200 +kmod-ltq-vdsl-vr9-mei
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy) +kmod-ltq-vdsl-vr9-mei
|
||||
FILES:=$(PKG_BUILD_DIR)/src/drv_dsl_cpe_api.ko
|
||||
AUTOLOAD:=$(call AutoLoad,51,drv_dsl_cpe_api)
|
||||
endef
|
||||
|
||||
@@ -20,7 +20,7 @@ define KernelPackage/ltq-vectoring
|
||||
CATEGORY:=Kernel modules
|
||||
SUBMENU:=Network Devices
|
||||
TITLE:=driver for sending vectoring error samples
|
||||
DEPENDS:=@TARGET_lantiq_xrx200
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy)
|
||||
FILES:=$(PKG_BUILD_DIR)/$(MAKE_PATH)/ltq_vectoring.ko
|
||||
AUTOLOAD:=$(call AutoLoad,49,ltq_vectoring)
|
||||
endef
|
||||
@@ -38,7 +38,7 @@ define KernelPackage/ltq-vectoring-test
|
||||
CATEGORY:=Kernel modules
|
||||
SUBMENU:=Network Devices
|
||||
TITLE:=driver for testing the vectoring driver
|
||||
DEPENDS:=@TARGET_lantiq_xrx200 +kmod-ltq-vectoring
|
||||
DEPENDS:=@(TARGET_lantiq_xrx200||TARGET_lantiq_xrx200_legacy) +kmod-ltq-vectoring
|
||||
FILES:=$(PKG_BUILD_DIR)/$(MAKE_PATH)/ltq_vectoring_test.ko
|
||||
endef
|
||||
|
||||
|
||||
@@ -366,6 +366,26 @@ endef
|
||||
$(eval $(call KernelPackage,crypto-hmac))
|
||||
|
||||
|
||||
define KernelPackage/crypto-hw-atmel
|
||||
TITLE:=Microchip / Atmel ECC/SHA/RNG hw accelerator
|
||||
DEPENDS:=+kmod-i2c-core +kmod-crypto-ecdh +kmod-crypto-sha1 \
|
||||
+kmod-crypto-sha256 +kmod-lib-crc16 +kmod-random-core
|
||||
KCONFIG:= \
|
||||
CONFIG_CRYPTO_HW=y \
|
||||
CONFIG_CRYPTO_DEV_ATMEL_I2C \
|
||||
CONFIG_CRYPTO_DEV_ATMEL_ECC \
|
||||
CONFIG_CRYPTO_DEV_ATMEL_SHA204A
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/crypto/atmel-i2c.ko \
|
||||
$(LINUX_DIR)/drivers/crypto/atmel-ecc.ko \
|
||||
$(LINUX_DIR)/drivers/crypto/atmel-sha204a.ko
|
||||
AUTOLOAD:=$(call AutoLoad,09,atmel-i2c atmel-ecc atmel-sha204a)
|
||||
$(call AddDepends/crypto)
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,crypto-hw-atmel))
|
||||
|
||||
|
||||
define KernelPackage/crypto-hw-ccp
|
||||
TITLE:=AMD Cryptographic Coprocessor
|
||||
DEPENDS:= \
|
||||
|
||||
@@ -147,6 +147,24 @@ endef
|
||||
$(eval $(call KernelPackage,leds-apu))
|
||||
|
||||
|
||||
define KernelPackage/leds-ktd202x
|
||||
SUBMENU:=LED modules
|
||||
TITLE:=LED support for KTD202x Chips
|
||||
DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c
|
||||
KCONFIG:=CONFIG_LEDS_KTD202X
|
||||
FILES:= $(LINUX_DIR)/drivers/leds/rgb/leds-ktd202x.ko
|
||||
AUTOLOAD:=$(call AutoProbe,leds-ktd202x,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/leds-ktd202x/description
|
||||
This option enables support for the Kinetic KTD2026/KTD2027
|
||||
RGB/White LED driver found in different BQ mobile phones.
|
||||
It is a 3 or 4 channel LED driver programmed via an I2C interface.
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,leds-ktd202x))
|
||||
|
||||
|
||||
define KernelPackage/leds-mlxcpld
|
||||
SUBMENU:=$(LEDS_MENU)
|
||||
TITLE:=LED support for the Mellanox boards
|
||||
|
||||
@@ -575,6 +575,23 @@ endef
|
||||
|
||||
$(eval $(call KernelPackage,dsa-b53-mdio))
|
||||
|
||||
define KernelPackage/dsa-mv88e6060
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=Marvell MV88E6060 DSA Switch
|
||||
DEPENDS:=+kmod-dsa +kmod-phy-marvell
|
||||
KCONFIG:=CONFIG_NET_DSA_TAG_TRAILER \
|
||||
CONFIG_NET_DSA_MV88E6060
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/net/dsa/mv88e6060.ko \
|
||||
$(LINUX_DIR)/net/dsa/tag_trailer.ko
|
||||
AUTOLOAD:=$(call AutoLoad,41,mv88e6060,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/dsa-mv88e6060/description
|
||||
Kernel modules for MV88E6060 DSA switches
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,dsa-mv88e6060))
|
||||
|
||||
define KernelPackage/dsa-tag-dsa
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
@@ -953,7 +970,7 @@ $(eval $(call KernelPackage,8139cp))
|
||||
define KernelPackage/r8169
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=RealTek RTL-8169 PCI Gigabit Ethernet Adapter kernel support
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-mii +r8169-firmware +kmod-phy-realtek +kmod-mdio-devres
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-mii +r8169-firmware +kmod-phy-realtek +kmod-mdio-devres +kmod-hwmon-core
|
||||
KCONFIG:= \
|
||||
CONFIG_R8169 \
|
||||
CONFIG_R8169_LEDS=y
|
||||
|
||||
@@ -1048,6 +1048,40 @@ endef
|
||||
$(eval $(call KernelPackage,nfnetlink-queue))
|
||||
|
||||
|
||||
define KernelPackage/nfnetlink-cthelper
|
||||
TITLE:=Netfilter User space conntrack helpers
|
||||
FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink_cthelper.ko
|
||||
KCONFIG:=CONFIG_NF_CT_NETLINK_HELPER
|
||||
AUTOLOAD:=$(call AutoProbe,nfnetlink_cthelper)
|
||||
$(call AddDepends/nfnetlink,+kmod-nfnetlink-queue +kmod-nf-conntrack-netlink)
|
||||
endef
|
||||
|
||||
define KernelPackage/nfnetlink-cthelper/description
|
||||
Kernel modules support for a netlink-based connection tracking
|
||||
userspace helpers interface
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,nfnetlink-cthelper))
|
||||
|
||||
|
||||
define KernelPackage/nfnetlink-cttimeout
|
||||
TITLE:=Netfilter conntrack expectation timeout
|
||||
FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink_cttimeout.ko
|
||||
KCONFIG:=CONFIG_NF_CT_NETLINK_TIMEOUT
|
||||
AUTOLOAD:=$(call AutoProbe,nfnetlink_cttimeout)
|
||||
$(call AddDepends/nfnetlink,+kmod-nf-conntrack @KERNEL_NF_CONNTRACK_TIMEOUT)
|
||||
endef
|
||||
|
||||
define KernelPackage/nfnetlink-cttimeout/description
|
||||
Kernel modules support for a netlink-based connection tracking
|
||||
userspace timeout interface
|
||||
|
||||
Requires CONFIG_NF_CONNTRACK_TIMEOUT (only enabled for non-small flash devices)
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,nfnetlink-cttimeout))
|
||||
|
||||
|
||||
define KernelPackage/nf-conntrack-netlink
|
||||
TITLE:=Connection tracking netlink interface
|
||||
FILES:=$(LINUX_DIR)/net/netfilter/nf_conntrack_netlink.ko
|
||||
|
||||
@@ -519,6 +519,23 @@ endef
|
||||
$(eval $(call KernelPackage,usb-dwc3))
|
||||
|
||||
|
||||
define KernelPackage/usb-dwc3-octeon
|
||||
TITLE:=DWC3 Cavium Octeon USB driver
|
||||
DEPENDS:=@TARGET_octeon +kmod-usb-dwc3
|
||||
KCONFIG:= CONFIG_USB_DWC3_OCTEON
|
||||
FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-octeon.ko
|
||||
AUTOLOAD:=$(call AutoProbe,dwc3-octeon,1)
|
||||
$(call AddDepends/usb)
|
||||
endef
|
||||
|
||||
define KernelPackage/usb-dwc3-octeon/description
|
||||
This driver adds support for Cavium Octeon platforms with DesignWare
|
||||
Core USB3 IP.
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,usb-dwc3-octeon))
|
||||
|
||||
|
||||
define KernelPackage/usb-dwc3-qcom
|
||||
TITLE:=DWC3 Qualcomm USB driver
|
||||
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax) +kmod-usb-dwc3
|
||||
|
||||
@@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=6.11.2
|
||||
PKG_VERSION:=6.12.6
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/
|
||||
PKG_HASH:=700ea5abef8dde9e3c6df2acd32ff443da735d773d56db9a80269e2237549b34
|
||||
PKG_HASH:=28ec39425a1b3270e1422d92a8131a6a3d8919cc13e8ee250c315e55d922ba68
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)backports-$(PKG_VERSION)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "../ath.h"
|
||||
#include "ath5k.h"
|
||||
#include "debug.h"
|
||||
@@ -71,7 +72,7 @@ static void ath5k_pci_read_cachesize(str
|
||||
@@ -73,7 +74,7 @@ static void ath5k_pci_read_cachesize(str
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
static bool
|
||||
ath5k_pci_eeprom_read(struct ath_common *common, u32 offset, u16 *data)
|
||||
@@ -79,6 +80,19 @@ ath5k_pci_eeprom_read(struct ath_common
|
||||
@@ -81,6 +82,19 @@ ath5k_pci_eeprom_read(struct ath_common
|
||||
struct ath5k_hw *ah = common->ah;
|
||||
u32 status, timeout;
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/*
|
||||
* Initialize EEPROM access
|
||||
*/
|
||||
@@ -122,6 +136,16 @@ static int ath5k_pci_eeprom_read_mac(str
|
||||
@@ -124,6 +138,16 @@ static int ath5k_pci_eeprom_read_mac(str
|
||||
u16 data;
|
||||
int octet;
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
};
|
||||
|
||||
static __le32 ath12k_wmi_tlv_hdr(u32 cmd, u32 len)
|
||||
@@ -2363,7 +2365,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
|
||||
@@ -2364,7 +2366,10 @@ int ath12k_wmi_send_scan_start_cmd(struc
|
||||
cmd->scan_id = cpu_to_le32(arg->scan_id);
|
||||
cmd->scan_req_id = cpu_to_le32(arg->scan_req_id);
|
||||
cmd->vdev_id = cpu_to_le32(arg->vdev_id);
|
||||
@@ -133,7 +133,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
cmd->notify_scan_events = cpu_to_le32(arg->notify_scan_events);
|
||||
|
||||
ath12k_wmi_copy_scan_event_cntrl_flags(cmd, arg);
|
||||
@@ -3083,6 +3088,110 @@ out:
|
||||
@@ -3084,6 +3089,110 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
int
|
||||
ath12k_wmi_send_twt_enable_cmd(struct ath12k *ar, u32 pdev_id)
|
||||
{
|
||||
@@ -5668,6 +5777,50 @@ static void ath12k_wmi_op_ep_tx_credits(
|
||||
@@ -5669,6 +5778,50 @@ static void ath12k_wmi_op_ep_tx_credits(
|
||||
wake_up(&ab->wmi_ab.tx_credits_wq);
|
||||
}
|
||||
|
||||
@@ -295,7 +295,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
static void ath12k_wmi_htc_tx_complete(struct ath12k_base *ab,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
@@ -7269,6 +7422,9 @@ static void ath12k_wmi_op_rx(struct ath1
|
||||
@@ -7270,6 +7423,9 @@ static void ath12k_wmi_op_rx(struct ath1
|
||||
case WMI_GTK_OFFLOAD_STATUS_EVENTID:
|
||||
ath12k_wmi_gtk_offload_status_event(ab, skb);
|
||||
break;
|
||||
@@ -307,7 +307,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
ath12k_dbg(ab, ATH12K_DBG_WMI, "Unknown eventid: 0x%x\n", id);
|
||||
--- a/drivers/net/wireless/ath/ath12k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
|
||||
@@ -3859,6 +3859,28 @@ struct wmi_init_country_cmd {
|
||||
@@ -3860,6 +3860,28 @@ struct wmi_init_country_cmd {
|
||||
} cc_info;
|
||||
} __packed;
|
||||
|
||||
@@ -336,7 +336,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
struct wmi_delba_send_cmd {
|
||||
__le32 tlv_header;
|
||||
__le32 vdev_id;
|
||||
@@ -3944,6 +3966,16 @@ struct ath12k_wmi_eht_rate_set_params {
|
||||
@@ -3945,6 +3967,16 @@ struct ath12k_wmi_eht_rate_set_params {
|
||||
#define MAX_6G_REG_RULES 5
|
||||
#define REG_US_5G_NUM_REG_RULES 4
|
||||
|
||||
@@ -353,7 +353,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
enum wmi_start_event_param {
|
||||
WMI_VDEV_START_RESP_EVENT = 0,
|
||||
WMI_VDEV_RESTART_RESP_EVENT,
|
||||
@@ -5546,11 +5578,17 @@ int ath12k_wmi_send_bcn_offload_control_
|
||||
@@ -5547,11 +5579,17 @@ int ath12k_wmi_send_bcn_offload_control_
|
||||
u32 vdev_id, u32 bcn_ctrl_op);
|
||||
int ath12k_wmi_send_init_country_cmd(struct ath12k *ar,
|
||||
struct ath12k_wmi_init_country_arg *arg);
|
||||
@@ -451,7 +451,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
enum ath12k_dev_flags {
|
||||
ATH12K_CAC_RUNNING,
|
||||
ATH12K_FLAG_CRASH_FLUSH,
|
||||
@@ -313,6 +319,8 @@ struct ath12k_vif_iter {
|
||||
@@ -319,6 +325,8 @@ struct ath12k_vif_iter {
|
||||
#define ATH12K_RX_RATE_TABLE_11AX_NUM 576
|
||||
#define ATH12K_RX_RATE_TABLE_NUM 320
|
||||
|
||||
@@ -460,7 +460,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
struct ath12k_rx_peer_rate_stats {
|
||||
u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];
|
||||
u64 vht_mcs_count[HAL_RX_MAX_MCS_VHT + 1];
|
||||
@@ -648,6 +656,13 @@ struct ath12k {
|
||||
@@ -654,6 +662,13 @@ struct ath12k {
|
||||
u32 freq_low;
|
||||
u32 freq_high;
|
||||
|
||||
@@ -474,7 +474,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
bool nlo_enabled;
|
||||
};
|
||||
|
||||
@@ -880,6 +895,8 @@ struct ath12k_base {
|
||||
@@ -886,6 +901,8 @@ struct ath12k_base {
|
||||
/* continuous recovery fail count */
|
||||
atomic_t fail_cont_count;
|
||||
unsigned long reset_fail_timeout;
|
||||
@@ -485,7 +485,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
u32 fw_crash_counter;
|
||||
--- a/drivers/net/wireless/ath/ath12k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/mac.c
|
||||
@@ -2947,6 +2947,11 @@ static void ath12k_bss_assoc(struct ath1
|
||||
@@ -2949,6 +2949,11 @@ static void ath12k_bss_assoc(struct ath1
|
||||
if (ret)
|
||||
ath12k_warn(ar->ab, "failed to set vdev %i OBSS PD parameters: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
@@ -497,7 +497,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
}
|
||||
|
||||
static void ath12k_bss_disassoc(struct ath12k *ar,
|
||||
@@ -3522,7 +3527,7 @@ void __ath12k_mac_scan_finish(struct ath
|
||||
@@ -3524,7 +3529,7 @@ void __ath12k_mac_scan_finish(struct ath
|
||||
ar->scan_channel = NULL;
|
||||
ar->scan.roc_freq = 0;
|
||||
cancel_delayed_work(&ar->scan.timeout);
|
||||
@@ -506,9 +506,9 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3783,7 +3788,12 @@ scan:
|
||||
@@ -3790,7 +3795,12 @@ scan:
|
||||
|
||||
ret = ath12k_start_scan(ar, &arg);
|
||||
ret = ath12k_start_scan(ar, arg);
|
||||
if (ret) {
|
||||
- ath12k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
||||
+ if (ret == -EBUSY)
|
||||
@@ -520,7 +520,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
ar->scan.state = ATH12K_SCAN_IDLE;
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
@@ -3802,6 +3812,11 @@ exit:
|
||||
@@ -3810,6 +3820,11 @@ exit:
|
||||
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
|
||||
@@ -532,7 +532,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -5986,7 +6001,7 @@ static int ath12k_mac_start(struct ath12
|
||||
@@ -5994,7 +6009,7 @@ static int ath12k_mac_start(struct ath12
|
||||
|
||||
/* TODO: Do we need to enable ANI? */
|
||||
|
||||
@@ -541,7 +541,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
|
||||
ar->num_started_vdevs = 0;
|
||||
ar->num_created_vdevs = 0;
|
||||
@@ -6166,6 +6181,9 @@ static void ath12k_mac_stop(struct ath12
|
||||
@@ -6174,6 +6189,9 @@ static void ath12k_mac_stop(struct ath12
|
||||
cancel_delayed_work_sync(&ar->scan.timeout);
|
||||
cancel_work_sync(&ar->regd_update_work);
|
||||
cancel_work_sync(&ar->ab->rfkill_work);
|
||||
@@ -551,7 +551,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) {
|
||||
@@ -6412,6 +6430,117 @@ static void ath12k_mac_op_update_vif_off
|
||||
@@ -6420,6 +6438,117 @@ static void ath12k_mac_op_update_vif_off
|
||||
ath12k_mac_update_vif_offload(arvif);
|
||||
}
|
||||
|
||||
@@ -669,7 +669,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
static int ath12k_mac_vdev_create(struct ath12k *ar, struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath12k_hw *ah = ar->ah;
|
||||
@@ -6526,6 +6655,7 @@ static int ath12k_mac_vdev_create(struct
|
||||
@@ -6534,6 +6663,7 @@ static int ath12k_mac_vdev_create(struct
|
||||
arvif->vdev_id, ret);
|
||||
goto err_peer_del;
|
||||
}
|
||||
@@ -677,7 +677,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
break;
|
||||
case WMI_VDEV_TYPE_STA:
|
||||
param_id = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
|
||||
@@ -6564,6 +6694,13 @@ static int ath12k_mac_vdev_create(struct
|
||||
@@ -6572,6 +6702,13 @@ static int ath12k_mac_vdev_create(struct
|
||||
arvif->vdev_id, ret);
|
||||
goto err_peer_del;
|
||||
}
|
||||
@@ -691,7 +691,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -6904,6 +7041,11 @@ static void ath12k_mac_op_remove_interfa
|
||||
@@ -6912,6 +7049,11 @@ static void ath12k_mac_op_remove_interfa
|
||||
ath12k_dbg(ab, ATH12K_DBG_MAC, "mac remove interface (vdev %d)\n",
|
||||
arvif->vdev_id);
|
||||
|
||||
@@ -703,7 +703,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
||||
ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
|
||||
if (ret)
|
||||
@@ -7744,6 +7886,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
|
||||
@@ -7752,6 +7894,14 @@ ath12k_mac_op_unassign_vif_chanctx(struc
|
||||
ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
|
||||
ath12k_mac_monitor_stop(ar);
|
||||
|
||||
@@ -718,7 +718,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
}
|
||||
|
||||
@@ -8282,6 +8432,14 @@ ath12k_mac_op_reconfig_complete(struct i
|
||||
@@ -8290,6 +8440,14 @@ ath12k_mac_op_reconfig_complete(struct i
|
||||
ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
|
||||
ar->pdev->pdev_id);
|
||||
|
||||
@@ -733,7 +733,7 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
if (ab->is_reset) {
|
||||
recovery_count = atomic_inc_return(&ab->recovery_count);
|
||||
|
||||
@@ -9331,6 +9489,9 @@ static void ath12k_mac_setup(struct ath1
|
||||
@@ -9339,6 +9497,9 @@ static void ath12k_mac_setup(struct ath1
|
||||
|
||||
INIT_WORK(&ar->wmi_mgmt_tx_work, ath12k_mgmt_over_wmi_tx_work);
|
||||
skb_queue_head_init(&ar->wmi_mgmt_tx_queue);
|
||||
@@ -888,36 +888,36 @@ Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
#endif
|
||||
--- a/drivers/net/wireless/ath/ath12k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath12k/hw.c
|
||||
@@ -926,6 +926,7 @@ static const struct ath12k_hw_params ath
|
||||
.supports_dynamic_smps_6ghz = true,
|
||||
|
||||
@@ -928,6 +928,7 @@ static const struct ath12k_hw_params ath
|
||||
.iova_mask = 0,
|
||||
|
||||
.supports_aspm = false,
|
||||
+ .current_cc_support = false,
|
||||
},
|
||||
{
|
||||
.name = "wcn7850 hw2.0",
|
||||
@@ -1004,6 +1005,7 @@ static const struct ath12k_hw_params ath
|
||||
.supports_dynamic_smps_6ghz = false,
|
||||
|
||||
@@ -1008,6 +1009,7 @@ static const struct ath12k_hw_params ath
|
||||
.iova_mask = ATH12K_PCIE_MAX_PAYLOAD_SIZE - 1,
|
||||
|
||||
.supports_aspm = true,
|
||||
+ .current_cc_support = true,
|
||||
},
|
||||
{
|
||||
.name = "qcn9274 hw2.0",
|
||||
@@ -1078,6 +1080,7 @@ static const struct ath12k_hw_params ath
|
||||
.supports_dynamic_smps_6ghz = true,
|
||||
|
||||
@@ -1084,6 +1086,7 @@ static const struct ath12k_hw_params ath
|
||||
.iova_mask = 0,
|
||||
|
||||
.supports_aspm = false,
|
||||
+ .current_cc_support = false,
|
||||
},
|
||||
};
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath12k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath12k/hw.h
|
||||
@@ -189,6 +189,7 @@ struct ath12k_hw_params {
|
||||
bool tcl_ring_retry:1;
|
||||
@@ -190,6 +190,7 @@ struct ath12k_hw_params {
|
||||
bool reoq_lut_support:1;
|
||||
bool supports_shadow_regs:1;
|
||||
bool supports_aspm:1;
|
||||
+ bool current_cc_support:1;
|
||||
|
||||
u32 num_tcl_banks;
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/drivers/net/wireless/ath/ath5k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/pci.c
|
||||
@@ -47,6 +47,8 @@ static const struct pci_device_id ath5k_
|
||||
{ PCI_VDEVICE(ATHEROS, 0x001b) }, /* 5413 Eagle */
|
||||
{ PCI_VDEVICE(ATHEROS, 0x001c) }, /* PCI-E cards */
|
||||
{ PCI_VDEVICE(ATHEROS, 0x001d) }, /* 2417 Nala */
|
||||
+ { PCI_VDEVICE(ATHEROS, 0xff16) }, /* 2413,2414 sx76x on lantiq_danube */
|
||||
+ { PCI_VDEVICE(ATHEROS, 0xff1a) }, /* 2417 arv45xx on lantiq_danube */
|
||||
{ PCI_VDEVICE(ATHEROS, 0xff1b) }, /* AR5BXB63 */
|
||||
{ 0 }
|
||||
};
|
||||
@@ -8,7 +8,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -2977,7 +2977,8 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||
@@ -2975,7 +2975,8 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||
{
|
||||
struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
|
||||
struct ieee80211_channel *channel;
|
||||
@@ -18,7 +18,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
|
||||
u16 ctl = NO_CTL;
|
||||
|
||||
if (!chan)
|
||||
@@ -2989,9 +2990,14 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||
@@ -2987,9 +2988,14 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||
channel = chan->chan;
|
||||
chan_pwr = min_t(int, channel->max_power * 2, MAX_COMBINED_POWER);
|
||||
new_pwr = min_t(int, chan_pwr, reg->power_limit);
|
||||
|
||||
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -2996,6 +2996,10 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||
@@ -2994,6 +2994,10 @@ void ath9k_hw_apply_txpower(struct ath_h
|
||||
if (ant_gain > max_gain)
|
||||
ant_reduction = ant_gain - max_gain;
|
||||
|
||||
|
||||
@@ -49,9 +49,9 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
||||
struct brcmf_mp_device *settings)
|
||||
{
|
||||
@@ -114,6 +144,8 @@ void brcmf_of_probe(struct device *dev,
|
||||
of_node_put(root);
|
||||
@@ -113,6 +143,8 @@ void brcmf_of_probe(struct device *dev,
|
||||
}
|
||||
of_node_put(root);
|
||||
|
||||
+ brcmf_of_probe_cc(dev, settings);
|
||||
+
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/drivers/staging/rtl8723bs/Kconfig
|
||||
+++ b/drivers/staging/rtl8723bs/Kconfig
|
||||
@@ -5,7 +5,6 @@ config RTL8723BS
|
||||
depends on m
|
||||
depends on WLAN && MMC && CFG80211
|
||||
depends on m
|
||||
- select CFG80211_WEXT
|
||||
depends on CRYPTO
|
||||
select BPAUTO_CRYPTO_LIB_ARC4
|
||||
help
|
||||
@@ -1,14 +0,0 @@
|
||||
--- a/backport-include/net/dropreason.h
|
||||
+++ b/backport-include/net/dropreason.h
|
||||
@@ -3,10 +3,9 @@
|
||||
|
||||
#include <linux/version.h>
|
||||
|
||||
+#include <net/dropreason-core.h>
|
||||
#if LINUX_VERSION_IS_GEQ(6,0,0)
|
||||
#include_next <net/dropreason.h>
|
||||
-#else
|
||||
-#include <net/dropreason-core.h>
|
||||
#endif
|
||||
|
||||
#if LINUX_VERSION_IS_LESS(6,4,0)
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/bus/mhi/host/trace.h
|
||||
+++ b/drivers/bus/mhi/host/trace.h
|
||||
@@ -103,7 +103,7 @@ TRACE_EVENT(mhi_gen_tre,
|
||||
@@ -104,7 +104,7 @@ TRACE_EVENT(mhi_gen_tre,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -8,8 +8,8 @@
|
||||
+ __assign_str(name, mhi_cntrl->mhi_dev->name);
|
||||
__entry->ch_num = mhi_chan->chan;
|
||||
__entry->wp = mhi_tre;
|
||||
__entry->tre_ptr = mhi_tre->ptr;
|
||||
@@ -131,7 +131,7 @@ TRACE_EVENT(mhi_intvec_states,
|
||||
__entry->tre_ptr = le64_to_cpu(mhi_tre->ptr);
|
||||
@@ -132,7 +132,7 @@ TRACE_EVENT(mhi_intvec_states,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -18,7 +18,7 @@
|
||||
__entry->local_ee = mhi_cntrl->ee;
|
||||
__entry->state = mhi_cntrl->dev_state;
|
||||
__entry->dev_ee = dev_ee;
|
||||
@@ -158,7 +158,7 @@ TRACE_EVENT(mhi_tryset_pm_state,
|
||||
@@ -159,7 +159,7 @@ TRACE_EVENT(mhi_tryset_pm_state,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -27,16 +27,16 @@
|
||||
if (pm_state)
|
||||
pm_state = __fls(pm_state);
|
||||
__entry->pm_state = pm_state;
|
||||
@@ -184,7 +184,7 @@ DECLARE_EVENT_CLASS(mhi_process_event_ri
|
||||
@@ -185,7 +185,7 @@ DECLARE_EVENT_CLASS(mhi_process_event_ri
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
- __assign_str(name);
|
||||
+ __assign_str(name, mhi_cntrl->mhi_dev->name);
|
||||
__entry->rp = rp;
|
||||
__entry->ptr = rp->ptr;
|
||||
__entry->dword0 = rp->dword[0];
|
||||
@@ -226,7 +226,7 @@ DECLARE_EVENT_CLASS(mhi_update_channel_s
|
||||
__entry->ptr = le64_to_cpu(rp->ptr);
|
||||
__entry->dword0 = le32_to_cpu(rp->dword[0]);
|
||||
@@ -227,7 +227,7 @@ DECLARE_EVENT_CLASS(mhi_update_channel_s
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -45,7 +45,7 @@
|
||||
__entry->ch_num = mhi_chan->chan;
|
||||
__entry->state = state;
|
||||
__entry->reason = reason;
|
||||
@@ -265,7 +265,7 @@ TRACE_EVENT(mhi_pm_st_transition,
|
||||
@@ -266,7 +266,7 @@ TRACE_EVENT(mhi_pm_st_transition,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
--- a/net/wireless/core.c
|
||||
+++ b/net/wireless/core.c
|
||||
@@ -165,11 +165,15 @@ int cfg80211_switch_netns(struct cfg8021
|
||||
list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
|
||||
if (!wdev->netdev)
|
||||
continue;
|
||||
+#if LINUX_VERSION_IS_GEQ(6,12,0)
|
||||
wdev->netdev->netns_local = false;
|
||||
+#endif
|
||||
err = dev_change_net_namespace(wdev->netdev, net, "wlan%d");
|
||||
if (err)
|
||||
break;
|
||||
+#if LINUX_VERSION_IS_GEQ(6,12,0)
|
||||
wdev->netdev->netns_local = true;
|
||||
+#endif
|
||||
}
|
||||
|
||||
if (err) {
|
||||
@@ -181,11 +185,15 @@ int cfg80211_switch_netns(struct cfg8021
|
||||
list) {
|
||||
if (!wdev->netdev)
|
||||
continue;
|
||||
+#if LINUX_VERSION_IS_GEQ(6,12,0)
|
||||
wdev->netdev->netns_local = false;
|
||||
+#endif
|
||||
err = dev_change_net_namespace(wdev->netdev, net,
|
||||
"wlan%d");
|
||||
WARN_ON(err);
|
||||
+#if LINUX_VERSION_IS_GEQ(6,12,0)
|
||||
wdev->netdev->netns_local = true;
|
||||
+#endif
|
||||
}
|
||||
|
||||
return err;
|
||||
@@ -1518,7 +1526,9 @@ static int cfg80211_netdev_notifier_call
|
||||
SET_NETDEV_DEVTYPE(dev, &wiphy_type);
|
||||
wdev->netdev = dev;
|
||||
/* can only change netns with wiphy */
|
||||
+#if LINUX_VERSION_IS_GEQ(6,12,0)
|
||||
dev->netns_local = true;
|
||||
+#endif
|
||||
|
||||
cfg80211_init_wdev(wdev);
|
||||
break;
|
||||
@@ -1,169 +0,0 @@
|
||||
From e0f83d268974dab0361d11904dfc9acec53f96a6 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Fri, 11 Oct 2024 17:12:17 +0000
|
||||
Subject: [PATCH] genetlink: hold RCU in genlmsg_mcast()
|
||||
|
||||
[ Upstream commit 56440d7ec28d60f8da3bfa09062b3368ff9b16db ]
|
||||
|
||||
While running net selftests with CONFIG_PROVE_RCU_LIST=y I saw
|
||||
one lockdep splat [1].
|
||||
|
||||
genlmsg_mcast() uses for_each_net_rcu(), and must therefore hold RCU.
|
||||
|
||||
Instead of letting all callers guard genlmsg_multicast_allns()
|
||||
with a rcu_read_lock()/rcu_read_unlock() pair, do it in genlmsg_mcast().
|
||||
|
||||
This also means the @flags parameter is useless, we need to always use
|
||||
GFP_ATOMIC.
|
||||
|
||||
[1]
|
||||
[10882.424136] =============================
|
||||
[10882.424166] WARNING: suspicious RCU usage
|
||||
[10882.424309] 6.12.0-rc2-virtme #1156 Not tainted
|
||||
[10882.424400] -----------------------------
|
||||
[10882.424423] net/netlink/genetlink.c:1940 RCU-list traversed in non-reader section!!
|
||||
[10882.424469]
|
||||
other info that might help us debug this:
|
||||
|
||||
[10882.424500]
|
||||
rcu_scheduler_active = 2, debug_locks = 1
|
||||
[10882.424744] 2 locks held by ip/15677:
|
||||
[10882.424791] #0: ffffffffb6b491b0 (cb_lock){++++}-{3:3}, at: genl_rcv (net/netlink/genetlink.c:1219)
|
||||
[10882.426334] #1: ffffffffb6b49248 (genl_mutex){+.+.}-{3:3}, at: genl_rcv_msg (net/netlink/genetlink.c:61 net/netlink/genetlink.c:57 net/netlink/genetlink.c:1209)
|
||||
[10882.426465]
|
||||
stack backtrace:
|
||||
[10882.426805] CPU: 14 UID: 0 PID: 15677 Comm: ip Not tainted 6.12.0-rc2-virtme #1156
|
||||
[10882.426919] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
|
||||
[10882.427046] Call Trace:
|
||||
[10882.427131] <TASK>
|
||||
[10882.427244] dump_stack_lvl (lib/dump_stack.c:123)
|
||||
[10882.427335] lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
|
||||
[10882.427387] genlmsg_multicast_allns (net/netlink/genetlink.c:1940 (discriminator 7) net/netlink/genetlink.c:1977 (discriminator 7))
|
||||
[10882.427436] l2tp_tunnel_notify.constprop.0 (net/l2tp/l2tp_netlink.c:119) l2tp_netlink
|
||||
[10882.427683] l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:253) l2tp_netlink
|
||||
[10882.427748] genl_family_rcv_msg_doit (net/netlink/genetlink.c:1115)
|
||||
[10882.427834] genl_rcv_msg (net/netlink/genetlink.c:1195 net/netlink/genetlink.c:1210)
|
||||
[10882.427877] ? __pfx_l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:186) l2tp_netlink
|
||||
[10882.427927] ? __pfx_genl_rcv_msg (net/netlink/genetlink.c:1201)
|
||||
[10882.427959] netlink_rcv_skb (net/netlink/af_netlink.c:2551)
|
||||
[10882.428069] genl_rcv (net/netlink/genetlink.c:1220)
|
||||
[10882.428095] netlink_unicast (net/netlink/af_netlink.c:1332 net/netlink/af_netlink.c:1357)
|
||||
[10882.428140] netlink_sendmsg (net/netlink/af_netlink.c:1901)
|
||||
[10882.428210] ____sys_sendmsg (net/socket.c:729 (discriminator 1) net/socket.c:744 (discriminator 1) net/socket.c:2607 (discriminator 1))
|
||||
|
||||
Fixes: 33f72e6f0c67 ("l2tp : multicast notification to the registered listeners")
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Cc: James Chapman <jchapman@katalix.com>
|
||||
Cc: Tom Parkin <tparkin@katalix.com>
|
||||
Cc: Johannes Berg <johannes.berg@intel.com>
|
||||
Link: https://patch.msgid.link/20241011171217.3166614-1-edumazet@google.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
---
|
||||
drivers/target/target_core_user.c | 2 +-
|
||||
include/net/genetlink.h | 3 +--
|
||||
net/l2tp/l2tp_netlink.c | 4 ++--
|
||||
net/netlink/genetlink.c | 28 ++++++++++++++--------------
|
||||
net/wireless/nl80211.c | 8 ++------
|
||||
5 files changed, 20 insertions(+), 25 deletions(-)
|
||||
|
||||
--- a/backport-include/net/genetlink.h
|
||||
+++ b/backport-include/net/genetlink.h
|
||||
@@ -150,7 +150,7 @@ int genlmsg_multicast(const struct genl_
|
||||
#define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns)
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
- unsigned int group, gfp_t flags);
|
||||
+ unsigned int group);
|
||||
|
||||
#define genl_family_attrbuf LINUX_BACKPORT(genl_family_attrbuf)
|
||||
static inline struct nlattr **genl_family_attrbuf(struct genl_family *family)
|
||||
--- a/compat/backport-genetlink.c
|
||||
+++ b/compat/backport-genetlink.c
|
||||
@@ -198,23 +198,23 @@ int genlmsg_multicast(const struct genl_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(genlmsg_multicast);
|
||||
|
||||
-static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group,
|
||||
- gfp_t flags)
|
||||
+static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group)
|
||||
{
|
||||
struct sk_buff *tmp;
|
||||
struct net *net, *prev = NULL;
|
||||
bool delivered = false;
|
||||
int err;
|
||||
|
||||
+ rcu_read_lock();
|
||||
for_each_net_rcu(net) {
|
||||
if (prev) {
|
||||
- tmp = skb_clone(skb, flags);
|
||||
+ tmp = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!tmp) {
|
||||
err = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
err = nlmsg_multicast(prev->genl_sock, tmp,
|
||||
- portid, group, flags);
|
||||
+ portid, group, GFP_ATOMIC);
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
@@ -223,25 +223,29 @@ static int genlmsg_mcast(struct sk_buff
|
||||
|
||||
prev = net;
|
||||
}
|
||||
+ err = nlmsg_multicast(prev->genl_sock, skb, portid, group, GFP_ATOMIC);
|
||||
+
|
||||
+ rcu_read_unlock();
|
||||
|
||||
- err = nlmsg_multicast(prev->genl_sock, skb, portid, group, flags);
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
return err;
|
||||
return delivered ? 0 : -ESRCH;
|
||||
error:
|
||||
+ rcu_read_unlock();
|
||||
+
|
||||
kfree_skb(skb);
|
||||
return err;
|
||||
}
|
||||
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
- unsigned int group, gfp_t flags)
|
||||
+ unsigned int group)
|
||||
{
|
||||
group = __backport_genl_group(family, group);
|
||||
if (group == INVALID_GROUP)
|
||||
return -EINVAL;
|
||||
- return genlmsg_mcast(skb, portid, group, flags);
|
||||
+ return genlmsg_mcast(skb, portid, group);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -17956,10 +17956,8 @@ void nl80211_common_reg_change_event(enu
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
- rcu_read_lock();
|
||||
genlmsg_multicast_allns(&nl80211_fam, msg, 0,
|
||||
- NL80211_MCGRP_REGULATORY, GFP_ATOMIC);
|
||||
- rcu_read_unlock();
|
||||
+ NL80211_MCGRP_REGULATORY);
|
||||
|
||||
return;
|
||||
|
||||
@@ -18692,10 +18690,8 @@ void nl80211_send_beacon_hint_event(stru
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
- rcu_read_lock();
|
||||
genlmsg_multicast_allns(&nl80211_fam, msg, 0,
|
||||
- NL80211_MCGRP_REGULATORY, GFP_ATOMIC);
|
||||
- rcu_read_unlock();
|
||||
+ NL80211_MCGRP_REGULATORY);
|
||||
|
||||
return;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/marvell/mwl8k.c
|
||||
+++ b/drivers/net/wireless/marvell/mwl8k.c
|
||||
@@ -5709,6 +5709,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
||||
@@ -5712,6 +5712,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
||||
MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
|
||||
|
||||
static const struct pci_device_id mwl8k_pci_id_table[] = {
|
||||
|
||||
@@ -30,7 +30,7 @@ the card-specific structure.
|
||||
|
||||
#define MWIFIEX_DMA_ALIGN_SZ 64
|
||||
#define MWIFIEX_RX_HEADROOM 64
|
||||
@@ -100,7 +100,7 @@
|
||||
@@ -123,7 +123,7 @@
|
||||
#define MWIFIEX_RATE_INDEX_OFDM0 4
|
||||
|
||||
#define MWIFIEX_MAX_STA_NUM 3
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/marvell/mwl8k.c
|
||||
+++ b/drivers/net/wireless/marvell/mwl8k.c
|
||||
@@ -6295,6 +6295,8 @@ static int mwl8k_probe(struct pci_dev *p
|
||||
@@ -6298,6 +6298,8 @@ static int mwl8k_probe(struct pci_dev *p
|
||||
|
||||
priv->running_bsses = 0;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
return rc;
|
||||
|
||||
err_stop_firmware:
|
||||
@@ -6328,8 +6330,6 @@ static void mwl8k_remove(struct pci_dev
|
||||
@@ -6331,8 +6333,6 @@ static void mwl8k_remove(struct pci_dev
|
||||
return;
|
||||
priv = hw->priv;
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@ Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
mwifiex_recycle_cmd_node(adapter, cmd_node);
|
||||
queue_work(adapter->workqueue, &adapter->main_work);
|
||||
return -1;
|
||||
@@ -653,8 +732,8 @@ int mwifiex_send_cmd(struct mwifiex_priv
|
||||
@@ -655,8 +734,8 @@ int mwifiex_send_cmd(struct mwifiex_priv
|
||||
/* Return error, since the command preparation failed */
|
||||
if (ret) {
|
||||
mwifiex_dbg(adapter, ERROR,
|
||||
@@ -127,7 +127,7 @@ Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
|
||||
return -1;
|
||||
}
|
||||
@@ -902,8 +981,9 @@ int mwifiex_process_cmdresp(struct mwifi
|
||||
@@ -904,8 +983,9 @@ int mwifiex_process_cmdresp(struct mwifi
|
||||
if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) {
|
||||
if (ret) {
|
||||
mwifiex_dbg(adapter, ERROR,
|
||||
@@ -139,7 +139,7 @@ Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
mwifiex_init_fw_complete(adapter);
|
||||
return -1;
|
||||
} else if (adapter->last_init_cmd == cmdresp_no)
|
||||
@@ -1265,8 +1345,8 @@ mwifiex_process_sleep_confirm_resp(struc
|
||||
@@ -1287,8 +1367,8 @@ mwifiex_process_sleep_confirm_resp(struc
|
||||
|
||||
if (command != HostCmd_CMD_802_11_PS_MODE_ENH) {
|
||||
mwifiex_dbg(adapter, ERROR,
|
||||
@@ -152,7 +152,7 @@ Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
|
||||
--- a/drivers/net/wireless/marvell/mwifiex/main.h
|
||||
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
|
||||
@@ -1084,6 +1084,8 @@ void mwifiex_cancel_all_pending_cmd(stru
|
||||
@@ -1100,6 +1100,8 @@ void mwifiex_cancel_all_pending_cmd(stru
|
||||
void mwifiex_cancel_pending_scan_cmd(struct mwifiex_adapter *adapter);
|
||||
void mwifiex_cancel_scan(struct mwifiex_adapter *adapter);
|
||||
|
||||
@@ -177,7 +177,7 @@ Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
adapter->cmd_wait_q.status = -1;
|
||||
--- a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
|
||||
+++ b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
|
||||
@@ -802,7 +802,8 @@ int mwifiex_uap_prepare_cmd(struct mwifi
|
||||
@@ -964,7 +964,8 @@ int mwifiex_uap_prepare_cmd(struct mwifi
|
||||
break;
|
||||
default:
|
||||
mwifiex_dbg(priv->adapter, ERROR,
|
||||
|
||||
@@ -0,0 +1,257 @@
|
||||
From 654653e718f6c55c6f29fd94cc8152a92c8166ac Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 24 Dec 2024 08:36:32 +0800
|
||||
Subject: [PATCH 1/2] rt2x00: respect the rt2800 hardware TX queue index
|
||||
|
||||
The Ralink TX queue register index is different from the Linux
|
||||
IEEE80211 queue id definition. Their conversion table is as follows:
|
||||
|
||||
Queue IEEE80211 Ralink
|
||||
AC_VO 0 3
|
||||
AC_VI 1 2
|
||||
AC_BE 2 0
|
||||
AC_BK 3 1
|
||||
|
||||
The TX queues are still functioning properly under the current
|
||||
configuration. I don't have evidence, but I believe there should
|
||||
be some differences in the internal hardware implementation of
|
||||
different TX queues, e.g. interrupt priority. so it's better to
|
||||
respect the queue index defined by the Ralink when we construct
|
||||
the TX rings and descriptors.
|
||||
|
||||
And the more important thing is that we are using the wrong queue
|
||||
index to calculate the register offset and mask in .conf_tx(),
|
||||
which resulted in writing incorrect AIFSN, CWMAX, CWMIN and TXOP
|
||||
values for all TX queues. This patch introduces a index conversion
|
||||
table to fix these parameters.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
drivers/net/wireless/ralink/rt2x00/rt2800.h | 24 ++++++------
|
||||
.../net/wireless/ralink/rt2x00/rt2800lib.c | 20 +++++++---
|
||||
.../net/wireless/ralink/rt2x00/rt2800mmio.c | 38 ++++++++++---------
|
||||
.../net/wireless/ralink/rt2x00/rt2x00queue.h | 20 ++++++++++
|
||||
4 files changed, 67 insertions(+), 35 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800.h
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800.h
|
||||
@@ -379,10 +379,10 @@
|
||||
|
||||
/*
|
||||
* WMM_AIFSN_CFG: Aifsn for each EDCA AC
|
||||
- * AIFSN0: AC_VO
|
||||
- * AIFSN1: AC_VI
|
||||
- * AIFSN2: AC_BE
|
||||
- * AIFSN3: AC_BK
|
||||
+ * AIFSN0: AC_BE
|
||||
+ * AIFSN1: AC_BK
|
||||
+ * AIFSN2: AC_VI
|
||||
+ * AIFSN3: AC_VO
|
||||
*/
|
||||
#define WMM_AIFSN_CFG 0x0214
|
||||
#define WMM_AIFSN_CFG_AIFSN0 FIELD32(0x0000000f)
|
||||
@@ -392,10 +392,10 @@
|
||||
|
||||
/*
|
||||
* WMM_CWMIN_CSR: CWmin for each EDCA AC
|
||||
- * CWMIN0: AC_VO
|
||||
- * CWMIN1: AC_VI
|
||||
- * CWMIN2: AC_BE
|
||||
- * CWMIN3: AC_BK
|
||||
+ * CWMIN0: AC_BE
|
||||
+ * CWMIN1: AC_BK
|
||||
+ * CWMIN2: AC_VI
|
||||
+ * CWMIN3: AC_VO
|
||||
*/
|
||||
#define WMM_CWMIN_CFG 0x0218
|
||||
#define WMM_CWMIN_CFG_CWMIN0 FIELD32(0x0000000f)
|
||||
@@ -405,10 +405,10 @@
|
||||
|
||||
/*
|
||||
* WMM_CWMAX_CSR: CWmax for each EDCA AC
|
||||
- * CWMAX0: AC_VO
|
||||
- * CWMAX1: AC_VI
|
||||
- * CWMAX2: AC_BE
|
||||
- * CWMAX3: AC_BK
|
||||
+ * CWMAX0: AC_BE
|
||||
+ * CWMAX1: AC_BK
|
||||
+ * CWMAX2: AC_VI
|
||||
+ * CWMAX3: AC_VO
|
||||
*/
|
||||
#define WMM_CWMAX_CFG 0x021c
|
||||
#define WMM_CWMAX_CFG_CWMAX0 FIELD32(0x0000000f)
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -835,7 +835,8 @@ void rt2800_write_tx_data(struct queue_e
|
||||
txdesc->key_idx : txdesc->u.ht.wcid);
|
||||
rt2x00_set_field32(&word, TXWI_W1_MPDU_TOTAL_BYTE_COUNT,
|
||||
txdesc->length);
|
||||
- rt2x00_set_field32(&word, TXWI_W1_PACKETID_QUEUE, entry->queue->qid);
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_PACKETID_QUEUE,
|
||||
+ rt2x00_ac_to_hwq(entry->queue->qid));
|
||||
rt2x00_set_field32(&word, TXWI_W1_PACKETID_ENTRY, (entry->entry_idx % 3) + 1);
|
||||
rt2x00_desc_write(txwi, 1, word);
|
||||
|
||||
@@ -1125,6 +1126,12 @@ void rt2800_txdone(struct rt2x00_dev *rt
|
||||
u32 reg;
|
||||
u8 qid;
|
||||
bool match;
|
||||
+ static const u8 rt2ac[] = {
|
||||
+ IEEE80211_AC_BE,
|
||||
+ IEEE80211_AC_BK,
|
||||
+ IEEE80211_AC_VI,
|
||||
+ IEEE80211_AC_VO,
|
||||
+ };
|
||||
|
||||
while (quota-- > 0 && kfifo_get(&rt2x00dev->txstatus_fifo, ®)) {
|
||||
/*
|
||||
@@ -1132,6 +1139,8 @@ void rt2800_txdone(struct rt2x00_dev *rt
|
||||
* guaranteed to be one of the TX QIDs .
|
||||
*/
|
||||
qid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_QUEUE);
|
||||
+ /* Convert Ralink hardware queue index to IEEE80211 queue id. */
|
||||
+ qid = rt2ac[qid];
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
|
||||
|
||||
if (unlikely(rt2x00queue_empty(queue))) {
|
||||
@@ -12188,8 +12197,9 @@ int rt2800_conf_tx(struct ieee80211_hw *
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
|
||||
|
||||
/* Update WMM TXOP register */
|
||||
- offset = WMM_TXOP0_CFG + (sizeof(u32) * (!!(queue_idx & 2)));
|
||||
- field.bit_offset = (queue_idx & 1) * 16;
|
||||
+ offset = WMM_TXOP0_CFG +
|
||||
+ (sizeof(u32) * (!!(rt2x00_ac_to_hwq(queue_idx) & 2)));
|
||||
+ field.bit_offset = (rt2x00_ac_to_hwq(queue_idx) & 1) * 16;
|
||||
field.bit_mask = 0xffff << field.bit_offset;
|
||||
|
||||
reg = rt2800_register_read(rt2x00dev, offset);
|
||||
@@ -12197,7 +12207,7 @@ int rt2800_conf_tx(struct ieee80211_hw *
|
||||
rt2800_register_write(rt2x00dev, offset, reg);
|
||||
|
||||
/* Update WMM registers */
|
||||
- field.bit_offset = queue_idx * 4;
|
||||
+ field.bit_offset = rt2x00_ac_to_hwq(queue_idx) * 4;
|
||||
field.bit_mask = 0xf << field.bit_offset;
|
||||
|
||||
reg = rt2800_register_read(rt2x00dev, WMM_AIFSN_CFG);
|
||||
@@ -12213,7 +12223,7 @@ int rt2800_conf_tx(struct ieee80211_hw *
|
||||
rt2800_register_write(rt2x00dev, WMM_CWMAX_CFG, reg);
|
||||
|
||||
/* Update EDCA registers */
|
||||
- offset = EDCA_AC0_CFG + (sizeof(u32) * queue_idx);
|
||||
+ offset = EDCA_AC0_CFG + (sizeof(u32) * rt2x00_ac_to_hwq(queue_idx));
|
||||
|
||||
reg = rt2800_register_read(rt2x00dev, offset);
|
||||
rt2x00_set_field32(®, EDCA_AC0_CFG_TX_OP, queue->txop);
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
|
||||
@@ -35,7 +35,7 @@ unsigned int rt2800mmio_get_dma_done(str
|
||||
case QID_AC_VI:
|
||||
case QID_AC_BE:
|
||||
case QID_AC_BK:
|
||||
- qid = queue->qid;
|
||||
+ qid = rt2x00_ac_to_hwq(queue->qid);
|
||||
idx = rt2x00mmio_register_read(rt2x00dev, TX_DTX_IDX(qid));
|
||||
break;
|
||||
case QID_MGMT:
|
||||
@@ -456,6 +456,7 @@ void rt2800mmio_kick_queue(struct data_q
|
||||
{
|
||||
struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
|
||||
struct queue_entry *entry;
|
||||
+ u8 qid;
|
||||
|
||||
switch (queue->qid) {
|
||||
case QID_AC_VO:
|
||||
@@ -464,7 +465,8 @@ void rt2800mmio_kick_queue(struct data_q
|
||||
case QID_AC_BK:
|
||||
WARN_ON_ONCE(rt2x00queue_empty(queue));
|
||||
entry = rt2x00queue_get_entry(queue, Q_INDEX);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(queue->qid),
|
||||
+ qid = rt2x00_ac_to_hwq(queue->qid);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX(qid),
|
||||
entry->entry_idx);
|
||||
hrtimer_start(&rt2x00dev->txstatus_timer,
|
||||
TXSTATUS_TIMEOUT, HRTIMER_MODE_REL);
|
||||
@@ -666,36 +668,36 @@ int rt2800mmio_init_queues(struct rt2x00
|
||||
* Initialize registers.
|
||||
*/
|
||||
entry_priv = rt2x00dev->tx[0].entries[0].priv_data;
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR0,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR3,
|
||||
entry_priv->desc_dma);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT0,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT3,
|
||||
rt2x00dev->tx[0].limit);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX0, 0);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX0, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX3, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX3, 0);
|
||||
|
||||
entry_priv = rt2x00dev->tx[1].entries[0].priv_data;
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR1,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR2,
|
||||
entry_priv->desc_dma);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT1,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT2,
|
||||
rt2x00dev->tx[1].limit);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX1, 0);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX1, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX2, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX2, 0);
|
||||
|
||||
entry_priv = rt2x00dev->tx[2].entries[0].priv_data;
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR2,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR0,
|
||||
entry_priv->desc_dma);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT2,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT0,
|
||||
rt2x00dev->tx[2].limit);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX2, 0);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX2, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX0, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX0, 0);
|
||||
|
||||
entry_priv = rt2x00dev->tx[3].entries[0].priv_data;
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR3,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR1,
|
||||
entry_priv->desc_dma);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT3,
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT1,
|
||||
rt2x00dev->tx[3].limit);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX3, 0);
|
||||
- rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX3, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_CTX_IDX1, 0);
|
||||
+ rt2x00mmio_register_write(rt2x00dev, TX_DTX_IDX1, 0);
|
||||
|
||||
rt2x00mmio_register_write(rt2x00dev, TX_BASE_PTR4, 0);
|
||||
rt2x00mmio_register_write(rt2x00dev, TX_MAX_CNT4, 0);
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
|
||||
@@ -57,6 +57,26 @@ enum data_queue_qid {
|
||||
};
|
||||
|
||||
/**
|
||||
+ * rt2x00_ac_to_hwq - Convert IEEE80211 queue id to Ralink hardware
|
||||
+ * queue register index.
|
||||
+ * @ac: TX queue id.
|
||||
+ */
|
||||
+static inline u8 rt2x00_ac_to_hwq(enum data_queue_qid ac)
|
||||
+{
|
||||
+ static const u8 ralink_queue_map[] = {
|
||||
+ [IEEE80211_AC_BE] = 0,
|
||||
+ [IEEE80211_AC_BK] = 1,
|
||||
+ [IEEE80211_AC_VI] = 2,
|
||||
+ [IEEE80211_AC_VO] = 3,
|
||||
+ };
|
||||
+
|
||||
+ if (unlikely(ac >= IEEE80211_NUM_ACS))
|
||||
+ return ac;
|
||||
+
|
||||
+ return ralink_queue_map[ac];
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* enum skb_frame_desc_flags: Flags for &struct skb_frame_desc
|
||||
*
|
||||
* @SKBDESC_DMA_MAPPED_RX: &skb_dma field has been mapped for RX
|
||||
@@ -0,0 +1,74 @@
|
||||
From aec50d1a30349759de0ac535f54c3441bf7ebef7 Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 2/2] rt2x00: increase the watchdog sampling frequency
|
||||
|
||||
Increase the sampling frequency of the watchdog when the hung
|
||||
counter reaches the threshold to avoid some unnecessary resets.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
.../net/wireless/ralink/rt2x00/rt2800lib.c | 45 +++++++++++++------
|
||||
1 file changed, 32 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -1320,26 +1320,45 @@ static bool rt2800_watchdog_hung(struct
|
||||
return true;
|
||||
}
|
||||
|
||||
+static inline bool check_dma_busy_rx(u32 reg_cfg, u32 reg_int)
|
||||
+{
|
||||
+ return (rt2x00_get_field32(reg_cfg, WPDMA_GLO_CFG_RX_DMA_BUSY) &&
|
||||
+ rt2x00_get_field32(reg_int, INT_SOURCE_CSR_RX_COHERENT));
|
||||
+}
|
||||
+
|
||||
+static inline bool check_dma_busy_tx(u32 reg_cfg, u32 reg_int)
|
||||
+{
|
||||
+ return (rt2x00_get_field32(reg_cfg, WPDMA_GLO_CFG_TX_DMA_BUSY) &&
|
||||
+ rt2x00_get_field32(reg_int, INT_SOURCE_CSR_TX_COHERENT));
|
||||
+}
|
||||
+
|
||||
static bool rt2800_watchdog_dma_busy(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
bool busy_rx, busy_tx;
|
||||
u32 reg_cfg = rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG);
|
||||
u32 reg_int = rt2800_register_read(rt2x00dev, INT_SOURCE_CSR);
|
||||
|
||||
- if (rt2x00_get_field32(reg_cfg, WPDMA_GLO_CFG_RX_DMA_BUSY) &&
|
||||
- rt2x00_get_field32(reg_int, INT_SOURCE_CSR_RX_COHERENT))
|
||||
- rt2x00dev->rxdma_busy++;
|
||||
- else
|
||||
- rt2x00dev->rxdma_busy = 0;
|
||||
-
|
||||
- if (rt2x00_get_field32(reg_cfg, WPDMA_GLO_CFG_TX_DMA_BUSY) &&
|
||||
- rt2x00_get_field32(reg_int, INT_SOURCE_CSR_TX_COHERENT))
|
||||
- rt2x00dev->txdma_busy++;
|
||||
- else
|
||||
- rt2x00dev->txdma_busy = 0;
|
||||
+ rt2x00dev->rxdma_busy = check_dma_busy_rx(reg_cfg, reg_int) ?
|
||||
+ rt2x00dev->rxdma_busy + 1 : 0;
|
||||
+ rt2x00dev->txdma_busy = check_dma_busy_tx(reg_cfg, reg_int) ?
|
||||
+ rt2x00dev->txdma_busy + 1 : 0;
|
||||
+
|
||||
+ if (rt2x00dev->rxdma_busy > 25 || rt2x00dev->txdma_busy > 25) {
|
||||
+ int cnt;
|
||||
+ for (cnt = 0; cnt < 10; cnt++) {
|
||||
+ msleep(5);
|
||||
+ reg_cfg = rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG);
|
||||
+ reg_int = rt2800_register_read(rt2x00dev, INT_SOURCE_CSR);
|
||||
+
|
||||
+ if (!check_dma_busy_rx(reg_cfg, reg_int))
|
||||
+ rt2x00dev->rxdma_busy = 0;
|
||||
+ if (!check_dma_busy_tx(reg_cfg, reg_int))
|
||||
+ rt2x00dev->txdma_busy = 0;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- busy_rx = rt2x00dev->rxdma_busy > 30;
|
||||
- busy_tx = rt2x00dev->txdma_busy > 30;
|
||||
+ busy_rx = rt2x00dev->rxdma_busy > 40;
|
||||
+ busy_tx = rt2x00dev->txdma_busy > 40;
|
||||
|
||||
if (!busy_rx && !busy_tx)
|
||||
return false;
|
||||
@@ -0,0 +1,77 @@
|
||||
From 2c5aad0f9990724cce48e0a53b66bc0438e4603d Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 1/4] rt2x00: always calibrate MT7620 when switching channel
|
||||
|
||||
Perform calibration work after each channel switching operation.
|
||||
This should help improve the rx/tx signal strength for MT7620.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
.../net/wireless/ralink/rt2x00/rt2800lib.c | 24 ++++++++++++++-----
|
||||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -5704,6 +5704,9 @@ static void rt2800_config_ps(struct rt2x
|
||||
}
|
||||
}
|
||||
|
||||
+static void rt2800_calibration_rt6352_stage1(struct rt2x00_dev *rt2x00dev);
|
||||
+static void rt2800_calibration_rt6352_stage2(struct rt2x00_dev *rt2x00dev);
|
||||
+
|
||||
void rt2800_config(struct rt2x00_dev *rt2x00dev,
|
||||
struct rt2x00lib_conf *libconf,
|
||||
const unsigned int flags)
|
||||
@@ -5718,10 +5721,18 @@ void rt2800_config(struct rt2x00_dev *rt
|
||||
*/
|
||||
rt2800_update_survey(rt2x00dev);
|
||||
|
||||
+ if (rt2x00_rt(rt2x00dev, RT6352) &&
|
||||
+ !test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags))
|
||||
+ rt2800_calibration_rt6352_stage1(rt2x00dev);
|
||||
+
|
||||
rt2800_config_channel(rt2x00dev, libconf->conf,
|
||||
&libconf->rf, &libconf->channel);
|
||||
rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
|
||||
libconf->conf->power_level);
|
||||
+
|
||||
+ if (rt2x00_rt(rt2x00dev, RT6352) &&
|
||||
+ !test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags))
|
||||
+ rt2800_calibration_rt6352_stage2(rt2x00dev);
|
||||
}
|
||||
if (flags & IEEE80211_CONF_CHANGE_POWER)
|
||||
rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
|
||||
@@ -10427,15 +10438,19 @@ static void rt2800_restore_rf_bbp_rt6352
|
||||
}
|
||||
}
|
||||
|
||||
-static void rt2800_calibration_rt6352(struct rt2x00_dev *rt2x00dev)
|
||||
+static void rt2800_calibration_rt6352_stage1(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
- u32 reg;
|
||||
-
|
||||
if (rt2x00_has_cap_external_pa(rt2x00dev) ||
|
||||
rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
||||
rt2800_restore_rf_bbp_rt6352(rt2x00dev);
|
||||
|
||||
rt2800_r_calibration(rt2x00dev);
|
||||
+}
|
||||
+
|
||||
+static void rt2800_calibration_rt6352_stage2(struct rt2x00_dev *rt2x00dev)
|
||||
+{
|
||||
+ u32 reg;
|
||||
+
|
||||
rt2800_rf_self_txdc_cal(rt2x00dev);
|
||||
rt2800_rxdcoc_calibration(rt2x00dev);
|
||||
rt2800_bw_filter_calibration(rt2x00dev, true);
|
||||
@@ -10766,9 +10781,6 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
|
||||
rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
|
||||
rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
|
||||
-
|
||||
- /* Do calibration and init PA/LNA */
|
||||
- rt2800_calibration_rt6352(rt2x00dev);
|
||||
}
|
||||
|
||||
static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
|
||||
@@ -0,0 +1,48 @@
|
||||
From aaa57924324c1ee77afa5e3effc95cc86158ddcc Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 2/4] rt2x00: rework link tuner for MT7620
|
||||
|
||||
Correct the VGC gain value for MT7620 and only do gain calibration
|
||||
for supported devices.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -5561,6 +5561,9 @@ static void rt2800_config_txpower(struct
|
||||
|
||||
void rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
+ if (rt2x00_rt(rt2x00dev, RT6352))
|
||||
+ return;
|
||||
+
|
||||
rt2800_config_txpower(rt2x00dev, rt2x00dev->hw->conf.chandef.chan,
|
||||
rt2x00dev->tx_power);
|
||||
}
|
||||
@@ -5773,9 +5776,10 @@ static u8 rt2800_get_default_vgc(struct
|
||||
rt2x00_rt(rt2x00dev, RT3593) ||
|
||||
rt2x00_rt(rt2x00dev, RT5390) ||
|
||||
rt2x00_rt(rt2x00dev, RT5392) ||
|
||||
- rt2x00_rt(rt2x00dev, RT5592) ||
|
||||
- rt2x00_rt(rt2x00dev, RT6352))
|
||||
+ rt2x00_rt(rt2x00dev, RT5592))
|
||||
vgc = 0x1c + (2 * rt2x00dev->lna_gain);
|
||||
+ else if(rt2x00_rt(rt2x00dev, RT6352))
|
||||
+ vgc = 0x04 + (2 * rt2x00dev->lna_gain);
|
||||
else
|
||||
vgc = 0x2e + rt2x00dev->lna_gain;
|
||||
} else { /* 5GHZ band */
|
||||
@@ -5828,7 +5832,8 @@ void rt2800_link_tuner(struct rt2x00_dev
|
||||
{
|
||||
u8 vgc;
|
||||
|
||||
- if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860C))
|
||||
+ if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860C) ||
|
||||
+ rt2x00_rt(rt2x00dev, RT6352))
|
||||
return;
|
||||
|
||||
/* When RSSI is better than a certain threshold, increase VGC
|
||||
@@ -0,0 +1,25 @@
|
||||
From b672507ca9f06bb17213036b16bc4f5c5bc65357 Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 3/4] rt2x00: correct MT7620 SDM mode register value
|
||||
|
||||
rt2x00_set_field8() is a mask writing function. If we want to set
|
||||
the BIT(7) for the SDM mode register here, we only need to fill "4"
|
||||
in the mask.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -3848,7 +3848,7 @@ static void rt2800_config_channel_rf7620
|
||||
|
||||
/* Default: XO=20MHz , SDM mode */
|
||||
rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
|
||||
- rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
|
||||
+ rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 4);
|
||||
rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
|
||||
|
||||
rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
|
||||
@@ -0,0 +1,60 @@
|
||||
From 2585ada646e4dcf152ab813a24d667e6903105f4 Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 4/4] rt2x00: fix register operation on RXIQ calibration
|
||||
|
||||
In rt2800_rxiq_calibration(), some variables are overwritten
|
||||
before being used. Based on the values of the relevant registers
|
||||
in other functions, I believe the correct operation should be
|
||||
bit mask writing.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -8846,7 +8846,7 @@ static void rt2800_rxiq_calibration(stru
|
||||
rt2x00_warn(rt2x00dev, "Timeout waiting for MAC status in RXIQ calibration\n");
|
||||
|
||||
bbpval = bbp4 & (~0x18);
|
||||
- bbpval = bbp4 | 0x00;
|
||||
+ bbpval = bbpval | 0x00;
|
||||
rt2800_bbp_write(rt2x00dev, 4, bbpval);
|
||||
|
||||
bbpval = rt2800_bbp_read(rt2x00dev, 21);
|
||||
@@ -8928,13 +8928,13 @@ static void rt2800_rxiq_calibration(stru
|
||||
for (ch_idx = 0; ch_idx < 2; ch_idx = ch_idx + 1) {
|
||||
if (ch_idx == 0) {
|
||||
rfval = rfb0r1 & (~0x3);
|
||||
- rfval = rfb0r1 | 0x1;
|
||||
+ rfval = rfval | 0x1;
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 0, 1, rfval);
|
||||
rfval = rfb0r2 & (~0x33);
|
||||
- rfval = rfb0r2 | 0x11;
|
||||
+ rfval = rfval | 0x11;
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 0, 2, rfval);
|
||||
rfval = rfb0r42 & (~0x50);
|
||||
- rfval = rfb0r42 | 0x10;
|
||||
+ rfval = rfval | 0x10;
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 0, 42, rfval);
|
||||
|
||||
rt2800_register_write(rt2x00dev, RF_CONTROL0, 0x00001006);
|
||||
@@ -8947,13 +8947,13 @@ static void rt2800_rxiq_calibration(stru
|
||||
rt2800_bbp_dcoc_write(rt2x00dev, 1, 0x00);
|
||||
} else {
|
||||
rfval = rfb0r1 & (~0x3);
|
||||
- rfval = rfb0r1 | 0x2;
|
||||
+ rfval = rfval | 0x2;
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 0, 1, rfval);
|
||||
rfval = rfb0r2 & (~0x33);
|
||||
- rfval = rfb0r2 | 0x22;
|
||||
+ rfval = rfval | 0x22;
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 0, 2, rfval);
|
||||
rfval = rfb0r42 & (~0x50);
|
||||
- rfval = rfb0r42 | 0x40;
|
||||
+ rfval = rfval | 0x40;
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 0, 42, rfval);
|
||||
|
||||
rt2800_register_write(rt2x00dev, RF_CONTROL0, 0x00002006);
|
||||
@@ -0,0 +1,230 @@
|
||||
From b48887d5de9921d0ff9e88068e3cd555a383d702 Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 1/2] rt2x00: fix RFCSR register init values for RT5592
|
||||
|
||||
Based on Raink proprietary driver 2.7.1.5, correct the initial
|
||||
values of some RFCSR registers for RT5592.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
.../net/wireless/ralink/rt2x00/rt2800lib.c | 122 ++++++++----------
|
||||
1 file changed, 53 insertions(+), 69 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -3576,9 +3576,8 @@ static void rt2800_config_channel_rf55xx
|
||||
|
||||
/* TODO RF27 <- tssi */
|
||||
|
||||
- rfcsr = rf->channel <= 10 ? 0x07 : 0x06;
|
||||
- rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 59, rfcsr);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 23, rf->channel <= 10 ? 0x08 : 0x07);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 59, rf->channel <= 4 ? 0x06 : 0x04);
|
||||
|
||||
if (is_11b) {
|
||||
/* CCK */
|
||||
@@ -3599,7 +3598,7 @@ static void rt2800_config_channel_rf55xx
|
||||
power_bound = POWER_BOUND;
|
||||
ep_reg = 0x2;
|
||||
} else {
|
||||
- rt2800_rfcsr_write(rt2x00dev, 10, 0x97);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 10, 0x95);
|
||||
/* FIMXE: RF11 overwrite */
|
||||
rt2800_rfcsr_write(rt2x00dev, 11, 0x40);
|
||||
rt2800_rfcsr_write(rt2x00dev, 25, 0xBF);
|
||||
@@ -3608,13 +3607,15 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2800_rfcsr_write(rt2x00dev, 37, 0x04);
|
||||
rt2800_rfcsr_write(rt2x00dev, 38, 0x85);
|
||||
rt2800_rfcsr_write(rt2x00dev, 40, 0x42);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 41, 0xBB);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 41, 0xAB);
|
||||
rt2800_rfcsr_write(rt2x00dev, 42, 0xD7);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 45, 0x41);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 45, 0x01);
|
||||
rt2800_rfcsr_write(rt2x00dev, 48, 0x00);
|
||||
rt2800_rfcsr_write(rt2x00dev, 57, 0x77);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 58, 0x19);
|
||||
rt2800_rfcsr_write(rt2x00dev, 60, 0x05);
|
||||
rt2800_rfcsr_write(rt2x00dev, 61, 0x01);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 62, 0x19);
|
||||
|
||||
/* TODO RF27 <- tssi */
|
||||
|
||||
@@ -3623,82 +3624,59 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2800_rfcsr_write(rt2x00dev, 12, 0x2E);
|
||||
rt2800_rfcsr_write(rt2x00dev, 13, 0x22);
|
||||
rt2800_rfcsr_write(rt2x00dev, 22, 0x60);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 23, 0x7F);
|
||||
- if (rf->channel <= 50)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 24, 0x09);
|
||||
- else if (rf->channel >= 52)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 24, 0x07);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x7E);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x07);
|
||||
rt2800_rfcsr_write(rt2x00dev, 39, 0x1C);
|
||||
rt2800_rfcsr_write(rt2x00dev, 43, 0x5B);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 44, 0X40);
|
||||
rt2800_rfcsr_write(rt2x00dev, 46, 0X00);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 51, 0xFE);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 52, 0x0C);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 54, 0xF8);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 51, 0xFD);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 52, 0x0E);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 55, 0x04);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 56, 0xBB);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 59, 0x7C);
|
||||
+
|
||||
if (rf->channel <= 50) {
|
||||
- rt2800_rfcsr_write(rt2x00dev, 55, 0x06),
|
||||
- rt2800_rfcsr_write(rt2x00dev, 56, 0xD3);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 44, 0X32);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xF9);
|
||||
} else if (rf->channel >= 52) {
|
||||
- rt2800_rfcsr_write(rt2x00dev, 55, 0x04);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 56, 0xBB);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 44, 0X2A);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xF8);
|
||||
}
|
||||
-
|
||||
- rt2800_rfcsr_write(rt2x00dev, 58, 0x15);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 59, 0x7F);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 62, 0x15);
|
||||
-
|
||||
} else if (rf->channel >= 100 && rf->channel <= 165) {
|
||||
-
|
||||
rt2800_rfcsr_write(rt2x00dev, 12, 0x0E);
|
||||
rt2800_rfcsr_write(rt2x00dev, 13, 0x42);
|
||||
rt2800_rfcsr_write(rt2x00dev, 22, 0x40);
|
||||
- if (rf->channel <= 153) {
|
||||
- rt2800_rfcsr_write(rt2x00dev, 23, 0x3C);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 24, 0x06);
|
||||
- } else if (rf->channel >= 155) {
|
||||
- rt2800_rfcsr_write(rt2x00dev, 23, 0x38);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 24, 0x05);
|
||||
- }
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 52, 0x06);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 55, 0x01);
|
||||
+
|
||||
if (rf->channel <= 138) {
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x7C);
|
||||
rt2800_rfcsr_write(rt2x00dev, 39, 0x1A);
|
||||
rt2800_rfcsr_write(rt2x00dev, 43, 0x3B);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 44, 0x20);
|
||||
rt2800_rfcsr_write(rt2x00dev, 46, 0x18);
|
||||
- } else if (rf->channel >= 140) {
|
||||
+ } else {
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x78);
|
||||
rt2800_rfcsr_write(rt2x00dev, 39, 0x18);
|
||||
rt2800_rfcsr_write(rt2x00dev, 43, 0x1B);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 44, 0x10);
|
||||
rt2800_rfcsr_write(rt2x00dev, 46, 0X08);
|
||||
}
|
||||
- if (rf->channel <= 124)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 51, 0xFC);
|
||||
- else if (rf->channel >= 126)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 51, 0xEC);
|
||||
- if (rf->channel <= 138)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 52, 0x06);
|
||||
- else if (rf->channel >= 140)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 52, 0x06);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 54, 0xEB);
|
||||
- if (rf->channel <= 138)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 55, 0x01);
|
||||
- else if (rf->channel >= 140)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 55, 0x00);
|
||||
- if (rf->channel <= 128)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 56, 0xBB);
|
||||
- else if (rf->channel >= 130)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 56, 0xAB);
|
||||
- if (rf->channel <= 116)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 58, 0x1D);
|
||||
- else if (rf->channel >= 118)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 58, 0x15);
|
||||
- if (rf->channel <= 138)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 59, 0x3F);
|
||||
- else if (rf->channel >= 140)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 59, 0x7C);
|
||||
- if (rf->channel <= 116)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 62, 0x1D);
|
||||
- else if (rf->channel >= 118)
|
||||
- rt2800_rfcsr_write(rt2x00dev, 62, 0x15);
|
||||
+
|
||||
+ if (rf->channel <= 114) {
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x02);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 44, 0x1A);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xEA);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 56, 0xB3);
|
||||
+ } else {
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x03);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 44, 0x0A);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xF9);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 56, 0x9B);
|
||||
+ }
|
||||
+
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 51, rf->channel <= 124 ? 0xFC : 0xEC);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 58, rf->channel <= 116 ? 0x1D : 0x15);
|
||||
+ rfcsr = (rf->channel >= 116 && rf->channel <= 138) ? 0x7E : 0x7C;
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 59, rfcsr);
|
||||
}
|
||||
|
||||
power_bound = POWER_BOUND_5G;
|
||||
@@ -3710,7 +3688,7 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2x00_set_field8(&rfcsr, RFCSR49_TX, power_bound);
|
||||
else
|
||||
rt2x00_set_field8(&rfcsr, RFCSR49_TX, info->default_power1);
|
||||
- if (is_type_ep)
|
||||
+ if (!is_type_ep)
|
||||
rt2x00_set_field8(&rfcsr, RFCSR49_EP, ep_reg);
|
||||
rt2800_rfcsr_write(rt2x00dev, 49, rfcsr);
|
||||
|
||||
@@ -3719,7 +3697,7 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2x00_set_field8(&rfcsr, RFCSR50_TX, power_bound);
|
||||
else
|
||||
rt2x00_set_field8(&rfcsr, RFCSR50_TX, info->default_power2);
|
||||
- if (is_type_ep)
|
||||
+ if (!is_type_ep)
|
||||
rt2x00_set_field8(&rfcsr, RFCSR50_EP, ep_reg);
|
||||
rt2800_rfcsr_write(rt2x00dev, 50, rfcsr);
|
||||
|
||||
@@ -3740,7 +3718,6 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
|
||||
|
||||
rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 6, 0xe4);
|
||||
|
||||
if (conf_is_ht40(conf))
|
||||
rt2800_rfcsr_write(rt2x00dev, 30, 0x16);
|
||||
@@ -8505,12 +8482,15 @@ static void rt2800_init_rfcsr_5392(struc
|
||||
|
||||
static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
+ u16 eeprom;
|
||||
+
|
||||
rt2800_rf_init_calibration(rt2x00dev, 30);
|
||||
|
||||
rt2800_rfcsr_write(rt2x00dev, 1, 0x3F);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
|
||||
rt2800_rfcsr_write(rt2x00dev, 3, 0x08);
|
||||
rt2800_rfcsr_write(rt2x00dev, 5, 0x10);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 6, 0xE4);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 6, 0xE0);
|
||||
rt2800_rfcsr_write(rt2x00dev, 7, 0x00);
|
||||
rt2800_rfcsr_write(rt2x00dev, 14, 0x00);
|
||||
rt2800_rfcsr_write(rt2x00dev, 15, 0x00);
|
||||
@@ -8526,9 +8506,13 @@ static void rt2800_init_rfcsr_5592(struc
|
||||
rt2800_rfcsr_write(rt2x00dev, 34, 0x07);
|
||||
rt2800_rfcsr_write(rt2x00dev, 35, 0x12);
|
||||
rt2800_rfcsr_write(rt2x00dev, 47, 0x0C);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 53, 0x22);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 53, 0x44);
|
||||
rt2800_rfcsr_write(rt2x00dev, 63, 0x07);
|
||||
|
||||
+ eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF2);
|
||||
+ if (!rt2x00_get_field16(eeprom, EEPROM_NIC_CONF2_CRYSTAL))
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 6, 0xE4);
|
||||
+
|
||||
rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
|
||||
msleep(1);
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
From 1847d817df5585f9d957d16ed2a56ceb41cf6df7 Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
||||
Subject: [PATCH 2/2] rt2x00: fix BBP register init values for RT5592
|
||||
|
||||
Based on Raink proprietary driver 2.7.1.5, correct the initial
|
||||
values of some BBP registers for RT5592.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
.../net/wireless/ralink/rt2x00/rt2800lib.c | 32 +++++++++----------
|
||||
1 file changed, 15 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -3746,6 +3746,7 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2800_bbp_write(rt2x00dev, 80, (rf->channel <= 14) ? 0x0E : 0x08);
|
||||
rt2800_bbp_write(rt2x00dev, 81, (rf->channel <= 14) ? 0x3A : 0x38);
|
||||
rt2800_bbp_write(rt2x00dev, 82, (rf->channel <= 14) ? 0x62 : 0x92);
|
||||
+ rt2800_bbp_write(rt2x00dev, 95, (rf->channel <= 14) ? 0x9A : 0x1A);
|
||||
|
||||
/* GLRT band configuration */
|
||||
rt2800_bbp_write(rt2x00dev, 195, 128);
|
||||
@@ -3758,7 +3759,7 @@ static void rt2800_config_channel_rf55xx
|
||||
rt2800_bbp_write(rt2x00dev, 196, (rf->channel <= 14) ? 0x32 : 0x20);
|
||||
rt2800_bbp_write(rt2x00dev, 195, 133);
|
||||
rt2800_bbp_write(rt2x00dev, 196, (rf->channel <= 14) ? 0x28 : 0x7F);
|
||||
- rt2800_bbp_write(rt2x00dev, 195, 124);
|
||||
+ rt2800_bbp_write(rt2x00dev, 195, 134);
|
||||
rt2800_bbp_write(rt2x00dev, 196, (rf->channel <= 14) ? 0x19 : 0x7F);
|
||||
}
|
||||
|
||||
@@ -4304,7 +4305,8 @@ static void rt2800_config_channel(struct
|
||||
rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
|
||||
rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
|
||||
rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
|
||||
- if (rt2x00_rt(rt2x00dev, RT6352))
|
||||
+ if (rt2x00_rt(rt2x00dev, RT5592) ||
|
||||
+ rt2x00_rt(rt2x00dev, RT6352))
|
||||
rt2800_bbp_write(rt2x00dev, 86, 0x38);
|
||||
else
|
||||
rt2800_bbp_write(rt2x00dev, 86, 0);
|
||||
@@ -4313,6 +4315,7 @@ static void rt2800_config_channel(struct
|
||||
if (rf->channel <= 14) {
|
||||
if (!rt2x00_rt(rt2x00dev, RT5390) &&
|
||||
!rt2x00_rt(rt2x00dev, RT5392) &&
|
||||
+ !rt2x00_rt(rt2x00dev, RT5592) &&
|
||||
!rt2x00_rt(rt2x00dev, RT6352)) {
|
||||
if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
|
||||
rt2800_bbp_write(rt2x00dev, 82, 0x62);
|
||||
@@ -4336,17 +4339,20 @@ static void rt2800_config_channel(struct
|
||||
else if (rt2x00_rt(rt2x00dev, RT3593) ||
|
||||
rt2x00_rt(rt2x00dev, RT3883))
|
||||
rt2800_bbp_write(rt2x00dev, 82, 0x82);
|
||||
- else if (!rt2x00_rt(rt2x00dev, RT6352))
|
||||
+ else if (!rt2x00_rt(rt2x00dev, RT5592) &&
|
||||
+ !rt2x00_rt(rt2x00dev, RT6352))
|
||||
rt2800_bbp_write(rt2x00dev, 82, 0xf2);
|
||||
|
||||
if (rt2x00_rt(rt2x00dev, RT3593) ||
|
||||
rt2x00_rt(rt2x00dev, RT3883))
|
||||
rt2800_bbp_write(rt2x00dev, 83, 0x9a);
|
||||
|
||||
- if (rt2x00_has_cap_external_lna_a(rt2x00dev))
|
||||
- rt2800_bbp_write(rt2x00dev, 75, 0x46);
|
||||
- else
|
||||
- rt2800_bbp_write(rt2x00dev, 75, 0x50);
|
||||
+ if (!rt2x00_rt(rt2x00dev, RT5592)) {
|
||||
+ if (rt2x00_has_cap_external_lna_a(rt2x00dev))
|
||||
+ rt2800_bbp_write(rt2x00dev, 75, 0x46);
|
||||
+ else
|
||||
+ rt2800_bbp_write(rt2x00dev, 75, 0x50);
|
||||
+ }
|
||||
}
|
||||
|
||||
reg = rt2800_register_read(rt2x00dev, TX_BAND_CFG);
|
||||
@@ -5783,12 +5789,10 @@ static inline void rt2800_set_vgc(struct
|
||||
if (rt2x00_rt(rt2x00dev, RT3572) ||
|
||||
rt2x00_rt(rt2x00dev, RT3593) ||
|
||||
rt2x00_rt(rt2x00dev, RT3883) ||
|
||||
+ rt2x00_rt(rt2x00dev, RT5592) ||
|
||||
rt2x00_rt(rt2x00dev, RT6352)) {
|
||||
rt2800_bbp_write_with_rx_chain(rt2x00dev, 66,
|
||||
vgc_level);
|
||||
- } else if (rt2x00_rt(rt2x00dev, RT5592)) {
|
||||
- rt2800_bbp_write(rt2x00dev, 83, qual->rssi > -65 ? 0x4a : 0x7a);
|
||||
- rt2800_bbp_write_with_rx_chain(rt2x00dev, 66, vgc_level);
|
||||
} else {
|
||||
rt2800_bbp_write(rt2x00dev, 66, vgc_level);
|
||||
}
|
||||
@@ -7016,7 +7020,6 @@ static void rt2800_init_bbp_5592(struct
|
||||
rt2800_bbp_write(rt2x00dev, 88, 0x90);
|
||||
rt2800_bbp_write(rt2x00dev, 91, 0x04);
|
||||
rt2800_bbp_write(rt2x00dev, 92, 0x02);
|
||||
- rt2800_bbp_write(rt2x00dev, 95, 0x9a);
|
||||
rt2800_bbp_write(rt2x00dev, 98, 0x12);
|
||||
rt2800_bbp_write(rt2x00dev, 103, 0xC0);
|
||||
rt2800_bbp_write(rt2x00dev, 104, 0x92);
|
||||
@@ -7027,6 +7030,7 @@ static void rt2800_init_bbp_5592(struct
|
||||
rt2800_bbp_write(rt2x00dev, 134, 0xD0);
|
||||
rt2800_bbp_write(rt2x00dev, 135, 0xF6);
|
||||
rt2800_bbp_write(rt2x00dev, 137, 0x0F);
|
||||
+ rt2800_bbp_write(rt2x00dev, 148, 0x84);
|
||||
|
||||
/* Initialize GLRT (Generalized Likehood Radio Test) */
|
||||
rt2800_init_bbp_5592_glrt(rt2x00dev);
|
||||
@@ -7051,12 +7055,6 @@ static void rt2800_init_bbp_5592(struct
|
||||
rt2x00_set_field8(&value, BBP254_BIT7, 1);
|
||||
rt2800_bbp_write(rt2x00dev, 254, value);
|
||||
}
|
||||
-
|
||||
- rt2800_init_freq_calibration(rt2x00dev);
|
||||
-
|
||||
- rt2800_bbp_write(rt2x00dev, 84, 0x19);
|
||||
- if (rt2x00_rt_rev_gte(rt2x00dev, RT5592, REV_RT5592C))
|
||||
- rt2800_bbp_write(rt2x00dev, 103, 0xc0);
|
||||
}
|
||||
|
||||
static void rt2800_init_bbp_6352(struct rt2x00_dev *rt2x00dev)
|
||||
@@ -52,9 +52,9 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
|
||||
[EEPROM_CHIP_ID] = 0x0000,
|
||||
[EEPROM_VERSION] = 0x0001,
|
||||
@@ -10404,8 +10422,10 @@ static void rt2800_calibration_rt6352(st
|
||||
u32 reg;
|
||||
|
||||
@@ -10428,8 +10446,10 @@ static void rt2800_restore_rf_bbp_rt6352
|
||||
static void rt2800_calibration_rt6352_stage1(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
if (rt2x00_has_cap_external_pa(rt2x00dev) ||
|
||||
- rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
||||
+ rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
|
||||
@@ -63,8 +63,8 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
+ }
|
||||
|
||||
rt2800_r_calibration(rt2x00dev);
|
||||
rt2800_rf_self_txdc_cal(rt2x00dev);
|
||||
@@ -10423,6 +10443,8 @@ static void rt2800_calibration_rt6352(st
|
||||
}
|
||||
@@ -10453,6 +10473,8 @@ static void rt2800_calibration_rt6352_st
|
||||
!rt2x00_has_cap_external_lna_bg(rt2x00dev))
|
||||
return;
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
*/
|
||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
||||
@@ -3836,14 +3836,16 @@ static void rt2800_config_channel_rf7620
|
||||
@@ -3842,14 +3842,16 @@ static void rt2800_config_channel_rf7620
|
||||
rt2x00_set_field8(&rfcsr, RFCSR19_K, rf->rf4);
|
||||
rt2800_rfcsr_write(rt2x00dev, 19, rfcsr);
|
||||
|
||||
- /* Default: XO=20MHz , SDM mode */
|
||||
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
|
||||
- rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
|
||||
- rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 4);
|
||||
- rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
|
||||
-
|
||||
- rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
|
||||
@@ -29,7 +29,7 @@
|
||||
+ if (rt2800_hw_get_chipver(rt2x00dev) > 1) {
|
||||
+ /* Default: XO=20MHz , SDM mode */
|
||||
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 16);
|
||||
+ rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80);
|
||||
+ rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 4);
|
||||
+ rt2800_rfcsr_write(rt2x00dev, 16, rfcsr);
|
||||
+
|
||||
+ rfcsr = rt2800_rfcsr_read(rt2x00dev, 21);
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
rfcsr = rt2800_rfcsr_read(rt2x00dev, 1);
|
||||
rt2x00_set_field8(&rfcsr, RFCSR1_TX2_EN_MT7620,
|
||||
@@ -3877,18 +3879,23 @@ static void rt2800_config_channel_rf7620
|
||||
@@ -3883,18 +3885,23 @@ static void rt2800_config_channel_rf7620
|
||||
rt2800_rfcsr_write_dccal(rt2x00dev, 59, 0x20);
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
if (!test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags)) {
|
||||
if (conf_is_ht40(conf)) {
|
||||
@@ -4002,25 +4009,29 @@ static void rt2800_config_alc_rt6352(str
|
||||
@@ -4008,25 +4015,29 @@ static void rt2800_config_alc_rt6352(str
|
||||
if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev, MAC_STATUS_CFG_BBP_RF_BUSY)))
|
||||
rt2x00_warn(rt2x00dev, "RF busy while configuring ALC\n");
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, mac_sys_ctrl);
|
||||
|
||||
rt2800_vco_calibration(rt2x00dev);
|
||||
@@ -4513,7 +4524,8 @@ static void rt2800_config_channel(struct
|
||||
@@ -4524,7 +4535,8 @@ static void rt2800_config_channel(struct
|
||||
if (rt2x00_rt(rt2x00dev, RT6352)) {
|
||||
/* BBP for GLRT BW */
|
||||
bbp = conf_is_ht40(conf) ?
|
||||
@@ -131,7 +131,7 @@
|
||||
0x15 : 0x1a;
|
||||
rt2800_bbp_glrt_write(rt2x00dev, 141, bbp);
|
||||
|
||||
@@ -6017,18 +6029,33 @@ static int rt2800_init_registers(struct
|
||||
@@ -6042,18 +6054,34 @@ static int rt2800_init_registers(struct
|
||||
} else if (rt2x00_rt(rt2x00dev, RT5350)) {
|
||||
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
|
||||
} else if (rt2x00_rt(rt2x00dev, RT6352)) {
|
||||
@@ -162,7 +162,8 @@
|
||||
+ rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000401);
|
||||
+ rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x000C0001);
|
||||
+ rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
|
||||
+ rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x00000000);
|
||||
+ rt2800_register_write(rt2x00dev, TX_PIN_CFG, 0x00150f0f);
|
||||
+ rt2800_register_write(rt2x00dev, TX_ALC_VGA3, 0x06060606);
|
||||
+ rt2800_register_write(rt2x00dev, TX0_BB_GAIN_ATTEN, 0x0);
|
||||
+ rt2800_register_write(rt2x00dev, TX1_BB_GAIN_ATTEN, 0x0);
|
||||
+ rt2800_register_write(rt2x00dev, TX0_RF_GAIN_ATTEN,
|
||||
@@ -177,7 +178,7 @@
|
||||
reg = rt2800_register_read(rt2x00dev, TX_ALC_CFG_1);
|
||||
rt2x00_set_field32(®, TX_ALC_CFG_1_ROS_BUSY_EN, 0);
|
||||
rt2800_register_write(rt2x00dev, TX_ALC_CFG_1, reg);
|
||||
@@ -7141,14 +7168,16 @@ static void rt2800_init_bbp_6352(struct
|
||||
@@ -7160,14 +7188,16 @@ static void rt2800_init_bbp_6352(struct
|
||||
rt2800_bbp_write(rt2x00dev, 188, 0x00);
|
||||
rt2800_bbp_write(rt2x00dev, 189, 0x00);
|
||||
|
||||
@@ -202,7 +203,7 @@
|
||||
|
||||
/* BBP for G band GLRT function (BBP_128 ~ BBP_221) */
|
||||
rt2800_bbp_glrt_write(rt2x00dev, 0, 0x00);
|
||||
@@ -10378,6 +10407,9 @@ static void rt2800_restore_rf_bbp_rt6352
|
||||
@@ -10404,6 +10434,9 @@ static void rt2800_restore_rf_bbp_rt6352
|
||||
rt2800_register_write(rt2x00dev, RF_BYPASS3, 0x0);
|
||||
}
|
||||
|
||||
@@ -212,7 +213,7 @@
|
||||
if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
|
||||
rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16);
|
||||
rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x23);
|
||||
@@ -10455,6 +10487,9 @@ static void rt2800_calibration_rt6352(st
|
||||
@@ -10485,6 +10518,9 @@ static void rt2800_calibration_rt6352_st
|
||||
rt2800_register_write(rt2x00dev, RF_BYPASS3, reg);
|
||||
}
|
||||
|
||||
@@ -222,7 +223,7 @@
|
||||
if (rt2x00_has_cap_external_lna_bg(rt2x00dev)) {
|
||||
rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x66);
|
||||
rt2800_rfcsr_write_chanreg(rt2x00dev, 17, 0x20);
|
||||
@@ -10545,31 +10580,36 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
@@ -10575,31 +10611,36 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
rt2800_rfcsr_write(rt2x00dev, 42, 0x5B);
|
||||
rt2800_rfcsr_write(rt2x00dev, 43, 0x00);
|
||||
|
||||
@@ -284,7 +285,7 @@
|
||||
|
||||
/* Initialize RF channel register to default value */
|
||||
rt2800_rfcsr_write_chanreg(rt2x00dev, 0, 0x03);
|
||||
@@ -10635,63 +10675,71 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
@@ -10665,63 +10706,71 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
|
||||
rt2800_rfcsr_write_bank(rt2x00dev, 6, 45, 0xC5);
|
||||
|
||||
@@ -411,7 +412,7 @@
|
||||
|
||||
/* Initialize RF DC calibration register to default value */
|
||||
rt2800_rfcsr_write_dccal(rt2x00dev, 0, 0x47);
|
||||
@@ -10754,12 +10802,17 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
@@ -10784,12 +10833,17 @@ static void rt2800_init_rfcsr_6352(struc
|
||||
rt2800_rfcsr_write_dccal(rt2x00dev, 62, 0x00);
|
||||
rt2800_rfcsr_write_dccal(rt2x00dev, 63, 0x00);
|
||||
|
||||
@@ -431,6 +432,6 @@
|
||||
+ rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
|
||||
+ rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Do calibration and init PA/LNA */
|
||||
rt2800_calibration_rt6352(rt2x00dev);
|
||||
static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
|
||||
|
||||
@@ -0,0 +1,374 @@
|
||||
From 140403599b74839b0a57c5397b7e8579e5332364 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 18 Sep 2024 01:53:55 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Constify some arrays and structs
|
||||
|
||||
These are never modified, so make them const:
|
||||
|
||||
card_enable_flow_8703b
|
||||
card_disable_flow_8703b
|
||||
rtw8703b_ops
|
||||
|
||||
rtw8723d_ops
|
||||
card_enable_flow_8723d
|
||||
card_disable_flow_8723d
|
||||
|
||||
trans_carddis_to_cardemu_8821c
|
||||
trans_cardemu_to_act_8821c
|
||||
trans_act_to_cardemu_8821c
|
||||
trans_cardemu_to_carddis_8821c
|
||||
card_enable_flow_8821c
|
||||
card_disable_flow_8821c
|
||||
rtw8821c_dig
|
||||
page_table_8821c
|
||||
rqpn_table_8821c
|
||||
prioq_addrs_8821c
|
||||
rtw8821c_ops
|
||||
|
||||
card_enable_flow_8822b
|
||||
card_disable_flow_8822b
|
||||
prioq_addrs_8822b
|
||||
rtw8822b_ops
|
||||
rtw8822b_edcca_th
|
||||
|
||||
card_enable_flow_8822c
|
||||
card_disable_flow_8822c
|
||||
prioq_addrs_8822c
|
||||
rtw8822c_ops
|
||||
rtw8822c_edcca_th
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/dae7994f-3491-40de-b537-ebf68df084bb@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/mac.c | 4 ++--
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 8 +++----
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 6 ++---
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 6 ++---
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 22 +++++++++----------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 10 ++++-----
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 10 ++++-----
|
||||
9 files changed, 35 insertions(+), 35 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -267,7 +267,7 @@ static void rtw_fw_scan_result(struct rt
|
||||
static void rtw_fw_adaptivity_result(struct rtw_dev *rtwdev, u8 *payload,
|
||||
u8 length)
|
||||
{
|
||||
- struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
|
||||
+ const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
|
||||
struct rtw_c2h_adaptivity *result = (struct rtw_c2h_adaptivity *)payload;
|
||||
|
||||
rtw_dbg(rtwdev, RTW_DBG_ADAPTIVITY,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -228,7 +228,7 @@ static int rtw_sub_pwr_seq_parser(struct
|
||||
}
|
||||
|
||||
static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
- const struct rtw_pwr_seq_cmd **cmd_seq)
|
||||
+ const struct rtw_pwr_seq_cmd * const *cmd_seq)
|
||||
{
|
||||
u8 cut_mask;
|
||||
u8 intf_mask;
|
||||
@@ -271,7 +271,7 @@ static int rtw_pwr_seq_parser(struct rtw
|
||||
static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
- const struct rtw_pwr_seq_cmd **pwr_seq;
|
||||
+ const struct rtw_pwr_seq_cmd * const *pwr_seq;
|
||||
u32 imr = 0;
|
||||
u8 rpwm;
|
||||
bool cur_pwr;
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1167,7 +1167,7 @@ enum rtw_fwcd_item {
|
||||
|
||||
/* hardware configuration for each IC */
|
||||
struct rtw_chip_info {
|
||||
- struct rtw_chip_ops *ops;
|
||||
+ const struct rtw_chip_ops *ops;
|
||||
u8 id;
|
||||
|
||||
const char *fw_name;
|
||||
@@ -1209,8 +1209,8 @@ struct rtw_chip_info {
|
||||
|
||||
/* init values */
|
||||
u8 sys_func_en;
|
||||
- const struct rtw_pwr_seq_cmd **pwr_on_seq;
|
||||
- const struct rtw_pwr_seq_cmd **pwr_off_seq;
|
||||
+ const struct rtw_pwr_seq_cmd * const *pwr_on_seq;
|
||||
+ const struct rtw_pwr_seq_cmd * const *pwr_off_seq;
|
||||
const struct rtw_rqpn *rqpn_table;
|
||||
const struct rtw_prioq_addrs *prioq_addrs;
|
||||
const struct rtw_page_table *page_table;
|
||||
@@ -1242,7 +1242,7 @@ struct rtw_chip_info {
|
||||
u8 bfer_su_max_num;
|
||||
u8 bfer_mu_max_num;
|
||||
|
||||
- struct rtw_hw_reg_offset *edcca_th;
|
||||
+ const struct rtw_hw_reg_offset *edcca_th;
|
||||
s8 l2h_th_ini_cs;
|
||||
s8 l2h_th_ini_ad;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -123,7 +123,7 @@ static void rtw_phy_cck_pd_init(struct r
|
||||
|
||||
void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l)
|
||||
{
|
||||
- struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
|
||||
+ const struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th;
|
||||
|
||||
rtw_write32_mask(rtwdev,
|
||||
edcca_th[EDCCA_TH_L2H_IDX].hw_reg.addr,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -481,14 +481,14 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
{TRANS_SEQ_END},
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_enable_flow_8703b[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8703b[] = {
|
||||
trans_pre_enable_8703b,
|
||||
trans_carddis_to_cardemu_8703b,
|
||||
trans_cardemu_to_act_8703b,
|
||||
NULL
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_disable_flow_8703b[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8703b[] = {
|
||||
trans_act_to_lps_8703b,
|
||||
trans_act_to_reset_mcu_8703b,
|
||||
trans_act_to_cardemu_8703b,
|
||||
@@ -1941,7 +1941,7 @@ static const struct coex_tdma_para tdma_
|
||||
{ {0x61, 0x08, 0x03, 0x11, 0x11} },
|
||||
};
|
||||
|
||||
-static struct rtw_chip_ops rtw8703b_ops = {
|
||||
+static const struct rtw_chip_ops rtw8703b_ops = {
|
||||
.mac_init = rtw8723x_mac_init,
|
||||
.dump_fw_crash = NULL,
|
||||
.shutdown = NULL,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -1430,7 +1430,7 @@ static void rtw8723d_pwr_track(struct rt
|
||||
dm_info->pwr_trk_triggered = false;
|
||||
}
|
||||
|
||||
-static struct rtw_chip_ops rtw8723d_ops = {
|
||||
+static const struct rtw_chip_ops rtw8723d_ops = {
|
||||
.phy_set_param = rtw8723d_phy_set_param,
|
||||
.read_efuse = rtw8723x_read_efuse,
|
||||
.query_rx_desc = rtw8723d_query_rx_desc,
|
||||
@@ -1788,7 +1788,7 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_enable_flow_8723d[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8723d[] = {
|
||||
trans_carddis_to_cardemu_8723d,
|
||||
trans_cardemu_to_act_8723d,
|
||||
NULL
|
||||
@@ -2004,7 +2004,7 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_disable_flow_8723d[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8723d[] = {
|
||||
trans_act_to_lps_8723d,
|
||||
trans_act_to_pre_carddis_8723d,
|
||||
trans_act_to_cardemu_8723d,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1254,7 +1254,7 @@ static void rtw8821c_fill_txdesc_checksu
|
||||
fill_txdesc_checksum_common(txdesc, 16);
|
||||
}
|
||||
|
||||
-static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
|
||||
{0x0086,
|
||||
RTW_PWR_CUT_ALL_MSK,
|
||||
RTW_PWR_INTF_SDIO_MSK,
|
||||
@@ -1292,7 +1292,7 @@ static struct rtw_pwr_seq_cmd trans_card
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static struct rtw_pwr_seq_cmd trans_cardemu_to_act_8821c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd trans_cardemu_to_act_8821c[] = {
|
||||
{0x0020,
|
||||
RTW_PWR_CUT_ALL_MSK,
|
||||
RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
|
||||
@@ -1396,7 +1396,7 @@ static struct rtw_pwr_seq_cmd trans_card
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static struct rtw_pwr_seq_cmd trans_act_to_cardemu_8821c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd trans_act_to_cardemu_8821c[] = {
|
||||
{0x0093,
|
||||
RTW_PWR_CUT_ALL_MSK,
|
||||
RTW_PWR_INTF_ALL_MSK,
|
||||
@@ -1454,7 +1454,7 @@ static struct rtw_pwr_seq_cmd trans_act_
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8821c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8821c[] = {
|
||||
{0x0007,
|
||||
RTW_PWR_CUT_ALL_MSK,
|
||||
RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
|
||||
@@ -1567,13 +1567,13 @@ static struct rtw_pwr_seq_cmd trans_card
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_enable_flow_8821c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8821c[] = {
|
||||
trans_carddis_to_cardemu_8821c,
|
||||
trans_cardemu_to_act_8821c,
|
||||
NULL
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_disable_flow_8821c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8821c[] = {
|
||||
trans_act_to_cardemu_8821c,
|
||||
trans_cardemu_to_carddis_8821c,
|
||||
NULL
|
||||
@@ -1629,7 +1629,7 @@ static const struct rtw_rfe_def rtw8821c
|
||||
[6] = RTW_DEF_RFE(8821c, 0, 0),
|
||||
};
|
||||
|
||||
-static struct rtw_hw_reg rtw8821c_dig[] = {
|
||||
+static const struct rtw_hw_reg rtw8821c_dig[] = {
|
||||
[0] = { .addr = 0xc50, .mask = 0x7f },
|
||||
};
|
||||
|
||||
@@ -1639,7 +1639,7 @@ static const struct rtw_ltecoex_addr rtw
|
||||
.rdata = LTECOEX_READ_DATA,
|
||||
};
|
||||
|
||||
-static struct rtw_page_table page_table_8821c[] = {
|
||||
+static const struct rtw_page_table page_table_8821c[] = {
|
||||
/* not sure what [0] stands for */
|
||||
{16, 16, 16, 14, 1},
|
||||
{16, 16, 16, 14, 1},
|
||||
@@ -1648,7 +1648,7 @@ static struct rtw_page_table page_table_
|
||||
{16, 16, 16, 14, 1},
|
||||
};
|
||||
|
||||
-static struct rtw_rqpn rqpn_table_8821c[] = {
|
||||
+static const struct rtw_rqpn rqpn_table_8821c[] = {
|
||||
/* not sure what [0] stands for */
|
||||
{RTW_DMA_MAPPING_NORMAL, RTW_DMA_MAPPING_NORMAL,
|
||||
RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW,
|
||||
@@ -1667,7 +1667,7 @@ static struct rtw_rqpn rqpn_table_8821c[
|
||||
RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
|
||||
};
|
||||
|
||||
-static struct rtw_prioq_addrs prioq_addrs_8821c = {
|
||||
+static const struct rtw_prioq_addrs prioq_addrs_8821c = {
|
||||
.prio[RTW_DMA_MAPPING_EXTRA] = {
|
||||
.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
|
||||
},
|
||||
@@ -1683,7 +1683,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
.wsize = true,
|
||||
};
|
||||
|
||||
-static struct rtw_chip_ops rtw8821c_ops = {
|
||||
+static const struct rtw_chip_ops rtw8821c_ops = {
|
||||
.phy_set_param = rtw8821c_phy_set_param,
|
||||
.read_efuse = rtw8821c_read_efuse,
|
||||
.query_rx_desc = rtw8821c_query_rx_desc,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -1978,13 +1978,13 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_enable_flow_8822b[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8822b[] = {
|
||||
trans_carddis_to_cardemu_8822b,
|
||||
trans_cardemu_to_act_8822b,
|
||||
NULL
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_disable_flow_8822b[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8822b[] = {
|
||||
trans_act_to_cardemu_8822b,
|
||||
trans_cardemu_to_carddis_8822b,
|
||||
NULL
|
||||
@@ -2156,7 +2156,7 @@ static const struct rtw_rqpn rqpn_table_
|
||||
RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
|
||||
};
|
||||
|
||||
-static struct rtw_prioq_addrs prioq_addrs_8822b = {
|
||||
+static const struct rtw_prioq_addrs prioq_addrs_8822b = {
|
||||
.prio[RTW_DMA_MAPPING_EXTRA] = {
|
||||
.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
|
||||
},
|
||||
@@ -2172,7 +2172,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
.wsize = true,
|
||||
};
|
||||
|
||||
-static struct rtw_chip_ops rtw8822b_ops = {
|
||||
+static const struct rtw_chip_ops rtw8822b_ops = {
|
||||
.phy_set_param = rtw8822b_phy_set_param,
|
||||
.read_efuse = rtw8822b_read_efuse,
|
||||
.query_rx_desc = rtw8822b_query_rx_desc,
|
||||
@@ -2521,7 +2521,7 @@ static const struct rtw_reg_domain coex_
|
||||
{0xc50, MASKBYTE0, RTW_REG_DOMAIN_MAC8},
|
||||
};
|
||||
|
||||
-static struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
|
||||
+static const struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
|
||||
[EDCCA_TH_L2H_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE0}, .offset = 0},
|
||||
[EDCCA_TH_H2L_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE1}, .offset = 0},
|
||||
};
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4874,13 +4874,13 @@ static const struct rtw_pwr_seq_cmd tran
|
||||
RTW_PWR_CMD_END, 0, 0},
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_enable_flow_8822c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_enable_flow_8822c[] = {
|
||||
trans_carddis_to_cardemu_8822c,
|
||||
trans_cardemu_to_act_8822c,
|
||||
NULL
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_seq_cmd *card_disable_flow_8822c[] = {
|
||||
+static const struct rtw_pwr_seq_cmd * const card_disable_flow_8822c[] = {
|
||||
trans_act_to_cardemu_8822c,
|
||||
trans_cardemu_to_carddis_8822c,
|
||||
NULL
|
||||
@@ -4972,7 +4972,7 @@ static const struct rtw_rqpn rqpn_table_
|
||||
RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH},
|
||||
};
|
||||
|
||||
-static struct rtw_prioq_addrs prioq_addrs_8822c = {
|
||||
+static const struct rtw_prioq_addrs prioq_addrs_8822c = {
|
||||
.prio[RTW_DMA_MAPPING_EXTRA] = {
|
||||
.rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2,
|
||||
},
|
||||
@@ -4988,7 +4988,7 @@ static struct rtw_prioq_addrs prioq_addr
|
||||
.wsize = true,
|
||||
};
|
||||
|
||||
-static struct rtw_chip_ops rtw8822c_ops = {
|
||||
+static const struct rtw_chip_ops rtw8822c_ops = {
|
||||
.phy_set_param = rtw8822c_phy_set_param,
|
||||
.read_efuse = rtw8822c_read_efuse,
|
||||
.query_rx_desc = rtw8822c_query_rx_desc,
|
||||
@@ -5301,7 +5301,7 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
-static struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
|
||||
+static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
|
||||
[EDCCA_TH_L2H_IDX] = {
|
||||
{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
|
||||
},
|
||||
@@ -0,0 +1,560 @@
|
||||
From bbb6f9be7f99464d5ab7e2f321fa728d33eeec9a Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Fri, 20 Sep 2024 22:27:30 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Parse the RX descriptor with a single function
|
||||
|
||||
rtw8703b_query_rx_desc(), rtw8723d_query_rx_desc(),
|
||||
rtw8821c_query_rx_desc(), rtw8822b_query_rx_desc(), and
|
||||
rtw8822c_query_rx_desc() are almost identical, so replace them all with
|
||||
a single function, rtw_rx_query_rx_desc().
|
||||
|
||||
Also, access the RX descriptor using a struct with __le32 members and
|
||||
le32_get_bits().
|
||||
|
||||
Tested with RTL8811CU, RTL8811AU, and RTL8812AU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Tested-by: Ping-Ke Shih <pkshih@realtek.com> # RTL8723DE and RTL8822CE
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 5 +-
|
||||
drivers/net/wireless/realtek/rtw88/pci.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 56 +--------------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 43 +-----------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 43 +-----------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 43 +-----------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 44 +-----------
|
||||
drivers/net/wireless/realtek/rtw88/rx.c | 70 +++++++++++++++++--
|
||||
drivers/net/wireless/realtek/rtw88/rx.h | 64 ++++++++---------
|
||||
drivers/net/wireless/realtek/rtw88/sdio.c | 3 +-
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 4 +-
|
||||
11 files changed, 106 insertions(+), 271 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -848,9 +848,8 @@ struct rtw_chip_ops {
|
||||
void (*phy_set_param)(struct rtw_dev *rtwdev);
|
||||
void (*set_channel)(struct rtw_dev *rtwdev, u8 channel,
|
||||
u8 bandwidth, u8 primary_chan_idx);
|
||||
- void (*query_rx_desc)(struct rtw_dev *rtwdev, u8 *rx_desc,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_rx_status *rx_status);
|
||||
+ void (*query_phy_status)(struct rtw_dev *rtwdev, u8 *phy_status,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat);
|
||||
u32 (*read_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
|
||||
u32 addr, u32 mask);
|
||||
bool (*write_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -1065,7 +1065,7 @@ static u32 rtw_pci_rx_napi(struct rtw_de
|
||||
dma_sync_single_for_cpu(rtwdev->dev, dma, RTK_PCI_RX_BUF_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
rx_desc = skb->data;
|
||||
- chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
|
||||
+ rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
|
||||
|
||||
/* offset from rx_desc to payload */
|
||||
pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -29,9 +29,6 @@
|
||||
#define TBTT_PROHIBIT_HOLD_TIME 0x80
|
||||
#define TBTT_PROHIBIT_HOLD_TIME_STOP_BCN 0x64
|
||||
|
||||
-/* raw pkt_stat->drv_info_sz is in unit of 8-bytes */
|
||||
-#define RX_DRV_INFO_SZ_UNIT_8703B 8
|
||||
-
|
||||
#define TRANS_SEQ_END \
|
||||
0xFFFF, \
|
||||
RTW_PWR_CUT_ALL_MSK, \
|
||||
@@ -1032,57 +1029,6 @@ static void query_phy_status(struct rtw_
|
||||
query_phy_status_ofdm(rtwdev, phy_status, pkt_stat);
|
||||
}
|
||||
|
||||
-static void rtw8703b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_rx_status *rx_status)
|
||||
-{
|
||||
- struct ieee80211_hdr *hdr;
|
||||
- u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
|
||||
- u8 *phy_status = NULL;
|
||||
-
|
||||
- memset(pkt_stat, 0, sizeof(*pkt_stat));
|
||||
-
|
||||
- pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
|
||||
- pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
|
||||
- pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
|
||||
- pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
|
||||
- GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
|
||||
- pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
|
||||
- pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
|
||||
- pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
|
||||
- pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
|
||||
- pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
|
||||
- pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
|
||||
- pkt_stat->ppdu_cnt = 0;
|
||||
- pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
|
||||
-
|
||||
- pkt_stat->drv_info_sz *= RX_DRV_INFO_SZ_UNIT_8703B;
|
||||
-
|
||||
- if (pkt_stat->is_c2h)
|
||||
- return;
|
||||
-
|
||||
- hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
|
||||
- pkt_stat->drv_info_sz);
|
||||
-
|
||||
- pkt_stat->bw = GET_RX_DESC_BW(rx_desc);
|
||||
-
|
||||
- if (pkt_stat->phy_status) {
|
||||
- phy_status = rx_desc + desc_sz + pkt_stat->shift;
|
||||
- query_phy_status(rtwdev, phy_status, pkt_stat);
|
||||
- }
|
||||
-
|
||||
- rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
|
||||
-
|
||||
- /* Rtl8723cs driver checks for size < 14 or size > 8192 and
|
||||
- * simply drops the packet. Maybe this should go into
|
||||
- * rtw_rx_fill_rx_status()?
|
||||
- */
|
||||
- if (pkt_stat->pkt_len == 0) {
|
||||
- rx_status->flag |= RX_FLAG_NO_PSDU;
|
||||
- rtw_dbg(rtwdev, RTW_DBG_RX, "zero length packet");
|
||||
- }
|
||||
-}
|
||||
-
|
||||
#define ADDA_ON_VAL_8703B 0x03c00014
|
||||
|
||||
static
|
||||
@@ -1948,7 +1894,7 @@ static const struct rtw_chip_ops rtw8703
|
||||
.read_efuse = rtw8703b_read_efuse,
|
||||
.phy_set_param = rtw8703b_phy_set_param,
|
||||
.set_channel = rtw8703b_set_channel,
|
||||
- .query_rx_desc = rtw8703b_query_rx_desc,
|
||||
+ .query_phy_status = query_phy_status,
|
||||
.read_rf = rtw_phy_read_rf_sipi,
|
||||
.write_rf = rtw_phy_write_rf_reg_sipi,
|
||||
.set_tx_power_index = rtw8723x_set_tx_power_index,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -227,47 +227,6 @@ static void query_phy_status(struct rtw_
|
||||
}
|
||||
}
|
||||
|
||||
-static void rtw8723d_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_rx_status *rx_status)
|
||||
-{
|
||||
- struct ieee80211_hdr *hdr;
|
||||
- u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
|
||||
- u8 *phy_status = NULL;
|
||||
-
|
||||
- memset(pkt_stat, 0, sizeof(*pkt_stat));
|
||||
-
|
||||
- pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
|
||||
- pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
|
||||
- pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
|
||||
- pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
|
||||
- GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
|
||||
- pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
|
||||
- pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
|
||||
- pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
|
||||
- pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
|
||||
- pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
|
||||
- pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
|
||||
- pkt_stat->ppdu_cnt = 0;
|
||||
- pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
|
||||
-
|
||||
- /* drv_info_sz is in unit of 8-bytes */
|
||||
- pkt_stat->drv_info_sz *= 8;
|
||||
-
|
||||
- /* c2h cmd pkt's rx/phy status is not interested */
|
||||
- if (pkt_stat->is_c2h)
|
||||
- return;
|
||||
-
|
||||
- hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
|
||||
- pkt_stat->drv_info_sz);
|
||||
- if (pkt_stat->phy_status) {
|
||||
- phy_status = rx_desc + desc_sz + pkt_stat->shift;
|
||||
- query_phy_status(rtwdev, phy_status, pkt_stat);
|
||||
- }
|
||||
-
|
||||
- rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
|
||||
-}
|
||||
-
|
||||
static bool rtw8723d_check_spur_ov_thres(struct rtw_dev *rtwdev,
|
||||
u8 channel, u32 thres)
|
||||
{
|
||||
@@ -1433,7 +1392,7 @@ static void rtw8723d_pwr_track(struct rt
|
||||
static const struct rtw_chip_ops rtw8723d_ops = {
|
||||
.phy_set_param = rtw8723d_phy_set_param,
|
||||
.read_efuse = rtw8723x_read_efuse,
|
||||
- .query_rx_desc = rtw8723d_query_rx_desc,
|
||||
+ .query_phy_status = query_phy_status,
|
||||
.set_channel = rtw8723d_set_channel,
|
||||
.mac_init = rtw8723x_mac_init,
|
||||
.shutdown = rtw8723d_shutdown,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -679,47 +679,6 @@ static void query_phy_status(struct rtw_
|
||||
}
|
||||
}
|
||||
|
||||
-static void rtw8821c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_rx_status *rx_status)
|
||||
-{
|
||||
- struct ieee80211_hdr *hdr;
|
||||
- u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
|
||||
- u8 *phy_status = NULL;
|
||||
-
|
||||
- memset(pkt_stat, 0, sizeof(*pkt_stat));
|
||||
-
|
||||
- pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
|
||||
- pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
|
||||
- pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
|
||||
- pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
|
||||
- GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
|
||||
- pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
|
||||
- pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
|
||||
- pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
|
||||
- pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
|
||||
- pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
|
||||
- pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
|
||||
- pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
|
||||
- pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
|
||||
-
|
||||
- /* drv_info_sz is in unit of 8-bytes */
|
||||
- pkt_stat->drv_info_sz *= 8;
|
||||
-
|
||||
- /* c2h cmd pkt's rx/phy status is not interested */
|
||||
- if (pkt_stat->is_c2h)
|
||||
- return;
|
||||
-
|
||||
- hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
|
||||
- pkt_stat->drv_info_sz);
|
||||
- if (pkt_stat->phy_status) {
|
||||
- phy_status = rx_desc + desc_sz + pkt_stat->shift;
|
||||
- query_phy_status(rtwdev, phy_status, pkt_stat);
|
||||
- }
|
||||
-
|
||||
- rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
|
||||
{
|
||||
@@ -1686,7 +1645,7 @@ static const struct rtw_prioq_addrs prio
|
||||
static const struct rtw_chip_ops rtw8821c_ops = {
|
||||
.phy_set_param = rtw8821c_phy_set_param,
|
||||
.read_efuse = rtw8821c_read_efuse,
|
||||
- .query_rx_desc = rtw8821c_query_rx_desc,
|
||||
+ .query_phy_status = query_phy_status,
|
||||
.set_channel = rtw8821c_set_channel,
|
||||
.mac_init = rtw8821c_mac_init,
|
||||
.read_rf = rtw_phy_read_rf,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -934,47 +934,6 @@ static void query_phy_status(struct rtw_
|
||||
}
|
||||
}
|
||||
|
||||
-static void rtw8822b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_rx_status *rx_status)
|
||||
-{
|
||||
- struct ieee80211_hdr *hdr;
|
||||
- u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
|
||||
- u8 *phy_status = NULL;
|
||||
-
|
||||
- memset(pkt_stat, 0, sizeof(*pkt_stat));
|
||||
-
|
||||
- pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
|
||||
- pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
|
||||
- pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
|
||||
- pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
|
||||
- GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
|
||||
- pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
|
||||
- pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
|
||||
- pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
|
||||
- pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
|
||||
- pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
|
||||
- pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
|
||||
- pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
|
||||
- pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
|
||||
-
|
||||
- /* drv_info_sz is in unit of 8-bytes */
|
||||
- pkt_stat->drv_info_sz *= 8;
|
||||
-
|
||||
- /* c2h cmd pkt's rx/phy status is not interested */
|
||||
- if (pkt_stat->is_c2h)
|
||||
- return;
|
||||
-
|
||||
- hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
|
||||
- pkt_stat->drv_info_sz);
|
||||
- if (pkt_stat->phy_status) {
|
||||
- phy_status = rx_desc + desc_sz + pkt_stat->shift;
|
||||
- query_phy_status(rtwdev, phy_status, pkt_stat);
|
||||
- }
|
||||
-
|
||||
- rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)
|
||||
{
|
||||
@@ -2175,7 +2134,7 @@ static const struct rtw_prioq_addrs prio
|
||||
static const struct rtw_chip_ops rtw8822b_ops = {
|
||||
.phy_set_param = rtw8822b_phy_set_param,
|
||||
.read_efuse = rtw8822b_read_efuse,
|
||||
- .query_rx_desc = rtw8822b_query_rx_desc,
|
||||
+ .query_phy_status = query_phy_status,
|
||||
.set_channel = rtw8822b_set_channel,
|
||||
.mac_init = rtw8822b_mac_init,
|
||||
.read_rf = rtw_phy_read_rf,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -2690,48 +2690,6 @@ static void query_phy_status(struct rtw_
|
||||
}
|
||||
}
|
||||
|
||||
-static void rtw8822c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_rx_status *rx_status)
|
||||
-{
|
||||
- struct ieee80211_hdr *hdr;
|
||||
- u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
|
||||
- u8 *phy_status = NULL;
|
||||
-
|
||||
- memset(pkt_stat, 0, sizeof(*pkt_stat));
|
||||
-
|
||||
- pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
|
||||
- pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
|
||||
- pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
|
||||
- pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
|
||||
- GET_RX_DESC_ENC_TYPE(rx_desc) != RX_DESC_ENC_NONE;
|
||||
- pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
|
||||
- pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
|
||||
- pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
|
||||
- pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
|
||||
- pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
|
||||
- pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
|
||||
- pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
|
||||
- pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
|
||||
-
|
||||
- /* drv_info_sz is in unit of 8-bytes */
|
||||
- pkt_stat->drv_info_sz *= 8;
|
||||
-
|
||||
- /* c2h cmd pkt's rx/phy status is not interested */
|
||||
- if (pkt_stat->is_c2h)
|
||||
- return;
|
||||
-
|
||||
- hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
|
||||
- pkt_stat->drv_info_sz);
|
||||
- pkt_stat->hdr = hdr;
|
||||
- if (pkt_stat->phy_status) {
|
||||
- phy_status = rx_desc + desc_sz + pkt_stat->shift;
|
||||
- query_phy_status(rtwdev, phy_status, pkt_stat);
|
||||
- }
|
||||
-
|
||||
- rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
rtw8822c_set_write_tx_power_ref(struct rtw_dev *rtwdev, u8 *tx_pwr_ref_cck,
|
||||
u8 *tx_pwr_ref_ofdm)
|
||||
@@ -4991,7 +4949,7 @@ static const struct rtw_prioq_addrs prio
|
||||
static const struct rtw_chip_ops rtw8822c_ops = {
|
||||
.phy_set_param = rtw8822c_phy_set_param,
|
||||
.read_efuse = rtw8822c_read_efuse,
|
||||
- .query_rx_desc = rtw8822c_query_rx_desc,
|
||||
+ .query_phy_status = query_phy_status,
|
||||
.set_channel = rtw8822c_set_channel,
|
||||
.mac_init = rtw8822c_mac_init,
|
||||
.dump_fw_crash = rtw8822c_dump_fw_crash,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
@@ -187,11 +187,10 @@ fill_rx_status:
|
||||
}
|
||||
EXPORT_SYMBOL(rtw_update_rx_freq_from_ie);
|
||||
|
||||
-void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_hdr *hdr,
|
||||
- struct ieee80211_rx_status *rx_status,
|
||||
- u8 *phy_status)
|
||||
+static void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat,
|
||||
+ struct ieee80211_hdr *hdr,
|
||||
+ struct ieee80211_rx_status *rx_status)
|
||||
{
|
||||
struct ieee80211_hw *hw = rtwdev->hw;
|
||||
u8 path;
|
||||
@@ -242,5 +241,64 @@ void rtw_rx_fill_rx_status(struct rtw_de
|
||||
}
|
||||
|
||||
rtw_rx_addr_match(rtwdev, pkt_stat, hdr);
|
||||
+
|
||||
+ /* Rtl8723cs driver checks for size < 14 or size > 8192 and
|
||||
+ * simply drops the packet.
|
||||
+ */
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8703B && pkt_stat->pkt_len == 0) {
|
||||
+ rx_status->flag |= RX_FLAG_NO_PSDU;
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_RX, "zero length packet");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void rtw_rx_query_rx_desc(struct rtw_dev *rtwdev, void *rx_desc8,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat,
|
||||
+ struct ieee80211_rx_status *rx_status)
|
||||
+{
|
||||
+ u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
|
||||
+ struct rtw_rx_desc *rx_desc = rx_desc8;
|
||||
+ struct ieee80211_hdr *hdr;
|
||||
+ u32 enc_type, swdec;
|
||||
+ void *phy_status;
|
||||
+
|
||||
+ memset(pkt_stat, 0, sizeof(*pkt_stat));
|
||||
+
|
||||
+ pkt_stat->pkt_len = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_PKT_LEN);
|
||||
+ pkt_stat->crc_err = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_CRC32);
|
||||
+ pkt_stat->icv_err = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_ICV_ERR);
|
||||
+ pkt_stat->drv_info_sz = le32_get_bits(rx_desc->w0,
|
||||
+ RTW_RX_DESC_W0_DRV_INFO_SIZE);
|
||||
+ enc_type = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_ENC_TYPE);
|
||||
+ pkt_stat->shift = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_SHIFT);
|
||||
+ pkt_stat->phy_status = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_PHYST);
|
||||
+ swdec = le32_get_bits(rx_desc->w0, RTW_RX_DESC_W0_SWDEC);
|
||||
+ pkt_stat->decrypted = !swdec && enc_type != RX_DESC_ENC_NONE;
|
||||
+
|
||||
+ pkt_stat->cam_id = le32_get_bits(rx_desc->w1, RTW_RX_DESC_W1_MACID);
|
||||
+
|
||||
+ pkt_stat->is_c2h = le32_get_bits(rx_desc->w2, RTW_RX_DESC_W2_C2H);
|
||||
+ pkt_stat->ppdu_cnt = le32_get_bits(rx_desc->w2, RTW_RX_DESC_W2_PPDU_CNT);
|
||||
+
|
||||
+ pkt_stat->rate = le32_get_bits(rx_desc->w3, RTW_RX_DESC_W3_RX_RATE);
|
||||
+
|
||||
+ pkt_stat->bw = le32_get_bits(rx_desc->w4, RTW_RX_DESC_W4_BW);
|
||||
+
|
||||
+ pkt_stat->tsf_low = le32_get_bits(rx_desc->w5, RTW_RX_DESC_W5_TSFL);
|
||||
+
|
||||
+ /* drv_info_sz is in unit of 8-bytes */
|
||||
+ pkt_stat->drv_info_sz *= 8;
|
||||
+
|
||||
+ /* c2h cmd pkt's rx/phy status is not interested */
|
||||
+ if (pkt_stat->is_c2h)
|
||||
+ return;
|
||||
+
|
||||
+ phy_status = rx_desc8 + desc_sz + pkt_stat->shift;
|
||||
+ hdr = phy_status + pkt_stat->drv_info_sz;
|
||||
+ pkt_stat->hdr = hdr;
|
||||
+
|
||||
+ if (pkt_stat->phy_status)
|
||||
+ rtwdev->chip->ops->query_phy_status(rtwdev, phy_status, pkt_stat);
|
||||
+
|
||||
+ rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status);
|
||||
}
|
||||
-EXPORT_SYMBOL(rtw_rx_fill_rx_status);
|
||||
+EXPORT_SYMBOL(rtw_rx_query_rx_desc);
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
@@ -14,42 +14,40 @@ enum rtw_rx_desc_enc {
|
||||
RX_DESC_ENC_WEP104 = 5,
|
||||
};
|
||||
|
||||
-#define GET_RX_DESC_PHYST(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(26))
|
||||
-#define GET_RX_DESC_ICV_ERR(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(15))
|
||||
-#define GET_RX_DESC_CRC32(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(14))
|
||||
-#define GET_RX_DESC_SWDEC(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), BIT(27))
|
||||
-#define GET_RX_DESC_C2H(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x02), BIT(28))
|
||||
-#define GET_RX_DESC_PKT_LEN(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(13, 0))
|
||||
-#define GET_RX_DESC_DRV_INFO_SIZE(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(19, 16))
|
||||
-#define GET_RX_DESC_SHIFT(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(25, 24))
|
||||
-#define GET_RX_DESC_ENC_TYPE(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x00), GENMASK(22, 20))
|
||||
-#define GET_RX_DESC_RX_RATE(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x03), GENMASK(6, 0))
|
||||
-#define GET_RX_DESC_MACID(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x01), GENMASK(6, 0))
|
||||
-#define GET_RX_DESC_PPDU_CNT(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x02), GENMASK(30, 29))
|
||||
-#define GET_RX_DESC_TSFL(rxdesc) \
|
||||
- le32_get_bits(*((__le32 *)(rxdesc) + 0x05), GENMASK(31, 0))
|
||||
-#define GET_RX_DESC_BW(rxdesc) \
|
||||
- (le32_get_bits(*((__le32 *)(rxdesc) + 0x04), GENMASK(5, 4)))
|
||||
+struct rtw_rx_desc {
|
||||
+ __le32 w0;
|
||||
+ __le32 w1;
|
||||
+ __le32 w2;
|
||||
+ __le32 w3;
|
||||
+ __le32 w4;
|
||||
+ __le32 w5;
|
||||
+} __packed;
|
||||
+
|
||||
+#define RTW_RX_DESC_W0_PKT_LEN GENMASK(13, 0)
|
||||
+#define RTW_RX_DESC_W0_CRC32 BIT(14)
|
||||
+#define RTW_RX_DESC_W0_ICV_ERR BIT(15)
|
||||
+#define RTW_RX_DESC_W0_DRV_INFO_SIZE GENMASK(19, 16)
|
||||
+#define RTW_RX_DESC_W0_ENC_TYPE GENMASK(22, 20)
|
||||
+#define RTW_RX_DESC_W0_SHIFT GENMASK(25, 24)
|
||||
+#define RTW_RX_DESC_W0_PHYST BIT(26)
|
||||
+#define RTW_RX_DESC_W0_SWDEC BIT(27)
|
||||
+
|
||||
+#define RTW_RX_DESC_W1_MACID GENMASK(6, 0)
|
||||
+
|
||||
+#define RTW_RX_DESC_W2_C2H BIT(28)
|
||||
+#define RTW_RX_DESC_W2_PPDU_CNT GENMASK(30, 29)
|
||||
+
|
||||
+#define RTW_RX_DESC_W3_RX_RATE GENMASK(6, 0)
|
||||
+
|
||||
+#define RTW_RX_DESC_W4_BW GENMASK(5, 4)
|
||||
+
|
||||
+#define RTW_RX_DESC_W5_TSFL GENMASK(31, 0)
|
||||
|
||||
void rtw_rx_stats(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct sk_buff *skb);
|
||||
-void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
|
||||
- struct rtw_rx_pkt_stat *pkt_stat,
|
||||
- struct ieee80211_hdr *hdr,
|
||||
- struct ieee80211_rx_status *rx_status,
|
||||
- u8 *phy_status);
|
||||
+void rtw_rx_query_rx_desc(struct rtw_dev *rtwdev, void *rx_desc8,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat,
|
||||
+ struct ieee80211_rx_status *rx_status);
|
||||
void rtw_update_rx_freq_from_ie(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
struct ieee80211_rx_status *rx_status,
|
||||
struct rtw_rx_pkt_stat *pkt_stat);
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -981,8 +981,7 @@ static void rtw_sdio_rxfifo_recv(struct
|
||||
|
||||
while (true) {
|
||||
rx_desc = skb->data;
|
||||
- chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
|
||||
- &rx_status);
|
||||
+ rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat, &rx_status);
|
||||
pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
|
||||
pkt_stat.shift;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -571,8 +571,8 @@ static void rtw_usb_rx_handler(struct wo
|
||||
|
||||
do {
|
||||
rx_desc = skb->data;
|
||||
- chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
|
||||
- &rx_status);
|
||||
+ rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat,
|
||||
+ &rx_status);
|
||||
pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
|
||||
pkt_stat.shift;
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 7846f0b63562f4db45f712cc7dab091985baf07b Mon Sep 17 00:00:00 2001
|
||||
From: Mohammed Anees <pvmohammedanees2003@gmail.com>
|
||||
Date: Thu, 17 Oct 2024 13:36:38 +0530
|
||||
Subject: [PATCH] wifi: rtw88: Refactor looping in
|
||||
rtw_phy_store_tx_power_by_rate
|
||||
|
||||
The previous implementation included an unnecessary else
|
||||
condition paired with a continue statement. Since a check
|
||||
is already performed to determine if the band is either
|
||||
2G or 5G, the else condition will never be triggered.
|
||||
We can remove this check.
|
||||
|
||||
Signed-off-by: Mohammed Anees <pvmohammedanees2003@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/20241017080638.13074-1-pvmohammedanees2003@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -1470,10 +1470,8 @@ static void rtw_phy_store_tx_power_by_ra
|
||||
rate = rates[i];
|
||||
if (band == PHY_BAND_2G)
|
||||
hal->tx_pwr_by_rate_offset_2g[rfpath][rate] = offset;
|
||||
- else if (band == PHY_BAND_5G)
|
||||
- hal->tx_pwr_by_rate_offset_5g[rfpath][rate] = offset;
|
||||
else
|
||||
- continue;
|
||||
+ hal->tx_pwr_by_rate_offset_5g[rfpath][rate] = offset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From 47f754b3f838205f3b25c4839f74801d180995bf Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Tue, 22 Oct 2024 20:20:26 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Report the signal strength only if it's known
|
||||
|
||||
RTL8811CU doesn't report the signal strength for many (any?) data
|
||||
frames. When the signal strength is not known, set
|
||||
RX_FLAG_NO_SIGNAL_VAL in order to avoid reporting a signal
|
||||
strength of 0.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/f7e1e448-2c9b-498f-b8b1-a14dd967d7d3@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/rx.c | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
@@ -234,10 +234,14 @@ static void rtw_rx_fill_rx_status(struct
|
||||
else
|
||||
rx_status->bw = RATE_INFO_BW_20;
|
||||
|
||||
- rx_status->signal = pkt_stat->signal_power;
|
||||
- for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
|
||||
- rx_status->chains |= BIT(path);
|
||||
- rx_status->chain_signal[path] = pkt_stat->rx_power[path];
|
||||
+ if (pkt_stat->phy_status) {
|
||||
+ rx_status->signal = pkt_stat->signal_power;
|
||||
+ for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
|
||||
+ rx_status->chains |= BIT(path);
|
||||
+ rx_status->chain_signal[path] = pkt_stat->rx_power[path];
|
||||
+ }
|
||||
+ } else {
|
||||
+ rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
|
||||
}
|
||||
|
||||
rtw_rx_addr_match(rtwdev, pkt_stat, hdr);
|
||||
@@ -0,0 +1,490 @@
|
||||
From d12722830ea4f562e91586927ec21b64d0369544 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:00:59 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Add some definitions for RTL8821AU/RTL8812AU
|
||||
|
||||
Add 8821A and 8812A chip type enums.
|
||||
|
||||
Add cck_high_power member to struct rtw_hal. This will be used to
|
||||
calculate the RX signal strength of RTL8812AU.
|
||||
|
||||
Add various register definitions which will be used by the new drivers.
|
||||
|
||||
Move some existing register definitions from rtw8821c.h and rtw8822b.h.
|
||||
They were duplicated in those headers and will also be used by the new
|
||||
drivers.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 3 +
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 174 ++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.h | 24 ---
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 12 --
|
||||
4 files changed, 177 insertions(+), 36 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -189,6 +189,8 @@ enum rtw_chip_type {
|
||||
RTW_CHIP_TYPE_8723D,
|
||||
RTW_CHIP_TYPE_8821C,
|
||||
RTW_CHIP_TYPE_8703B,
|
||||
+ RTW_CHIP_TYPE_8821A,
|
||||
+ RTW_CHIP_TYPE_8812A,
|
||||
};
|
||||
|
||||
enum rtw_tx_queue_type {
|
||||
@@ -1934,6 +1936,7 @@ struct rtw_hal {
|
||||
u32 antenna_rx;
|
||||
u8 bfee_sts_cap;
|
||||
bool txrx_1ss;
|
||||
+ bool cck_high_power;
|
||||
|
||||
/* protect tx power section */
|
||||
struct mutex tx_power_mutex;
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -9,6 +9,7 @@
|
||||
#define BIT_FEN_EN_25_1 BIT(13)
|
||||
#define BIT_FEN_ELDR BIT(12)
|
||||
#define BIT_FEN_CPUEN BIT(2)
|
||||
+#define BIT_FEN_USBA BIT(2)
|
||||
#define BIT_FEN_BB_GLB_RST BIT(1)
|
||||
#define BIT_FEN_BB_RSTB BIT(0)
|
||||
#define BIT_R_DIS_PRST BIT(6)
|
||||
@@ -16,6 +17,10 @@
|
||||
#define REG_SYS_PW_CTRL 0x0004
|
||||
#define BIT_PFM_WOWL BIT(3)
|
||||
#define BIT_APFM_OFFMAC BIT(9)
|
||||
+#define REG_APS_FSMCO 0x0004
|
||||
+#define APS_FSMCO_MAC_ENABLE BIT(8)
|
||||
+#define APS_FSMCO_MAC_OFF BIT(9)
|
||||
+#define APS_FSMCO_HW_POWERDOWN BIT(15)
|
||||
#define REG_SYS_CLK_CTRL 0x0008
|
||||
#define BIT_CPU_CLK_EN BIT(14)
|
||||
|
||||
@@ -58,6 +63,8 @@
|
||||
#define BIT_SHIFT_LDO25_VOLTAGE 4
|
||||
#define BIT_LDO25_EN BIT(7)
|
||||
|
||||
+#define REG_ACLK_MON 0x3e
|
||||
+
|
||||
#define REG_GPIO_MUXCFG 0x0040
|
||||
#define BIT_FSPI_EN BIT(19)
|
||||
#define BIT_EN_SIC BIT(12)
|
||||
@@ -90,6 +97,8 @@
|
||||
#define BIT_USB_SUS_DIS BIT(8)
|
||||
#define BIT_SDIO_PAD_E5 BIT(18)
|
||||
|
||||
+#define REG_RF_B_CTRL 0x76
|
||||
+
|
||||
#define REG_AFE_CTRL_4 0x0078
|
||||
#define BIT_CK320M_AFE_EN BIT(4)
|
||||
#define BIT_EN_SYN BIT(15)
|
||||
@@ -134,6 +143,11 @@
|
||||
#define REG_PMC_DBG_CTRL1 0xa8
|
||||
#define BITS_PMC_BT_IQK_STS GENMASK(22, 21)
|
||||
|
||||
+#define REG_HIMR0 0xb0
|
||||
+#define REG_HISR0 0xb4
|
||||
+#define REG_HIMR1 0xb8
|
||||
+#define REG_HISR1 0xbc
|
||||
+
|
||||
#define REG_PAD_CTRL2 0x00C4
|
||||
#define BIT_RSM_EN_V1 BIT(16)
|
||||
#define BIT_NO_PDN_CHIPOFF_V1 BIT(17)
|
||||
@@ -185,6 +199,15 @@
|
||||
#define MAC_TRX_ENABLE (BIT_HCI_TXDMA_EN | BIT_HCI_RXDMA_EN | BIT_TXDMA_EN | \
|
||||
BIT_RXDMA_EN | BIT_PROTOCOL_EN | BIT_SCHEDULE_EN | \
|
||||
BIT_MACTXEN | BIT_MACRXEN)
|
||||
+#define REG_PBP 0x104
|
||||
+#define PBP_RX_MASK 0x0f
|
||||
+#define PBP_TX_MASK 0xf0
|
||||
+#define PBP_64 0x0
|
||||
+#define PBP_128 0x1
|
||||
+#define PBP_256 0x2
|
||||
+#define PBP_512 0x3
|
||||
+#define PBP_1024 0x4
|
||||
+
|
||||
#define BIT_SHIFT_TXDMA_VOQ_MAP 4
|
||||
#define BIT_MASK_TXDMA_VOQ_MAP 0x3
|
||||
#define BIT_TXDMA_VOQ_MAP(x) \
|
||||
@@ -256,6 +279,8 @@
|
||||
#define REG_HMEBOX1 0x01D4
|
||||
#define REG_HMEBOX2 0x01D8
|
||||
#define REG_HMEBOX3 0x01DC
|
||||
+#define REG_LLT_INIT 0x01E0
|
||||
+#define BIT_LLT_WRITE_ACCESS BIT(30)
|
||||
#define REG_HMEBOX0_EX 0x01F0
|
||||
#define REG_HMEBOX1_EX 0x01F4
|
||||
#define REG_HMEBOX2_EX 0x01F8
|
||||
@@ -298,6 +323,7 @@
|
||||
|
||||
#define REG_AUTO_LLT 0x0224
|
||||
#define BIT_AUTO_INIT_LLT BIT(16)
|
||||
+#define REG_DWBCN1_CTRL 0x0228
|
||||
#define REG_RQPN_CTRL_1 0x0228
|
||||
#define REG_RQPN_CTRL_2 0x022C
|
||||
#define BIT_LD_RQPN BIT(31)
|
||||
@@ -329,6 +355,7 @@
|
||||
#define BIT_DMA_BURST_SIZE_1024 0
|
||||
|
||||
#define REG_RXPKTNUM 0x02B0
|
||||
+#define REG_EARLY_MODE_CONTROL 0x02BC
|
||||
|
||||
#define REG_INT_MIG 0x0304
|
||||
#define REG_HCI_MIX_CFG 0x03FC
|
||||
@@ -336,6 +363,7 @@
|
||||
|
||||
#define REG_BCNQ_INFO 0x0418
|
||||
#define BIT_MGQ_CPU_EMPTY BIT(24)
|
||||
+#define REG_TXPKT_EMPTY 0x041A
|
||||
#define REG_FWHW_TXQ_CTRL 0x0420
|
||||
#define BIT_EN_BCNQ_DL BIT(22)
|
||||
#define BIT_EN_WR_FREE_TAIL BIT(20)
|
||||
@@ -362,10 +390,12 @@
|
||||
#define REG_AMPDU_MAX_TIME_V1 0x0455
|
||||
#define REG_BCNQ1_BDNY_V1 0x0456
|
||||
#define REG_AMPDU_MAX_TIME 0x0456
|
||||
+#define REG_AMPDU_MAX_LENGTH 0x0458
|
||||
#define REG_WMAC_LBK_BF_HD 0x045D
|
||||
#define REG_TX_HANG_CTRL 0x045E
|
||||
#define BIT_EN_GNT_BT_AWAKE BIT(3)
|
||||
#define BIT_EN_EOF_V1 BIT(2)
|
||||
+#define REG_FAST_EDCA_CTRL 0x0460
|
||||
#define REG_DATA_SC 0x0483
|
||||
#define REG_ARFR2_V1 0x048C
|
||||
#define REG_ARFRH2_V1 0x0490
|
||||
@@ -390,6 +420,8 @@
|
||||
#define REG_PRECNT_CTRL 0x04E5
|
||||
#define BIT_BTCCA_CTRL (BIT(0) | BIT(1))
|
||||
#define BIT_EN_PRECNT BIT(11)
|
||||
+#define REG_TX_RPT_CTRL 0x04EC
|
||||
+#define REG_TX_RPT_TIME 0x04F0
|
||||
#define REG_DUMMY_PAGE4_V1 0x04FC
|
||||
|
||||
#define REG_EDCA_VO_PARAM 0x0500
|
||||
@@ -400,6 +432,7 @@
|
||||
#define BIT_MASK_CWMAX GENMASK(15, 12)
|
||||
#define BIT_MASK_CWMIN GENMASK(11, 8)
|
||||
#define BIT_MASK_AIFS GENMASK(7, 0)
|
||||
+#define REG_BCNTCFG 0x0510
|
||||
#define REG_PIFS 0x0512
|
||||
#define REG_SIFS 0x0514
|
||||
#define BIT_SHIFT_SIFS_OFDM_CTX 8
|
||||
@@ -526,6 +559,8 @@
|
||||
#define REG_BT_COEX_V2 0x0762
|
||||
#define BIT_GNT_BT_POLARITY BIT(12)
|
||||
#define BIT_LTE_COEX_EN BIT(7)
|
||||
+#define REG_GNT_BT 0x0765
|
||||
+#define BIT_PTA_SW_CTL GENMASK(4, 3)
|
||||
#define REG_BT_COEX_ENH_INTR_CTRL 0x76E
|
||||
#define BIT_R_GRANTALL_WLMASK BIT(3)
|
||||
#define BIT_STATIS_BT_EN BIT(2)
|
||||
@@ -543,14 +578,43 @@
|
||||
#define REG_FPGA0_RFMOD 0x0800
|
||||
#define BIT_CCKEN BIT(24)
|
||||
#define BIT_OFDMEN BIT(25)
|
||||
+#define REG_CCK_RPT_FORMAT 0x0804
|
||||
+#define BIT_CCK_RPT_FORMAT BIT(16)
|
||||
+#define REG_RXPSEL 0x0808
|
||||
+#define BIT_RX_PSEL_RST (BIT(28) | BIT(29))
|
||||
+#define REG_TXPSEL 0x080C
|
||||
#define REG_RX_GAIN_EN 0x081c
|
||||
+#define REG_CCASEL 0x082C
|
||||
+#define REG_PDMFTH 0x0830
|
||||
+#define REG_BWINDICATION 0x0834
|
||||
+#define REG_CCA2ND 0x0838
|
||||
+#define REG_L1PKTH 0x0848
|
||||
+#define REG_CLKTRK 0x0860
|
||||
+#define REG_ADCCLK 0x08AC
|
||||
+#define REG_HSSI_READ 0x08B0
|
||||
+#define REG_FPGA0_XCD_RF_PARA 0x08B4
|
||||
+#define REG_RX_MCS_LIMIT 0x08BC
|
||||
+#define REG_ADC160 0x08C4
|
||||
+#define REG_ANTSEL_SW 0x0900
|
||||
+#define REG_DAC_RSTB 0x090c
|
||||
+#define REG_SINGLE_TONE_CONT_TX 0x0914
|
||||
|
||||
#define REG_RFE_CTRL_E 0x0974
|
||||
#define REG_2ND_CCA_CTRL 0x0976
|
||||
+#define REG_IQK_COM00 0x0978
|
||||
+#define REG_IQK_COM32 0x097c
|
||||
+#define REG_IQK_COM64 0x0980
|
||||
+#define REG_IQK_COM96 0x0984
|
||||
+
|
||||
+#define REG_FAS 0x09a4
|
||||
+#define REG_RXSB 0x0a00
|
||||
+#define REG_CCK_RX 0x0a04
|
||||
+#define REG_CCK_PD_TH 0x0a0a
|
||||
|
||||
#define REG_CCK0_FAREPORT 0xa2c
|
||||
#define BIT_CCK0_2RX BIT(18)
|
||||
#define BIT_CCK0_MRC BIT(22)
|
||||
+#define REG_FA_CCK 0x0a5c
|
||||
|
||||
#define REG_DIS_DPD 0x0a70
|
||||
#define DIS_DPD_MASK GENMASK(9, 0)
|
||||
@@ -566,13 +630,109 @@
|
||||
#define DIS_DPD_RATEVHT2SS_MCS1 BIT(9)
|
||||
#define DIS_DPD_RATEALL GENMASK(9, 0)
|
||||
|
||||
+#define REG_CNTRST 0x0b58
|
||||
+
|
||||
+#define REG_3WIRE_SWA 0x0c00
|
||||
+#define REG_RX_IQC_AB_A 0x0c10
|
||||
+#define REG_TXSCALE_A 0x0c1c
|
||||
+#define BB_SWING_MASK GENMASK(31, 21)
|
||||
+#define REG_TX_AGC_A_CCK_11_CCK_1 0xc20
|
||||
+#define REG_TX_AGC_A_OFDM18_OFDM6 0xc24
|
||||
+#define REG_TX_AGC_A_OFDM54_OFDM24 0xc28
|
||||
+#define REG_TX_AGC_A_MCS3_MCS0 0xc2c
|
||||
+#define REG_TX_AGC_A_MCS7_MCS4 0xc30
|
||||
+#define REG_TX_AGC_A_MCS11_MCS8 0xc34
|
||||
+#define REG_TX_AGC_A_MCS15_MCS12 0xc38
|
||||
+#define REG_TX_AGC_A_NSS1_INDEX3_NSS1_INDEX0 0xc3c
|
||||
+#define REG_TX_AGC_A_NSS1_INDEX7_NSS1_INDEX4 0xc40
|
||||
+#define REG_TX_AGC_A_NSS2_INDEX1_NSS1_INDEX8 0xc44
|
||||
+#define REG_TX_AGC_A_NSS2_INDEX5_NSS2_INDEX2 0xc48
|
||||
+#define REG_TX_AGC_A_NSS2_INDEX9_NSS2_INDEX6 0xc4c
|
||||
+#define REG_RXIGI_A 0x0c50
|
||||
+#define REG_TX_PWR_TRAINING_A 0x0c54
|
||||
+#define REG_CK_MONHA 0x0c5c
|
||||
+#define REG_AFE_PWR1_A 0x0c60
|
||||
+#define REG_AFE_PWR2_A 0x0c64
|
||||
+#define REG_RX_WAIT_CCA_TX_CCK_RFON_A 0x0c68
|
||||
+#define REG_OFDM0_XA_TX_IQ_IMBALANCE 0x0c80
|
||||
+#define REG_OFDM0_A_TX_AFE 0x0c84
|
||||
+#define REG_OFDM0_XB_TX_IQ_IMBALANCE 0x0c88
|
||||
+#define REG_TSSI_TRK_SW 0x0c8c
|
||||
+#define REG_LSSI_WRITE_A 0x0c90
|
||||
+#define REG_PREDISTA 0x0c90
|
||||
+#define REG_TXAGCIDX 0x0c94
|
||||
+
|
||||
+#define REG_RFE_PINMUX_A 0x0cb0
|
||||
+#define REG_RFE_INV_A 0x0cb4
|
||||
#define REG_RFE_CTRL8 0x0cb4
|
||||
#define BIT_MASK_RFE_SEL89 GENMASK(7, 0)
|
||||
+#define PTA_CTRL_PIN 0x66
|
||||
+#define DPDT_CTRL_PIN 0x77
|
||||
+#define RFE_INV_MASK 0x3ff00000
|
||||
+#define REG_RFECTL_A 0x0cb8
|
||||
#define REG_RFE_INV8 0x0cbd
|
||||
#define BIT_MASK_RFE_INV89 GENMASK(1, 0)
|
||||
#define REG_RFE_INV16 0x0cbe
|
||||
#define BIT_RFE_BUF_EN BIT(3)
|
||||
|
||||
+#define REG_IQK_DPD_CFG 0x0cc4
|
||||
+#define REG_CFG_PMPD 0x0cc8
|
||||
+#define REG_IQC_Y 0x0ccc
|
||||
+#define REG_IQC_X 0x0cd4
|
||||
+#define REG_INTPO_SETA 0x0ce8
|
||||
+
|
||||
+#define REG_IQKA_END 0x0d00
|
||||
+#define REG_PI_READ_A 0x0d04
|
||||
+#define REG_SI_READ_A 0x0d08
|
||||
+#define REG_IQKB_END 0x0d40
|
||||
+#define REG_PI_READ_B 0x0d44
|
||||
+#define REG_SI_READ_B 0x0d48
|
||||
+
|
||||
+#define REG_3WIRE_SWB 0x0e00
|
||||
+#define REG_RX_IQC_AB_B 0x0e10
|
||||
+#define REG_TXSCALE_B 0x0e1c
|
||||
+#define REG_TX_AGC_B_CCK_11_CCK_1 0xe20
|
||||
+#define REG_TX_AGC_B_OFDM18_OFDM6 0xe24
|
||||
+#define REG_TX_AGC_B_OFDM54_OFDM24 0xe28
|
||||
+#define REG_TX_AGC_B_MCS3_MCS0 0xe2c
|
||||
+#define REG_TX_AGC_B_MCS7_MCS4 0xe30
|
||||
+#define REG_TX_AGC_B_MCS11_MCS8 0xe34
|
||||
+#define REG_TX_AGC_B_MCS15_MCS12 0xe38
|
||||
+#define REG_TX_AGC_B_NSS1_INDEX3_NSS1_INDEX0 0xe3c
|
||||
+#define REG_TX_AGC_B_NSS1_INDEX7_NSS1_INDEX4 0xe40
|
||||
+#define REG_TX_AGC_B_NSS2_INDEX1_NSS1_INDEX8 0xe44
|
||||
+#define REG_TX_AGC_B_NSS2_INDEX5_NSS2_INDEX2 0xe48
|
||||
+#define REG_TX_AGC_B_NSS2_INDEX9_NSS2_INDEX6 0xe4c
|
||||
+#define REG_RXIGI_B 0x0e50
|
||||
+#define REG_TX_PWR_TRAINING_B 0x0e54
|
||||
+#define REG_CK_MONHB 0x0e5c
|
||||
+#define REG_AFE_PWR1_B 0x0e60
|
||||
+#define REG_AFE_PWR2_B 0x0e64
|
||||
+#define REG_RX_WAIT_CCA_TX_CCK_RFON_B 0x0e68
|
||||
+#define REG_TXTONEB 0x0e80
|
||||
+#define REG_RXTONEB 0x0e84
|
||||
+#define REG_TXPITMB 0x0e88
|
||||
+#define REG_RXPITMB 0x0e8c
|
||||
+#define REG_LSSI_WRITE_B 0x0e90
|
||||
+#define REG_PREDISTB 0x0e90
|
||||
+#define REG_INIDLYB 0x0e94
|
||||
+#define REG_RFE_PINMUX_B 0x0eb0
|
||||
+#define REG_RFE_INV_B 0x0eb4
|
||||
+#define REG_RFECTL_B 0x0eb8
|
||||
+#define REG_BPBDB 0x0ec4
|
||||
+#define REG_PHYTXONB 0x0ec8
|
||||
+#define REG_IQKYB 0x0ecc
|
||||
+#define REG_IQKXB 0x0ed4
|
||||
+#define REG_INTPO_SETB 0x0ee8
|
||||
+
|
||||
+#define REG_CRC_CCK 0x0f04
|
||||
+#define REG_CCA_OFDM 0x0f08
|
||||
+#define REG_CRC_VHT 0x0f0c
|
||||
+#define REG_CRC_HT 0x0f10
|
||||
+#define REG_CRC_OFDM 0x0f14
|
||||
+#define REG_FA_OFDM 0x0f48
|
||||
+#define REG_CCA_CCK 0x0fcc
|
||||
+
|
||||
#define REG_ANAPARSW_MAC_0 0x1010
|
||||
#define BIT_CF_L_V2 GENMASK(29, 28)
|
||||
|
||||
@@ -709,6 +869,10 @@
|
||||
|
||||
#define REG_IGN_GNTBT4 0x4160
|
||||
|
||||
+#define REG_USB_MOD 0xf008
|
||||
+#define REG_USB3_RXITV 0xf050
|
||||
+#define REG_USB_HRPWM 0xfe58
|
||||
+
|
||||
#define RF_MODE 0x00
|
||||
#define RF_MODOPT 0x01
|
||||
#define RF_WLINT 0x01
|
||||
@@ -716,7 +880,13 @@
|
||||
#define RF_DTXLOK 0x08
|
||||
#define RF_CFGCH 0x18
|
||||
#define BIT_BAND GENMASK(18, 16)
|
||||
+#define RF18_BAND_MASK (BIT(16) | BIT(9) | BIT(8))
|
||||
+#define RF18_CHANNEL_MASK (MASKBYTE0)
|
||||
+#define RF18_RFSI_MASK (BIT(18) | BIT(17))
|
||||
#define RF_RCK 0x1d
|
||||
+#define RF_MODE_TABLE_ADDR 0x30
|
||||
+#define RF_MODE_TABLE_DATA0 0x31
|
||||
+#define RF_MODE_TABLE_DATA1 0x32
|
||||
#define RF_LUTWA 0x33
|
||||
#define RF_LUTWD1 0x3e
|
||||
#define RF_LUTWD0 0x3f
|
||||
@@ -725,10 +895,14 @@
|
||||
#define RF_T_METER 0x42
|
||||
#define RF_BSPAD 0x54
|
||||
#define RF_GAINTX 0x56
|
||||
+#define RF_TXMOD 0x58
|
||||
#define RF_TXATANK 0x64
|
||||
+#define RF_TXA_PREPAD 0x65
|
||||
#define RF_TRXIQ 0x66
|
||||
#define RF_RXIQGEN 0x8d
|
||||
+#define RF_RXBB2 0x8f
|
||||
#define RF_SYN_PFD 0xb0
|
||||
+#define RF_LCK 0xb4
|
||||
#define RF_XTALX2 0xb8
|
||||
#define RF_SYN_CTRL 0xbb
|
||||
#define RF_MALSEL 0xbe
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
@@ -214,19 +214,10 @@ extern const struct rtw_chip_info rtw882
|
||||
#define BIT_FEN_EN BIT(26)
|
||||
#define REG_INIRTS_RATE_SEL 0x0480
|
||||
#define REG_HTSTFWT 0x800
|
||||
-#define REG_RXPSEL 0x808
|
||||
-#define BIT_RX_PSEL_RST (BIT(28) | BIT(29))
|
||||
-#define REG_TXPSEL 0x80c
|
||||
#define REG_RXCCAMSK 0x814
|
||||
-#define REG_CCASEL 0x82c
|
||||
-#define REG_PDMFTH 0x830
|
||||
-#define REG_CCA2ND 0x838
|
||||
#define REG_L1WT 0x83c
|
||||
#define REG_L1PKWT 0x840
|
||||
#define REG_MRC 0x850
|
||||
-#define REG_CLKTRK 0x860
|
||||
-#define REG_ADCCLK 0x8ac
|
||||
-#define REG_ADC160 0x8c4
|
||||
#define REG_ADC40 0x8c8
|
||||
#define REG_CHFIR 0x8f0
|
||||
#define REG_CDDTXP 0x93c
|
||||
@@ -234,14 +225,11 @@ extern const struct rtw_chip_info rtw882
|
||||
#define REG_ACBB0 0x948
|
||||
#define REG_ACBBRXFIR 0x94c
|
||||
#define REG_ACGG2TBL 0x958
|
||||
-#define REG_FAS 0x9a4
|
||||
-#define REG_RXSB 0xa00
|
||||
#define REG_ADCINI 0xa04
|
||||
#define REG_PWRTH 0xa08
|
||||
#define REG_CCA_FLTR 0xa20
|
||||
#define REG_TXSF2 0xa24
|
||||
#define REG_TXSF6 0xa28
|
||||
-#define REG_FA_CCK 0xa5c
|
||||
#define REG_RXDESC 0xa2c
|
||||
#define REG_ENTXCCK 0xa80
|
||||
#define BTG_LNA 0xfc84
|
||||
@@ -252,12 +240,8 @@ extern const struct rtw_chip_info rtw882
|
||||
#define REG_PWRTH2 0xaa8
|
||||
#define REG_CSRATIO 0xaaa
|
||||
#define REG_TXFILTER 0xaac
|
||||
-#define REG_CNTRST 0xb58
|
||||
#define REG_AGCTR_A 0xc08
|
||||
-#define REG_TXSCALE_A 0xc1c
|
||||
#define REG_TXDFIR 0xc20
|
||||
-#define REG_RXIGI_A 0xc50
|
||||
-#define REG_TXAGCIDX 0xc94
|
||||
#define REG_TRSW 0xca0
|
||||
#define REG_RFESEL0 0xcb0
|
||||
#define REG_RFESEL8 0xcb4
|
||||
@@ -269,14 +253,6 @@ extern const struct rtw_chip_info rtw882
|
||||
#define B_WLA_SWITCH BIT(23)
|
||||
#define REG_RFEINV 0xcbc
|
||||
#define REG_AGCTR_B 0xe08
|
||||
-#define REG_RXIGI_B 0xe50
|
||||
-#define REG_CRC_CCK 0xf04
|
||||
-#define REG_CRC_OFDM 0xf14
|
||||
-#define REG_CRC_HT 0xf10
|
||||
-#define REG_CRC_VHT 0xf0c
|
||||
-#define REG_CCA_OFDM 0xf08
|
||||
-#define REG_FA_OFDM 0xf48
|
||||
-#define REG_CCA_CCK 0xfcc
|
||||
#define REG_DMEM_CTRL 0x1080
|
||||
#define BIT_WL_RST BIT(16)
|
||||
#define REG_ANTWT 0x1904
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
@@ -151,21 +151,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
#define RTW8822B_EDCCA_MAX 0x7f
|
||||
#define RTW8822B_EDCCA_SRC_DEF 1
|
||||
#define REG_HTSTFWT 0x800
|
||||
-#define REG_RXPSEL 0x808
|
||||
-#define BIT_RX_PSEL_RST (BIT(28) | BIT(29))
|
||||
-#define REG_TXPSEL 0x80c
|
||||
#define REG_RXCCAMSK 0x814
|
||||
-#define REG_CCASEL 0x82c
|
||||
-#define REG_PDMFTH 0x830
|
||||
-#define REG_CCA2ND 0x838
|
||||
#define REG_L1WT 0x83c
|
||||
#define REG_L1PKWT 0x840
|
||||
#define REG_MRC 0x850
|
||||
-#define REG_CLKTRK 0x860
|
||||
#define REG_EDCCA_POW_MA 0x8a0
|
||||
#define BIT_MA_LEVEL GENMASK(1, 0)
|
||||
-#define REG_ADCCLK 0x8ac
|
||||
-#define REG_ADC160 0x8c4
|
||||
#define REG_ADC40 0x8c8
|
||||
#define REG_EDCCA_DECISION 0x8dc
|
||||
#define BIT_EDCCA_OPTION BIT(5)
|
||||
@@ -176,7 +167,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
#define REG_ACBB0 0x948
|
||||
#define REG_ACBBRXFIR 0x94c
|
||||
#define REG_ACGG2TBL 0x958
|
||||
-#define REG_RXSB 0xa00
|
||||
#define REG_ADCINI 0xa04
|
||||
#define REG_TXSF2 0xa24
|
||||
#define REG_TXSF6 0xa28
|
||||
@@ -184,14 +174,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwde
|
||||
#define REG_ENTXCCK 0xa80
|
||||
#define REG_AGCTR_A 0xc08
|
||||
#define REG_TXDFIR 0xc20
|
||||
-#define REG_RXIGI_A 0xc50
|
||||
#define REG_TRSW 0xca0
|
||||
#define REG_RFESEL0 0xcb0
|
||||
#define REG_RFESEL8 0xcb4
|
||||
#define REG_RFECTL 0xcb8
|
||||
#define REG_RFEINV 0xcbc
|
||||
#define REG_AGCTR_B 0xe08
|
||||
-#define REG_RXIGI_B 0xe50
|
||||
#define REG_ANTWT 0x1904
|
||||
#define REG_IQKFAILMSK 0x1bf0
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
From 87341ca1eac9a3bac23bd41f6e24f3c93b77452f Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:02:05 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Dump the HW features only for some chips
|
||||
|
||||
RTL8821AU and RTL8812AU don't support this. They hit the "failed to read
|
||||
hw feature report" error.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/8becd851-8760-4480-8e8c-c4869ce72507@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
|
||||
7 files changed, 9 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -1917,6 +1917,9 @@ static int rtw_dump_hw_feature(struct rt
|
||||
u8 bw;
|
||||
int i;
|
||||
|
||||
+ if (!rtwdev->chip->hw_feature_report)
|
||||
+ return 0;
|
||||
+
|
||||
id = rtw_read8(rtwdev, REG_C2HEVT);
|
||||
if (id != C2H_HW_FEATURE_REPORT) {
|
||||
rtw_err(rtwdev, "failed to read hw feature report\n");
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1200,6 +1200,7 @@ struct rtw_chip_info {
|
||||
const struct rtw_fwcd_segs *fwcd_segs;
|
||||
|
||||
u8 usb_tx_agg_desc_num;
|
||||
+ bool hw_feature_report;
|
||||
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1960,6 +1960,7 @@ const struct rtw_chip_info rtw8703b_hw_s
|
||||
.max_power_index = 0x3f,
|
||||
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
||||
.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
||||
+ .hw_feature_report = true,
|
||||
|
||||
.path_div_supported = false,
|
||||
.ht_supported = true,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2131,6 +2131,7 @@ const struct rtw_chip_info rtw8723d_hw_s
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 1,
|
||||
+ .hw_feature_report = true,
|
||||
.ht_supported = true,
|
||||
.vht_supported = false,
|
||||
.lps_deep_mode_supported = 0,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1968,6 +1968,7 @@ const struct rtw_chip_info rtw8821c_hw_s
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
+ .hw_feature_report = true,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2509,6 +2509,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
+ .hw_feature_report = true,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5329,6 +5329,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
+ .hw_feature_report = true,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
@@ -0,0 +1,175 @@
|
||||
From d9018f4373517d4560ce2ebf12684f77f5fbdad6 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:06:14 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Allow different C2H RA report sizes
|
||||
|
||||
The RTL8821AU and RTL8812AU have smaller RA report size, only 4 bytes.
|
||||
Avoid the "invalid ra report c2h length" error.
|
||||
|
||||
Also, use a struct and u8_get_bits() to access the RA report C2H.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/c3e73c3a-fb2f-4013-9f06-d5274211e282@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 21 +++++++++++++------
|
||||
drivers/net/wireless/realtek/rtw88/fw.h | 17 +++++++++++----
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
|
||||
8 files changed, 34 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -139,25 +139,30 @@ static u16 get_max_amsdu_len(u32 bit_rat
|
||||
struct rtw_fw_iter_ra_data {
|
||||
struct rtw_dev *rtwdev;
|
||||
u8 *payload;
|
||||
+ u8 length;
|
||||
};
|
||||
|
||||
static void rtw_fw_ra_report_iter(void *data, struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw_fw_iter_ra_data *ra_data = data;
|
||||
+ struct rtw_c2h_ra_rpt *ra_rpt = (struct rtw_c2h_ra_rpt *)ra_data->payload;
|
||||
struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv;
|
||||
u8 mac_id, rate, sgi, bw;
|
||||
u8 mcs, nss;
|
||||
u32 bit_rate;
|
||||
|
||||
- mac_id = GET_RA_REPORT_MACID(ra_data->payload);
|
||||
+ mac_id = ra_rpt->mac_id;
|
||||
if (si->mac_id != mac_id)
|
||||
return;
|
||||
|
||||
si->ra_report.txrate.flags = 0;
|
||||
|
||||
- rate = GET_RA_REPORT_RATE(ra_data->payload);
|
||||
- sgi = GET_RA_REPORT_SGI(ra_data->payload);
|
||||
- bw = GET_RA_REPORT_BW(ra_data->payload);
|
||||
+ rate = u8_get_bits(ra_rpt->rate_sgi, RTW_C2H_RA_RPT_RATE);
|
||||
+ sgi = u8_get_bits(ra_rpt->rate_sgi, RTW_C2H_RA_RPT_SGI);
|
||||
+ if (ra_data->length >= offsetofend(typeof(*ra_rpt), bw))
|
||||
+ bw = ra_rpt->bw;
|
||||
+ else
|
||||
+ bw = si->bw_mode;
|
||||
|
||||
if (rate < DESC_RATEMCS0) {
|
||||
si->ra_report.txrate.legacy = rtw_desc_to_bitrate(rate);
|
||||
@@ -197,14 +202,18 @@ legacy:
|
||||
static void rtw_fw_ra_report_handle(struct rtw_dev *rtwdev, u8 *payload,
|
||||
u8 length)
|
||||
{
|
||||
+ struct rtw_c2h_ra_rpt *ra_rpt = (struct rtw_c2h_ra_rpt *)payload;
|
||||
struct rtw_fw_iter_ra_data ra_data;
|
||||
|
||||
- if (WARN(length < 7, "invalid ra report c2h length\n"))
|
||||
+ if (WARN(length < rtwdev->chip->c2h_ra_report_size,
|
||||
+ "invalid ra report c2h length %d\n", length))
|
||||
return;
|
||||
|
||||
- rtwdev->dm_info.tx_rate = GET_RA_REPORT_RATE(payload);
|
||||
+ rtwdev->dm_info.tx_rate = u8_get_bits(ra_rpt->rate_sgi,
|
||||
+ RTW_C2H_RA_RPT_RATE);
|
||||
ra_data.rtwdev = rtwdev;
|
||||
ra_data.payload = payload;
|
||||
+ ra_data.length = length;
|
||||
rtw_iterate_stas_atomic(rtwdev, rtw_fw_ra_report_iter, &ra_data);
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
@@ -85,6 +85,19 @@ struct rtw_c2h_adaptivity {
|
||||
u8 option;
|
||||
} __packed;
|
||||
|
||||
+struct rtw_c2h_ra_rpt {
|
||||
+ u8 rate_sgi;
|
||||
+ u8 mac_id;
|
||||
+ u8 byte2;
|
||||
+ u8 status;
|
||||
+ u8 byte4;
|
||||
+ u8 ra_ratio;
|
||||
+ u8 bw;
|
||||
+} __packed;
|
||||
+
|
||||
+#define RTW_C2H_RA_RPT_RATE GENMASK(6, 0)
|
||||
+#define RTW_C2H_RA_RPT_SGI BIT(7)
|
||||
+
|
||||
struct rtw_h2c_register {
|
||||
u32 w0;
|
||||
u32 w1;
|
||||
@@ -364,10 +377,6 @@ struct rtw_fw_hdr_legacy {
|
||||
#define GET_CHAN_SWITCH_CENTRAL_CH(c2h_payload) (c2h_payload[2])
|
||||
#define GET_CHAN_SWITCH_ID(c2h_payload) (c2h_payload[3])
|
||||
#define GET_CHAN_SWITCH_STATUS(c2h_payload) (c2h_payload[4])
|
||||
-#define GET_RA_REPORT_RATE(c2h_payload) (c2h_payload[0] & 0x7f)
|
||||
-#define GET_RA_REPORT_SGI(c2h_payload) ((c2h_payload[0] & 0x80) >> 7)
|
||||
-#define GET_RA_REPORT_BW(c2h_payload) (c2h_payload[6])
|
||||
-#define GET_RA_REPORT_MACID(c2h_payload) (c2h_payload[1])
|
||||
|
||||
#define GET_BCN_FILTER_NOTIFY_TYPE(c2h_payload) (c2h_payload[1] & 0xf)
|
||||
#define GET_BCN_FILTER_NOTIFY_EVENT(c2h_payload) (c2h_payload[1] & 0x10)
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1201,6 +1201,7 @@ struct rtw_chip_info {
|
||||
|
||||
u8 usb_tx_agg_desc_num;
|
||||
bool hw_feature_report;
|
||||
+ u8 c2h_ra_report_size;
|
||||
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1961,6 +1961,7 @@ const struct rtw_chip_info rtw8703b_hw_s
|
||||
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
||||
.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
|
||||
.path_div_supported = false,
|
||||
.ht_supported = true,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2132,6 +2132,7 @@ const struct rtw_chip_info rtw8723d_hw_s
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 1,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.ht_supported = true,
|
||||
.vht_supported = false,
|
||||
.lps_deep_mode_supported = 0,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1969,6 +1969,7 @@ const struct rtw_chip_info rtw8821c_hw_s
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2510,6 +2510,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5330,6 +5330,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
@@ -0,0 +1,165 @@
|
||||
From 95a772e30b60e7954d03f3372268722475aa303f Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:08:24 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Extend the init table parsing for RTL8812AU
|
||||
|
||||
The chips supported so far only use the first condition, and so the
|
||||
parsing code ignores the second condition. RTL8812AU's init tables use
|
||||
the second condition also. Make the parsing code check it.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/1bee6b74-6eab-44a3-9f40-794ca006c72d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 15 ++++++
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 62 ++++++++++++++++++++---
|
||||
2 files changed, 69 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1835,6 +1835,20 @@ struct rtw_phy_cond {
|
||||
#define BRANCH_ENDIF 3
|
||||
};
|
||||
|
||||
+struct rtw_phy_cond2 {
|
||||
+#ifdef __LITTLE_ENDIAN
|
||||
+ u8 type_glna;
|
||||
+ u8 type_gpa;
|
||||
+ u8 type_alna;
|
||||
+ u8 type_apa;
|
||||
+#else
|
||||
+ u8 type_apa;
|
||||
+ u8 type_alna;
|
||||
+ u8 type_gpa;
|
||||
+ u8 type_glna;
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
struct rtw_fifo_conf {
|
||||
/* tx fifo information */
|
||||
u16 rsvd_boundary;
|
||||
@@ -1916,6 +1930,7 @@ struct rtw_hal {
|
||||
u8 oem_id;
|
||||
u8 pkg_type;
|
||||
struct rtw_phy_cond phy_cond;
|
||||
+ struct rtw_phy_cond2 phy_cond2;
|
||||
bool rfe_btg;
|
||||
|
||||
u8 ps_mode;
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -18,7 +18,10 @@ struct phy_cfg_pair {
|
||||
};
|
||||
|
||||
union phy_table_tile {
|
||||
- struct rtw_phy_cond cond;
|
||||
+ struct {
|
||||
+ struct rtw_phy_cond cond;
|
||||
+ struct rtw_phy_cond2 cond2;
|
||||
+ } __packed;
|
||||
struct phy_cfg_pair cfg;
|
||||
};
|
||||
|
||||
@@ -1041,7 +1044,8 @@ void rtw_phy_setup_phy_cond(struct rtw_d
|
||||
{
|
||||
struct rtw_hal *hal = &rtwdev->hal;
|
||||
struct rtw_efuse *efuse = &rtwdev->efuse;
|
||||
- struct rtw_phy_cond cond = {0};
|
||||
+ struct rtw_phy_cond cond = {};
|
||||
+ struct rtw_phy_cond2 cond2 = {};
|
||||
|
||||
cond.cut = hal->cut_version ? hal->cut_version : 15;
|
||||
cond.pkg = pkg ? pkg : 15;
|
||||
@@ -1061,15 +1065,34 @@ void rtw_phy_setup_phy_cond(struct rtw_d
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A ||
|
||||
+ rtwdev->chip->id == RTW_CHIP_TYPE_8821A) {
|
||||
+ cond.rfe = 0;
|
||||
+ cond.rfe |= efuse->ext_lna_2g;
|
||||
+ cond.rfe |= efuse->ext_pa_2g << 1;
|
||||
+ cond.rfe |= efuse->ext_lna_5g << 2;
|
||||
+ cond.rfe |= efuse->ext_pa_5g << 3;
|
||||
+ cond.rfe |= efuse->btcoex << 4;
|
||||
+
|
||||
+ cond2.type_alna = efuse->alna_type;
|
||||
+ cond2.type_glna = efuse->glna_type;
|
||||
+ cond2.type_apa = efuse->apa_type;
|
||||
+ cond2.type_gpa = efuse->gpa_type;
|
||||
+ }
|
||||
+
|
||||
hal->phy_cond = cond;
|
||||
+ hal->phy_cond2 = cond2;
|
||||
|
||||
- rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x\n", *((u32 *)&hal->phy_cond));
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x cond2=0x%08x\n",
|
||||
+ *((u32 *)&hal->phy_cond), *((u32 *)&hal->phy_cond2));
|
||||
}
|
||||
|
||||
-static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond)
|
||||
+static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond,
|
||||
+ struct rtw_phy_cond2 cond2)
|
||||
{
|
||||
struct rtw_hal *hal = &rtwdev->hal;
|
||||
struct rtw_phy_cond drv_cond = hal->phy_cond;
|
||||
+ struct rtw_phy_cond2 drv_cond2 = hal->phy_cond2;
|
||||
|
||||
if (cond.cut && cond.cut != drv_cond.cut)
|
||||
return false;
|
||||
@@ -1080,8 +1103,29 @@ static bool check_positive(struct rtw_de
|
||||
if (cond.intf && cond.intf != drv_cond.intf)
|
||||
return false;
|
||||
|
||||
- if (cond.rfe != drv_cond.rfe)
|
||||
- return false;
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A ||
|
||||
+ rtwdev->chip->id == RTW_CHIP_TYPE_8821A) {
|
||||
+ if (!(cond.rfe & 0x0f))
|
||||
+ return true;
|
||||
+
|
||||
+ if ((cond.rfe & drv_cond.rfe) != cond.rfe)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(0)) && cond2.type_glna != drv_cond2.type_glna)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(1)) && cond2.type_gpa != drv_cond2.type_gpa)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(2)) && cond2.type_alna != drv_cond2.type_alna)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(3)) && cond2.type_apa != drv_cond2.type_apa)
|
||||
+ return false;
|
||||
+ } else {
|
||||
+ if (cond.rfe != drv_cond.rfe)
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1090,7 +1134,8 @@ void rtw_parse_tbl_phy_cond(struct rtw_d
|
||||
{
|
||||
const union phy_table_tile *p = tbl->data;
|
||||
const union phy_table_tile *end = p + tbl->size / 2;
|
||||
- struct rtw_phy_cond pos_cond = {0};
|
||||
+ struct rtw_phy_cond pos_cond = {};
|
||||
+ struct rtw_phy_cond2 pos_cond2 = {};
|
||||
bool is_matched = true, is_skipped = false;
|
||||
|
||||
BUILD_BUG_ON(sizeof(union phy_table_tile) != sizeof(struct phy_cfg_pair));
|
||||
@@ -1109,11 +1154,12 @@ void rtw_parse_tbl_phy_cond(struct rtw_d
|
||||
case BRANCH_ELIF:
|
||||
default:
|
||||
pos_cond = p->cond;
|
||||
+ pos_cond2 = p->cond2;
|
||||
break;
|
||||
}
|
||||
} else if (p->cond.neg) {
|
||||
if (!is_skipped) {
|
||||
- if (check_positive(rtwdev, pos_cond)) {
|
||||
+ if (check_positive(rtwdev, pos_cond, pos_cond2)) {
|
||||
is_matched = true;
|
||||
is_skipped = true;
|
||||
} else {
|
||||
@@ -0,0 +1,58 @@
|
||||
From 7c5bbeba7c36575a3a57ef4be775b2f3fb68c3f9 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:09:04 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Allow rtw_chip_info.ltecoex_addr to be NULL
|
||||
|
||||
RTL8821A doesn't have this. Trying to use it results in error messages,
|
||||
so don't try if ltecoex_addr is NULL.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/d1004817-1760-41d1-9136-3d799757c444@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -950,12 +950,18 @@ static void rtw_coex_coex_ctrl_owner(str
|
||||
|
||||
static void rtw_coex_set_gnt_bt(struct rtw_dev *rtwdev, u8 state)
|
||||
{
|
||||
+ if (!rtwdev->chip->ltecoex_addr)
|
||||
+ return;
|
||||
+
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0xc000, state);
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x0c00, state);
|
||||
}
|
||||
|
||||
static void rtw_coex_set_gnt_wl(struct rtw_dev *rtwdev, u8 state)
|
||||
{
|
||||
+ if (!rtwdev->chip->ltecoex_addr)
|
||||
+ return;
|
||||
+
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x3000, state);
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x0300, state);
|
||||
}
|
||||
@@ -3904,7 +3910,7 @@ void rtw_coex_display_coex_info(struct r
|
||||
u8 sys_lte;
|
||||
u16 score_board_WB, score_board_BW;
|
||||
u32 wl_reg_6c0, wl_reg_6c4, wl_reg_6c8, wl_reg_778, wl_reg_6cc;
|
||||
- u32 lte_coex, bt_coex;
|
||||
+ u32 lte_coex = 0, bt_coex = 0;
|
||||
int i;
|
||||
|
||||
score_board_BW = rtw_coex_read_scbd(rtwdev);
|
||||
@@ -3916,8 +3922,10 @@ void rtw_coex_display_coex_info(struct r
|
||||
wl_reg_778 = rtw_read8(rtwdev, REG_BT_STAT_CTRL);
|
||||
|
||||
sys_lte = rtw_read8(rtwdev, 0x73);
|
||||
- lte_coex = rtw_coex_read_indirect_reg(rtwdev, 0x38);
|
||||
- bt_coex = rtw_coex_read_indirect_reg(rtwdev, 0x54);
|
||||
+ if (rtwdev->chip->ltecoex_addr) {
|
||||
+ lte_coex = rtw_coex_read_indirect_reg(rtwdev, 0x38);
|
||||
+ bt_coex = rtw_coex_read_indirect_reg(rtwdev, 0x54);
|
||||
+ }
|
||||
|
||||
if (!coex_stat->wl_under_ips &&
|
||||
(!coex_stat->wl_under_lps || coex_stat->wl_force_lps_ctrl) &&
|
||||
@@ -0,0 +1,272 @@
|
||||
From fbb5e1b3637a720c83c91a7b1476ab0429bfc747 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:09:47 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Let each driver control the power on/off process
|
||||
|
||||
RTL8821AU and RTL8812AU have to do some things differently, so let
|
||||
them have full control.
|
||||
|
||||
The other chips use the same functions as before.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/mac.c | 11 +++++++----
|
||||
drivers/net/wireless/realtek/rtw88/mac.h | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 13 ++++++++-----
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 5 +++++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 ++
|
||||
10 files changed, 36 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -2753,16 +2753,19 @@ void rtw_coex_power_on_setting(struct rt
|
||||
rtw_write8(rtwdev, 0xff1a, 0x0);
|
||||
rtw_coex_set_gnt_debug(rtwdev);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_coex_power_on_setting);
|
||||
|
||||
void rtw_coex_power_off_setting(struct rtw_dev *rtwdev)
|
||||
{
|
||||
rtw_write16(rtwdev, REG_WIFI_BT_INFO, BIT_BT_INT_EN);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_coex_power_off_setting);
|
||||
|
||||
void rtw_coex_init_hw_config(struct rtw_dev *rtwdev, bool wifi_only)
|
||||
{
|
||||
__rtw_coex_init_hw_config(rtwdev, wifi_only);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_coex_init_hw_config);
|
||||
|
||||
void rtw_coex_ips_notify(struct rtw_dev *rtwdev, u8 type)
|
||||
{
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -227,8 +227,8 @@ static int rtw_sub_pwr_seq_parser(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
- const struct rtw_pwr_seq_cmd * const *cmd_seq)
|
||||
+int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
+ const struct rtw_pwr_seq_cmd * const *cmd_seq)
|
||||
{
|
||||
u8 cut_mask;
|
||||
u8 intf_mask;
|
||||
@@ -267,6 +267,7 @@ static int rtw_pwr_seq_parser(struct rtw
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_pwr_seq_parser);
|
||||
|
||||
static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
|
||||
{
|
||||
@@ -994,6 +995,7 @@ int rtw_download_firmware(struct rtw_dev
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_download_firmware);
|
||||
|
||||
static u32 get_priority_queues(struct rtw_dev *rtwdev, u32 queues)
|
||||
{
|
||||
@@ -1127,7 +1129,7 @@ static int txdma_queue_mapping(struct rt
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int set_trx_fifo_info(struct rtw_dev *rtwdev)
|
||||
+int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fifo_conf *fifo = &rtwdev->fifo;
|
||||
@@ -1179,6 +1181,7 @@ static int set_trx_fifo_info(struct rtw_
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_set_trx_fifo_info);
|
||||
|
||||
static int __priority_queue_cfg(struct rtw_dev *rtwdev,
|
||||
const struct rtw_page_table *pg_tbl,
|
||||
@@ -1256,7 +1259,7 @@ static int priority_queue_cfg(struct rtw
|
||||
u16 pubq_num;
|
||||
int ret;
|
||||
|
||||
- ret = set_trx_fifo_info(rtwdev);
|
||||
+ ret = rtw_set_trx_fifo_info(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
@@ -30,11 +30,14 @@
|
||||
|
||||
void rtw_set_channel_mac(struct rtw_dev *rtwdev, u8 channel, u8 bw,
|
||||
u8 primary_ch_idx);
|
||||
+int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
+ const struct rtw_pwr_seq_cmd * const *cmd_seq);
|
||||
int rtw_mac_power_on(struct rtw_dev *rtwdev);
|
||||
void rtw_mac_power_off(struct rtw_dev *rtwdev);
|
||||
int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw);
|
||||
int rtw_mac_init(struct rtw_dev *rtwdev);
|
||||
void rtw_mac_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop);
|
||||
+int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev);
|
||||
int rtw_ddma_to_fw_fifo(struct rtw_dev *rtwdev, u32 ocp_src, u32 size);
|
||||
|
||||
static inline void rtw_mac_flush_all_queues(struct rtw_dev *rtwdev, bool drop)
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -1309,7 +1309,7 @@ void rtw_update_sta_info(struct rtw_dev
|
||||
rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask);
|
||||
}
|
||||
|
||||
-static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
|
||||
+int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fw_state *fw;
|
||||
@@ -1329,6 +1329,7 @@ static int rtw_wait_firmware_completion(
|
||||
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_wait_firmware_completion);
|
||||
|
||||
static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev,
|
||||
struct rtw_fw_state *fw)
|
||||
@@ -1350,7 +1351,7 @@ static enum rtw_lps_deep_mode rtw_update
|
||||
return LPS_DEEP_MODE_NONE;
|
||||
}
|
||||
|
||||
-static int rtw_power_on(struct rtw_dev *rtwdev)
|
||||
+int rtw_power_on(struct rtw_dev *rtwdev)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fw_state *fw = &rtwdev->fw;
|
||||
@@ -1413,6 +1414,7 @@ err_off:
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_power_on);
|
||||
|
||||
void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start)
|
||||
{
|
||||
@@ -1485,7 +1487,7 @@ int rtw_core_start(struct rtw_dev *rtwde
|
||||
{
|
||||
int ret;
|
||||
|
||||
- ret = rtw_power_on(rtwdev);
|
||||
+ ret = rtwdev->chip->ops->power_on(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -1505,12 +1507,13 @@ int rtw_core_start(struct rtw_dev *rtwde
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void rtw_power_off(struct rtw_dev *rtwdev)
|
||||
+void rtw_power_off(struct rtw_dev *rtwdev)
|
||||
{
|
||||
rtw_hci_stop(rtwdev);
|
||||
rtw_coex_power_off_setting(rtwdev);
|
||||
rtw_mac_power_off(rtwdev);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_power_off);
|
||||
|
||||
void rtw_core_stop(struct rtw_dev *rtwdev)
|
||||
{
|
||||
@@ -1535,7 +1538,7 @@ void rtw_core_stop(struct rtw_dev *rtwde
|
||||
|
||||
mutex_lock(&rtwdev->mutex);
|
||||
|
||||
- rtw_power_off(rtwdev);
|
||||
+ rtwdev->chip->ops->power_off(rtwdev);
|
||||
}
|
||||
|
||||
static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -843,6 +843,8 @@ struct rtw_regd {
|
||||
};
|
||||
|
||||
struct rtw_chip_ops {
|
||||
+ int (*power_on)(struct rtw_dev *rtwdev);
|
||||
+ void (*power_off)(struct rtw_dev *rtwdev);
|
||||
int (*mac_init)(struct rtw_dev *rtwdev);
|
||||
int (*dump_fw_crash)(struct rtw_dev *rtwdev);
|
||||
void (*shutdown)(struct rtw_dev *rtwdev);
|
||||
@@ -2209,6 +2211,7 @@ void rtw_core_scan_start(struct rtw_dev
|
||||
void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
bool hw_scan);
|
||||
int rtw_core_start(struct rtw_dev *rtwdev);
|
||||
+void rtw_power_off(struct rtw_dev *rtwdev);
|
||||
void rtw_core_stop(struct rtw_dev *rtwdev);
|
||||
int rtw_chip_info_setup(struct rtw_dev *rtwdev);
|
||||
int rtw_core_init(struct rtw_dev *rtwdev);
|
||||
@@ -2223,6 +2226,8 @@ int rtw_sta_add(struct rtw_dev *rtwdev,
|
||||
void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
|
||||
bool fw_exist);
|
||||
void rtw_fw_recovery(struct rtw_dev *rtwdev);
|
||||
+int rtw_wait_firmware_completion(struct rtw_dev *rtwdev);
|
||||
+int rtw_power_on(struct rtw_dev *rtwdev);
|
||||
void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start);
|
||||
int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,
|
||||
u32 fwcd_item);
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1888,6 +1888,8 @@ static const struct coex_tdma_para tdma_
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8703b_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.mac_init = rtw8723x_mac_init,
|
||||
.dump_fw_crash = NULL,
|
||||
.shutdown = NULL,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -1390,6 +1390,8 @@ static void rtw8723d_pwr_track(struct rt
|
||||
}
|
||||
|
||||
static const struct rtw_chip_ops rtw8723d_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8723d_phy_set_param,
|
||||
.read_efuse = rtw8723x_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1643,6 +1643,8 @@ static const struct rtw_prioq_addrs prio
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8821c_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8821c_phy_set_param,
|
||||
.read_efuse = rtw8821c_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2132,6 +2132,8 @@ static const struct rtw_prioq_addrs prio
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8822b_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8822b_phy_set_param,
|
||||
.read_efuse = rtw8822b_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4947,6 +4947,8 @@ static const struct rtw_prioq_addrs prio
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8822c_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8822c_phy_set_param,
|
||||
.read_efuse = rtw8822c_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
@@ -0,0 +1,194 @@
|
||||
From c7706b1173c77185a2ef40c7d1811021566563f3 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:10:32 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Enable data rate fallback for older chips
|
||||
|
||||
RTL8811AU fails to perform the 4-way handshake when the AP is too far
|
||||
because it transmits the EAPOL frames at MCS9 and when that doesn't
|
||||
work it retries 48 times with the same rate, to no avail.
|
||||
|
||||
Retrying 48 times with the same rate seems pointless. Set the
|
||||
appropriate field in the TX descriptor to allow it to use lower rates
|
||||
when retrying.
|
||||
|
||||
Set it for RTL8723D and RTL8703B because they interpret this field the
|
||||
same way as RTL8811A.
|
||||
|
||||
The newer RTL8822C, RTL8822B, RTL8821C seem to interpret this field in
|
||||
the TX descriptor differently, so leave it alone for those chips.
|
||||
|
||||
Tested with RTL8811AU and RTL8723DU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/pci.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/sdio.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/tx.c | 6 +++++-
|
||||
drivers/net/wireless/realtek/rtw88/tx.h | 4 +++-
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 4 ++--
|
||||
12 files changed, 19 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -1290,7 +1290,7 @@ static void rtw_fill_rsvd_page_desc(stru
|
||||
rtw_tx_rsvd_page_pkt_info_update(rtwdev, &pkt_info, skb, type);
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
|
||||
- rtw_tx_fill_tx_desc(&pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
|
||||
}
|
||||
|
||||
static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1204,6 +1204,7 @@ struct rtw_chip_info {
|
||||
u8 usb_tx_agg_desc_num;
|
||||
bool hw_feature_report;
|
||||
u8 c2h_ra_report_size;
|
||||
+ bool old_datarate_fb_limit;
|
||||
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -824,7 +824,7 @@ static int rtw_pci_tx_write_data(struct
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, tx_pkt_desc_sz);
|
||||
pkt_info->qsel = rtw_pci_get_tx_qsel(skb, queue);
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
dma = dma_map_single(&rtwpci->pdev->dev, skb->data, skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(&rtwpci->pdev->dev, dma))
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1964,6 +1964,7 @@ const struct rtw_chip_info rtw8703b_hw_s
|
||||
.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = true,
|
||||
|
||||
.path_div_supported = false,
|
||||
.ht_supported = true,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2135,6 +2135,7 @@ const struct rtw_chip_info rtw8723d_hw_s
|
||||
.usb_tx_agg_desc_num = 1,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = true,
|
||||
.ht_supported = true,
|
||||
.vht_supported = false,
|
||||
.lps_deep_mode_supported = 0,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1972,6 +1972,7 @@ const struct rtw_chip_info rtw8821c_hw_s
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = false,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2513,6 +2513,7 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = false,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5333,6 +5333,7 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = false,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -864,7 +864,7 @@ static void rtw_sdio_tx_skb_prepare(stru
|
||||
|
||||
pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
|
||||
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, pkt_desc);
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/tx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
|
||||
@@ -32,7 +32,8 @@ void rtw_tx_stats(struct rtw_dev *rtwdev
|
||||
}
|
||||
}
|
||||
|
||||
-void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
|
||||
+void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
|
||||
{
|
||||
struct rtw_tx_desc *tx_desc = (struct rtw_tx_desc *)skb->data;
|
||||
bool more_data = false;
|
||||
@@ -67,6 +68,9 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_p
|
||||
|
||||
tx_desc->w4 = le32_encode_bits(pkt_info->rate, RTW_TX_DESC_W4_DATARATE);
|
||||
|
||||
+ if (rtwdev->chip->old_datarate_fb_limit)
|
||||
+ tx_desc->w4 |= le32_encode_bits(0x1f, RTW_TX_DESC_W4_DATARATE_FB_LIMIT);
|
||||
+
|
||||
tx_desc->w5 = le32_encode_bits(pkt_info->short_gi, RTW_TX_DESC_W5_DATA_SHORT) |
|
||||
le32_encode_bits(pkt_info->bw, RTW_TX_DESC_W5_DATA_BW) |
|
||||
le32_encode_bits(pkt_info->ldpc, RTW_TX_DESC_W5_DATA_LDPC) |
|
||||
--- a/drivers/net/wireless/realtek/rtw88/tx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/tx.h
|
||||
@@ -44,6 +44,7 @@ struct rtw_tx_desc {
|
||||
#define RTW_TX_DESC_W3_NAVUSEHDR BIT(15)
|
||||
#define RTW_TX_DESC_W3_MAX_AGG_NUM GENMASK(21, 17)
|
||||
#define RTW_TX_DESC_W4_DATARATE GENMASK(6, 0)
|
||||
+#define RTW_TX_DESC_W4_DATARATE_FB_LIMIT GENMASK(12, 8)
|
||||
#define RTW_TX_DESC_W4_RTSRATE GENMASK(28, 24)
|
||||
#define RTW_TX_DESC_W5_DATA_SHORT BIT(4)
|
||||
#define RTW_TX_DESC_W5_DATA_BW GENMASK(6, 5)
|
||||
@@ -94,7 +95,8 @@ void rtw_tx_pkt_info_update(struct rtw_d
|
||||
struct rtw_tx_pkt_info *pkt_info,
|
||||
struct ieee80211_sta *sta,
|
||||
struct sk_buff *skb);
|
||||
-void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb);
|
||||
+void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb);
|
||||
void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn);
|
||||
void rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb, int src);
|
||||
void rtw_tx_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -458,7 +458,7 @@ static int rtw_usb_write_data(struct rtw
|
||||
skb_put_data(skb, buf, size);
|
||||
skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(skb->data, 0, chip->tx_pkt_desc_sz);
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
|
||||
|
||||
ret = rtw_usb_write_port(rtwdev, qsel, skb,
|
||||
@@ -525,7 +525,7 @@ static int rtw_usb_tx_write(struct rtw_d
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
|
||||
ep = qsel_to_ep(rtwusb, pkt_info->qsel);
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
|
||||
tx_data = rtw_usb_get_tx_data(skb);
|
||||
tx_data->sn = pkt_info->sn;
|
||||
@@ -0,0 +1,85 @@
|
||||
From abb0f19492ba6289ffba6ec1057c0426240958af Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:10:54 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Make txagc_remnant_ofdm an array
|
||||
|
||||
txagc_remnant_ofdm member of struct rtw_dm_info should be different for
|
||||
each RF path, so make it an array of size RTW_RF_PATH_MAX (4).
|
||||
|
||||
Until now all the chips using this had only one RF path, but RTL8812AU
|
||||
has two, and RTL8814AU has four.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/68571ba9-e504-4b2d-bfa1-62f468753649@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 4 ++--
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 4 ++--
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 4 ++--
|
||||
4 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1715,7 +1715,7 @@ struct rtw_dm_info {
|
||||
bool pwr_trk_init_trigger;
|
||||
struct ewma_thermal avg_thermal[RTW_RF_PATH_MAX];
|
||||
s8 txagc_remnant_cck;
|
||||
- s8 txagc_remnant_ofdm;
|
||||
+ s8 txagc_remnant_ofdm[RTW_RF_PATH_MAX];
|
||||
u8 rx_cck_agc_report_type;
|
||||
|
||||
/* backup dack results for each path and I/Q */
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -2169,8 +2169,8 @@ void rtw_get_tx_power_params(struct rtw_
|
||||
|
||||
*limit = rtw_phy_get_tx_power_limit(rtwdev, band, bw, path,
|
||||
rate, ch, regd);
|
||||
- *remnant = (rate <= DESC_RATE11M ? dm_info->txagc_remnant_cck :
|
||||
- dm_info->txagc_remnant_ofdm);
|
||||
+ *remnant = rate <= DESC_RATE11M ? dm_info->txagc_remnant_cck :
|
||||
+ dm_info->txagc_remnant_ofdm[path];
|
||||
*sar = rtw_phy_get_tx_power_sar(rtwdev, hal->sar_band, path, rate);
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -637,7 +637,7 @@ static void rtw8703b_pwrtrack_init(struc
|
||||
dm_info->pwr_trk_init_trigger = true;
|
||||
dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
|
||||
dm_info->txagc_remnant_cck = 0;
|
||||
- dm_info->txagc_remnant_ofdm = 0;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = 0;
|
||||
}
|
||||
|
||||
static void rtw8703b_phy_set_param(struct rtw_dev *rtwdev)
|
||||
@@ -1589,7 +1589,7 @@ static void rtw8703b_pwrtrack_set_ofdm_p
|
||||
{
|
||||
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
||||
|
||||
- dm_info->txagc_remnant_ofdm = txagc_idx;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = txagc_idx;
|
||||
|
||||
/* Only path A is calibrated for rtl8703b */
|
||||
rtw8703b_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_A);
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -79,7 +79,7 @@ static void rtw8723d_pwrtrack_init(struc
|
||||
dm_info->pwr_trk_init_trigger = true;
|
||||
dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
|
||||
dm_info->txagc_remnant_cck = 0;
|
||||
- dm_info->txagc_remnant_ofdm = 0;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = 0;
|
||||
}
|
||||
|
||||
static void rtw8723d_phy_set_param(struct rtw_dev *rtwdev)
|
||||
@@ -1265,7 +1265,7 @@ static void rtw8723d_pwrtrack_set_ofdm_p
|
||||
{
|
||||
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
||||
|
||||
- dm_info->txagc_remnant_ofdm = txagc_idx;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = txagc_idx;
|
||||
|
||||
rtw8723d_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_A);
|
||||
rtw8723d_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_B);
|
||||
@@ -0,0 +1,115 @@
|
||||
From 82a617413e8545775ec03a1970809ac5f549ef32 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:12:06 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Support TX page sizes bigger than 128
|
||||
|
||||
All the chips supported so far have a TX page size of 128 bytes.
|
||||
|
||||
Change the type of the page_size member of struct rtw_chip_info from u8
|
||||
to u16 in order to support RTL8821AU (page size of 256 bytes) and
|
||||
RTL8812AU (page size of 512 bytes). Also change the types of several
|
||||
related variables and function parameters from u8 to u16.
|
||||
|
||||
The TX page size is used, among other things, to construct the beacon,
|
||||
null data, QOS null data, and PS poll templates which are uploaded to
|
||||
the chip's reserved page. Each template needs to be aligned on a
|
||||
multiple of the TX page size. Power saving can't work if the TX page
|
||||
size is wrong.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/acdefbb1-3daf-4349-9e03-9472754d5f1e@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/debug.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 21 +++++++++++----------
|
||||
drivers/net/wireless/realtek/rtw88/mac.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 2 +-
|
||||
4 files changed, 14 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/debug.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/debug.c
|
||||
@@ -308,7 +308,7 @@ static int rtw_debugfs_get_rsvd_page(str
|
||||
{
|
||||
struct rtw_debugfs_priv *debugfs_priv = m->private;
|
||||
struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
|
||||
- u8 page_size = rtwdev->chip->page_size;
|
||||
+ u16 page_size = rtwdev->chip->page_size;
|
||||
u32 buf_size = debugfs_priv->rsvd_page.page_num * page_size;
|
||||
u32 offset = debugfs_priv->rsvd_page.page_offset * page_size;
|
||||
u8 *buf;
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -1293,13 +1293,13 @@ static void rtw_fill_rsvd_page_desc(stru
|
||||
rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
|
||||
}
|
||||
|
||||
-static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
|
||||
+static inline u8 rtw_len_to_page(unsigned int len, u16 page_size)
|
||||
{
|
||||
return DIV_ROUND_UP(len, page_size);
|
||||
}
|
||||
|
||||
-static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u8 page_size,
|
||||
- u8 page_margin, u32 page, u8 *buf,
|
||||
+static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u16 page_size,
|
||||
+ u16 page_margin, u32 page, u8 *buf,
|
||||
struct rtw_rsvd_page *rsvd_pkt)
|
||||
{
|
||||
struct sk_buff *skb = rsvd_pkt->skb;
|
||||
@@ -1601,13 +1601,13 @@ static int __rtw_build_rsvd_page_from_v
|
||||
|
||||
static u8 *rtw_build_rsvd_page(struct rtw_dev *rtwdev, u32 *size)
|
||||
{
|
||||
- struct ieee80211_hw *hw = rtwdev->hw;
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
- struct sk_buff *iter;
|
||||
+ struct ieee80211_hw *hw = rtwdev->hw;
|
||||
struct rtw_rsvd_page *rsvd_pkt;
|
||||
- u32 page = 0;
|
||||
+ struct sk_buff *iter;
|
||||
+ u16 page_size, page_margin, tx_desc_sz;
|
||||
u8 total_page = 0;
|
||||
- u8 page_size, page_margin, tx_desc_sz;
|
||||
+ u32 page = 0;
|
||||
u8 *buf;
|
||||
int ret;
|
||||
|
||||
@@ -2013,12 +2013,13 @@ static int _rtw_hw_scan_update_probe_req
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct sk_buff *skb, *tmp;
|
||||
- u8 page_offset = 1, *buf, page_size = chip->page_size;
|
||||
u16 pg_addr = rtwdev->fifo.rsvd_h2c_info_addr, loc;
|
||||
- u16 buf_offset = page_size * page_offset;
|
||||
u8 tx_desc_sz = chip->tx_pkt_desc_sz;
|
||||
- u8 page_cnt, pages;
|
||||
+ u16 page_size = chip->page_size;
|
||||
+ u8 page_offset = 1, *buf;
|
||||
+ u16 buf_offset = page_size * page_offset;
|
||||
unsigned int pkt_len;
|
||||
+ u8 page_cnt, pages;
|
||||
int ret;
|
||||
|
||||
if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -1138,7 +1138,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev
|
||||
|
||||
/* config rsvd page num */
|
||||
fifo->rsvd_drv_pg_num = chip->rsvd_drv_pg_num;
|
||||
- fifo->txff_pg_num = chip->txff_size >> 7;
|
||||
+ fifo->txff_pg_num = chip->txff_size / chip->page_size;
|
||||
if (rtw_chip_wcpu_11n(rtwdev))
|
||||
fifo->rsvd_pg_num = fifo->rsvd_drv_pg_num;
|
||||
else
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1187,7 +1187,7 @@ struct rtw_chip_info {
|
||||
u32 fw_rxff_size;
|
||||
u16 rsvd_drv_pg_num;
|
||||
u8 band;
|
||||
- u8 page_size;
|
||||
+ u16 page_size;
|
||||
u8 csi_buf_pg_num;
|
||||
u8 dig_max;
|
||||
u8 dig_min;
|
||||
@@ -0,0 +1,297 @@
|
||||
From 67d915604e6993ff627ac001983a2de63ff71b13 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:12:39 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Move pwr_track_tbl to struct rtw_rfe_def
|
||||
|
||||
RTL8812AU uses one set of TX power tracking tables for RFE 3, and
|
||||
another set for everything else.
|
||||
|
||||
Move pwr_track_tbl from struct rtw_chip_info to struct rtw_rfe_def in
|
||||
order to load the right set of tables for each RFE (RF front end) type.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 8 ++++---
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 3 ++-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 12 +++++-----
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 12 +++++-----
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723x.c | 3 ++-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 17 +++++++-------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 15 ++++++------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 23 +++++++++----------
|
||||
8 files changed, 47 insertions(+), 46 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1099,17 +1099,20 @@ enum rtw_rfe_fem {
|
||||
struct rtw_rfe_def {
|
||||
const struct rtw_table *phy_pg_tbl;
|
||||
const struct rtw_table *txpwr_lmt_tbl;
|
||||
+ const struct rtw_pwr_track_tbl *pwr_track_tbl;
|
||||
const struct rtw_table *agc_btg_tbl;
|
||||
};
|
||||
|
||||
-#define RTW_DEF_RFE(chip, bb_pg, pwrlmt) { \
|
||||
+#define RTW_DEF_RFE(chip, bb_pg, pwrlmt, track) { \
|
||||
.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl, \
|
||||
.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \
|
||||
+ .pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \
|
||||
}
|
||||
|
||||
-#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, btg) { \
|
||||
+#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, track, btg) { \
|
||||
.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl, \
|
||||
.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \
|
||||
+ .pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \
|
||||
.agc_btg_tbl = &rtw ## chip ## _agc_btg_type ## btg ## _tbl, \
|
||||
}
|
||||
|
||||
@@ -1243,7 +1246,6 @@ struct rtw_chip_info {
|
||||
u16 dpd_ratemask;
|
||||
u8 iqk_threshold;
|
||||
u8 lck_threshold;
|
||||
- const struct rtw_pwr_track_tbl *pwr_track_tbl;
|
||||
|
||||
u8 bfer_su_max_num;
|
||||
u8 bfer_mu_max_num;
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -2384,7 +2384,8 @@ void rtw_phy_init_tx_power(struct rtw_de
|
||||
void rtw_phy_config_swing_table(struct rtw_dev *rtwdev,
|
||||
struct rtw_swing_table *swing_table)
|
||||
{
|
||||
- const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl;
|
||||
+ const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
|
||||
+ const struct rtw_pwr_track_tbl *tbl = rfe_def->pwr_track_tbl;
|
||||
u8 channel = rtwdev->hal.current_channel;
|
||||
|
||||
if (IS_CH_2G_BAND(channel)) {
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -493,11 +493,6 @@ static const struct rtw_pwr_seq_cmd * co
|
||||
NULL
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8703b_rfe_defs[] = {
|
||||
- [0] = { .phy_pg_tbl = &rtw8703b_bb_pg_tbl,
|
||||
- .txpwr_lmt_tbl = &rtw8703b_txpwr_lmt_tbl,},
|
||||
-};
|
||||
-
|
||||
static const struct rtw_page_table page_table_8703b[] = {
|
||||
{12, 2, 2, 0, 1},
|
||||
{12, 2, 2, 0, 1},
|
||||
@@ -1818,6 +1813,12 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_xtal_p = rtw8703b_pwrtrk_xtal_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8703b_rfe_defs[] = {
|
||||
+ [0] = { .phy_pg_tbl = &rtw8703b_bb_pg_tbl,
|
||||
+ .txpwr_lmt_tbl = &rtw8703b_txpwr_lmt_tbl,
|
||||
+ .pwr_track_tbl = &rtw8703b_rtw_pwr_track_tbl, },
|
||||
+};
|
||||
+
|
||||
/* Shared-Antenna Coex Table */
|
||||
static const struct coex_table_para table_sant_8703b[] = {
|
||||
{0xffffffff, 0xffffffff}, /* case-0 */
|
||||
@@ -1997,7 +1998,6 @@ const struct rtw_chip_info rtw8703b_hw_s
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8703b_rfe_defs),
|
||||
|
||||
.iqk_threshold = 8,
|
||||
- .pwr_track_tbl = &rtw8703b_rtw_pwr_track_tbl,
|
||||
|
||||
/* WOWLAN firmware exists, but not implemented yet */
|
||||
.wow_fw_name = "rtw88/rtw8703b_wow_fw.bin",
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2020,11 +2020,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
.n_gen1_para = ARRAY_SIZE(pcie_gen1_param_8723d),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8723d_rfe_defs[] = {
|
||||
- [0] = { .phy_pg_tbl = &rtw8723d_bb_pg_tbl,
|
||||
- .txpwr_lmt_tbl = &rtw8723d_txpwr_lmt_tbl,},
|
||||
-};
|
||||
-
|
||||
static const u8 rtw8723d_pwrtrk_2gb_n[] = {
|
||||
0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 5,
|
||||
6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10
|
||||
@@ -2088,6 +2083,12 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_xtal_n = rtw8723d_pwrtrk_xtal_n,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8723d_rfe_defs[] = {
|
||||
+ [0] = { .phy_pg_tbl = &rtw8723d_bb_pg_tbl,
|
||||
+ .txpwr_lmt_tbl = &rtw8723d_txpwr_lmt_tbl,
|
||||
+ .pwr_track_tbl = &rtw8723d_rtw_pwr_track_tbl, },
|
||||
+};
|
||||
+
|
||||
static const struct rtw_reg_domain coex_info_hw_regs_8723d[] = {
|
||||
{0x948, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0x67, BIT(7), RTW_REG_DOMAIN_MAC8},
|
||||
@@ -2159,7 +2160,6 @@ const struct rtw_chip_info rtw8723d_hw_s
|
||||
.rfe_defs = rtw8723d_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8723d_rfe_defs),
|
||||
.rx_ldpc = false,
|
||||
- .pwr_track_tbl = &rtw8723d_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
||||
.max_scan_ie_len = IEEE80211_MAX_DATA_LEN,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
@@ -595,7 +595,8 @@ void __rtw8723x_pwrtrack_set_xtal(struct
|
||||
u8 delta)
|
||||
{
|
||||
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
||||
- const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl;
|
||||
+ const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
|
||||
+ const struct rtw_pwr_track_tbl *tbl = rfe_def->pwr_track_tbl;
|
||||
const s8 *pwrtrk_xtal;
|
||||
s8 xtal_cap;
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1581,13 +1581,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8821c),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8821c_rfe_defs[] = {
|
||||
- [0] = RTW_DEF_RFE(8821c, 0, 0),
|
||||
- [2] = RTW_DEF_RFE_EXT(8821c, 0, 0, 2),
|
||||
- [4] = RTW_DEF_RFE_EXT(8821c, 0, 0, 2),
|
||||
- [6] = RTW_DEF_RFE(8821c, 0, 0),
|
||||
-};
|
||||
-
|
||||
static const struct rtw_hw_reg rtw8821c_dig[] = {
|
||||
[0] = { .addr = 0xc50, .mask = 0x7f },
|
||||
};
|
||||
@@ -1899,7 +1892,7 @@ static const u8 rtw8821c_pwrtrk_2g_cck_a
|
||||
5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_track_tbl rtw8821c_rtw_pwr_track_tbl = {
|
||||
+static const struct rtw_pwr_track_tbl rtw8821c_pwr_track_type0_tbl = {
|
||||
.pwrtrk_5gb_n[0] = rtw8821c_pwrtrk_5gb_n[0],
|
||||
.pwrtrk_5gb_n[1] = rtw8821c_pwrtrk_5gb_n[1],
|
||||
.pwrtrk_5gb_n[2] = rtw8821c_pwrtrk_5gb_n[2],
|
||||
@@ -1922,6 +1915,13 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8821c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8821c_rfe_defs[] = {
|
||||
+ [0] = RTW_DEF_RFE(8821c, 0, 0, 0),
|
||||
+ [2] = RTW_DEF_RFE_EXT(8821c, 0, 0, 0, 2),
|
||||
+ [4] = RTW_DEF_RFE_EXT(8821c, 0, 0, 0, 2),
|
||||
+ [6] = RTW_DEF_RFE(8821c, 0, 0, 0),
|
||||
+};
|
||||
+
|
||||
static const struct rtw_reg_domain coex_info_hw_regs_8821c[] = {
|
||||
{0xCB0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0xCB4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
@@ -1994,7 +1994,6 @@ const struct rtw_chip_info rtw8821c_hw_s
|
||||
.rfe_defs = rtw8821c_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8821c_rfe_defs),
|
||||
.rx_ldpc = false,
|
||||
- .pwr_track_tbl = &rtw8821c_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.bfer_su_max_num = 2,
|
||||
.bfer_mu_max_num = 1,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2072,12 +2072,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8822b),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8822b_rfe_defs[] = {
|
||||
- [2] = RTW_DEF_RFE(8822b, 2, 2),
|
||||
- [3] = RTW_DEF_RFE(8822b, 3, 0),
|
||||
- [5] = RTW_DEF_RFE(8822b, 5, 5),
|
||||
-};
|
||||
-
|
||||
static const struct rtw_hw_reg rtw8822b_dig[] = {
|
||||
[0] = { .addr = 0xc50, .mask = 0x7f },
|
||||
[1] = { .addr = 0xe50, .mask = 0x7f },
|
||||
@@ -2432,7 +2426,7 @@ static const u8 rtw8822b_pwrtrk_2g_cck_a
|
||||
10, 11, 11, 12, 12, 13, 13, 14, 14, 15
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_track_tbl rtw8822b_rtw_pwr_track_tbl = {
|
||||
+static const struct rtw_pwr_track_tbl rtw8822b_pwr_track_type0_tbl = {
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
|
||||
@@ -2455,6 +2449,12 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8822b_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8822b_rfe_defs[] = {
|
||||
+ [2] = RTW_DEF_RFE(8822b, 2, 2, 0),
|
||||
+ [3] = RTW_DEF_RFE(8822b, 3, 0, 0),
|
||||
+ [5] = RTW_DEF_RFE(8822b, 5, 5, 0),
|
||||
+};
|
||||
+
|
||||
static const struct rtw_reg_domain coex_info_hw_regs_8822b[] = {
|
||||
{0xcb0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0xcb4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
@@ -2535,7 +2535,6 @@ const struct rtw_chip_info rtw8822b_hw_s
|
||||
.rf_tbl = {&rtw8822b_rf_a_tbl, &rtw8822b_rf_b_tbl},
|
||||
.rfe_defs = rtw8822b_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8822b_rfe_defs),
|
||||
- .pwr_track_tbl = &rtw8822b_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.bfer_su_max_num = 2,
|
||||
.bfer_mu_max_num = 1,
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4883,16 +4883,6 @@ static const struct rtw_intf_phy_para_ta
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8822c),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8822c_rfe_defs[] = {
|
||||
- [0] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [1] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [2] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [3] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [4] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [5] = RTW_DEF_RFE(8822c, 0, 5),
|
||||
- [6] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
-};
|
||||
-
|
||||
static const struct rtw_hw_reg rtw8822c_dig[] = {
|
||||
[0] = { .addr = 0x1d70, .mask = 0x7f },
|
||||
[1] = { .addr = 0x1d70, .mask = 0x7f00 },
|
||||
@@ -5238,7 +5228,7 @@ static const u8 rtw8822c_pwrtrk_2g_cck_a
|
||||
18, 18, 19, 20, 21, 22, 23, 24, 24, 25
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_track_tbl rtw8822c_rtw_pwr_track_tbl = {
|
||||
+static const struct rtw_pwr_track_tbl rtw8822c_pwr_track_type0_tbl = {
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
|
||||
@@ -5261,6 +5251,16 @@ static const struct rtw_pwr_track_tbl rt
|
||||
.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8822c_rfe_defs[] = {
|
||||
+ [0] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [1] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [2] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [3] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [4] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [5] = RTW_DEF_RFE(8822c, 0, 5, 0),
|
||||
+ [6] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+};
|
||||
+
|
||||
static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
|
||||
[EDCCA_TH_L2H_IDX] = {
|
||||
{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
|
||||
@@ -5360,7 +5360,6 @@ const struct rtw_chip_info rtw8822c_hw_s
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs),
|
||||
.en_dis_dpd = true,
|
||||
.dpd_ratemask = DIS_DPD_RATEALL,
|
||||
- .pwr_track_tbl = &rtw8822c_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.lck_threshold = 8,
|
||||
.bfer_su_max_num = 2,
|
||||
@@ -0,0 +1,27 @@
|
||||
From 85bf3041a0ea40a60b5295749268e179f056546a Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:13:10 +0300
|
||||
Subject: [PATCH] wifi: rtw88: usb: Set pkt_info.ls for the reserved page
|
||||
|
||||
"ls" meaning "last segment". Without this RTL8812AU can't upload the
|
||||
reserved page in USB 2 mode. (Somehow it's fine in USB 3 mode.)
|
||||
|
||||
Also tested with RTL8822CU, RTL8812BU, RTL8811CU, RTL8723DU, RTL8811AU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/e443f5d9-4b53-4f64-985c-64313ec80bef@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -478,6 +478,7 @@ static int rtw_usb_write_data_rsvd_page(
|
||||
pkt_info.tx_pkt_size = size;
|
||||
pkt_info.qsel = TX_DESC_QSEL_BEACON;
|
||||
pkt_info.offset = chip->tx_pkt_desc_sz;
|
||||
+ pkt_info.ls = true;
|
||||
|
||||
return rtw_usb_write_data(rtwdev, &pkt_info, buf);
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
From 57289d30cd2ae315ab9b28213d63d1dbf8570cf3 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:13:45 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Detect beacon loss with chips other than 8822c
|
||||
|
||||
The driver is supposed to avoid entering LPS (power saving) when there
|
||||
is beacon loss, but only RTL8822C detects the beacon loss (because it
|
||||
has beacon filtering in the firmware).
|
||||
|
||||
Detect beacon loss with the other chips by checking if we received less
|
||||
than half the expected number of beacons in the last 2-second interval.
|
||||
|
||||
This gets rid of the occasional "failed to get tx report from firmware"
|
||||
warnings with RTL8821AU. It may also avoid some disconnections.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/f52b2fcf-bf94-48bc-89bd-e55ebc3a2f2d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -202,6 +202,21 @@ static void rtw_vif_watch_dog_iter(void
|
||||
rtwvif->stats.rx_cnt = 0;
|
||||
}
|
||||
|
||||
+static void rtw_sw_beacon_loss_check(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_vif *rtwvif, int received_beacons)
|
||||
+{
|
||||
+ int watchdog_delay = 2000000 / 1024; /* TU */
|
||||
+ int beacon_int, expected_beacons;
|
||||
+
|
||||
+ if (rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_BCN_FILTER) || !rtwvif)
|
||||
+ return;
|
||||
+
|
||||
+ beacon_int = rtwvif_to_vif(rtwvif)->bss_conf.beacon_int;
|
||||
+ expected_beacons = DIV_ROUND_UP(watchdog_delay, beacon_int);
|
||||
+
|
||||
+ rtwdev->beacon_loss = received_beacons < expected_beacons / 2;
|
||||
+}
|
||||
+
|
||||
/* process TX/RX statistics periodically for hardware,
|
||||
* the information helps hardware to enhance performance
|
||||
*/
|
||||
@@ -212,6 +227,7 @@ static void rtw_watch_dog_work(struct wo
|
||||
struct rtw_traffic_stats *stats = &rtwdev->stats;
|
||||
struct rtw_watch_dog_iter_data data = {};
|
||||
bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
|
||||
+ int received_beacons = rtwdev->dm_info.cur_pkt_count.num_bcn_pkt;
|
||||
u32 tx_unicast_mbps, rx_unicast_mbps;
|
||||
bool ps_active;
|
||||
|
||||
@@ -270,6 +286,8 @@ static void rtw_watch_dog_work(struct wo
|
||||
*/
|
||||
rtw_iterate_vifs(rtwdev, rtw_vif_watch_dog_iter, &data);
|
||||
|
||||
+ rtw_sw_beacon_loss_check(rtwdev, data.rtwvif, received_beacons);
|
||||
+
|
||||
/* fw supports only one station associated to enter lps, if there are
|
||||
* more than two stations associated to the AP, then we can not enter
|
||||
* lps, because fw does not handle the overlapped beacon interval
|
||||
@@ -0,0 +1,66 @@
|
||||
From b19840afc05121293ae59f017cb9924814eb5d77 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:14:12 +0300
|
||||
Subject: [PATCH] wifi: rtw88: coex: Support chips without a scoreboard
|
||||
|
||||
All the chips currently supported have a "scoreboard": the chip keeps
|
||||
track of certain things related to bluetooth, for example, whether
|
||||
bluetooth is active. The information can be read from register 0xaa.
|
||||
|
||||
RTL8821AU doesn't have this. Implement bluetooth activity detection in
|
||||
rtw_coex_monitor_bt_enable() based on the bluetooth TX/RX counters.
|
||||
|
||||
This is mostly important for RTL8811AU, the version of RTL8821AU without
|
||||
bluetooth. Without this change, the driver thinks bluetooth is active
|
||||
and the wifi speeds are low.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/5058f23d-2086-42cd-82ad-eef31a348467@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 18 ++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
2 files changed, 19 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -494,11 +494,29 @@ static void rtw_coex_monitor_bt_enable(s
|
||||
struct rtw_coex_stat *coex_stat = &coex->stat;
|
||||
struct rtw_coex_dm *coex_dm = &coex->dm;
|
||||
bool bt_disabled = false;
|
||||
+ bool bt_active = true;
|
||||
u16 score_board;
|
||||
|
||||
if (chip->scbd_support) {
|
||||
score_board = rtw_coex_read_scbd(rtwdev);
|
||||
bt_disabled = !(score_board & COEX_SCBD_ONOFF);
|
||||
+ } else {
|
||||
+ if (coex_stat->hi_pri_tx == 0 && coex_stat->hi_pri_rx == 0 &&
|
||||
+ coex_stat->lo_pri_tx == 0 && coex_stat->lo_pri_rx == 0)
|
||||
+ bt_active = false;
|
||||
+
|
||||
+ if (coex_stat->hi_pri_tx == 0xffff && coex_stat->hi_pri_rx == 0xffff &&
|
||||
+ coex_stat->lo_pri_tx == 0xffff && coex_stat->lo_pri_rx == 0xffff)
|
||||
+ bt_active = false;
|
||||
+
|
||||
+ if (bt_active) {
|
||||
+ coex_stat->bt_disable_cnt = 0;
|
||||
+ bt_disabled = false;
|
||||
+ } else {
|
||||
+ coex_stat->bt_disable_cnt++;
|
||||
+ if (coex_stat->bt_disable_cnt >= 10)
|
||||
+ bt_disabled = true;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (coex_stat->bt_disabled != bt_disabled) {
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1494,6 +1494,7 @@ struct rtw_coex_stat {
|
||||
u8 bt_hid_slot;
|
||||
u8 bt_a2dp_bitpool;
|
||||
u8 bt_iqk_state;
|
||||
+ u8 bt_disable_cnt;
|
||||
|
||||
u16 wl_beacon_interval;
|
||||
u8 wl_noisy_level;
|
||||
@@ -0,0 +1,67 @@
|
||||
From bfcee5ee924fc5f706d20f5dc31586ca47912304 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:14:45 +0300
|
||||
Subject: [PATCH] wifi: rtw88: 8821a: Regularly ask for BT info updates
|
||||
|
||||
The RTL8821AU firmware sends C2H_BT_INFO by itself when bluetooth
|
||||
headphones are connected, but not when they are disconnected. This leads
|
||||
to the coexistence code still using the A2DP algorithm long after the
|
||||
headphones are disconnected, which means the wifi speeds are much lower
|
||||
than they should be. Work around this by asking for updates every two
|
||||
seconds if the chip is RTL8821AU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/358acdd2-6aae-46c1-9c66-fcce4e700b96@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/coex.h | 11 +++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 1 +
|
||||
3 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -446,7 +446,7 @@ static void rtw_coex_check_rfk(struct rt
|
||||
}
|
||||
}
|
||||
|
||||
-static void rtw_coex_query_bt_info(struct rtw_dev *rtwdev)
|
||||
+void rtw_coex_query_bt_info(struct rtw_dev *rtwdev)
|
||||
{
|
||||
struct rtw_coex *coex = &rtwdev->coex;
|
||||
struct rtw_coex_stat *coex_stat = &coex->stat;
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.h
|
||||
@@ -384,6 +384,7 @@ u32 rtw_coex_read_indirect_reg(struct rt
|
||||
void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr,
|
||||
u32 mask, u32 val);
|
||||
void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set);
|
||||
+void rtw_coex_query_bt_info(struct rtw_dev *rtwdev);
|
||||
|
||||
void rtw_coex_bt_relink_work(struct work_struct *work);
|
||||
void rtw_coex_bt_reenable_work(struct work_struct *work);
|
||||
@@ -419,4 +420,14 @@ static inline bool rtw_coex_disabled(str
|
||||
return coex_stat->bt_disabled;
|
||||
}
|
||||
|
||||
+static inline void rtw_coex_active_query_bt_info(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ /* The RTL8821AU firmware doesn't send C2H_BT_INFO by itself
|
||||
+ * when bluetooth headphones are disconnected, so we have to
|
||||
+ * ask for it regularly.
|
||||
+ */
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8821A && rtwdev->efuse.btcoex)
|
||||
+ rtw_coex_query_bt_info(rtwdev);
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -274,6 +274,7 @@ static void rtw_watch_dog_work(struct wo
|
||||
rtw_leave_lps(rtwdev);
|
||||
rtw_coex_wl_status_check(rtwdev);
|
||||
rtw_coex_query_bt_hid_list(rtwdev);
|
||||
+ rtw_coex_active_query_bt_info(rtwdev);
|
||||
|
||||
rtw_phy_dynamic_mechanism(rtwdev);
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
From f9e0189cbc2d6447dde392944c769546cdf48140 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:15:13 +0300
|
||||
Subject: [PATCH] wifi: rtw88: 8812a: Mitigate beacon loss
|
||||
|
||||
The RTL8812AU has a reception problem, maybe only in the 5 GHz band.
|
||||
Sometimes, in some positions, it stops receiving anything even though
|
||||
the distance to the AP is only ~3 meters and there are no obstacles.
|
||||
Moving it a few centimeters fixes it.
|
||||
|
||||
Switch the initial gain to maximum coverage when there is beacon loss.
|
||||
This only helps sometimes. This is similar to what the official driver
|
||||
does.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/203f5043-4fe1-4f35-8b8f-d3b6f44e1fd9@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -530,6 +530,13 @@ static void rtw_phy_dig(struct rtw_dev *
|
||||
*/
|
||||
rtw_phy_dig_recorder(dm_info, cur_igi, fa_cnt);
|
||||
|
||||
+ /* Mitigate beacon loss and connectivity issues, mainly (only?)
|
||||
+ * in the 5 GHz band
|
||||
+ */
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A && rtwdev->beacon_loss &&
|
||||
+ linked && dm_info->total_fa_cnt < DIG_PERF_FA_TH_EXTRA_HIGH)
|
||||
+ cur_igi = DIG_CVRG_MIN;
|
||||
+
|
||||
if (cur_igi != pre_igi)
|
||||
rtw_phy_dig_write(rtwdev, cur_igi);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,80 @@
|
||||
From 8f82bb2cfaf7b8992e0e8493cb765138254f87c9 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 30 Oct 2024 20:29:28 +0200
|
||||
Subject: [PATCH] wifi: rtw88: Add rtw8821au.c and rtw8812au.c
|
||||
|
||||
These are the entry points for the new modules rtw88_8821au
|
||||
(RTL8821AU/RTL8811AU) and rtw88_8812au (RTL8812AU).
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/91c495f8-a607-429b-8bc0-5a45d3c1393e@gmail.com
|
||||
---
|
||||
.../net/wireless/realtek/rtw88/rtw8812au.c | 28 +++++++++++++++++++
|
||||
.../net/wireless/realtek/rtw88/rtw8821au.c | 28 +++++++++++++++++++
|
||||
2 files changed, 56 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
@@ -0,0 +1,28 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
+/* Copyright(c) 2024 Realtek Corporation
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/usb.h>
|
||||
+#include "main.h"
|
||||
+#include "rtw8812a.h"
|
||||
+#include "usb.h"
|
||||
+
|
||||
+static const struct usb_device_id rtw_8812au_id_table[] = {
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2604, 0x0012, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(usb, rtw_8812au_id_table);
|
||||
+
|
||||
+static struct usb_driver rtw_8812au_driver = {
|
||||
+ .name = "rtw_8812au",
|
||||
+ .id_table = rtw_8812au_id_table,
|
||||
+ .probe = rtw_usb_probe,
|
||||
+ .disconnect = rtw_usb_disconnect,
|
||||
+};
|
||||
+module_usb_driver(rtw_8812au_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Bitterblue Smith <rtl8821cerfe2@gmail.com>");
|
||||
+MODULE_DESCRIPTION("Realtek 802.11ac wireless 8812au driver");
|
||||
+MODULE_LICENSE("Dual BSD/GPL");
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
@@ -0,0 +1,28 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
+/* Copyright(c) 2024 Realtek Corporation
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/usb.h>
|
||||
+#include "main.h"
|
||||
+#include "rtw8821a.h"
|
||||
+#include "usb.h"
|
||||
+
|
||||
+static const struct usb_device_id rtw_8821au_id_table[] = {
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(usb, rtw_8821au_id_table);
|
||||
+
|
||||
+static struct usb_driver rtw_8821au_driver = {
|
||||
+ .name = "rtw_8821au",
|
||||
+ .id_table = rtw_8821au_id_table,
|
||||
+ .probe = rtw_usb_probe,
|
||||
+ .disconnect = rtw_usb_disconnect,
|
||||
+};
|
||||
+module_usb_driver(rtw_8821au_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Bitterblue Smith <rtl8821cerfe2@gmail.com>");
|
||||
+MODULE_DESCRIPTION("Realtek 802.11ac wireless 8821au/8811au driver");
|
||||
+MODULE_LICENSE("Dual BSD/GPL");
|
||||
@@ -0,0 +1,153 @@
|
||||
From 0e3e8284f8e1bf2fc0f7bf247194efe5cfc568c1 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 30 Oct 2024 20:31:28 +0200
|
||||
Subject: [PATCH] wifi: rtw88: Enable the new RTL8821AU/RTL8812AU drivers
|
||||
|
||||
These are older Wifi 5 chips. RTL8821AU is 1x1, with or without
|
||||
Bluetooth. RTL8812AU is 2x2, without Bluetooth.
|
||||
|
||||
Beamforming is not implemented. It looks like these chips need a
|
||||
different implementation than what is in bf.c.
|
||||
|
||||
Speed tests with RTL8821AU: 137 Mbps download, 144 Mbps upload.
|
||||
Speed tests with RTL8812AU: 344 Mbps download, 387 Mbps upload.
|
||||
|
||||
Station mode and AP mode were tested.
|
||||
|
||||
Bluetooth coexistence works. I used my Bluetooth headphones for
|
||||
several days, listening to music and watching videos. There is only
|
||||
a problem with the wifi speeds with one router:
|
||||
|
||||
With ISP's HG6544C router:
|
||||
Official driver: 3/5 Mbps.
|
||||
rtw88: a bit more, but not steady at all. Not enough to watch a 1080p
|
||||
Youtube video.
|
||||
|
||||
With my D-Link Eagle R32 router running Openwrt, on the same channel:
|
||||
Official driver: 6/10 Mbps.
|
||||
rtw88: download starts around 30, climbs to 50 / upload is 10 Mbps.
|
||||
I can watch a 1080p Youtube video.
|
||||
|
||||
The music doesn't cut out during any speed tests.
|
||||
|
||||
I also tested transferring files to and from my phone. I don't have
|
||||
other types of Bluetooth devices to test.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/0b8e8093-8103-4999-86bf-0055ec52ea64@gmail.com
|
||||
---
|
||||
Kconfig.local | 15 ++++++++
|
||||
drivers/net/wireless/realtek/rtw88/Kconfig | 40 ++++++++++++++++++++-
|
||||
drivers/net/wireless/realtek/rtw88/Makefile | 15 ++++++++
|
||||
3 files changed, 69 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/Kconfig.local
|
||||
+++ b/Kconfig.local
|
||||
@@ -1144,6 +1144,15 @@ config BACKPORTED_RTW88_8723D
|
||||
config BACKPORTED_RTW88_8821C
|
||||
tristate
|
||||
default RTW88_8821C
|
||||
+config BACKPORTED_RTW88_88XXA
|
||||
+ tristate
|
||||
+ default RTW88_88XXA
|
||||
+config BACKPORTED_RTW88_8821A
|
||||
+ tristate
|
||||
+ default RTW88_8821A
|
||||
+config BACKPORTED_RTW88_8812A
|
||||
+ tristate
|
||||
+ default RTW88_8812A
|
||||
config BACKPORTED_RTW88_8822BE
|
||||
tristate
|
||||
default RTW88_8822BE
|
||||
@@ -1183,6 +1192,12 @@ config BACKPORTED_RTW88_8821CS
|
||||
config BACKPORTED_RTW88_8821CU
|
||||
tristate
|
||||
default RTW88_8821CU
|
||||
+config BACKPORTED_RTW88_8821AU
|
||||
+ tristate
|
||||
+ default RTW88_8821AU
|
||||
+config BACKPORTED_RTW88_8812AU
|
||||
+ tristate
|
||||
+ default RTW88_8812AU
|
||||
config BACKPORTED_RTW88_DEBUG
|
||||
tristate
|
||||
default RTW88_DEBUG
|
||||
--- a/drivers/net/wireless/realtek/rtw88/Kconfig
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/Kconfig
|
||||
@@ -54,6 +54,20 @@ config RTW88_8821C
|
||||
tristate
|
||||
depends on m
|
||||
|
||||
+config RTW88_88XXA
|
||||
+ tristate
|
||||
+ depends on m
|
||||
+
|
||||
+config RTW88_8821A
|
||||
+ tristate
|
||||
+ depends on m
|
||||
+ select RTW88_88XXA
|
||||
+
|
||||
+config RTW88_8812A
|
||||
+ tristate
|
||||
+ depends on m
|
||||
+ select RTW88_88XXA
|
||||
+
|
||||
config RTW88_8822BE
|
||||
tristate "Realtek 8822BE PCI wireless network adapter"
|
||||
depends on m
|
||||
@@ -213,6 +227,30 @@ config RTW88_8821CU
|
||||
|
||||
802.11ac USB wireless network adapter
|
||||
|
||||
+config RTW88_8821AU
|
||||
+ tristate "Realtek 8821AU/8811AU USB wireless network adapter"
|
||||
+ depends on m
|
||||
+ depends on USB
|
||||
+ select RTW88_CORE
|
||||
+ select RTW88_USB
|
||||
+ select RTW88_8821A
|
||||
+ help
|
||||
+ Select this option will enable support for 8821AU and 8811AU chipset
|
||||
+
|
||||
+ 802.11ac USB wireless network adapter
|
||||
+
|
||||
+config RTW88_8812AU
|
||||
+ tristate "Realtek 8812AU USB wireless network adapter"
|
||||
+ depends on m
|
||||
+ depends on USB
|
||||
+ select RTW88_CORE
|
||||
+ select RTW88_USB
|
||||
+ select RTW88_8812A
|
||||
+ help
|
||||
+ Select this option will enable support for 8812AU chipset
|
||||
+
|
||||
+ 802.11ac USB wireless network adapter
|
||||
+
|
||||
config RTW88_DEBUG
|
||||
bool "Realtek rtw88 debug support"
|
||||
depends on RTW88_CORE
|
||||
--- a/drivers/net/wireless/realtek/rtw88/Makefile
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/Makefile
|
||||
@@ -77,6 +77,21 @@ rtw88_8821cs-objs := rtw8821cs.o
|
||||
obj-$(CPTCFG_RTW88_8821CU) += rtw88_8821cu.o
|
||||
rtw88_8821cu-objs := rtw8821cu.o
|
||||
|
||||
+obj-$(CPTCFG_RTW88_88XXA) += rtw88_88xxa.o
|
||||
+rtw88_88xxa-objs := rtw88xxa.o
|
||||
+
|
||||
+obj-$(CPTCFG_RTW88_8821A) += rtw88_8821a.o
|
||||
+rtw88_8821a-objs := rtw8821a.o rtw8821a_table.o
|
||||
+
|
||||
+obj-$(CPTCFG_RTW88_8812A) += rtw88_8812a.o
|
||||
+rtw88_8812a-objs := rtw8812a.o rtw8812a_table.o
|
||||
+
|
||||
+obj-$(CPTCFG_RTW88_8821AU) += rtw88_8821au.o
|
||||
+rtw88_8821au-objs := rtw8821au.o
|
||||
+
|
||||
+obj-$(CPTCFG_RTW88_8812AU) += rtw88_8812au.o
|
||||
+rtw88_8812au-objs := rtw8812au.o
|
||||
+
|
||||
obj-$(CPTCFG_RTW88_PCI) += rtw88_pci.o
|
||||
rtw88_pci-objs := pci.o
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
From ff5a1c94e53c0d24f610c2c30add82f75b728737 Mon Sep 17 00:00:00 2001
|
||||
From: Larry Finger <Larry.Finger@gmail.com>
|
||||
Date: Wed, 6 Nov 2024 15:55:31 +0200
|
||||
Subject: [PATCH 1/6] wifi: rtw88: 8821au: Add additional devices to the
|
||||
USB_DEVICE list
|
||||
|
||||
These are the entries that Nick Morrow provided. From
|
||||
https://github.com/morrownr/8821au-20210708
|
||||
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../net/wireless/realtek/rtw88/rtw8821au.c | 52 ++++++++++++++++++-
|
||||
1 file changed, 51 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
@@ -9,8 +9,58 @@
|
||||
#include "usb.h"
|
||||
|
||||
static const struct usb_device_id rtw_8821au_id_table[] = {
|
||||
- { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011e, 0xff, 0xff, 0xff),
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0811, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0820, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0821, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x8822, 0xff, 0xff, 0xff),
|
||||
.driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0823, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0xa811, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x0242, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Buffalo */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x029b, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Buffalo */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x04bb, 0x0953, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* I-O DATA */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x4007, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* ELECOM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x400e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* ELECOM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x400f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* ELECOM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9052, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Netgear */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0e66, 0x0023, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* HAWKING */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3314, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3318, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2019, 0xab32, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Planex */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x804b, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TRENDnet */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TP Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TP Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0120, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TP Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3823, 0x6249, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Obihai */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa811, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa812, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa813, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xb611, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtw_8821au_id_table);
|
||||
@@ -0,0 +1,91 @@
|
||||
From d21ad2e4edfb64d3f32685607a457576eea3c5cd Mon Sep 17 00:00:00 2001
|
||||
From: Nick Morrow <usbwifi2024@gmail.com>
|
||||
Date: Wed, 6 Nov 2024 15:57:10 +0200
|
||||
Subject: [PATCH 2/6] wifi: rtw88: 8812au: Add more device IDs
|
||||
|
||||
From https://github.com/morrownr/8812au-20210820.
|
||||
|
||||
Signed-off-by: Nick Morrow <usbwifi2024@gmail.com>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../net/wireless/realtek/rtw88/rtw8812au.c | 68 ++++++++++++++++++-
|
||||
1 file changed, 67 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
@@ -9,8 +9,74 @@
|
||||
#include "usb.h"
|
||||
|
||||
static const struct usb_device_id rtw_8812au_id_table[] = {
|
||||
- { USB_DEVICE_AND_INTERFACE_INFO(0x2604, 0x0012, 0xff, 0xff, 0xff),
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x8812, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x881a, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x881b, 0xff, 0xff, 0xff),
|
||||
.driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x881c, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0409, 0x0408, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* NEC */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x025d, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Buffalo */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x04bb, 0x0952, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* I-O DATA */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1106, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Belkin */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1109, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Belkin */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0586, 0x3426, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* ZyXEL */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0789, 0x016e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Logitec */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x07b8, 0x8812, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Abocom */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9051, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Netgear */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x17d2, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* ASUS */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0df6, 0x0074, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Sitecom */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0e66, 0x0022, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Hawking */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1058, 0x0632, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* WD */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x13b1, 0x003f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Linksys */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x148f, 0x9097, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Amped Wireless */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1740, 0x0100, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* EnGenius */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x330e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3313, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3315, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3316, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2019, 0xab30, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Planex */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x805b, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TRENDnet */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0101, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0103, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x010d, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x010e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x010f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0122, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2604, 0x0012, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Tenda */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa822, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Edimax */
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtw_8812au_id_table);
|
||||
@@ -0,0 +1,69 @@
|
||||
From 213dfa630285bb0241f3eaeb778db8ff128f10ba Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Fri, 8 Nov 2024 01:41:08 +0200
|
||||
Subject: [PATCH 3/6] wifi: rtw88: usb: Support USB 3 with RTL8812AU
|
||||
|
||||
Add the function to automatically switch the RTL8812AU into USB 3 mode.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 34 ++++++++++++++++++++++--
|
||||
1 file changed, 32 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -930,6 +930,32 @@ static void rtw_usb_intf_deinit(struct r
|
||||
usb_set_intfdata(intf, NULL);
|
||||
}
|
||||
|
||||
+static int rtw_usb_switch_mode_old(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
|
||||
+ enum usb_device_speed cur_speed = rtwusb->udev->speed;
|
||||
+ u8 hci_opt;
|
||||
+
|
||||
+ if (cur_speed == USB_SPEED_HIGH) {
|
||||
+ hci_opt = rtw_read8(rtwdev, REG_HCI_OPT_CTRL);
|
||||
+
|
||||
+ if ((hci_opt & (BIT(2) | BIT(3))) != BIT(3)) {
|
||||
+ rtw_write8(rtwdev, REG_HCI_OPT_CTRL, 0x8);
|
||||
+ rtw_write8(rtwdev, REG_SYS_SDIO_CTRL, 0x2);
|
||||
+ rtw_write8(rtwdev, REG_ACLK_MON, 0x1);
|
||||
+ rtw_write8(rtwdev, 0x3d, 0x3);
|
||||
+ /* usb disconnect */
|
||||
+ rtw_write8(rtwdev, REG_SYS_PW_CTRL + 1, 0x80);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ } else if (cur_speed == USB_SPEED_SUPER) {
|
||||
+ rtw_write8_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT(1));
|
||||
+ rtw_write8_clr(rtwdev, REG_ACLK_MON, BIT(0));
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
|
||||
{
|
||||
enum usb_device_speed cur_speed;
|
||||
@@ -983,7 +1009,8 @@ static int rtw_usb_switch_mode(struct rt
|
||||
{
|
||||
u8 id = rtwdev->chip->id;
|
||||
|
||||
- if (id != RTW_CHIP_TYPE_8822C && id != RTW_CHIP_TYPE_8822B)
|
||||
+ if (id != RTW_CHIP_TYPE_8822C && id != RTW_CHIP_TYPE_8822B &&
|
||||
+ id != RTW_CHIP_TYPE_8812A)
|
||||
return 0;
|
||||
|
||||
if (!rtwdev->efuse.usb_mode_switch) {
|
||||
@@ -998,7 +1025,10 @@ static int rtw_usb_switch_mode(struct rt
|
||||
return 0;
|
||||
}
|
||||
|
||||
- return rtw_usb_switch_mode_new(rtwdev);
|
||||
+ if (id == RTW_CHIP_TYPE_8812A)
|
||||
+ return rtw_usb_switch_mode_old(rtwdev);
|
||||
+ else /* RTL8822CU, RTL8822BU */
|
||||
+ return rtw_usb_switch_mode_new(rtwdev);
|
||||
}
|
||||
|
||||
int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
@@ -0,0 +1,65 @@
|
||||
From 2b38362bd3b8e0a3691f0a8e82444a54f702e384 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Fri, 8 Nov 2024 01:43:50 +0200
|
||||
Subject: [PATCH 4/6] wifi: rtw88: usb: Enable RX aggregation for 8821au/8812au
|
||||
|
||||
USB RX aggregation improves the RX speed on certain ARM systems, like
|
||||
the NanoPi NEO Core2. With RTL8811AU, before: 30 Mbps, after: 224 Mbps.
|
||||
|
||||
The out-of-tree driver uses aggregation size of 7 in USB 3 mode, but
|
||||
that doesn't work here. rtw88 advertises support for receiving AMSDU
|
||||
in AMPDU, so the AP sends larger frames, up to ~5100 bytes. With a size
|
||||
of 7 RTL8812AU frequently tries to aggregate more frames than will fit
|
||||
in 32768 bytes. Use a size of 6 instead.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 30 ++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -789,6 +789,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
|
||||
rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
|
||||
}
|
||||
|
||||
+static void rtw_usb_dynamic_rx_agg_v2(struct rtw_dev *rtwdev, bool enable)
|
||||
+{
|
||||
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
|
||||
+ u8 size, timeout;
|
||||
+ u16 val16;
|
||||
+
|
||||
+ if (rtwusb->udev->speed == USB_SPEED_SUPER) {
|
||||
+ size = 0x6;
|
||||
+ timeout = 0x1a;
|
||||
+ } else {
|
||||
+ size = 0x5;
|
||||
+ timeout = 0x20;
|
||||
+ }
|
||||
+
|
||||
+ if (!enable) {
|
||||
+ size = 0x0;
|
||||
+ timeout = 0x1;
|
||||
+ }
|
||||
+
|
||||
+ val16 = u16_encode_bits(size, BIT_RXDMA_AGG_PG_TH) |
|
||||
+ u16_encode_bits(timeout, BIT_DMA_AGG_TO_V1);
|
||||
+
|
||||
+ rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
|
||||
+ rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
|
||||
+}
|
||||
+
|
||||
static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
|
||||
{
|
||||
switch (rtwdev->chip->id) {
|
||||
@@ -797,6 +823,10 @@ static void rtw_usb_dynamic_rx_agg(struc
|
||||
case RTW_CHIP_TYPE_8821C:
|
||||
rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
|
||||
break;
|
||||
+ case RTW_CHIP_TYPE_8821A:
|
||||
+ case RTW_CHIP_TYPE_8812A:
|
||||
+ rtw_usb_dynamic_rx_agg_v2(rtwdev, enable);
|
||||
+ break;
|
||||
case RTW_CHIP_TYPE_8723D:
|
||||
/* Doesn't like aggregation. */
|
||||
break;
|
||||
@@ -0,0 +1,32 @@
|
||||
From 927dcd0ab53f39ee00a2d1f204b5aac77e28fcf9 Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.i.king@gmail.com>
|
||||
Date: Wed, 6 Nov 2024 15:46:42 +0000
|
||||
Subject: [PATCH 5/6] wifi: rtlwifi: rtl8821ae: phy: restore removed code to
|
||||
fix infinite loop
|
||||
|
||||
A previous clean-up fix removed the assignment of v2 inside a while loop
|
||||
that turned it into an infinite loop. Fix this by restoring the assignment
|
||||
of v2 from array[] so that v2 is updated inside the loop.
|
||||
|
||||
Fixes: cda37445718d ("wifi: rtlwifi: rtl8821ae: phy: remove some useless code")
|
||||
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||
Tested-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Reviewed-by: Su Hui <suhui@nfschina.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
|
||||
@@ -2033,8 +2033,10 @@ static bool _rtl8821ae_phy_config_bb_wit
|
||||
if (!_rtl8821ae_check_condition(hw, v1)) {
|
||||
i += 2; /* skip the pair of expression*/
|
||||
v2 = array[i+1];
|
||||
- while (v2 != 0xDEAD)
|
||||
+ while (v2 != 0xDEAD) {
|
||||
i += 3;
|
||||
+ v2 = array[i + 1];
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
From acadf3a63b39ad03167a633fa3cea8c0fc2ab87f Mon Sep 17 00:00:00 2001
|
||||
From: Nick Morrow <usbwifi2024@gmail.com>
|
||||
Date: Thu, 7 Nov 2024 08:28:46 +0800
|
||||
Subject: [PATCH 6/6] wifi: rtw88: Add additional USB IDs for RTL8812BU
|
||||
|
||||
Add three additional USB IDs found in
|
||||
https://github.com/morrownr/88x2bu-20210702
|
||||
to support more RTL8812BU devices.
|
||||
|
||||
Signed-off-by: Nick Morrow <usbwifi2024@gmail.com>
|
||||
Signed-off-by: Zenm Chen <zenmchen@gmail.com>
|
||||
Signed-off-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822bu.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822bu.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822bu.c
|
||||
@@ -67,6 +67,12 @@ static const struct usb_device_id rtw_88
|
||||
.driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* LiteOn */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x808a, 0xff, 0xff, 0xff),
|
||||
.driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* TRENDnet TEW-808UBM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x805a, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* TRENDnet TEW-805UBH */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x4011, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* ELECOM WDB-867DU3S */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2c4e, 0x0107, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* Mercusys MA30H */
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtw_8822bu_id_table);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user