258 Commits

Author SHA1 Message Date
Tianling Shen
78213f3f7a ImmortalWrt v24.10.0: adjust config defaults
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-02-06 14:56:20 +08:00
Tianling Shen
6a73dae98c ath79: disable build for meraki mr18 by default
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-02-05 16:32:41 +08:00
Tianling Shen
70ed6e7808 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-02-03 20:41:56 +08:00
Christian Marangi
cd747cb3aa ipq806x: fix broken WAN on Linksys EAX and Asrock G10
Fix broken WAN on Linksys EAX and Asrock G10 by incrementing the WAN
interface MAC address + 1. This caused conflicting entry in the FDB
table and caused the WAN port to malfunction with the DSA conversion.

Fixes: #17157
Fixes: #15585
Fixes: #16604
Link: https://github.com/openwrt/openwrt/pull/17839
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit eba2fbf638)
2025-02-03 01:55:01 +01:00
Shiji Yang
4d213b2ae2 ramips: fix xtal clock registration issue on RT3883
The redundant xtal clock source caused clock registration failure.

Link: https://lore.kernel.org/all/20250108093636.265033-1-sergio.paracuellos@gmail.com/
Fixes: https://github.com/openwrt/openwrt/issues/17677
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17830
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit cfca9d6894)
2025-02-02 20:36:41 +01:00
Tianling Shen
e29fa6e28d rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts
In general the delay should be added by the PHY instead of the MAC,
and this improves network stability on some boards which seem to
need different delay.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit eb658d5020)
2025-02-02 19:48:10 +08:00
Tianling Shen
9a0aa64a03 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-02-02 19:47:57 +08:00
Daniel Golle
c1d5de0c59 mediatek: mt7622: fix SATA on BPi-R64
Two commits which made their way into Linux stable broke the SATA
support on the BPi-R64.

Fix this by reverting a node rename which broke DT-overlay application
and import a (still pending) patch re-adding the 'syscon' compatible to
the pciesys clock-controller which also contains phy-mode bits
referenced by the ahci_mtk driver expecting to access them using
syscon_regmap_lookup_by_phandle().

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 69890e16b3)
2025-02-01 05:10:37 +00:00
Daniel Golle
81db307748 generic: net: phy: realtek: work-around hang on SerDes setup
On some but not all devices using the RTL8221B 2.5GBit/s PHY the SerDes
setup sequence may hang under some circumstances (eg. <2500M link
partner present during boot).

RTL8221B-VB-CG 2.5Gbps PHY (C45) mdio-bus:01: rtl822xb_config_init failed: -110

Work-around the issue by performing a hardware reset and subsequent
retry of the SerDes setup, which seems to always succeed.

Doing this requires moving ALDPS setup to config_init (which is anyway
the better place for that) as it otherwise doesn't survive the reset.

Also disable listening on MDIO address 0 which may be used by other PHYs
despite being spec'ed as "broadcast address", as bus activity on address
0 may otherwise confuse the RealTek PHY for good reasons.

Tested-by: Luis Mita <luis@luismita.com>
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit c87a767801)
Link: https://github.com/openwrt/openwrt/pull/17790
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-31 21:38:34 +01:00
Hauke Mehrtens
7a916c75e8 x86: Add kmod-drm-i915 as default package
Add kmod-drm-i915 to the default packages. It was build into the kernel
before and is now build as a kernel module.

Fixes: 77cfe8fd15 ("x86: make i915 as a kmod with required firmware")
Link: https://github.com/openwrt/openwrt/pull/17781
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 8390599c9a)
Link: https://github.com/openwrt/openwrt/pull/17792
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-31 21:37:05 +01:00
Shiji Yang
1a75172721 ramips: pinctrl: allow mux SDXC pins for mt76x8
The mt76x8 SDXC pin register definition is incompatible with the
mtmips generic pinctrl driver structure. This hack allows us to
mux the SDXC IO to different pin groups in device tree.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17446
(cherry picked from commit 05ec3b50a8)
Link: https://github.com/openwrt/openwrt/pull/17754
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-29 22:37:05 +01:00
Álvaro Fernández Rojas
e2c2a6ed7f bmips: shg2500: add missing led controller cells
Fixes the following DT warnings:
../dts/bcm63168-sercomm-shg2500.dts:76.4-14: Warning (reg_format): /ubus/spi@10001000/led-controller@1/led@1:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
../dts/bcm63168-sercomm-shg2500.dts:75.9-78.5: Warning (avoid_default_addr_size): /ubus/spi@10001000/led-controller@1/led@1: Relying on default #address-cells value
../dts/bcm63168-sercomm-shg2500.dts:75.9-78.5: Warning (avoid_default_addr_size): /ubus/spi@10001000/led-controller@1/led@1: Relying on default #size-cells value

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit fbe0bd5f64)
2025-01-28 08:35:57 +01:00
Hauke Mehrtens
c08ba0f712 OpenWrt v24.10.0-rc7: revert to branch defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-28 00:06:50 +01:00
Hauke Mehrtens
6cbfbb1853 OpenWrt v24.10.0-rc7: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-28 00:06:47 +01:00
Uwe Kleine-König
daef29c75d dnsmasq: add fix related to DNSSEC verification from upstream
To find the DS record for a given zone the parent zone's nameserver must
be queried and not the nameserver for the zone. Otherwise DNSSEC
verification for unsigned delegations breaks.

Signed-off-by: Uwe Kleine-König <uwe+openwrt@kleine-koenig.org>
Link: https://patchwork.ozlabs.org/project/openwrt/patch/20250127151223.1420006-1-uwe+openwrt@kleine-koenig.org/
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 6dc0f0c50c)
2025-01-27 23:53:29 +01:00
Hauke Mehrtens
50cb934142 apm821xx: NETGEAR WNDR4700: Fix compat version
The definition for the netgear_wndr4700 had two different
DEVICE_COMPAT_VERSION definitions.

In commit 5815884c3a ("apm821xx: migrate to DSA"), an additional
DEVICE_COMPAT_VERSION := 3.0 attribute was added to the device
definition. The old one with version 2.0 stayed and was defined later
overwriting the new one.

Replace the old version 2.0 with the new version 3.0

Fixes: 5815884c3a ("apm821xx: migrate to DSA")
Link: https://forum.openwrt.org/t/openwrt-24-10-0-rc6-sixth-release-candidate/222466/43
Link: https://github.com/openwrt/openwrt/pull/17741
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit dab52c00d7)
2025-01-27 23:53:29 +01:00
Hauke Mehrtens
6f7bbd0395 wolfssl: Update to version 5.7.6
This fixes multiple bugs and also minor security problems.

Changelog:
https://github.com/wolfSSL/wolfssl/releases/tag/v5.7.4-stable
https://github.com/wolfSSL/wolfssl/releases/tag/v5.7.6-stable

The package size increases:
525814 bin/packages/mips_24kc/base/libwolfssl5.7.2.e624513f-5.7.2-r1.apk
549408 bin/packages/mips_24kc/base/libwolfssl5.7.6.e624513f-5.7.6-r1.apk

Link: https://github.com/openwrt/openwrt/pull/17742
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 0a7e92c244)
2025-01-27 23:53:29 +01:00
Hannu Nyman
4e70887d43 wolfssl: Adjust version for apk
Adjust wolfssl version for apk by removing the "-stable"
from the OpenWrt version, although it is still needed for
upstream download archive name.

Define PKG_BUILD_DIR accordingly.

Utilize new short version to simplify ABI_VERSION calculation.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
Link: https://github.com/openwrt/openwrt/pull/16906
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit be952e98bc)
2025-01-27 23:53:29 +01:00
Thomas Richard
d0289daa69 stm32: enable CONFIG_SMSC_PHY
The STM32MP135F-DK board uses the LAN8742 PHY.
Enable CONFIG_SMSC_PHY to have full PHY support.

Signed-off-by: Thomas Richard <thomas.richard@bootlin.com>
Link: https://github.com/openwrt/openwrt/pull/17745
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d981f28f76)
2025-01-27 15:14:50 +01:00
Anders Melchiorsen
a5eb5ee1a6 ramips: restore full switch performance for USW-Flex
Since commit f1c9afd801 ("ramips: mt7621-dts: mux phy0/4 to gmac1") the
USW-Flex lan1 port has been attached directly to the CPU. This improves
routing performance but hinders switching.

This is a generally accepted trade-off in that commit but for USW-Flex it
is a questionable choice. This switch is designed to deliver PoE to remote
places and using it as a router is unlikely. Meanwhile, the lan1 port is
also PoE-in and will often be the uplink, carrying most of the traffic.

Reverting f1c9afd801 for USW-Flex restores full 1 Gbps switching
performance on all ports.

Signed-off-by: Anders Melchiorsen <amelchio@nogoto.net>
Link: https://github.com/openwrt/openwrt/pull/17703
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 62872f8bfd)
2025-01-27 12:56:29 +01:00
Christian Marangi
2bff6e490a airoha: an7581: replace clock patch with upstream version
Replace clock patch for eMMC with upstream version to add the tag and
flag them as upstreamed.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit a9b408a97f)
2025-01-27 12:15:46 +01:00
Christian Marangi
077a869034 airoha: an7581: replace eMMC support with upstream version
Replace eMMC support with upstream version where we declare dummy clock
and dummy regulator instead of a specific compatible. Also drop the
downstream patch for it.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit b7edf88b0f)
2025-01-27 12:04:15 +01:00
Tianling Shen
b3b143104a Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-27 19:03:10 +08:00
Christian Marangi
ea66541032 airoha: an7581: refresh and fix cpufreq patch
Refresh cpufreq with merged upstream version. Also fix the PM Domain
rebased patch to correctly expose the symbol for non Mediatek target.

Update dtsi with new pm domain name.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit fbbfcbf150)
2025-01-27 11:11:39 +01:00
Eric Fahlgren
e1ba6e407b octeon: ubnt-usg: add board name to supported devices
The on-device board name reported by 'ubus call system board' is not present
in the generated profiles.json.  This results in upgrade tools being unable
to match the image with the proper device.  Let's add a 'SUPPORTED_DEVICES'
entry for the board name to fix this.

Links: https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035/441
Links: 2a07270180
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17736
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 7165937c3b)
2025-01-27 02:10:46 +01:00
Paweł Owoc
150aa9aeee ramips: mt7620: fix patching mac address in caldata
Fix usage of non-existent 'caldata_patch_mac' function
by using the 'caldata_patch_data' function.

Fixes: #17734
Signed-off-by: Paweł Owoc <frut3k7@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17737
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3295f6f1c2)
2025-01-27 02:05:02 +01:00
Felix Fietkau
298654b9ab netifd: remove leftover wifi reload_legacy call
Commit d127539291 removed support for it

Fixes: #17738
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit a3154cfeb6)
2025-01-26 21:21:00 +01:00
Felix Fietkau
a1ee311f59 unetd: fix interface teardown
Pass the correct device name in the network_del ubus call

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 80ba0d958d)
2025-01-26 21:21:00 +01:00
Tianling Shen
8ef328099c mbedtls: make use of armv8 ce for sha256/sha512 algorithm
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 122f333f78)
2025-01-26 21:59:01 +08:00
Tianling Shen
1e1b080310 mbedtls: drop redundant cflags hack
mbedtls will now automatically append '+crypto' flag when needed.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 2019673ee6)
2025-01-26 21:59:01 +08:00
Daniel Golle
d30773abe8 generic: fix probe issues with RealTek RTL8221B PHYs
Import patch "net: phy: realtek: mark existing MMDs as present"

    When using Clause-45 mode to access RealTek RTL8221B 2.5G PHYs some
    versions of the PHY fail to report the MMDs present on the PHY.
    Mark MMDs PMAPMD, PCS and AN which are always existing according to
    the datasheet as present to fix that.

Fixes: #16823, #17183, #17232
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Tested-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Tested-by: Juan Pedro Paredes Caballero <juanpedro.paredes@gmail.com>
(cherry picked from commit 730db6b893)
2025-01-26 01:12:36 +00:00
Hauke Mehrtens
1e9966a63a kernel: Make kmod-usb-chipidea select kmod-phy-ath79-usb
The USB PHY on the ar9330 and similar SoCs needs the PHY driver. In
OpenWrt 23.05 it was compiled into the kernel. The kernel 6.6
configuration does not compile it in any more, make the
kmod-usb-chipidea driver select it to add it to the images.

Fixes: https://github.com/openwrt/openwrt/issues/17710
Fixes: 04bdf9b332 ("ath79: disable ath79 USB phy drivers by default")
Link: https://github.com/openwrt/openwrt/pull/17720
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b467e5a0af)
2025-01-25 13:34:13 +01:00
Chukun Pan
a296d09dc4 mediatek: cleanup device tree for cudy devices
Fixes typo for led properties.
Delete the unused rfb compatible.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
(cherry picked from commit 64d1b1089c)
2025-01-24 22:43:13 +01:00
Chukun Pan
95dffe39f8 mediatek: update status led for Cudy TR3000
Use white led when running, consistent with the stock firmware.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
(cherry picked from commit 87632219d4)
2025-01-24 22:42:56 +01:00
Chukun Pan
e5f3704f9a mediatek: cudy: fixes 2.5G PHY interrupt support
Fixed interrupt support for 2.5G PHY.
Removed useless phy-mode on phy node.

Tested on Cudy TR3000.
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
(cherry picked from commit 82b69dfaf6)
2025-01-24 22:42:42 +01:00
Chukun Pan
d6fe142161 mediatek: cudy: fixes typo for spi and mtd properties
Same as commit 3674689, correct 'buswidth' to 'bus-width'.
Move the nmbm properties outside the partition definition.
Change uppercase to lowercase, add missing read-only flag.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
(cherry picked from commit ab375a3484)
2025-01-24 22:42:39 +01:00
Sergey Ryazanov
04a1d0d410 kernel: vrx518_tc: bump PKG_RELEASE
Bump PKG_RELEASE after the previous fixes.

Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Link: https://patchwork.ozlabs.org/project/openwrt/patch/20250122222654.21833-5-ryazanov.s.a@gmail.com/
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 78f908407e)
2025-01-24 22:26:21 +01:00
Sergey Ryazanov
a96eaa6456 ipq40xx: fix compatibility with linux-atm tools
atm_qos struct should be the same both for user and kernel spaces. Via
the __SO_ENCODE() macro it is used to define the SO_ATMQOS socket IOC.

During the VRX518 support introduction, the atm_trafprm sturct nested
into the atm_qos stucture was update with newer fields that are
referenced by the ATM TC layer of the VRX518 TC driver. These new fields
are intended to communicate information for extra traffic classes
supported by the driver. But we are still using vanilla kernel headers
to build the toolchain. Due to the atm.h header incoherency br2684ctl
from linux-atm tools is incapable to configure the ATM bridge netdev:

  br2684ctl: Interface "dsl0" created sucessfully
  br2684ctl: Communicating over ATM 0.1.2, encapsulation: LLC
  br2684ctl: setsockopt SO_ATMQOS 22 <-- EINVAL errno
  br2684ctl: Fatal: failed to connect on socket; File descriptor in bad state

There are two options to fix this incoherency. (a) update the header
file in the toolchain to build linux-atm against updated atm_trafprm and
atm_qos structures, or (b) revert atm_trafprm changes.

Since there are no actual users of the extra ATM QoS traffic classes,
just drop these extra traffic classes from vrx518_tc ATM TC layer and
drop the kernel patch updating atm.h.

Besides fixing the compatibility with linux-atm tools, removing the
kernel patch should simplify kernel updates removing unneeded burden of
maintenance.

Run tested with FRITZ!Box 7530 with disabled extra traffic classes and
then removed them entirely before the submission.

CC: John Crispin <john@phrozen.org>
Fixes: cfd42a0098 ("ipq40xx: add Intel/Lantiq ATM hacks")
Suggested-by: Andre Heider <a.heider@gmail.com>
Reported-and-tested-by: nebibigon93@yandex.ru
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Link: https://patchwork.ozlabs.org/project/openwrt/patch/20250122222654.21833-4-ryazanov.s.a@gmail.com/
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 6d6dc3a3c9)
2025-01-24 22:26:20 +01:00
Sergey Ryazanov
6383f24378 kernel: vrx518_tc: fix ADSL/ATM operation
ATM TC layer have some issues which effectively prevent VRX518 from
being used as ADSL modem. Specifically, there one crash during the ATM
layer configuration and wrong PVC ID selection on packet receiving what
breaks RX path. Fix both of the issues. Make subif iface registration
optional to prevent the crash (see more details in the new patch) and
update the hardcoded PVC ID to match the first allocated channel.

Run tested with FRITZ!Box 7530.

Fixes: 474bbe23b7 ("kernel: add Intel/Lantiq VRX518 TC driver")
Reported-and-tested-by: nebibigon93@yandex.ru
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Link: https://patchwork.ozlabs.org/project/openwrt/patch/20250122222654.21833-3-ryazanov.s.a@gmail.com/
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 470335450e)
2025-01-24 22:26:19 +01:00
Sergey Ryazanov
9b32a8ec9d kernel: vrx518_tc: fix RX desc phys to virt mapping
It looks like VRX518 returns phys addr of data buffer in the 'data_ptr'
field of the RX descriptor and an actual data offset within the buffer
in the 'byte_off' field. In order to map the phys address back to
virtual we need the original phys address of the allocated buffer.

In the same driver applies offset to phys address before the mapping,
what leads to WARN_ON triggering in plat_mem_virt() function with
subsequent kernel panic:

  WARNING: CPU: 0 PID: 0 at .../sw_plat.c:764 0xbf306cd0 [vrx518_tc@8af9f5d0+0x25000]
  ...
  Unable to handle kernel NULL pointer dereference at virtual address 00000000
  pgd = aff5701e
  [00000000] *pgd=00000000
  Internal error: Oops: 5 [#1] SMP ARM

Noticed in ATM mode, when chip always returns byte_off = 4.

In order to fix the issue, pass the phys address to plat_mem_virt() as
is and apply byte_off later for proper DMA syncing and on mapped virtual
address when copying RXed data into the skb.

Run tested with FRITZ!Box 7530 on both ADSL and VDSL (thanks Jan) links.

Fixes: 474bbe23b7 ("kernel: add Intel/Lantiq VRX518 TC driver")
Tested-by: Jan Hoffmann <jan@3e8.eu> # VDSL link
Reported-and-tested-by: nebibigon93@yandex.ru # ADSL link
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Link: https://patchwork.ozlabs.org/project/openwrt/patch/20250122222654.21833-2-ryazanov.s.a@gmail.com/
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 7bd579689d)
2025-01-24 22:26:17 +01:00
Florian Maurer
0ba00ec205 mediatek-mt7622: netgear-wax206 fix wifi leds
the wifi leds of the wax206 were not reacting.
This patch enables the green leds to show activity, as the blue ones are very bright.
Also set the label-mac to the gmac0

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17694
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 9ada8578fd)
2025-01-24 22:25:43 +01:00
Sander Vanheule
7a1da5486f realtek: Fix old compatible for HPE 1920-8G PoE
Supported devices are listed in the metadata as the first part of the
DTS compatible. This normally follows the format "vendor,device".

When updating the device name of the 180W 1920-8G PoE an underscore was
used, instead of a comma, to join the vendor and device name. This will
lead to warnings for users wanting to sysupgrade a device with an older
compatible, as the device's info does not match the one the metadata.

Fixes: 987c96e889 ("realtek: rename hpe,1920-8g-poe to match hardware")
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit 6a7fa68569)
2025-01-24 17:16:15 +01:00
Ivan Deng
bf0a1296a5 qualcommax: add missing WAN LED support to Spectrum SAX1V1K routers
Fixed an issue where both WAN LEDs light up before plugging in the
ethernet cable and no blinking regardless of WAN network activity.

Updated the LED configuration to reflect proper status:
Green indicates 2.5Gb connection speed.
Yellow indicates other connection speed and traffic activity.

This resolves inconsistent WAN LED behavior on Spectrum SAX1V1K routers.

Signed-off-by: Ivan Deng <hongba@rocketmail.com>
Link: https://github.com/openwrt/openwrt/pull/17623
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 8e78bc39a3)
2025-01-24 11:53:42 +01:00
Tianling Shen
a0b459651e uboot-mediatek: reorder patches
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 72b5177643)
2025-01-24 16:49:48 +08:00
Tianling Shen
2414137483 ImmortalWrt v24.10.0-rc4: revert to branch defaults
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-24 16:34:27 +08:00
Tianling Shen
3e03614bdc ImmortalWrt v24.10.0-rc4: adjust config defaults
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-24 16:34:26 +08:00
Tianling Shen
d475f4e400 kernel: refresh patches
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-24 16:26:48 +08:00
Tianling Shen
3c612fff17 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-24 16:11:59 +08:00
Dim Fish
8290303ea4 mediatek: add Airoha AN8855 gigabit switch driver
New revisions of Xiaomi AX3000T with 1.0.84+ stock firmware contain new hardware.
This commit add support for Airoha AN8855 gigabit switch driver with 6.6 kernel patches

Based on https://patchwork.kernel.org/project/netdevbpf/cover/20241209134459.27110-1-ansuelsmth@gmail.com/

Signed-off-by: Dim Fish <dimfish@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/16709
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 0fd9d00cd6)
2025-01-23 15:28:08 +01:00
Hauke Mehrtens
18c47b0e96 OpenWrt v24.10.0-rc6: revert to branch defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-22 22:49:28 +01:00
Hauke Mehrtens
8c660861ef OpenWrt v24.10.0-rc6: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-22 22:49:23 +01:00
Álvaro Fernández Rojas
58d0057481 generic: backport pending gpio-regmap ops patch
This patch has been accepted for linux v6.14 so we can move it from pending
to backport.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 2f2e21a52b)
2025-01-22 20:52:54 +01:00
Álvaro Fernández Rojas
9d9e06a30a generic: fix version number on realtek phy patches
These patches have been accepted in linux v6.14 instead of v6.13.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 12a07e934c)
2025-01-22 20:52:34 +01:00
Daniel Golle
a872a245a2 generic: net: phy: realtek: expose temperature sensors
Expose the temperature sensor built-into RTL822x 2.5G and 5G PHYs.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 3a189e3831)
2025-01-22 20:52:06 +01:00
Mieczyslaw Nalewaj
eff00e2fb1 generic: refresh hack patches
Refresh hack patches with make target/linux/refresh.

Fixes: 9508ca44eb ("kernel: backport improvement to page pool fragment handling from 6.7")
Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit ee730a66e9)
2025-01-22 20:51:39 +01:00
Felix Fietkau
419ef19dba kernel: backport improvement to page pool fragment handling from 6.7
Makes it easier to keep drivers like mt76 in sync with newer versions

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 9508ca44eb)
(cherry picked from commit 478041997f)
2025-01-22 12:41:43 +01:00
Tianling Shen
f678ad3ee9 Merge Officlal Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-22 17:17:53 +08:00
Danila Romanov
642b5b6199 generic: mtk_eth_soc: reduce driver memory usage
1. Import pending patch to fix ramips/mt7621 64MB targets.

2. Do not enable CONFIG_PAGE_POOL_STATS by default.

Signed-off-by: Danila Romanov <pervokur@gmail.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 15887235c1)
2025-01-22 06:56:12 +01:00
John Audia
454dbafd9b kernel: bump 6.6 to 6.6.73
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.73

No patches needed a rebase.

Build system: x86/64
Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3
Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17687
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 761b244964)
2025-01-21 23:48:28 +01:00
Lech Perczak
ad98c322cc ath79: meraki-mr18: fix initramfs build
Now, that initramfs images built for ZTE devices work, by moving
LZMA_TEXT_START further up the available RAM - same fix works
successfully for Meraki MR18 too. Apply it and reenable initramfs
generation again.

Fixes: 1d49310fdb ("ath79: add Cisco Meraki MR18")
Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17680
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 7423e67e1b)
2025-01-21 11:03:13 +01:00
Mikhail Zhilkin
939550bfbf mediatek: Xiaomi AX3000t: fix soft brick for the rd23 model
This commit fixes Xiaomi AX3000t soft bricks. Issue affects at least rd23
model (Global version) users:
Link: https://forum.openwrt.org/t/openwrt-support-for-xiaomi-ax3000t/180490/452

I also found that these nvram settings are wrong for the rd23 model and
U-Boot erase them:
'''
flag_try_sys1_failed 8
flag_try_sys2_failed 8
'''
As a result, platform.sh -> xiaomi_initial_setup() function sometimes ends
early without applying settings for the rd23 model.

RD03 model strategy:
1. Don't touch values those were set up by platform.sh ->
xiaomi_initial_setup() function

RD23 model strategy:
1. Apply correct nvram settings at every boot
2. Use bulk fw_setenv call

I didn't find opened issue for AX3000t. Similar AX3200 issue:
Link: https://github.com/openwrt/openwrt/issues/16347
So, other Xiaomi devices (e.g. Xiaomi WR30U) may also require fix.

Fixes: 7dbcc1215a ("mediatek: filogic: add support for Xiaomi AX3000T")
Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17580
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 42a253c7e8)
2025-01-21 00:39:35 +01:00
Mikhail Zhilkin
f5fd378e84 mediatek: replace multiple fw_setenv calls by the bulk one
This commit replaces multiple fw_setenv calls by the bulk one to reduce
flash writes.

Thanks @Linaro1985 for the idea.

Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17580
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit a6b0abf466)
2025-01-21 00:39:33 +01:00
John Audia
4081bc3f6c kernel: bump 6.6 to 6.6.72
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.72

Dropped to due being superseded by upstream patch:
	mediatek/patches-6.6/870-drm-mediatek-only-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch[1]

All other patches automatically rebased.

1. ac7f5641e9

Build system: x86/64
Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3
Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17646
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 1d021458fd)
2025-01-21 00:19:54 +01:00
Florian Maurer
b957ee982a lantiq: xrx200: fb7430 set correct label-mac
the CWMP account mac is correctly set on the lan device but was not correctly as label-mac

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17618
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f9813f41b2)
2025-01-21 00:16:40 +01:00
Sebastian Pflieger
c8c1156e9d lldpd: fix config for build without LLDP-MED
The lldp_class and lldp_location config option are only valid when
compiled with LLDP-MED support. If not they will cause lldpd not to
start.

Signed-off-by: Sebastian Pflieger <sebastian@pflieger.email>
Link: https://github.com/openwrt/openwrt/pull/17571
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 2c22d7c3a4)
2025-01-20 23:51:15 +01:00
Robert Marko
dc81243e87 lldpd: reset PKG_RELEASE
lldpd was updated, so reset PKG_RELEASE after the PKG_VERSION update.

Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit abbec429b4)
2025-01-20 23:51:08 +01:00
Sebastian Pflieger
592e56c064 lldpd: bump version to 1.0.18
Changes (breaking):
- Remove support for building 802.3bt TLVs (broken).

Fix:
- Fix memory leaks in EDP/FDP decoding when receiving some TLVs twice.
- Do not set interface description continuously.
- Use a different Netlink socket for changes and queries.

Signed-off-by: Sebastian Pflieger <sebastian@pflieger.email>
Link: https://github.com/openwrt/openwrt/pull/17570
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit a18385041e)
2025-01-20 23:50:59 +01:00
Raylynn Knight
6c628bfddc d1: Use correct module for devices with wifi
Devices with wifi (LicheePi RV and MangoPi MQ Pro) were using the
wrong module.  Also wpad was missing to enable using the WiFi.

Signed-off-by: Raylynn Knight <rayknight@me.com>
Link: https://github.com/openwrt/openwrt/pull/17576
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Zoltan HERPAI <wigyori@uid0.hu>
(cherry picked from commit 8a17bae722)
2025-01-20 23:01:30 +01:00
Felix Fietkau
f9df8a90c8 uci: update to Git HEAD (2025-01-20)
047b2efc1348 CMakeLists.txt: bump minimum cmake version
16ff0badbde7 CMakeLists: add support for including ABIVERSION in the library version number

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit e046f8c318)
2025-01-20 22:17:51 +01:00
Florian Maurer
3f4c175851 mediatek-filogic: fix wax220 wifi leds
The WAX220 does have a 2.4GHz and 5GHz wifi led, which was set to trigger on netdev before.
This commit changes this to trigger on activity of the respective radio

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17627
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 99431e3150)
2025-01-20 22:00:24 +01:00
Lech Perczak
baa0fc8e04 ath79: zte-mf28x-common: fix initramfs execution
Now that LZMA_TEXT_START is configurable per-target once again,
move the target above 32MB boundary for ZTE MF28* devices.

Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17616
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 32c6b9064a)
2025-01-20 22:00:02 +01:00
Lech Perczak
eb82b2cbcb ath79: lzma-loader: expose LZMA_TEXT_ADDRESS configuration again
initramfs for some devices grew so big, that it can't be loaded within
the previous 32MB RAM limit. Make the LZMA_TEXT_ADDRESS configurable
per-target once again, to fix it for bigger devices, while maintaining
compatibility with previous ones.

Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17616
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 6720958659)
2025-01-20 21:59:53 +01:00
Aleksander Jan Bajkowski
40115d519c mediatek: EX5601-T0 add Zyxel EX5601-T1 and T-56 alias
Define EX5601-T1 and T-56 as alternative name, to explicitly show
the device is supported using existing image. EX5601-T1 does not
have the option to switch between WAN/SFP port. The switch port
is hardwired to the WAN port. The Zyxel T-56 is the odido-branded
version of the EX5601-T1.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/17615
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3d63a41ffa)
2025-01-20 21:59:41 +01:00
Christian Marangi
96ff9c3353 kernel: fix rootfs initramfs not updating on subsequent single build
There is currently a problem where the rootfs in an initramfs image for
single target build is not updated on subsequent run. This is caused by
a bug introduced in d78dec3e19 ("kernel: copy kernel build dir on
Per-Device Initramfs compilation") where the initramfs_data.cpio rm was
moved to PrepareConfigPerRootfs. This caused the side effect of dropping
the rm call for single target build making the kernel reusing the
previous generated initramfs_data.cpio.

To correctly handle this, restore the original location of this call
right after the touch /init call. This way the kernel will always
regenerate the initramfs embedded rootfs ALSO for single target build.

Fixes: d78dec3e19 ("kernel: copy kernel build dir on Per-Device Initramfs compilation")
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 334c649a8d)
2025-01-20 17:22:53 +01:00
Robert Marko
a252c56b4b fritz-tools: increase PKG_RELEASE
Increase PKG_RELEASE as follow-up for
("lantiq: fritz_cal_extract with reverse option for AVM FritzBox 7430").

Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 4a8717b5e7)
2025-01-20 13:15:17 +01:00
Dustin Gathmann
61dabbbfe3 lantiq: fritz_cal_extract with reverse option for AVM FritzBox 7430
This implementation of fritz_cal_extract can also retrieve firmware
data stored in reverse byte order, as found in the AVM 7430 device.

This is done by intermediate storage in a buffer presumably large enough
to hold the complete data set. Currently, this buffer size is 128kB + 1kB
(some extra space for skipped data).

In the usual case of "forward" data, this implementation should behave
like the original implementation in all common cases. limit [-l] will
determine the amount of data read and size of buffer allocated.

However, if you are reading reversed data or didn't set a limit, the buffer
may be too small to hold all data. In this case, you can choose a higher
limit [-l] to enforce a sufficient buffer size.

Signed-off-by: Dustin Gathmann <dzsoftware@posteo.org>
Link: https://github.com/openwrt/openwrt/pull/15501
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit b2cac2a978)
2025-01-20 13:15:11 +01:00
David Bauer
1e079d790a ath79: add extended AR9344 reset sequence
According to datasheet, on AR9344 the switch and switch analog need to
be reset first before initiating a full reset.

Resetting these systems fixes spurious reset hangs on Atheros AR9344
SoCs.

Link: https://github.com/freifunk-gluon/gluon/issues/2904

Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit 144af32b47)
2025-01-19 11:17:23 +01:00
David Bauer
0aaf4fe5a4 Revert "ath79: reset ETH switch for AR9344"
This reverts commit 916af73fc3.

It was reported this change did not fix the reboot issues on AR9344.

Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit 937b5a3e00)
2025-01-19 11:17:00 +01:00
Christian Marangi
f31ab2abef ipq4019: patch initialization of Lantiq DSL on FritzBox 7530.
Some VRX518 modems fail to initialize properly with the error message
"dc_ep_clk_on failed". As a result, the DSL data path doesn't work.

This hack, which is based on code from the FRITZ!Box 7530 GPL archive,
fixes the issue. It changes the PCIe vendor/device ID to values matching
a Lantiq SoC. It also appears to emulate a Lantiq CPU ID register for
connected PCIe devices, by remapping the matching address area to a
specially crafted buffer using the address translation unit.

A dedicated compatible is created to activate this in
the device tree, so this shouldn't affect any devices other than
FRITZ!Box 7530/7520.

Original investigation was done in 59f5212517 which used the "avm,host_magic" property to enabled the patch.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17622
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 676dcb1b2c)
2025-01-19 11:01:13 +01:00
Tianling Shen
8812ea235f rockchip: backport gmac clk fixes for rk3588
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 0511e98b81)
2025-01-19 16:20:48 +08:00
Tianling Shen
aca0950ea3 rockchip: backport latest gate link patches
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 112b21d616)
2025-01-19 16:05:46 +08:00
Tianling Shen
b8ef46ef2f Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-19 16:05:07 +08:00
Luis Mita
3207fe6636 ramips: mt7621: add support for Confiabits MT7621 v1
Hardware:
 - SoC: MediaTek MT7621DAT
 - Flash: 16 MiB cFeon
 - RAM: 128 MiB MT7621DAT
 - WLAN: 2.4 GHz (MT7603EN), 5 GHz (MT7613BEN 802.11ac)
 - Ethernet: 1x 10/100/1000 Mbps WAN, 3x 10/100/1000 LAN (MT7621DAT)
 - Buttons: 1 Reset button, 1 WPS button
 - LEDs: 5x Green (POWER/WAN/2.4G/5G/WPS), 1x Red (WAN)
 - Serial console: unpopulated header, 57600 8n1
 - Power: 12 VDC, 1 A

MAC:
LAN MAC: label mac (eeprom@4)
WAN MAC: label mac (eeprom@4)
2.4G MAC: label mac (eeprom@4)
5G MAC: label mac + 1 (eeprom@8004)

Installation:
The stock firmware is OpenWrt-based. If you can reach LuCI or SSH, just use the sysupgrade image
with the 'Keep settings' option turned off.

Signed-off-by: Luis Mita <luis@luismita.com>
Link: https://github.com/openwrt/openwrt/pull/17534
(cherry picked from commit 1c5ca24da6)
Link: https://github.com/openwrt/openwrt/pull/17653
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-18 19:21:57 +01:00
Robert Marko
a1c781675a qualcommax: dl-wrx36: fix 2.5G port LED-s
Currently, 2.5G port LED-s on Dynalink are incorrectly configured and thus
they will light up all of the time.

So, lets fix this by:
1. Current green LED is actually yellow, change the color
2. Fix its polarity as its actually active-low
3. The yellow LED that was registered as being connected to LED_1 pin on
the PHY is not actually connected at all, so remove it.
4. The actual green LED is connected to LED_2 on the PHY so add it.

Fixes: 75ad5c2414 ("qualcommax: switch to qca8081 upstream PHY driver")
Fixes: #14502
Link: https://github.com/openwrt/openwrt/pull/17656
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 2d077913cd)
2025-01-18 16:10:02 +01:00
Álvaro Fernández Rojas
4daf540df3 generic: backport pending Realtek PHY patches
These patches have been accepted, so we can move them from pending to
backported.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 7924acdd63)
2025-01-17 23:53:06 +01:00
Daniel Golle
1019df4af9 generic: add pending patches for RealTek Ethernet PHYs
Import patches to fix several issues with status reporting of RealTek
2.5G PHYs.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 41c164d32b)
2025-01-17 23:53:06 +01:00
Álvaro Fernández Rojas
7cace002ba generic: backport Realtek PHY patches from upstream
Adds patches for the temperature sensor on RTL822x.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit d7e82c78d7)
2025-01-17 23:53:06 +01:00
Álvaro Fernández Rojas
3078b4e51b generic: r8169: remove reverted temperature sensor patch
The patch adding temperature sensor support for r8169 has been removed upstream
and the functionality will be added to Realtek PHY instead:
1f691a1fc4

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 0de9999a78)
2025-01-17 23:53:06 +01:00
Christian Marangi
0f45601ccd airoha: an7581: add pending PCI patch
Add pending PCI patch that should correctly fix mediatek driver with
Airoha SoC.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit f22febae1a)
2025-01-17 22:11:54 +01:00
Christian Marangi
fedf53650a airoha: an7581: backport ETS patch for Airoha ethernet
Backport ETS patch for Airoha ethernet and refresh affected patches.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 67635578fd)
2025-01-17 22:11:54 +01:00
Felix Fietkau
6d3fdebe3c uci: update to Git HEAD (2025-01-17)
fb3c2343b17b add support for an override config directory

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 44c877f197)
2025-01-17 12:05:18 +01:00
Christian Marangi
c7716f363e uci: update to Git HEAD (2024-11-26)
10f7996ec294 file: Ignore config file with '.' in name

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 3929ef4c21)
2025-01-17 12:05:14 +01:00
Felix Fietkau
e6cae783a4 mediatek: remove obsolete base-files scripts
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 48e1427ffa)
2025-01-17 09:49:18 +01:00
Felix Fietkau
27520027e1 netifd: improve packet steering on ipq40xx (and possibly others)
Some platforms a single ethernet device for all ports with multiple rx rings
and NAPI threading enabled. In this case, the steering script was limiting
performance by keeping all NAPI threads assigned to the same CPU.
Fix this by assigning each rx queue and the corresponding NAPI task separately.
Additionally, if the number of rx queues is at least as big as the number of
CPUs, skip weight based assignment and distribute the load across all CPUs
directly.

Fixes: https://github.com/openwrt/openwrt/issues/17611
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit acce25b789)
2025-01-17 09:49:18 +01:00
Hauke Mehrtens
99a855121c mvebu: WD Cloud Mirror Gen2: Remove stty dependency
The package coreutils-stty is not part of the OpenWrt main packages. A
board can not depend on it. Remove the dependency to fix a build problem
seen in the build bots.

Fixes: 8fb805aa1f ("mvebu: Add support for WD Cloud Mirror Gen2")
(cherry picked from commit 717f62d256)
Link: https://github.com/openwrt/openwrt/pull/17589
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-16 21:24:52 +01:00
Robert Senderek
6acf90758d mvebu: Add support for WD Cloud Mirror Gen2
Hardware
--------
Marvell Armada 385 (MV88F6820)
512B RAM
256MB NAND (Hynix H27U2G8F2CTR)
1x 1Gbit
2x USB 3.0
2x SATA-III
UART: 115200 8N1 3.3V
RTC
Weltrend MCU WT6703F connected via UART1 for Power LED / PWM Fan / hw reset / WoL

Installation
------------
Connect UART 3.3V adapter to JP2  pins: 1-RX / 2-GND / 5-TX

Use USB2.0 FAT32 pendrive with openwrt-mvebu-cortexa9-wd_cloud-mirror-gen2-initramfs-kernel.bin
 1. stop boot by pressing 1
 2. usb start
 3. fatload usb 0:1  0x02000000 openwrt-mvebu-cortexa9-wd_cloud-mirror-gen2-initramfs-kernel.bin;bootm 0x02000000 -
 4. do backup mtd1 mtd3
 5. use sysupgrade

Or tftp
 1. stop boot by pressing 1
 2. setenv ethact egiga2;setenv serverip 192.168.11.114;setenv ipaddr 192.168.11.113
 3. tftpboot 0x02000000 openwrt-mvebu-cortexa9-wd_cloud-mirror-gen2-initramfs-kernel.bin; bootm 0x02000000 -
 4. do backup mtd1 mtd3
 5. use sysupgrade

or Evgeny Kolesnikov <evgenyz@gmail.com> method from his failed PR 2040

- Using original firmware's network settings obtain SSH access to the device.
- Put *-image-cfs-factory.bin and *-uImage-factory.bin images into device's /tmp directory.
- Write kernel (uImage) image 'flash_eraseall /dev/mtd1 && nandwrite --markbad -p /dev/mtd1 /tmp/*-uImage-factory.bin'.
- Write rootfs (image-cfs) image 'ubiformat /dev/mtd3 -f /tmp/*-image.cfs-factory.bin -y'.
- Reboot the device.

Installation (upgrade):

Use *-sysupgrade.bin in a usual way.
Weltrend MCU control is done via uart1 19200

stty -F /dev/ttyS1 raw speed 19200
stty -F /dev/ttyS1 raw speed 19200

PWM Fan Control
off: 00
echo -n -e '\xfa\x02\x00\x00\x00\x00\xfb' > /dev/ttyS1
slow: 5F
echo -n -e '\xfa\x02\x00\x5f\x00\x00\xfb' > /dev/ttyS1
max: FF
echo -n -e '\xfa\x02\x00\xff\x00\x00\xfb' > /dev/ttyS1

Power LED Control
Blue
echo -n -e '\xfa\x26\x00\x11\x00\x01\xfb' > /dev/ttyS1
Red
echo -n -e '\xfa\x26\x00\x14\x00\x01\xfb' > /dev/ttyS1
Orange
echo -n -e '\xfa\x26\x00\x12\x00\x01\xfb' > /dev/ttyS1

more here: https://github.com/c-MM/mcm-daemon/blob/master/mcm.h

Signed-off-by: Robert Senderek <robert.senderek@10g.pl>
Link: https://github.com/openwrt/openwrt/pull/17046
(cherry picked from commit 8fb805aa1f)
Link: https://github.com/openwrt/openwrt/pull/17589
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-16 21:24:52 +01:00
Mathew McBride
7555fb02ec armsr: change image names to 'combined-efi'
luci-app-attendedsysupgrade expects images to be named
'combined-efi' when the system is using EFI images.

This came about as x86 has 'combined' images for legacy
(BIOS) boot and 'combined-efi' for EFI systems.

armsr images were originally named 'combined' only
as there was no 'legacy' image type.

To avoid special handling in the attendedsysupgrade
code, name EFI images consistent with other targets.

Signed-off-by: Mathew McBride <matt@traverse.com.au>
Link: https://github.com/openwrt/luci/pull/6430
Link: https://github.com/openwrt/openwrt/pull/12963
Signed-off-by: Petr Štetiar <ynezz@true.cz>
(cherry picked from commit c9ebd4fb30)
2025-01-16 21:07:53 +01:00
Tianling Shen
be456f4b15 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-16 15:43:51 +08:00
Tianling Shen
21327672b2 mediatek: add missing network setup for cudy tr3000-v1 ubootmod
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 272391c84f)
2025-01-16 15:43:43 +08:00
Tianling Shen
ca14496e39 mediatek: add ubootmod layout for cudy tr3000 v1
This allows us to use the full size of nand, which increases ubi size
from 64M to 122.25M.

If you are at factory firmware, please refer commit 63b8d98dd0 ("mediatek: add support for Cudy TR3000 v1")
to boot into OpenWrt initramfs (stock layout version).

Flash instructions:
1. Login into the device and backup everything, especially 'Factory' part.
1. Unlock mtd partitions:
   apk update && apk add kmod-mtd-rw
   insmod mtd-rw i_want_a_brick=1
3. Write new BL2 and FIP
   mtd write openwrt-mediatek-filogic-cudy_tr3000-v1-ubootmod-preloader.bin BL2
   mtd write openwrt-mediatek-filogic-cudy_tr3000-v1-ubootmod-bl31-uboot.fip FIP
4. Set static IP on your PC:
   IP 192.168.1.254/24, GW 192.168.1.1
5. Serve OpenWrt initramfs image using TFTP server.
6. Cut off the power and re-engage, wait for TFTP recovery to complete.
7. After OpenWrt has booted, perform sysupgrade.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 51272fcd00)
2025-01-16 15:43:38 +08:00
Felix Fietkau
e7cd87e72d netifd: fix napi process name matching in packet steering script
Fixes CPU usage imbalance on some devices using threaded NAPI

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 67a4aeef6c)
2025-01-15 21:50:49 +01:00
David Bauer
93cdb10411 wifi-scripts: allow per-IF mesh basic rate selection
Bringing up a mesh interface using wpa_supplicant already supports a
per-VIF basic rate selection. Add the same ability when creating a mesh
VIF without wpa_supplicant.

Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit 3deeb7805f)
2025-01-15 17:21:35 +01:00
Felix Fietkau
3d99cdd377 wifi-scripts: remove leftover legacy (non-netifd) wifi script support
cfg80211 is the only supported wireless API

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit d127539291)
2025-01-15 17:20:30 +01:00
Felix Fietkau
ea80aa938f wifi-scripts: add macaddr_base wifi-device option
This can be used to configure the base mac address from which all
interface mac addresses are derived

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 00860e485b)
2025-01-15 17:19:39 +01:00
Felix Fietkau
e20047e5d4 hostapd: fix processing mbssid config option
Do not strip the first character from the field name

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 59dd9cddf9)
2025-01-15 17:19:24 +01:00
Felix Fietkau
06340650c5 wifi-scripts: add option to set per-device ifname prefix
Simplifies setting ifname to a different pattern for all affected
interfaces.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit a9ff3ba24b)
2025-01-15 17:17:47 +01:00
Felix Fietkau
f719c85527 mt76: update to Git HEAD (2025-01-14)
cf4e709e493a wifi: mt76: mt7996: fix crash in mt7996_set_radar_background
4c786fa52bb2 wifi: mt76: mt7915: fix register mapping
849923df3dde wifi: mt76: mt7996: fix register mapping
6be1dc9a1c79 wifi: mt76: mt7925: fix the unfinished command of regd_notifier before suspend
d33ea3cab72b wifi: mt76: mt7925: fix CLC command timeout when suspend/resume
5aacd0d73c80 wifi: mt76: mt7925: add handler to hif suspend/resume event
e86e97e45397 wifi: mt76: mt7925e: fix too long of wifi resume time
e43df6bf4892 wifi: mt76: mt7996: fix thermal sparse warning
02f453d8dfc8 wifi: mt76: fix survey regression
7279e3f3c3e0 wifi: mt76: mt7925: fix unused-but-set warning
49c0bd66da3b wifi: mt76: mt7996: fix unused-but-set variable
2c068c96382e wifi: mt76: fix crash in mt76_switch_vif_chanctx
731070da2c2a wifi: mt76: mt7996: add max mpdu len capability
99d8ed164a96 wifi: mt76: mt7996: fix the capability of reception of EHT MU PPDU
32ee924831ba wifi: mt76: mt7996: fix HE Phy capability
9b588c7fb333 wifi: mt76: mt7996: fix incorrect indexing of MIB FW event
46798905cf5a wifi: mt76: connac: adjust phy capabilities based on band constraints
5c50f6f7dafe wifi: mt76: mt7996: fix definition of tx descriptor
9cdb62dc084f wifi: mt76: mt7996: fix ldpc setting
8c6cb2f97fe0 wifi: mt76: mt7996: fix beacon command during disabling
8e4f72b682e9 wifi: mt76: mt7996: add implicit beamforming support for mt7992

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 3963dab030)
2025-01-15 17:16:30 +01:00
Tianling Shen
2476f0b6a9 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-14 22:13:15 +08:00
Sander Vanheule
68bf4844a1 realtek: debounce reset key for Zyxel GS1900
When the reset button is next to the SFP cages, I2C operations on the
modules might cause interference on the button's GPIO line. Add a
debounce-interval of 5 times the poll-interval to ensure the line is
actually stable for some time and not just glitching.

This squashes commit 4357f32d41 ("realtek: debounce reset key for
Zyxel GS1900") and commit 777c6106ed ("realtek: move debounce-interval
to correct node").

Signed-off-by: Sander Vanheule <sander@svanheule.net>
2025-01-14 10:09:38 +01:00
Rany Hany
767339066e hostapd: backport upstream patch to fix setting BSS color
Without this patch, we get the following error:

Mon Dec 23 11:35:44 2024 daemon.err hostapd: nl80211: kernel reports: integer out of range

As updating hostapd would be too complex and requires further testing,
we backport this simple upstream fix instead.

Fixes: https://github.com/openwrt/openwrt/issues/16680
Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/17590
Signed-off-by: Petr Štetiar <ynezz@true.cz>
(cherry picked from commit 5ce1af9539)
Link: https://github.com/openwrt/openwrt/pull/17591
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-14 09:41:53 +01:00
Tianling Shen
790711d9e8 mediatek: add missing dependency to huasifei wh3000 emmc
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit bc79a29f8a)
2025-01-13 20:42:14 +08:00
coolsnowwolf
5548d0d05d mediatek: filogic: add support for Huasifei WH3000
The Huasifei WH3000 eMMC model (aka Fudy MT3000) is a Wi-Fi 6 5G
cellular router based on MediaTek MT7981A SoC.

Specifications:
SoC: Filogic 820 MT7981A (1.3GHz)
RAM: DDR4 1GB
Flash: eMMC 8G
WiFi: 2.4GHz and 5GHz with 3 antennas
Ethernet:
1x WAN (10/100/1000M)
1x LAN (10/100/1000/2500M)
USB: 1x USB 3.0 port
UART: 3.3V, TX, RX, GND / 115200 8N1

Installation via U-Boot rescue:
Connect to the GbE eth port, then press and hold reset button while
booting the device. Wait for the Internet led to blink 5 times,
release reset button. The rescue page is accessible via http://192.168.1.1
Select the OpenWrt sysupgrade image and start upgrade.
Wait for the router to flash new firmware and reboot.

(cherry picked from commit f310b8c74e)
2025-01-13 18:11:37 +08:00
Lech Perczak
7d597f8709 ath79: teltonika-rut230: fix failsafe boot without SIM tray
Due to "SIM present" input defaulting to "button" type, it is
interpreted as such when booting, and causes the system to enter
failsafe, if the tray is missing. Similarly to rfkill switch on
TP-Link WDR4300 and Archer C7, make it EV_SW instead, to stop it from
interfering with the boot process.

Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17503
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 7b9ca01109)
2025-01-12 21:50:53 +01:00
Lech Perczak
6e06e1c0b1 ath79: teltonika-rut230: fix typo in "green:signal-strength4" LED
It's missing a hyphen present in every other LED from the set. Set it to
"green:signal-strength-4".

Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17503
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit d04f41e092)
2025-01-12 21:50:53 +01:00
Christian Lamparter
93bcec7b6c apm821xx: fixes WNDAP620 + WNDAP660 sysupgrade failures
OpenWRT on the WNDAP6x0 refuses to sysupgrade to itself
due to a compat_version imbalance. The Image is generated
with version 2.0, but the uci-defaults says that it needs
to be at 3.0 for the device.

Fix this by downgrading WNDAP6x0 05_fix-compat-version's
values back to 2.0 so it matches what we use.

Fixes: 5815884c3a ("apm821xx: migrate to DSA")
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
(cherry picked from commit e9415be4ad)
2025-01-12 21:50:53 +01:00
Aleksander Jan Bajkowski
3b4a84d05f lantiq: xrx200_legacy: disable unused phy drivers
Subtarget xrx200_legacy supports only a few devices. They all use
the integrated Lantiq GSWIP switch and lantiq xway PHYs. The atheros
and icplus PHYs can be safely disabled.

Switches used by individual devices are listed below.

Device				Switch			PHY
Alpha ASL56026			Lantiq GSWIP		int. switch
Arcadyan VG3503J		Lantiq GSWIP		int. switch
Netgear DM200			Lantiq GSWIP		int. switch
TP-LINK TD-W8970		Lantiq GSWIP		Lantiq PEF7071V
TP-Link TD-W8980		Lantiq GSWIP		Lantiq PEF7071V

Reduces uncompressed kernel size by 16 kB.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/17581
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 517b9c1cdc)
2025-01-12 21:50:53 +01:00
Aleksander Jan Bajkowski
773bb31bab lantiq: xway_legacy: refresh config
This was done by executing these command:
$ make kernel_oldconfig CONFIG_TARGET=subtarget

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/17581
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 524e22b4c7)
2025-01-12 21:50:53 +01:00
Aleksander Jan Bajkowski
afbe72d293 lantiq: xrx200: add alternative names for Plusnet Hub One and BT Business Hub 5A
The Plusnet Hub One and BT Business Hub 5A have the same hardware as
the BT Home Hub 5A. This commit adds alternative names so that both
devices can be easily found in the firmware selector.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/17583
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 1b045a7c13)
2025-01-12 21:50:53 +01:00
Aleksander Jan Bajkowski
6c0707a59d lantiq: xrx200_legacy: add alternative names for TP-Link TD-W9980(B)
The TP-Link TD-W9980(B) shares the same hardware with the TP-Link TD-W8980.
The only difference is that the TD-W8980 does not support VDSL. This is a
software limitation and once the software is changed, both work equally
supporting VDSL. This commit adds alternative names for devices so they
can be easily found in the firmware selector.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/17583
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b2b4ce1532)
2025-01-12 21:50:53 +01:00
John Audia
ff529e8137 kernel: bump 6.6 to 6.6.71
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.71

Manually rebased:
	airoha/patches-6.6/110-01-clk-en7523-Rework-clock-handling-for-different-clock.patch
	airoha/patches-6.6/111-mmc-mtk-sd-add-support-for-AN7581-MMC-Host.patch

All other patches automatically rebased.

Build system: x86/64
Build-tested: bcm27xx/bcm2712
Run-tested: bcm27xx/bcm2712

Signed-off-by: John Audia <therealgraysky@proton.me>
[ fix manually rebased patch ]
Link: https://github.com/openwrt/openwrt/pull/17568
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 3f87c5ac42)
2025-01-12 21:43:44 +01:00
John Audia
220860ef4c kernel: bump 6.6 to 6.6.70
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.70

Removed upstreamed:
	generic/backport-6.6/902-net-llc-reset-skb-transport_header.patch[1]
	generic/pending-6.6/605-netfilter-nft_set_hash-unaligned-atomic-read-on-stru.patch[2]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.70&id=0c896816aa193e6459fc947747e5753c06b395b9
2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.70&id=4f49349c1963e507aa37c1ec05178faeb0103959

Build system: x86/64
Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3
Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17545
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit efafd7d47f)
2025-01-12 21:43:35 +01:00
Kien Truong
e9d80cdb6c rockchip: disable kernel preemption
This setting is more suitable for device running OpenWRT.
Most OpenWRT targets are already default to this configuration,
and it has shown better performance in VPN (wireguard).

Fix: #17454

Signed-off-by: Kien Truong <duckientruong@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17575
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 1c178f3644)
2025-01-12 13:34:28 +01:00
Tianling Shen
16397c4b8f Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-11 00:33:52 +08:00
Christian Marangi
e620694876 airoha: an7581: refresh DTS with changes for cpufreq, MTD and MMC
Refresh DTS with required changes for cpufreq, MTD and MMC. While at it
also fix wrong speed for MAC.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 17b0d1379a)
2025-01-10 14:57:59 +01:00
Christian Marangi
90c29d2c04 airoha: an7581: replace cpufreq patch with new version
Replace cpufreq patch with new version requested upstream.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 5069557350)
2025-01-10 14:57:59 +01:00
Christian Marangi
9a18304344 airoha: an7581: add pending patch for ETS qdisc on ethernet driver
Add pending patch for ETS qdisc on Airoha ethernet driver.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 53bc763331)
2025-01-10 14:57:33 +01:00
Christian Marangi
99689859f0 airoha: an7581: add pending patch to fix PCI
Add pending patch to fix PCIe missing register.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 77329b7d8d)
2025-01-10 14:57:32 +01:00
Christian Marangi
6b4fcc55a9 airoha: an7581: add patch fixing support for MMC
Add patch fixing support for MMC. Additional clock are needed for MMC to
work and some small fixup to make the Mediatek MMC driver on Airoha SoC.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit be5a9ff24b)
2025-01-10 14:57:18 +01:00
Lorenzo Bianconi
74b8a296cb kernel: modules: Add ETS Qdisc scheduler to sched KernelPackage
Add ETS Qdisch scheduler to kernel package modules.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
[ add commit description ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 7e237f1902)
2025-01-10 14:57:17 +01:00
Christian Marangi
5c679f56eb airoha: an7581: backport patch to support ETS and HTB sched
Backport patch to support ETS and HTB scheduler for airoha ethernet
driver.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 3ec3ea5316)
2025-01-10 14:56:58 +01:00
Christian Marangi
ce926ee32f airoha: an7581: backport 2 fix for airoha ethernet driver
Backport 2 fix for airoha ethernet driver merged upstream.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit b4ae5378d4)
2025-01-10 14:56:58 +01:00
Christian Marangi
b315f4ebfe airoha: an7581: replace BUS clock patch with upstream version
Replace BUS clock patch with upstream version with related tag
as it got approved and merged.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 07b49ce876)
2025-01-10 14:56:58 +01:00
Christian Marangi
3ee8355f2f airoha: an7581: enable MMC and PCI and refresh config
Enable MMC and PCI config symbol and refresh config for Airoha AN7581.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 73d368868c)
2025-01-10 14:56:34 +01:00
Mustafa Can Elmacı
44d6d06268 lantiq: Remove legacy LED migration script
This script was rendered obsolete after xrx200 target switched to DSA and
breaking config migration from old releases to 22.03.

Signed-off-by: Mustafa Can Elmacı <mustafacan@elmaci.net>
Link: https://github.com/openwrt/openwrt/pull/17383
Link: https://github.com/openwrt/openwrt/pull/17512
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-10 10:53:46 +01:00
Rosen Penev
165b9e4393 lantiq: fritz7430: fix PCI ID
This platform has a bogus PCI ID for the chip. Correct it in DTS.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/16555
Link: https://github.com/openwrt/openwrt/pull/17512
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-10 10:53:46 +01:00
Rosen Penev
baa6561939 lantiq: use nvmem for tplink tdw89x0
These two devices use different wifi chips and as a result, different
calibration sizes. Move the differences out of dtsi.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/16555
Link: https://github.com/openwrt/openwrt/pull/17512
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-10 10:53:46 +01:00
Rosen Penev
92ccaacb29 lantiq: use nvmem for fritz 736x
Two use AR9287 and one AR9381. Both have different calibration sizes.
Move differences out of wifi node to make it clearer what's what.

qca,no-eeprom needs to stay for 7362sl as there's no nvmem equivalent
for caldata_extract_reverse

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17278
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Link: https://github.com/openwrt/openwrt/pull/17512
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-10 10:53:46 +01:00
Rosen Penev
7111d84787 lantiq: use nvmem for fritz73x0
These units use AR9287, which has a calibration size of 3d8.

Also fixed compatible string to the proper one to indicate AR9287.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17278
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Link: https://github.com/openwrt/openwrt/pull/17512
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-10 10:53:46 +01:00
Rosen Penev
98bcdd191d lantiq: use regulator for USB GPIO
One is already present. The other one can be implemented in terms of the
PHY.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17250
Signed-off-by: John Crispin <john@phrozen.org>
Link: https://github.com/openwrt/openwrt/pull/17512
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-01-10 10:53:46 +01:00
Florian Maurer
38d79aca0e ipq40xx: fix label MAC address for Linksys WHW03 v2
The label MAC address is written inside the case of the whw03 v2 at the bottom.

Similar fix as to the 4040 in b22d382ae4

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17535
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit c113982706)
2025-01-09 11:11:43 +01:00
Matthias Schiffer
66229e2093 ipq40xx: dts: add ethernet0 alias for all devices
Updating the driver patches for ipq40xx (correctly) removed the
ethernet0 alias from qcom-ipq4019.dtsi; however, on some devices this
alias is needed for the bootloader to set MAC addresses in the FDT.

As it is unknown which devices actually need the alias, simply add it to
all devices trees for now that enable the &gmac now to avoid regressions
from previous OpenWrt releases. The additional alias should not cause any
issues even when it is not needed.

A TODO comment is added to the same Device Trees to document that the
alias may not be needed (hopefully preventing it from being copied
unnecessarily to newly added devices in the future). The following
devices are known to need the alias for correct MAC address assignment,
so no TODO comment is added:

- FRITZ!Box 4040
- FRITZ!Box 7530

Fixes: cd9c721124 ("ipq40xx: 6.1: use latest DSA and ethernet patches")
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
Link: https://github.com/openwrt/openwrt/pull/17442
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d09dd75fbd)
2025-01-09 11:11:33 +01:00
Álvaro Fernández Rojas
3c8b23fad8 generic: add gpio-regmap request/free ops patch
This patch is needed on bmips since it fixes issues with GPIOs not being
properly configured due to gpio_request_enable not being called on bcm63xx
devices. Therefore we can now drop the bcm63268 gpio function patch.

Backported from f5b1d340be with the exception of
the realtek patch removal.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit f5b1d340be)
2025-01-08 19:43:41 +01:00
David Bauer
c06d4df974 mac80211: set basic-rate for mesh interfaces
Basic rates were not set for mesh-interfaces, resulting in the undesired
behavior where 11s frames might be sent with a rate which was not
configured.

Depending on the driver, the basic rate might also be used to determine
the beacon rate configured to the chip. One such example are MediaTek
MT7915 platforms.

Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit 3ec7f3a512)
2025-01-06 07:45:08 +01:00
David Bauer
0c52c9d6fc ath79: reset ETH switch for AR9344
According to datasheet, on AR9344 the switch and switch analog need to
be reset first before initiating a full reset.

Resetting these systems fixes spurious reset hangs on Atheros AR9344
SoCs.

Link: https://github.com/freifunk-gluon/gluon/issues/2904

Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit 916af73fc3)
2025-01-06 07:21:11 +01:00
Hauke Mehrtens
50dcebeb8a OpenWrt v24.10.0-rc5: revert to branch defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-06 01:24:07 +01:00
Hauke Mehrtens
3d17274ca8 OpenWrt v24.10.0-rc5: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-06 01:24:03 +01:00
Tianling Shen
687c2906ac Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-05 22:24:10 +08:00
Maxim Anisimov
6dacba30a7 mediatek/filogic: add support for Cudy AP3000 v1
Hardware:
  SoC:     MT7981b
  RAM:     512 MB
  Flash:   256 MB SPI NAND
  Ethernet:
    1x2.5Gbps (rtl8221b)
  WiFi:    2x2 MT7981
  Button:  Reset
  LED:     1x multicolor

Installation
------------
At the moment, firmware installation is only possible via a transition firmware.
It's can be requested from the manufacturer by email to support@cudy.com

Signed-off-by: Maxim Anisimov <maxim.anisimov.ua@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17225
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 6992d6e51a)
2025-01-04 22:35:37 +01:00
Roland Reinl
d92fc99360 mediatek: Fix U-Boot variables handling for D-Link M30 A1
I think I implemented the U-Boot handling incorrectly on M30 (saw the issue while porting M60 to OpenWrt). Maybe someone with more U-Boot experience can have a look at it.
What I understood until now:

Before flashing, `sw_tryactive` must be set to 0 because OpenWrt runs on partition 0

During reset after flashing, U-Boot executes the following line:
`boot_rd_auto_sw_img=if itest.s ${sw_tryactive} == 2; then run boot_by_part; else run boot_by_tryactive; fi`

As `sw_tryactive` was set to 0 before flashing, `boot_by_tryactive` will be executed:
`boot_by_tryactive=if itest.s ${sw_tryactive} == 0; then setenv sw_tryactive 2; setenv sw_active 1; saveenv; run ub0; else setenv sw_tryactive 2; setenv sw_active 2; saveenv; run ub1; fi`

As `sw_tryactive` was set to 0 before flashing, `sw_active` will be set to 1 and `ub0` will be executed:
`ub0=setenv bootpart 0; mtkboardboot; run ub0to1; uip main; reset`

If the OpenWrt boot is successful, `ub0to1` and `uip` main will never be executed. Only in case OpenWrt cannot be loaded, `mtkboardboot` will return and the fallback `ub0to1` is executed.

Conclusion: It's sufficient to set `sw_tryacitve` to 0 before flashing, the added code in `target/linux/mediatek/filogic/base-files/etc/init.d/bootcount` is useless.
In the worst case (/proc/cmdline doesn't contain `bootpart=ubi0` as expected), the bootpart variable would be set to 1 and causes starting the firmware from the second partition instead of the one on the first partition.

Signed-off-by: Roland Reinl <reinlroland+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17298
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 70610a5240)
2025-01-04 22:34:37 +01:00
Shiji Yang
785ea040ec mac80211: rt2x00: some improvements for rt5592
This patch contains some performance and stability improvements
for RT5592:

1. Fix RFCSR register init values for RT5592.
2. Fix BBP register init values for RT5592.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/16845
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 59557ca19a)
2025-01-04 22:30:25 +01:00
Shiji Yang
b8c53881db mac80211: rt2x00: some improvements for mt7620
This patch contains some performance and stability improvements
for MT7620:

1. Always calibrate MT7620 when switching channel.
2. Rework link tuner for MT7620.
3. Correct MT7620 SDM mode register value.
4. Fix register operation on RXIQ calibration.
5. Fix TX_PIN_CFG and TX_ALC_VGA3 init values.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/16845
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 5d58390165)
2025-01-04 22:30:23 +01:00
Shiji Yang
5679b7aef6 mac80211: rt2x00: some improvements for rt2800 generic
1. Respect the rt2800 hardware TX queue index.
2. Increase the watchdog sampling frequency.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/16845
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 70733c6093)
2025-01-04 22:30:21 +01:00
Sander Vanheule
e63d289bbd realtek: trim default package selection
Images for certain devices are staring to become too large, as some
device only have 6MB available in their vendor partition layout for the
initial install. This is especially pressing for bootloaders only
supporting gzip compression.

Drop some packages from DEFAULT_PACKAGES that aren't strictly required
for a factory install. The user can always install more packages later
using opkg/apk, or via a sysupgrade to a custom build.

firewall4 is kept to ensure the most recent firewall package is selected
in builds including LuCI.
ethtool is kept as a frequently used diagnostics tool.

Link: https://github.com/openwrt/openwrt/pull/17450
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit c9ae39b2d1)
2025-01-04 20:40:02 +01:00
Linus Walleij
8931d617dd ath79: Push MV88E6060 DSA switch into package
We can use a package for the MV88E6060 DSA switch on the single
ath79 device that uses it, saving around 600 KB of memory on
all other devices (for the DSA infrastructure, mainly).

As far as I can see the TP-Link TL WR941 v2 is the only device
using MV88E6060 and the only device with a DSA switch overall.

However the ath79 people should look at this so I'm not
mistaken.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://patchwork.ozlabs.org/project/openwrt/patch/20250102-ath79-mv88e6060-module-v1-1-c2a8e31e72fc@linaro.org/
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit e7419381fd)
2025-01-04 19:27:11 +01:00
Linus Walleij
e80b7a63f1 ixp4xx: Break out mv88e6060 DSA switch to package
Just one of the devices uses the Marvell MV88E6060 DSA
switch so break this out from the generic kernel config
and into a package selected only by that single device
and probed at boot instead.

The big win is from being able to drop the dsa_core
(~600KB) kernel module out of the common kernel on
devices with no DSA switch.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
(cherry picked from commit 2456a2fd7f)
2025-01-04 19:27:05 +01:00
INAGAKI Hiroshi
3d0ed57b16 mediatek: append metadata to factory-uboot.bin for WSR devices
Append metadata to factory-uboot.bin image to pass the image verification
on sysupgrade.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17408
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit a06a2ef89d)
2025-01-04 19:25:34 +01:00
Aleksander Jan Bajkowski
deb0f28b5e lantiq: xrx200: add support for lan3 and lan4 on AVM 5490/5491
On the AVM 5490/5491, lan1, lan2 and wan ports are connected directly
to the internal GSWIP switch. The lan3 and lan4 ports are connected via
an external QCA8334 switch. This commit adds the missing entries in dts
and adds the driver module.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/17473
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 14be320291)
2025-01-04 19:25:34 +01:00
Shiji Yang
8b5f3ee940 base-files: strip space and tab characters from ASCII mac address
Spaces and tabs are widely used in variable definitions. We have to
remove them to ensure that get_mac_ascii() works properly.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17262
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 551e04f3c9)
2025-01-04 19:25:34 +01:00
Shiji Yang
676dfd1363 base-files: enable get_mac_ascii() to handle redundant strings
The function get_mac_ascii() will fail when there are two or more
same MAC address variable names in the mtd partition. Only retain
the first variable to workaround this rare situation.

Fixes: https://github.com/openwrt/openwrt/issues/17236
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17262
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3410ad2f40)
2025-01-04 19:25:34 +01:00
Shiji Yang
b0261c3861 uboot-mediatek: add missing LED command for OpenWrt One
The u-boot LED command "led_loop_done" is missing from the OpenWrt
One NAND flash u-boot. Copy it from the OpenWrt One NOR flash u-boot
default environment to fix this issue.

Fixes: https://github.com/openwrt/openwrt/issues/17310
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17338
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 5ef71eaafd)
2025-01-04 19:25:34 +01:00
Shiji Yang
d543a9ae66 uboot-mediatek: fix Routerich AX3000 support patch
It seems that the original patch has been manually modified. The
newly added line number is incorrect.

Fixes: c0581520b1 ("uboot-mediatek: add Routerich AX3000 support")
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17338
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 9f97e39a93)
2025-01-04 19:25:34 +01:00
Shiji Yang
976bfe61e0 ramips: mtk-mmc: remove nt76x8 pinctrl hack
Now we can set the mt76x8 SDXC pinmux in device tree.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17446
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b4a9f85c13)
2025-01-04 19:25:34 +01:00
Shiji Yang
09378395cd ramips: make package kmod-sdhci-mt7620 conflict with kmod-mmc-mtk
These two packages are SDXC drivers for Mediatek mt762x series SoCs.
One is upstream implementation, and the other is downstream driver.
Installing them together will result in conflicts.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17446
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 0764e30082)
2025-01-04 19:25:34 +01:00
Shiji Yang
f311c9754c ramips: fix SDXC function for mt76x8 one eth port devices
There are only 5 devices in mt76x8 sub-target selected the MTK SDXC
driver package. And they are all single ethernet port routers or dev
boards:

* LinkIt Smart 7688
* Onion Omega2+
* RAVPower RP-WD009
* VoCore VoCore2
* VoCore VoCore2-Lite

For these devices, they are using the ephy p1 - p4 as the SDXC IO
pins. Therefore, these GPIO pads must be configured in "digital"
IO mode.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17446
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f5996ae947)
2025-01-04 19:25:34 +01:00
Shiji Yang
f81f707c05 ramips: add back SDXC card reader support for HiWiFi HC5x61A
After adding the correct package and pin group configurations,
the SDXC card slot can now function properly.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17446
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit cea4aae0a9)
2025-01-04 19:25:34 +01:00
Shiji Yang
4d9b06c571 ramips: mmc-mtk: add more vendor driver register init values
In the MTK vendor driver, mt762x SDXC registers MSDC_PATCH_BIT and
MSDC_PATCH_BIT1 have different init values than upstream driver.
These magical values should have some help for the stability.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17446
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f70cdfd682)
2025-01-04 19:25:34 +01:00
Shiji Yang
cc733e7e2a ramips: mt762{0,8}: reduce default MMC clock to 24 MHz
The upstream mtk-sd driver did not perform specific timing
optimization for MT762x series SoC, hence the SDHC peripheral
of some boards cannot run at too high frequency. Reduce the
maximum clock frequency to fix the mmc read/write error.

Closes: https://github.com/openwrt/openwrt/issues/17364
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Link: https://github.com/openwrt/openwrt/pull/17375
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit de0c143742)
2025-01-04 19:25:34 +01:00
John Audia
fe8812ab96 bcm27xx: remove duplicated kmod-rp1-pio package
Commit f105d1a9a9 added a duplicated
kmod-rp1-pio package.
Also remove unneeded blank lines added by the same commit.

Fixes: f105d1a9a9 ("bcm27xx/bcm2712: Fix-up RP1 modules")
Signed-off-by: John Audia <therealgraysky@proton.me>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit d5669c040b)
2025-01-04 19:17:39 +01:00
Tianling Shen
096e3f26ef rockchip: enable USB3 port on NanoPC T6
Enable the USB3 port on FriendlyELEC NanoPC-T6.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/17349
(cherry picked from commit 6881b48dc6)
Link: https://github.com/openwrt/openwrt/pull/17466
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-04 17:15:14 +01:00
Tianling Shen
767ad64921 rockchip: backport recent rk3588 clk updates
Backport recent rk3588 clk updates from upstream,
including one bug fix.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/17349
(cherry picked from commit 8ad02ca2f8)
Link: https://github.com/openwrt/openwrt/pull/17466
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-04 17:15:14 +01:00
John Audia
7a112661d5 bcm27xx/bcm2712: Fix-up RP1 modules
Correct a few mistakes around dependencies and naming and unset
CONFIG_FIRMWARE_RP1 in RPi5B's config and instead of a builtin, build it
as a module.

Without this change, there are two entries for rp1.ko in
/lib/modules/$(uname -r)/modules.builtin due to how we strip the leading
directories when we generate it. See: package/kernel/linux/Makefile
around line 63.

  % grep rp1.ko /lib/modules/$(uname -r)/modules.builtin
  pwm-rp1.ko
  clk-rp1.ko
  rp1.ko
  rp1.ko

The kernel log gets spammed with tons of superfluous warnings as a
results of the double entry:

  daemon.warn modprobe: found duplicate builtin module rp1

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17461
Signed-off-by: Robert Marko <robimarko@gmail.com>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit f105d1a9a9)
2025-01-04 13:41:49 +01:00
Felix Fietkau
2f60e7f006 wifi-scripts: fix setting tx power on some drivers
On some drivers, setting the tx power on the interface is not enough.
Set it for the phy as well.

Fixes: 04fb05914e ("wifi-scripts: add multi-radio config support")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit b795e5cbcf)
2025-01-04 11:56:06 +01:00
Felix Fietkau
6ba1f831c7 mt76: update to Git HEAD (2025-01-04)
35bcf68a6297 wifi: mt76: scan: fix setting tx_info fields
4d8d6e2e7710 wifi: mt76: scan: set vif offchannel link for scanning/roc
e354436db440 wifi: mt76: mt7996: use the correct vif link for scanning/roc

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit f11bc4f201)
2025-01-04 11:55:51 +01:00
Tianling Shen
849b0be2de Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-04 17:42:48 +08:00
Álvaro Fernández Rojas
56b2d856a2 generic: 6.6: backport upstream r8169 patches
7a3bcd39ae1f r8169: use helper r8169_mod_reg8_cond to simplify rtl_jumbo_config
e3e9e9039fa6 r8169: align WAKE_PHY handling with r8125/r8126 vendor drivers
330dc2297c82 r8169: improve rtl_set_d3_pll_down
c507e96b5763 r8169: improve __rtl8169_set_wol
83cb4b470c66 r8169: remove leftover locks after reverted change
2cd02f2fdd8a r8169: improve initialization of RSS registers on RTL8125/RTL8126
a3d8520e6a19 r8169: align RTL8126 EEE config with vendor driver
4af2f60bf737 r8169: align RTL8125/RTL8126 PHY config with vendor driver
eb90f876b796 r8169: align RTL8125 EEE config with vendor driver
b8bd8c44a266 r8169: fix inconsistent indenting in rtl8169_get_eth_mac_stats
f75d1fbe7809 r8169: add support for RTL8125D
c4e64095c00c r8169: enable EEE at 2.5G per default on RTL8125B
d64113c6bb5e r8169: remove rtl_dash_loop_wait_high/low
1c105bacb160 r8169: avoid duplicated messages if loading firmware fails and switch to warn level
ac48430368c1 r8169: don't take RTNL lock in rtl_task()
e3fc5139bd8f r8169: implement additional ethtool stats ops
b8bf38440ba9 r8169: enable SG/TSO on selected chip versions per default
854d71c555df r8169: remove original workaround for RTL8125 broken rx issue
1ffcc8d41306 r8169: add support for the temperature sensor being available from RTL8125B

The following patches require backporting additional linux patches:
e2015942e90a r8169: replace custom flag with disable_work() et al
e340bff27e63 r8169: copy vendor driver 2.5G/5G EEE advertisement constraints

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 0eeba04a16)
2025-01-04 09:12:53 +01:00
Álvaro Fernández Rojas
56b19f0d50 generic: 6.6: backport upstream Realtek PHY patches
8989bad54113 net: phy: realtek: add RTL8125D-internal PHY
f87a17ed3b51 net: phy: realtek: merge the drivers for internal NBase-T PHY's

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit fedb1f86b5)
2025-01-04 09:12:53 +01:00
Álvaro Fernández Rojas
111c62a06a rockchip: refresh patch
Commit 8a477bafb4 backported an upstream patch
without refreshing the patches.

Fixes: 8a477bafb4 ("rockchip: fix phy reset on rk356x")
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17474
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 484f670ed3)
2025-01-04 09:08:13 +01:00
Hauke Mehrtens
cf887640a3 mbedtls: Deactivate ARIA block cipher by default
The ARIA block cipher is pretty uncommon in TLS, deactivate it for now.
This saves some space and reduces the possible variations and attack
vectors of mbedtls.

ARIA support was deactivated in OpenWrt 23.05 by default.

Link: https://github.com/openwrt/openwrt/pull/17342
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3c0ef48bc8)
2025-01-03 21:55:41 +01:00
Weijie Gao
993ade9eb3 config: enable SECCOMP support for loongarch64
Make USE_SECCOMP selectable for loongarch64

Signed-off-by: Weijie Gao <hackpascal@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17335
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b6b6148d7d)
2025-01-03 21:55:18 +01:00
Hauke Mehrtens
43e1b47d70 procd: update to Git HEAD (2024-12-22)
42d3937 jail/seccomp: add support for loongarch64

Link: https://github.com/openwrt/openwrt/pull/17335
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f69fc4c413)
2025-01-03 21:54:03 +01:00
Tianling Shen
14722242af rockchip: fix phy reset on rk356x
The commit 7160820d742a ("phy: rockchip: naneng-combphy: fix phy reset")
was backported to kernel 6.6 branch by upstream, however the correspond
dtsi fixes was not, resulting the following error:
```
[    0.225521] rockchip-naneng-combphy fe830000.phy: error -ENOENT: failed to get phy reset
[    0.227467] rockchip-naneng-combphy fe840000.phy: error -ENOENT: failed to get phy reset
```

So backport the dtsi fixes here manually.

Fixes: 89b2356b8c ("kernel: bump 6.6 to 6.6.69")
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/17468
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 8a477bafb4)
2025-01-03 21:51:15 +01:00
John Audia
09fcac8bc0 kernel: bump 6.6 to 6.6.69
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.69

All patches automatically rebased.

Build system: x86/64
Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3
Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17459
Signed-off-by: Nick Hainke <vincent@systemli.org>
(cherry picked from commit 89b2356b8c)
2025-01-03 21:51:07 +01:00
Felix Fietkau
bbfebf8527 kernel: add workaround for page_pool_release warnings
defer_list skbs held by NAPI can block releasing page pools.
Work around this by scheduling rx softirq on all CPUs while trying to release
a page pool.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 2b70b32aef)
2025-01-03 20:23:41 +01:00
Florian Maurer
9b9622271e ipq40xx: fix label MAC address for FritzBox 7520/7530
The MAC address of the GMAC is contained inside the CWMP-Account number on the label.

Similar fix as to the 4040 in b22d382ae4
Link #13240

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17467
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit b2b6955f80)
2025-01-03 15:49:06 +01:00
Felix Fietkau
efebdf077c ubus: update to Git HEAD (2025-01-02)
d996988ae55b libubus: close file descriptor after sending it from a request
afa57cce0aff libubus: add support for using channels

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit f0df6e3a4a)
2025-01-03 12:07:07 +01:00
Robert Marko
184d1c93cb config: rename SECCOMP to USE_SECCOMP
It seems that we have some kind of a symbol name conflict which causes
CONFIG_SECCOMP to always be read as y.

Unfortunatelly, I could not figure out what is causing this, but simply
renaming SECCOMP to USE_SECCOMP seems to properly work and leaves the
symbol unset unless arch dependencies are satisfied.

This fixes qoriq and others that dont support seccomp from failing due
to procd-seccomp package being selected to get included but it cannot be
built for them:
ERROR: unable to select packages:
  procd-seccomp (no such package):
    required by: base-files-1637~52b6c92479[procd-seccomp]

Fixes: 4c65359af4 ("build: fix including busybox, procd and apk/opkg in imagebuilder")
Link: https://github.com/openwrt/openwrt/pull/17048
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit a48ec449cc)
2025-01-03 11:18:56 +01:00
Felix Fietkau
933ae0699a build: remove targetinfo invalidation based on .config
Target info no longer depends on config settings

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 3b661cfcf9)
2025-01-03 11:16:17 +01:00
Petr Štetiar
19db092082 linux: fix missing default packages in profiles.json
Robert reported, that in firmware images generated by ASU, there is
`apk` package manager missing after the commit 44598c233d ("build:
remove broken dependency of metadata on toplevel .config variables").

That is happening, because apk got removed from `default_packages` list in
`profiles.json`, which is being generated by `json_overview_image_info` Make
target, which uses `scripts/json_overview_image_info.py` helper script,
which gets the information from `DEFAULT_PACKAGES` Make variable.

So lets fix it by providing `DEFAULT_PACKAGES` variable when its needed.

The reason why we didn't added those packages as a dependency to
base-files like any other packages, was to allow disabling them (in
order to save space).

Fixes: #16969
Fixes: openwrt/asu/issues/1084
Fixes: 44598c233d ("build: remove broken dependency of metadata on toplevel .config variables")
Reported-by: Robert Marko <robimarko@gmail.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
Link: https://github.com/openwrt/openwrt/pull/16986
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 90f0be8521)
2025-01-03 11:14:12 +01:00
Petr Štetiar
c22410e7a9 imagebuilder: move handling of DEFAULT_PACKAGES into shareable place
It seems, that handling of DEFAULT_PACKAGES is needed in more places, so
lets move it into dedicated include file so it can be easily shared.

Signed-off-by: Petr Štetiar <ynezz@true.cz>
Link: https://github.com/openwrt/openwrt/pull/16986
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 40be892a02)
2025-01-03 11:14:12 +01:00
Felix Fietkau
f97e729f8c build: fix including busybox, procd and apk/opkg in imagebuilder
Since the image builder pulls package lists from metadata directly,
add procd and busybox as depdendencies to base-files.
As for the package manager itself, since it can be disabled it needs
to be added directly in the image builder makefile

Fixes: 44598c233d ("build: remove broken dependency of metadata on toplevel .config variables")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 4c65359af4)
2025-01-03 11:11:19 +01:00
Felix Fietkau
83afb428b0 build: remove broken dependency of metadata on toplevel .config variables
Instead of relying on .config symbols for metadata, alter the DEFAULT
variable of affected packages. Fixes enabling opkg vs apk among others.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 44598c233d)
2025-01-03 11:10:12 +01:00
Felix Fietkau
85d1d03cab mt76: update to Git HEAD (2025-01-03)
46715044ecd2 wifi: mt76: mt7996: implement driver specific get_txpower function
959a2d40007f wifi: mt76: mt7996: initialize phy txpower

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 65aff89f64)
2025-01-03 11:06:56 +01:00
Felix Fietkau
3ad92b68f1 mt76: update to Git HEAD (2024-12-30)
109114146f9c mt76: only enable tx worker after setting the channel
5fe42ec88fd1 mt76: mt7915: ensure that only one sta entry is active per mac address
1884f568ba02 wifi: mt76: do not add wcid entries to sta poll list during MCU reset
71fa9124d107 wifi: mt76: mt7996: fix NULL pointer dereference in mt7996_mcu_sta_bfer_he
eb85bb3fd5bf wifi: mt76: mt7915: fix eifs value on older chipsets
83e4d4a82e65 wifi: mt76: introduce mt792x_config_mac_addr_list routine
b47e20b440ae wifi: mt76: mt7925: fix NULL deref check in mt7925_change_vif_links
3e3c484726f3 wifi: mt76: mt7925: fix wrong band_idx setting when enable sniffer mode
3f1401a0f035 wifi: mt76: mt7925: fix get wrong chip cap from incorrect pointer
eede99f524e8 wifi: mt76: mt7925: fix the invalid ip address for arp offload
c99e4d51b340 wifi: mt76: mt7996: fix overflows seen when writing limit attributes
af983b2543ed wifi: mt76: mt7915: fix overflows seen when writing limit attributes
af494e2dcc94 wifi: mt76: mt7915: exclude tx backoff time from airtime
6f6a1f7cb381 wifi: mt76: mt7996: exclude tx backoff time from airtime
7f65b1b28b4c wifi: mt76: connac: Extend mt76_connac_mcu_uni_add_dev for MLO
1b5e6abc2e7a wifi: mt76: mt7925: Fix incorrect MLD address in bss_mld_tlv for MLO support
72b4688b3912 wifi: mt76: mt7925: Fix incorrect WCID assignment for MLO
6bd2c044e67a wifi: mt76: mt7925: Fix incorrect WCID phy_idx assignment
1c04e9693466 wifi: mt76: mt7925: fix wrong parameter for related cmd of chan info
01e02947bdbf wifi: mt76: mt7925: Fix CNM Timeout with Single Active Link in MLO
b90b1a1dc71b wifi: mt76: mt7925: Enhance mt7925_mac_link_bss_add to support MLO
53ec7a551f17 wifi: mt76: Enhance mt7925_mac_link_sta_add to support MLO
3c99ef40e0e7 wifi: mt76: mt7925: Update mt7925_mcu_sta_update for BC in ASSOC state
285efc6afaec wifi: mt76: mt7925: Update mt792x_rx_get_wcid for per-link STA
e5c0d1289e6c wifi: mt76: mt7925: Update mt7925_unassign_vif_chanctx for per-link BSS
67dcd5c888c4 wifi: mt76: mt7925: Update secondary link PS flow
fd4d6f87072f wifi: mt76: mt7925: Init secondary link PM state
6d972b5b9d6a wifi: mt76: mt7925: Update mt7925_mcu_uni_[tx,rx]_ba for MLO
3acc6cbb9556 wifi: mt76: mt7925: Cleanup MLO settings post-disconnection
0aab0c61ce92 wifi: mt76: mt7925: Properly handle responses for commands with events
15bead1b0041 wifi: mt76: do not hold queue lock during initial rx buffer alloc
732044a949d5 wifi: mt76: mt7925: config the dwell time by firmware
9ba311ec6afa wifi: mt76: mt7921: introduce CSA support
5d12c7404c22 wifi: mt76: mt7921: add rfkill_poll for hardware rfkill
ef965d408b79 wifi: mt76: mt7925: replace zero-length array with flexible-array member
f8563589c72d wifi: mt76: mt7921u: Add VID/PID for TP-Link TXE50UH

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit bff5260d7b)
2025-01-03 11:02:29 +01:00
Felix Fietkau
3bd2962c3d mac80211: update to version 6.12.6
- drop patches accepted upstream
- include build fixes in the tarball
- based on https://github.com/nbd168/backports commit 410656ef04d2

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit a85059438f)
2025-01-03 11:02:29 +01:00
Georgi Valkov
5330f62085 mac80211: refresh patch for ath12k
refresh the following patch for ath12k
001-wifi-ath12k-add-11d-scan-offload-support-and-handle-country-code-for-WCN7850.patch

Signed-off-by: Georgi Valkov <gvalkov@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17246
Signed-off-by: John Crispin <john@phrozen.org>
(cherry picked from commit fb17914f65)
2025-01-03 11:02:29 +01:00
James Sweeney
369d2f3bf9 realtek: add 1920-24g-poe-180w to mac address
Add 1920-24g-poe-180w to the mac address retrieval part of 02_network to
properly set the device's port MAC addresses.

This piece was missed when this device was added.

Fixes: b948c1e39b ("realtek: add support for HPE 1920-24G PoE-180W (JG925A)")
Link: https://github.com/openwrt/openwrt/pull/17460
Signed-off-by: James Sweeney <code@swny.io>
(cherry picked from commit 0b54029a6e)
2025-01-03 10:18:57 +01:00
Tianling Shen
d886b0a8eb Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-02 17:37:14 +08:00
Sander Vanheule
d5f01971f7 realtek: drop extraneous ')' in 02_network
The extraneous closing parenthesis inside the case matching breaks
syntax of the network initialization script 02_network.

/bin/board_detect: /etc/board.d/02_network:
    line 40: syntax error: unexpected newline (expecting ")")

Remove this character so board init is functional again.

Fixes: c8ea1aa970 ("realtek: add support for HPE 1920-24G-PoE-370w")
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit a3391d871d)
2025-01-02 09:46:10 +01:00
Jonathan Sturges
36f7db978a ramips: mt7621: enable lzma-loader for Amped Wireless ALLY
Switch to using loader-kernel to accommodate
larger image sizes that are problematic for
many mt7621 uboots.

Signed-off-by: Jonathan Sturges <jsturges@redhat.com>
Link: https://github.com/openwrt/openwrt/pull/17389
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f8a8a2c5c7)
2025-01-01 23:14:31 +01:00
Chukun Pan
f91d8e9f37 trusted-firmware-a.mk: fix release download URL
The URL of trusted-firmware-a is no longer available for
downloading release:
https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/
curl: (22) The requested URL returned error: 401 Unauthorized

So we switch to the GitHub mirror repository to download.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
Link: https://github.com/openwrt/openwrt/pull/17360
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 4b6eb631e1)
2025-01-01 23:14:31 +01:00
George Oldfort
b80de63e9f mediatek: filogic: add KTD2026/7 driver to Acer Connect Vero W6m
This commit adds kmod-leds-ktd202x to the OpenWrt image for the device
"Acer Connect Vero W6m" which is equipped with one KTD2026 controlling the
device's status LED via I2C.

Signed-off-by: George Oldfort <openwrt@10099.de>
Link: https://github.com/openwrt/openwrt/pull/16860
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit e44180d45c)
2025-01-01 23:14:31 +01:00
Álvaro Fernández Rojas
35e02b31c0 generic: add missing CONFIG_LEDS_KTD202X symbol
Commit 56d97fff55 backported leds-ktd202x from upstream but didn't add the
generic config symbol.

Fixes: 56d97fff55 ("generic: backport support for KTD2026/7 rgb(w) led controller")
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17396
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit c846f48f6a)
2025-01-01 23:14:31 +01:00
George Oldfort
a9ddc7432a generic: backport support for KTD2026/7 rgb(w) led controller
This commit adds the Linux kernel mainline driver "leds-ktd202x" for the
KinetIC KTD2026 and KTD2027 RGB/RBGW controller with I2C interface that was
introduced in kernel version 6.7, last changed in mainline on 2024-05-31.

At least the Acer Connect Vero W6m (a variant of the Acer Predator Connect
W6 without 2.5G eth1 port, usb3 port, and the 6 on-board gpio RGB LEDs) is
equipped with a KTD2026 (and a single RGB LED attached to it used by the
stock firmware as status LED), and maybe other router devices also are.

Signed-off-by: George Oldfort <openwrt@10099.de>
Link: https://github.com/openwrt/openwrt/pull/16860
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 56d97fff55)
2025-01-01 23:14:31 +01:00
Roland Reinl
812046971e mediatek: Fix primary MAC of D-Link M60
During port to gluon, I saw that the primary mac is not correct. Updated DTS accordingly.

Signed-off-by: Roland Reinl <reinlroland+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17429
(cherry picked from commit 616621120b)
Link: https://github.com/openwrt/openwrt/pull/17449
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-01-01 22:43:26 +01:00
James Sweeney
a2b1aaee80 realtek: add support for HPE 1920-24G PoE-180W (JG925A)
Hardware information: (largely copied from 11275be)
---------------------

The HPE 1920-24G-PoE+ (180W) (JG925A) is a switch that is
part of the 1920 family which has 180W nominal PoE+ support.

Common with HPE 1920-24G:
- RTL8382 SoC
- 24 Gigabit RJ45 ports (built-in RTL8218B, 2 external RTL8218D)
- 4 SFP ports (external RTL8214FC)
- RJ45 RS232 port on front panel
- 32 MiB NOR Flash
- 128 MiB DDR3 DRAM
- PT7A7514 watchdog

HPE 1920-24G-PoE+ (180W):
- PoE chip
- 2 fans (40mm)

Known issues:
---------------------
- PoE LEDs are uncontrolled.

(Manual taken from f2f09bc)
Booting initramfs image:
------------------------

- Prepare a FTP or TFTP server serving the OpenWrt initramfs image and
connect the server to a switch port.

- Connect to the console port of the device and enter the extended
boot menu by typing Ctrl+B when prompted.

- Choose the menu option "<3> Enter Ethernet SubMenu".

- Set network parameters via the option "<5> Modify Ethernet Parameter".
Enter the FTP/TFTP filename as "Load File Name" ("Target File Name"
can be left blank, it is not required for booting from RAM). Note that
the configuration is saved on flash, so it only needs to be done once.

- Select "<1> Download Application Program To SDRAM And Run".

Initial installation:
---------------------

- Boot an initramfs image as described above, then use sysupgrade to
install OpenWrt permanently. After initial installation, the
bootloader needs to be configured to load the correct image file

- Enter the extended boot menu again and choose "<4> File Control",
then select "<2> Set Application File type".

- Enter the number of the file "openwrt-kernel.bin" (should be 1), and
use the option "<1> +Main" to select it as boot image.

- Choose "<0> Exit To Main Menu" and then "<1> Boot System".

NOTE: The bootloader on these devices can only boot from the VFS
filesystem which normally spans most of the flash. With OpenWrt, only
the first part of the firmware partition contains a valid filesystem,
the rest is used for rootfs. As the bootloader does not know about this,
you must not do any file operations in the bootloader, as this may
corrupt the OpenWrt installation (selecting the boot image is an
exception, as it only stores a flag in the bootloader data, but doesn't
write to the filesystem).

Example PoE config file (/etc/config/poe):
---------------------
config global
        option budget   '180'

config port
        option enable   '1'
        option id       '1'
        option name     'lan8'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '2'
        option name     'lan7'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '3'
        option name     'lan6'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '4'
        option name     'lan5'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '5'
        option name     'lan4'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '6'
        option name     'lan3'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '7'
        option name     'lan2'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '8'
        option name     'lan1'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '9'
        option name     'lan16'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '10'
        option name     'lan15'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '11'
        option name     'lan14'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '12'
        option name     'lan13'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '13'
        option name     'lan12'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '14'
        option name     'lan11'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '15'
        option name     'lan10'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '16'
        option name     'lan9'
        option poe_plus '1'
        option priority '2'

config port
        option enable   '1'
        option id       '17'
        option name     'lan24'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '18'
        option name     'lan23'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '19'
        option name     'lan22'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '20'
        option name     'lan21'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '21'
        option name     'lan20'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '22'
        option name     'lan19'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '23'
        option name     'lan18'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '24'
        option name     'lan17'
        option poe_plus '1'
        option priority '2'

Signed-off-by: James Sweeney <code@swny.io>
Link: https://github.com/openwrt/openwrt/pull/17444
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit b948c1e39b)
2025-01-01 22:38:11 +01:00
Tony Ambardar
32981677bd tools/dwarves: update to v1.28
Update to the latest upstream version and refresh local patches.

Release Notes: https://lore.kernel.org/bpf/Z1RcnB8WD8wZphcr@x1/

Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/17404
(cherry picked from commit 45187cbad0)
Link: https://github.com/openwrt/openwrt/pull/17418
Signed-off-by: Nick Hainke <vincent@systemli.org>
2025-01-01 21:19:24 +01:00
Tony Ambardar
7a0b76cf0f bpftool: Update to v7.5.0
Update to the latest upstream release to include recent improvements and
bugfixes, and simplify use of PKG_SOURCE_VERSION.

This version supports BPF objects of either endianness, allowing for
introspection, linking and skeleton creation, and enables cross-compiling
modern BPF applications for targets with non-native byteorder.

Link: https://github.com/libbpf/bpftool/releases/tag/v7.5.0
Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/17404
(cherry picked from commit 5bcad34154)
Link: https://github.com/openwrt/openwrt/pull/17418
Signed-off-by: Nick Hainke <vincent@systemli.org>
2025-01-01 21:19:19 +01:00
Tony Ambardar
b66773aac3 libbpf: Update to v1.5.0
Update to the latest upstream release to include recent improvements and
bugfixes, including support for handling BPF objects of either endianness.

Link: https://github.com/libbpf/libbpf/releases/tag/v1.5.0
Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/17404
(cherry picked from commit 6a6ae41d4b)
Link: https://github.com/openwrt/openwrt/pull/17418
Signed-off-by: Nick Hainke <vincent@systemli.org>
2025-01-01 21:19:05 +01:00
Tianling Shen
9c204d7dff Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2025-01-01 14:01:45 +08:00
Evan Jobling
11275bec82 realtek: add support for HPE 1920-24G-PoE-370w
Hardware information:
---------------------

The HPE 1920-24G-PoE+ (370W) (JG926A) is a switch that is
part of the 1920 family wich 370W nominal PoE+ support.

Common with HPE 1920-24G:
  - RTL8382 SoC
  - 24 Gigabit RJ45 ports (built-in RTL8218B, 2 external RTL8218D)
  - 4 SFP ports (external RTL8214FC)
  - RJ45 RS232 port on front panel
  - 32 MiB NOR Flash
  - 128 MiB DDR3 DRAM
  - PT7A7514 watchdog

HPE 1920-24G-PoE+ (370W):
  - PoE chip
  - 3 fans (40mm)

Known issues:
---------------------
- PoE LEDs are uncontrolled.

(Manual taken from f2f09bc)
Booting initramfs image:
------------------------

- Prepare a FTP or TFTP server serving the OpenWrt initramfs image and
  connect the server to a switch port.

- Connect to the console port of the device and enter the extended
  boot menu by typing Ctrl+B when prompted.

- Choose the menu option "<3> Enter Ethernet SubMenu".

- Set network parameters via the option "<5> Modify Ethernet Parameter".
  Enter the FTP/TFTP filename as "Load File Name" ("Target File Name"
  can be left blank, it is not required for booting from RAM). Note that
  the configuration is saved on flash, so it only needs to be done once.

- Select "<1> Download Application Program To SDRAM And Run".

Initial installation:
---------------------

- Boot an initramfs image as described above, then use sysupgrade to
  install OpenWrt permanently. After initial installation, the
  bootloader needs to be configured to load the correct image file

- Enter the extended boot menu again and choose "<4> File Control",
  then select "<2> Set Application File type".

- Enter the number of the file "openwrt-kernel.bin" (should be 1), and
  use the option "<1> +Main" to select it as boot image.

- Choose "<0> Exit To Main Menu" and then "<1> Boot System".

NOTE: The bootloader on these devices can only boot from the VFS
filesystem which normally spans most of the flash. With OpenWrt, only
the first part of the firmware partition contains a valid filesystem,
the rest is used for rootfs. As the bootloader does not know about this,
you must not do any file operations in the bootloader, as this may
corrupt the OpenWrt installation (selecting the boot image is an
exception, as it only stores a flag in the bootloader data, but doesn't
write to the filesystem).

Example PoE config file (/etc/config/poe):
---------------------
config global
        option budget   '370'

config port
        option enable   '1'
        option id       '1'
        option name     'lan8'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '2'
        option name     'lan7'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '3'
        option name     'lan6'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '4'
        option name     'lan5'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '5'
        option name     'lan4'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '6'
        option name     'lan3'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '7'
        option name     'lan2'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '8'
        option name     'lan1'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '9'
        option name     'lan16'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '10'
        option name     'lan15'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '11'
        option name     'lan14'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '12'
        option name     'lan13'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '13'
        option name     'lan12'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '14'
        option name     'lan11'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '15'
        option name     'lan10'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '16'
        option name     'lan9'
        option poe_plus '1'
        option priority '2'

config port
        option enable   '1'
        option id       '17'
        option name     'lan24'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '18'
        option name     'lan23'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '19'
        option name     'lan22'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '20'
        option name     'lan21'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '21'
        option name     'lan20'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '22'
        option name     'lan19'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '23'
        option name     'lan18'
        option poe_plus '1'
        option priority '2'
config port
        option enable   '1'
        option id       '24'
        option name     'lan17'
        option poe_plus '1'
        option priority '2'

Signed-off-by: Evan Jobling <evan.jobling@mslsc.com.au>
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Link: https://github.com/openwrt/openwrt/pull/17436
[fix space indentation in DTS]
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit c8ea1aa970)
2024-12-31 08:43:19 +01:00
Evan Jobling
1f94fa16d8 realtek: rtl838x: refactor hpe_1920-24g dts
The HPE JG924A, JG925A and JG926A share the same base.
Prepare base device for adding the PoE enabled switch support.

Signed-off-by: Evan Jobling <evan.jobling@mslsc.com.au>
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Link: https://github.com/openwrt/openwrt/pull/17436
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit 41b49a157a)
2024-12-31 08:43:19 +01:00
John Audia
67e070c11b kernel: bump 6.6 to 6.6.68
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.68

All patches automatically rebased.

Build system: x86/64
Build-tested: flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3, x86/64
Run-tested: flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3, x86/64

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17394
Signed-off-by: Nick Hainke <vincent@systemli.org>
(cherry picked from commit 1aae1dfaf2)
2024-12-30 20:21:40 +01:00
Tianling Shen
190da4f2c5 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-30 15:35:12 +08:00
Robert Marko
1eff737906 ipq40xx: orbi: add ethernet0 alias
Netgear Orbi devices rely on ethernet0 alias to be present to U-Boot will
populate the MAC.

This fixes the random MAC on each boot after the ethernet0 alias was
dropped from the SoC DTSI.

Fixes: cd9c721124 ("ipq40xx: 6.1: use latest DSA and ethernet patches")
Fixes: #17384
Link: https://github.com/openwrt/openwrt/pull/17414
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 9ea174c7bf)
2024-12-29 10:04:51 +01:00
Felix Fietkau
9a0a05d52a busybox: fix LTO compiler flags
When doing LTO builds, the target related CFLAGS need to be passed to the
linker, so that they are considered for target code generation.
Pass TARGET_CFLAGS in EXTRA_LDFLAGS to ensure that this is handled properly.

Fixes: #17200
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit e6ce868c3a)
2024-12-28 22:50:04 +01:00
Álvaro Fernández Rojas
dad450b115 bcm27xx-utils: update to latest version
Full changelog: raspberrypi/utils@6a2a6be...0c02957

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 80189a0350)
2024-12-28 18:51:38 +01:00
Álvaro Fernández Rojas
d1dd5b2301 bcm27xx-gpu-fw: update to v1.20241126
Full changelog: https://github.com/raspberrypi/firmware/compare/1.20241008...1.20241126

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 5bc2d3267d)
2024-12-28 18:51:22 +01:00
Kyle Hendry
684223c4a4 bmips: pinctrl-bcm63268: add gpio function
Right now there's no way to know what state CFE will leave the pinctrl
registers in, so they should be explicitly set by linux on boot. This
patch adds a gpio configuration for drivers that need it, i.e. gpio-leds.

Signed-off-by: Kyle Hendry <kylehendrydev@gmail.com>
[improve patch and fix warnings]
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit e44daa4fa5)
2024-12-28 18:07:41 +01:00
Álvaro Fernández Rojas
4b4f319931 Revert "bmips: drop macronix nand block protection patch"
This reverts commit 15b21c474e.

The issue seems to appear spuriously.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 84ca1c28f7)
2024-12-28 16:04:01 +01:00
Álvaro Fernández Rojas
3a5584e0df bcm27xx: pull 6.6 patches from RPi repo
Adds latest 6.6 patches from the Raspberry Pi repository.

These patches were generated from:
https://github.com/raspberrypi/linux/commits/rpi-6.6.y/
With the following command:
git format-patch -N v6.6.67..HEAD
(HEAD -> 811ff707533bcd67cdcd368bbd46223082009b12)

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 692205305d)
2024-12-28 14:11:52 +01:00
John Audia
cccc7651ec bcm27xx/bcm2712: add RP1 drivers via kmods
Add kmods for the following RP1 options that not all users
will necessarily need or want compiled in:
* Composite video
* Display video
* LED control
* PWM control
* Serial video

Build system: x86/64
Build-tested: bcm2712/RPi5B
Run-tested: bcm2712/RPi5B

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17233
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d6c5805db3)
2024-12-28 14:11:52 +01:00
John Audia
17752bd9ce kernel: bcm27xx/bcm2712: add RP1 functionality
Build in several options RP1-specific features rather than
generating additional kmods for them since bcm2712 is unique to
RPi5B only.

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17233
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 87309edba4)
2024-12-28 14:11:52 +01:00
John Audia
f4c5d0e77e bcm27xx: patches: cherry-pick for RP1 kmods
Cherry-pick patches to support building RP1 modules.

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17233
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 613dd79d5e)
2024-12-28 14:11:52 +01:00
Álvaro Fernández Rojas
3ca3ee6012 bmips: drop macronix nand block protection patch
MX30LFxG18AC OTP area access has been fixed upstream:
e87161321a

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 15b21c474e)
2024-12-28 12:22:40 +01:00
Antonio Pastor
76a546a83a kernel: generic: patch: 802.2+LLC - set transport_header offset
Conversion to DSA broke 802.2+LLC+SNAP packet processing. Frames
received by napi_complete_done with GRO and DSA have transport_header
set two bytes short, or pointing 2 bytes before network_header &
skb->data. As snap_rcv expects transport_header to point to SNAP
header (OID:PID) after LLC processing advances offset over LLC header
(llc_rcv & llc_fixup_skb), code doesn't find a match and packet is
dropped.

Image built at this commit operates properly:
  86dadeba48 - generic: add patch for GPON-ONU-34-20BI quirk
Image built at following commit exhibits the issue:
  337e36e0ef - ipq806x: convert each device to DSA implementation

As issue is LLC specific, to avoid impacting non-LLC traffic, and to
follow up on original assumption made on kernel commit fda55eca5a33
("net: introduce skb_transport_header_was_set()") stating "network
stacks usually reset the transport header anyway", llc_fixup_skb to
reset and advance the offset. llc_fixup_skb already assumes the LLC
header is at skb->data, and by definition SNAP header immediately
follows.

Signed-off-by: Antonio Pastor <antonio.pastor@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17220
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit da7ab64f1f)
2024-12-28 11:18:36 +01:00
Fabian Groffen
5b4a081f47 octeon: add kmod-usb-dwc3-octeon to DEFAULT_PACKAGES
Since 24.10.0 the Linux kernel needs this to enable the USB stack on
Cavium Octeon platforms with DesignWare Core USB3 IP.

Issue: https://github.com/openwrt/openwrt/issues/17195
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Link: https://github.com/openwrt/openwrt/pull/17393
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 0cba20f082)
2024-12-28 10:38:11 +01:00
Fabian Groffen
47e3413f6b kernel: add kmod-usb-dwc3-octeon
Since 24.10.0, Linux 6.6 is used which includes a reorganisation of
Octeon DWC3 glue code.
https://lore.kernel.org/all/ZJC3LLpUlatnLdnv@lenoch/

As a result, Octeon devices using this, such as EdgeRouter 4 have a no
longer functioning USB stack.

Build kmod-usb-dwc3-octeon for Cavium Octeon targets.

Issue: https://github.com/openwrt/openwrt/issues/17195
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Link: https://github.com/openwrt/openwrt/pull/17393
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 9adcf61abb)
2024-12-28 10:38:02 +01:00
Joel Low
7cbaa9e81f netfilter: fix bogus reference to kmod-nf-conntrack-timeout
Fix bogus reference to kmod-nf-conntrack-timeout, fixing the warning
`WARNING: Makefile 'package/kernel/linux/Makefile' has a dependency on
'kmod-nf-conntrack-timeout', which does not exist`.

Fixes: 0e2dcfc4f4 ("netfilter: add kmod-nfnetlink-ct{helper,timeout}")
Signed-off-by: Joel Low <joel@joelsplace.sg>
Link: https://github.com/openwrt/openwrt/pull/17388
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 74354fb463)
2024-12-27 16:11:08 +01:00
Richard Schneidt
90f84a22b0 mvebu: fix Linksys power LED
Kernel 6.6 requires LED node names to be prefixed via "led-", otherwise
probing the LED will fail, so update our downstream patch adding the LED.

Signed-off-by: Richard Schneidt <ricsc@users.noreply.github.com>
Link: https://github.com/openwrt/openwrt/pull/17330
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit f491001f0c)
2024-12-27 16:09:20 +01:00
Tianling Shen
dbcf763194 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-27 13:31:34 +08:00
Rany Hany
4cc1da1e44 hostapd: add SAE support for wifi-station and optimize PSK file creation
Regarding SAE support in wifi-station:

Important Note: Unlike PSK wifi-stations, both `mac` and `key` options are required
to make it work. With PSK, hostapd used to perform a brute-force match to find which
PSK entry to use, but with SAE this is infeasible due to SAE's design.

When `mac` is omitted, it will allow any MAC address to use the SAE password if it
didn't have a MAC address assigned to it, but this could only be done once.
The last wildcard entry would be used.

Also, unlike "hostapd: add support for SAE in PPSK option" (commit 913368a),
it is not required to set `sae_pwe` to `0`. This gives it a slight advantage
over using PPSK that goes beyond not needing RADIUS.

Example Configuration:

```
config wifi-vlan
        option iface default_radio0
        option name 999
        option vid 999
        option network management

config wifi-station
        # Allow user with MAC address 00:11:22:33:44:55 and matching
        # key "secretadminpass" to access the management network.
        option iface default_radio0
        option vid 999
        option mac '00:11:22:33:44:55'
        option key secretadminpass

config wifi-vlan
        option iface default_radio0
        option name 100
        option vid 100
        option network guest

config wifi-station
        # With SAE, when 'mac' is omitted it will be the fallback in case no
        # other MAC address matches. It won't be possible for a user that
        # has a matching MAC to use this network (i.e., 00:11:22:33:44:55
        # in this example).
        option iface default_radio0
        option vid 100
        option key guestpass
```

Regarding PSK file creation optimization:

This patch now conditionally runs `hostapd_set_psk_file` depending on `auth_type`.
Previously, `hostapd_set_psk` would always execute `hostapd_set_psk_file`, which
would create a new file if `wifi-station` was in use even if PSK was not enabled.
This change checks the `auth_type` to ensure that it is appropriate to parse the
`wifi-station` entries and create those files.

Furthermore, we now only configure `wpa_psk_file` when it is a supported option
(i.e., psk or psk-sae is used). Previously, we used to configure it when it was
not necessary. While it didn't cause any issues, it would litter `/var/run` with
unnecessary files. This patch fixes that case by configuring it depending on the
`auth_type`.

The new SAE support is aligned with these PSK file changes.

Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/17145
Signed-off-by: John Crispin <john@phrozen.org>
(cherry picked from commit 65a1c666f2)
Link: https://github.com/openwrt/openwrt/pull/17248
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-26 14:53:05 +01:00
Edward Chow
db0300cb1b ath79: port buffalo WZR-450HP2 from ar71xx
Referencing commit a1837135e0

Hardware
--------
SoC:	Qualcomm Atheros QCA9558
RAM:	128M DDR2 (Nanya NT5TU64M16HG-AC)
FLASH:	128M SPI-NAND (Spansion S34ML01G100TFI00)
WLAN:	QCA9558 3T3R 802.11 bgn
ETH:	Qualcomm Atheros QCA8337
UART:	115200 8n1
BUTTON:	Reset - WPS - "Router" switch
LED:	2x system-LED, 2x wlan-LED, 1x internet-LED,
	2x routing-LED
	LEDs besides the ethernet ports are controlled
	by the ethernet switch

MAC Address:
 use		address(sample 1)	source
 label		cc:e1:d5:xx:xx:ed	art@macaddr_wan
 lan		cc:e1:d5:xx:xx:ec	art@macaddr_lan
 wan		cc:e1:d5:xx:xx:ed	$label
 WiFi4_2G	cc:e1:d5:xx:xx:ec	art@cal_ath9k

Installation from Serial Console
------------

1. Connect to the serial console. Power up the device and interrupt
   autoboot when prompted

2. Connect a TFTP server reachable at 192.168.11.10/24
   to the ethernet port. Serve the OpenWrt initramfs image as
   "openwrt.bin"

3. Boot the initramfs image using U-Boot
   ath> tftpboot 0x84000000 openwrt.bin
   ath> bootm 0x84000000

4. Copy the OpenWrt sysupgrade image to the device using scp and
   install it like a normal upgrade (with no need to keeping config
   since no config from "previous OpenWRT installation" could be kept
   at all)

   # sysupgrade -n /path/to/openwrt/sysupgrade.bin

Installation from Web Interface
------------

To flash just do a firmware upgrade from the stock firmware (Buffalo
branded dd-wrt) with squashfs-factory.bin

Signed-off-by: Edward Chow <equu@openmail.cc>
Link: https://github.com/openwrt/openwrt/pull/17227
(cherry picked from commit 42254d3f5f)
Link: https://github.com/openwrt/openwrt/pull/17359
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-26 14:26:18 +01:00
Roland Reinl
7271ee587c mediatek: filogic: Add support for D-Link AQUILA PRO AI M60
Specification:
 - MT7986 CPU using 2.4GHz and 5GHz WiFi (both AX)
 - MT7531 switch
 - 512MB RAM
 - 128MB NAND flash (MX35LF1GE4AB-Z4I) with two UBI partitions with identical size
 - 1 multi color LED (red, green, blue, white) connected via GCA230718 (Same as D-Link M30 A1)
 - 3 buttons (WPS, reset, LED on/off)
 - 1x 2.5 Gbit WAN port with Maxlinear GPY211C
 - 4x 1 Gbit LAN ports

Disassembly:
 - There are five screws at the bottom: 2 under the rubber feet, 3 under the label.
 - After removing the screws, the white plastic part can be shifted out of the blue part.
 - Be careful because the antennas are mounted on the side and the top of the white part.

Serial Interface
 - The serial interface can be connected to the 4 pin holes next to/under the antenna cables.
 - Note that there is another set of 4 pin holes on the side of the board, it's not used.
 - Pins (from front to rear):
   - 3.3V (do not connect)
   - TX
   - RX
   - GND
 - Settings: 115200, 8N1

MAC addresses:
 - MAC address is stored in partition "Odm" at offset 0x81 (for example XX:XX:XX:XX:XX:52)
 - MAC address on the device label is ODM + 1 (for example XX:XX:XX:XX:XX:53)
 - WAN MAC is the one from the ODM partition (for example XX:XX:XX:XX:XX:52)
 - LAN MAC is the one from the ODM partition + 1 (for example XX:XX:XX:XX:XX:53)
 - WLAN MAC (2.4 GHz) is the one from the ODM partition + 2 (for example (XX:XX:XX:XX:XX:54)
 - WLAN MAC (5 GHz) is the one from the ODM partition + 5 (for example (XX:XX:XX:XX:XX:57)

Flashing via OEM web interface:
 - Currently not supported because image crypto is not known

Flashing via recovery web interface:
 - This is only working if the first partition is active because recovery images are always flashed to the active partition and OpenWrt can only be executed from the first partition
 - Use a Chromium based browser, otherwise firmware upgrade might not work
 - Recovery web interface is accessible via 192.168.200.1 after keeping the reset button pressed during start of the device until the LED blinks red
 - Upload the recovery image, this will take some time. LED will continue flashing red during the update process
 - The after flashing, the recovery web interface redirects to http://192.168.0.1. This can be ignored. OpenWrt is accessible via 192.168.1.1 after flashing
 - If the first partition isn't the active partition, OpenWrt will hang during the boot process. In this case:
   - Download the recovery image from https://github.com/RolandoMagico/openwrt/releases/tag/M60-Recovery-UBI-Switch (UBI switch image)
   - Enable recovery web interface again and load the UBI switch image. This image works on the second partition of the M60
   - OpenWrt should boot now as expected. After booting, flash the normal OpenWrt sysupgrade image (for example in the OpenWrt web interface)
   - Flashing a sysupgrade image from the UBI switch image will make the first partition the active partition and from now on, default OpenWrt images can be used

Flashing via Initramfs:
- Before switching to OpenWrt, ensure that both partitions contain OEM firmware.
  - This can be achieved by re-flashing the same OEM firmware version again via the OEM web interface.
  - Flashing via OEM web interface will automatically flash the currently not active partition.
- Open router, connect serial interface
- Start a TFTP server at 192.168.200.2 and provide the initramfs image there
- When starting the router, select "7. Load Image" in U-Boot
- Settings for load address, load method can be kept as they are
- Specify host and router IP address if you use different ones than the default (Router 192.168.200.1, TFTP server 192.168.200.2)
- Enter the file name of the initramfs image
- Confirm "Run loaded data now?" question after loading the image with "Y"
- OpenWrt initramfs will start now
- Before flashing OpenWrt, create a backup of the "ubi" partition. It is required when reverting back to OEM
- Flash sysupgrade image to flash, during flashing the U-Boot variable sw_tryactive will be set to 0
  - During next boot, U-Boot tries to boot from the ubi partition. If it fails, it will switch to the ubi1 partition

Reverting back to OEM:
- Boot the initramfs image as described in "Flashing via Initramfs" above
- Copy the backed up ubi partition to /tmp (e.g. by using SCP)
- Write the backup to the UBI partition: mtd write /tmp/OpenWrt.mtd4.ubi.bin /dev/mtd4
- Reboot the device, OEM firmware will start now

Signed-off-by: Roland Reinl <reinlroland+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17296
(cherry picked from commit b3ce08e0b6)
Link: https://github.com/openwrt/openwrt/pull/17363
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-26 14:22:21 +01:00
Joel Low
5829178074 netfilter: add kmod-nfnetlink-ct{helper,timeout}
Add kmod-nfnetlink-ct{helper,timeout} to allow handling firewall rules
in userspace (together with conntrackd). The timeout module allows
specifying custom expiration rules.

Signed-off-by: Joel Low <joel@joelsplace.sg>
Link: https://github.com/openwrt/openwrt/pull/17267
(cherry picked from commit 0e2dcfc4f4)
Link: https://github.com/openwrt/openwrt/pull/17358
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-26 14:17:18 +01:00
Tianling Shen
d9bbed6507 mediatek: update openembed som7981 support
The board has been redesigned due to previous hardware bugs
(with other reasons maybe).

Changes in new board:
- Added a gpio beeper
- Added a Atmel i2c eeprom
- Added a Atmel i2c ECC accelerator
- Added a Philips RTC module
- Added two RS485
- Removed WPS button
- Replaced USB3 port with M.2 B-key for LTE modules
- Swapped GbE LEDs gpio

Also assigned wifi mac with nvmem binding, added iface setup for failsafe,
increased phy assert time for rtl8221b, and updated LED labels.

Keeping compatibility for old version is not necessary here as only
few samples were sent to those interested in it.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/17253
(cherry picked from commit 5a7fb834c7)
Link: https://github.com/openwrt/openwrt/pull/17348
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-26 14:13:35 +01:00
Tianling Shen
48f9284232 kernel: crypto: add atmel i2c hw accelerator support
Add support for Microchip / Atmel ECC/SHA/RNG hw accelerator.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/17253
(cherry picked from commit 9d434a8abf)
Link: https://github.com/openwrt/openwrt/pull/17348
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-26 14:13:35 +01:00
Hauke Mehrtens
738c9e5286 yafut: Mark as nonshared
This package is depending on @NAND_SUPPORT which is only set for some
targets. Mark it nonshared to build it in the target build process.

Fixes: https://github.com/openwrt/openwrt/issues/14714
Link: https://github.com/openwrt/openwrt/pull/17379
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit d275bcc4bb)
2024-12-26 14:09:55 +01:00
Tianling Shen
25f2b3ec79 rockchip: add MMBOX ANAS3035 support
Hardware
--------
RockChip RK3568 ARM64 (4 cores)
4GB LPDDR4X RAM
2x 2500 Base-T (PCIe, rtl8125b)
4x LEDs (POWER / SATA1 / SATA2 / SATA3)
32GB eMMC on-board
Micro-SD Slot
HDMI OUT
2x USB 2.0 Port
3x SATA Slot
DC Jack 12V

Installation
------------
Uncompress the ImmortalWrt sysupgrade and write it to a micro SD card or
internal eMMC using dd.

Signed-off-by: Tianling Shen <i@cnsztl.eu.org>
(cherry picked from commit 934bf398be)
2024-12-26 18:06:35 +08:00
Tianling Shen
35fba462e0 ImmortalWrt v24.10.0-rc3: revert to branch defaults
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-26 16:04:32 +08:00
Tianling Shen
415304139d ImmortalWrt v24.10.0-rc3: adjust config defaults
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-26 16:04:31 +08:00
Tianling Shen
afde822cf7 Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-26 16:02:55 +08:00
David Bentham
55d1fe4aa6 mediatek: add Comfast CF-E395AX support by adding an alternative model name
both these devices share the board and same config, just different model number

Install instructions are the same as the CF-E393AX commit - https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=d8f4453bf2de9fd9baf3d660ed12e0797ff2cfdb

Signed-off-by: David Bentham <db260179@gmail.com>

Link: https://github.com/openwrt/openwrt/pull/16389
Signed-off-by: John Crispin <john@phrozen.org>
(cherry picked from commit 794291bbdf)
2024-12-26 00:57:01 +01:00
Kyle Hendry
45bf30e062 bmips: dts: fix pinctrl error
The kernel logs the error "bcm6368_nand 10000200.nand: there is not valid
maps for state default" on boot and all nand pins show as UNCLAIMED in
sysfs pinmux-pins.

bcm6362.dtsi, bcm6368.dtsi and bcm63268.dtsi use the undocumented property
group which the driver doesn't understand. This has been documented upstream
in commit caf963efd4b0b9ff42ca12e52b8efe277264d35b.

Replacing group with pins allows the nand pins to be properly configured.

Signed-off-by: Kyle Hendry <kylehendrydev@gmail.com>
[add bcm636/bcm6368 and fix commit title]
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit d1e9c50d06)
2024-12-24 11:25:39 +01:00
Sander Vanheule
ec49df8692 realtek: generate compat_version 2.0 for GS1900
The GS1900 images have been updated to have a larger firmware partition,
bumping the compatibility version to 2.0. However, since this version is
generated on first boot and the default was used, these images still
advertised 1.0 after a fresh install.

Add a new uci-defaults script that will generate the correct version for
all affected Zyxel GS1900 devices.

Fixes: 35acdbe909 ("realtek: merge Zyxel GS1900 firmware partitions")
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit a25809a474)
2024-12-24 11:18:27 +01:00
Tianling Shen
b939c8122c Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-24 16:06:00 +08:00
Tianling Shen
d036b42dd9 uboot-rockchip: fix build with swig 4.3.0
Fixes the following error by backporting upstream update:
```
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);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
```

Fixes: https://github.com/openwrt/openwrt/issues/17345
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/17352
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 4e68103c4e)
2024-12-23 21:26:47 +01:00
Florian Maurer
f7398101db ipq40xx-generic: ws-ap3915i fix macadress
set macaddress correctly for board

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17305
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 363f52d067)
2024-12-23 16:45:51 +01:00
Florian Maurer
08f1bde12b ipq40xx-generic: EN WS-AP3915i remove BLOCKSIZE from image definition
The blocksize was too high, resulting in forgetting the config on sysupgrade
It is not needed for SPI-NOR.

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
Link: https://github.com/openwrt/openwrt/pull/17305
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 24fc5ff213)
2024-12-23 16:45:44 +01:00
Hauke Mehrtens
372afe10f0 OpenWrt v24.10.0-rc4: revert to branch defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-23 12:40:35 +01:00
Hauke Mehrtens
1e530e5831 OpenWrt v24.10.0-rc4: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-12-23 12:40:31 +01:00
Hauke Mehrtens
d55754ce0d uboot-d1: Adapt BUILD_DEVICES to renamed boards
The boards where renamed, but BUILD_DEVICES was not adapted. This
variable points to the board name. Without this change the u-boot
binaries are not selected in the configuration.

Copy the u-boot binaries under the BUILD_DEVICES name as it is expected
by the image scripts.

Fixes: 33e23e8922 ("build: d1: add SUPPORTED_DEVICES")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit af6c1f9497)
2024-12-23 01:55:35 +01:00
Sander Vanheule
654c9732dc realtek: merge Zyxel GS1900 firmware partitions
The dual-boot partition layout for the Zyxel GS1900 switches results in
6.9MB for both kernel and rootfs. Depending on the package selection,
this may already leave no space for the user overlay.

Merge the two firmware partitions, effectively dropping dual boot
support with OpenWrt. This results in a firmware partition of 13.9MB,
which should leave some room for the future.

To maintain install capabilites on new devices, an image is required
that still fits inside the original partition. The initramfs is used as
factory install image, so ensure this meets the old size constraints.
The factory image can be flashed via the same procedure as vendor images
when reverting to stock, can be installed from stock, or can be launched
via tftpboot.

Link: https://github.com/openwrt/openwrt/issues/16439
Link: https://github.com/openwrt/openwrt/pull/16442
Tested-by: Stijn Segers <foss@volatilesystems.org>
Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit 35acdbe909)
2024-12-22 19:22:58 +01:00
Sander Vanheule
feb7a2a232 realtek: ZyXEL GS1900-48: drop gpio-restart
GPIO 5 on the RTL8231 is defined reset the system, but fails to actually
do so. This triggers a kernel a number of warnings and backtrace for
GPIO pins that can sleep, such as the RTL8231's. Two warnings are
emitted by libgpiod, and a third warning by gpio-restart itself after it
fails to restart the system:

[  106.654008] ------------[ cut here ]------------
[  106.659240] WARNING: CPU: 0 PID: 4279 at drivers/gpio/gpiolib.c:3098 gpiod_set_value+0x7c/0x108
               [ Stack dump and call trace ]
[  106.826218] ---[ end trace d1de50b401f5a153 ]---
[  106.962992] ------------[ cut here ]------------
[  106.968208] WARNING: CPU: 0 PID: 4279 at drivers/gpio/gpiolib.c:3098 gpiod_set_value+0x7c/0x108
               [ Stack dump and call trace ]
[  107.136718] ---[ end trace d1de50b401f5a154 ]---
[  111.087092] ------------[ cut here ]------------
[  111.092271] WARNING: CPU: 0 PID: 4279 at drivers/power/reset/gpio-restart.c:46 gpio_restart_notify+0xc0/0xdc
               [ Stack dump and call trace ]
[  111.256629] ---[ end trace d1de50b401f5a155 ]---

By removing gpio-restart from this device, we skip the restart-by-GPIO
attempt and rely only on the watchdog for restarts, which is already the
de facto behaviour.

Signed-off-by: Sander Vanheule <sander@svanheule.net>
(cherry picked from commit 2ada95ccdf)
2024-12-22 19:22:58 +01:00
Hauke Mehrtens
f94c3af814 kernel: generic: netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext
Fix kernel panic on some 64 bit architectures.

This patch is pending upstream.
https://patchwork.ozlabs.org/project/netfilter-devel/patch/20241222100239.336289-1-pablo@netfilter.org/

Fixes: https://github.com/openwrt/openwrt/issues/17336
Link: https://github.com/openwrt/openwrt/pull/17340
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 4585d5abd9)
2024-12-22 18:48:34 +01:00
John Audia
4111210b27 kernel: bump 6.6 to 6.6.67
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.67

All patches automatically rebased.

Build system: x86/64
Build-tested: flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3, x86/64
Run-tested: flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3, x86/64

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17309
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit efe9fb0846)
2024-12-22 18:01:51 +01:00
Lorenz Brun
b2a172170c octeon: enable AT803x PHY driver
The AR8035 PHY is used in most Octeon boards supported by OpenWRT (all
the Ubiquiti routers at least). To be able to use its PHY-specific
functionality (cable testing, LED Control, ...) it should be built on
Octeon. It also needs the regulator framework, so enable that as well.
These boards are not space-constrained, so this really has no downsides.

Tested on an EdgeRouter Lite, cable tests now work with ethtool-full.

Signed-off-by: Lorenz Brun <lorenz@brun.one>
Link: https://github.com/openwrt/openwrt/pull/17318
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 4892ea9a74)
2024-12-22 18:01:40 +01:00
Eric Fahlgren
81c0cf031e build: d1: add SUPPORTED_DEVICES
Include specific SUPPORTED_DEVICES values derived from the .dts file.
This makes the generated profiles.json consistent with the 'board_name' from
'ubus call system board'.

Specifically, this fixes a bug in the generated profiles.json that breaks the
ASU clients when selecting the proper image from a build.

See the 'supported_devices' fields here for the incorrect (or incomplete) list:
https://downloads.openwrt.org/releases/24.10.0-rc1/targets/d1/generic/profiles.json

Links: https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035/287
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17155
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 33e23e8922)
2024-12-22 16:34:59 +01:00
Tianling Shen
0f7a2d3e21 ImmortalWrt v24.10.0-rc2: revert to branch defaults
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
2024-12-21 15:00:06 +08:00
630 changed files with 40953 additions and 6414 deletions

View File

@@ -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

View File

@@ -1257,6 +1257,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
#

View File

@@ -1,4 +1,4 @@
src-git packages https://github.com/immortalwrt/packages.git^4e64a5891e40dab3a2ec2949cc6c4eb111905d86
src-git luci https://github.com/immortalwrt/luci.git^314b140efc5d6e9eec69155330d84962887e464d
src-git routing https://github.com/openwrt/routing.git^84d97e684bcb6a63dbfdfbfd9ec7407192861239
src-git packages https://github.com/immortalwrt/packages.git^4d9500cb61a224d88c71cf795af2e367235b3ac0
src-git luci https://github.com/immortalwrt/luci.git^c60cfb5754a72d1ec93041fb8ef69c05695b51f5
src-git routing https://github.com/openwrt/routing.git^e87b55c6a642947ad7e24cd5054a637df63d5dbe
src-git telephony https://github.com/openwrt/telephony.git^fd605af7143165a2490681ec1752f259873b9147

View File

@@ -0,0 +1,5 @@
ifneq ($(CONFIG_USE_APK),)
DEFAULT_PACKAGES += apk-openssl
else
DEFAULT_PACKAGES += opkg
endif

View File

@@ -1,2 +1,2 @@
LINUX_VERSION-6.6 = .66
LINUX_KERNEL_HASH-6.6.66 = 9d757937c4661c2f512c62641b74ef74eff9bb13dc5dbcbaaa108c21152f1e52
LINUX_VERSION-6.6 = .73
LINUX_KERNEL_HASH-6.6.73 = d2028db190c201650898be8db1c705e9fe73ab44fc04290b4f7af63514122490

View File

@@ -175,7 +175,6 @@ define Kernel/PrepareConfigPerRootfs
[ ! -d "$(1)" ] || rm -rf $(1); \
mkdir $(1) && $(CP) -T $(LINUX_DIR) $(1); \
touch $(1)/.config; \
rm -rf $(1)/usr/initramfs_data.cpio*; \
}
endef
@@ -190,6 +189,7 @@ define Kernel/CompileImage/Initramfs
$(call Kernel/Configure/Initramfs,$(if $(1),$(1),$(TARGET_DIR)),$(LINUX_DIR)$(2)); \
$(CP) $(GENERIC_PLATFORM_DIR)/other-files/init $(if $(1),$(1),$(TARGET_DIR))/init; \
$(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $(if $(1),$(1),$(TARGET_DIR)) $(if $(1),$(1),$(TARGET_DIR))/init;) \
rm -rf $(LINUX_DIR)$(2)/usr/initramfs_data.cpio*; \
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \
$(call locked,{ \
$(if $(call qstrip,$(CONFIG_EXTERNAL_CPIO)), \

View File

@@ -103,45 +103,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-openssl
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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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-rc2)
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),24.10.0)
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r32566-56e91d0bbea5)
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r32824-6a73dae98c9c)
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.immortalwrt.org/releases/24.10.0-rc2)
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.immortalwrt.org/releases/24.10.0)
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),ImmortalWrt)

View File

@@ -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)))

View File

@@ -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"

View File

@@ -190,7 +190,7 @@ if VERSIONOPT
config VERSION_REPO
string
prompt "Release repository"
default "https://downloads.immortalwrt.org/releases/24.10.0-rc2"
default "https://downloads.immortalwrt.org/releases/24.10.0"
help
This is the repository address embedded in the image, it defaults
to the trunk snapshot repo; the url may contain the following placeholders:

View File

@@ -35,6 +35,8 @@ define Trusted-Firmware-A/Default
DRAM_USE_COMB:=
RAM_BOOT_UART_DL:=
USE_UBI:=
FIP_OFFSET:=
FIP_SIZE:=
endef
define Trusted-Firmware-A/mt7622-nor-1ddr
@@ -221,6 +223,16 @@ define Trusted-Firmware-A/mt7981-spim-nand-ddr3
DDR_TYPE:=ddr3
endef
define Trusted-Firmware-A/mt7981-cudy-tr3000-v1
NAME:=Cudy TR3000 v1 (SPI-NAND via SPIM, DDR3)
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
DDR_TYPE:=ddr3
FIP_OFFSET:=0x3c0000
FIP_SIZE:=0x200000
endef
define Trusted-Firmware-A/mt7986-ram-ddr4
NAME:=MediaTek MT7986 (RAM, DDR4)
BOOT_DEVICE:=ram
@@ -534,6 +546,7 @@ TFA_TARGETS:= \
mt7981-ram-ddr4 \
mt7981-emmc-ddr4 \
mt7981-spim-nand-ddr4 \
mt7981-cudy-tr3000-v1 \
mt7986-ram-ddr3 \
mt7986-emmc-ddr3 \
mt7986-nor-ddr3 \
@@ -581,6 +594,8 @@ TFA_MAKE_FLAGS += \
$(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 $(FIP_OFFSET),OVERRIDE_FIP_BASE=$(FIP_OFFSET)) \
$(if $(FIP_SIZE),OVERRIDE_FIP_SIZE=$(FIP_SIZE)) \
$(if $(RAM_BOOT_UART_DL),bl2,all)
define Package/trusted-firmware-a-ram/install

View File

@@ -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

View File

@@ -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|\

View File

@@ -36,6 +36,7 @@ case "$board" in
abt,asr3000|\
cetron,ct3003-ubootmod|\
cmcc,a10|\
cudy,tr3000-v1-ubootmod|\
h3c,magic-nx30-pro|\
imou,lc-hx3001|\
jcg,q30-pro|\
@@ -61,7 +62,8 @@ acer,vero-w6m|\
glinet,gl-mt2500|\
glinet,gl-mt6000|\
glinet,gl-x3000|\
glinet,gl-xe3000)
glinet,gl-xe3000|\
huasifei,wh3000-emmc)
local envdev=$(find_mmc_part "u-boot-env")
ubootenv_add_uci_config "$envdev" "0x0" "0x80000"
;;
@@ -93,6 +95,7 @@ konka,komi-a31)
cetron,ct3003|\
edgecore,eap111|\
h3c,magic-nx30-pro-nmbm|\
livinet,zr-3020|\
netgear,wax220|\
zbtlink,zbt-z8102ax|\
zbtlink,zbt-z8103ax)
@@ -101,7 +104,8 @@ zbtlink,zbt-z8103ax)
comfast,cf-e393ax)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x80000"
;;
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)
@@ -110,9 +114,6 @@ gatonetworks,gdsp)
glinet,gl-mt3000)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x80000" "0x20000"
;;
livinet,zr-3020)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000" "1"
;;
mercusys,mr90x-v1|\
routerich,ax3000|\
tplink,re6000xd)

View File

@@ -279,6 +279,17 @@ define U-Boot/mt7981_cmcc_rax3000m-nand
DEPENDS:=+trusted-firmware-a-mt7981-spim-nand-ddr4
endef
define U-Boot/mt7981_cudy_tr3000-v1
NAME:=Cudy TR3000 v1
BUILD_SUBTARGET:=filogic
BUILD_DEVICES:=cudy_tr3000-v1-ubootmod
UBOOT_CONFIG:=mt7981_cudy_tr3000-v1
UBOOT_IMAGE:=u-boot.fip
BL2_BOOTDEV:=cudy-tr3000-v1
BL2_SOC:=mt7981
DEPENDS:=+trusted-firmware-a-mt7981-cudy-tr3000-v1
endef
define U-Boot/mt7981_glinet_gl-x3000
NAME:=GL.iNet GL-X3000
BUILD_SUBTARGET:=filogic
@@ -921,6 +932,7 @@ UBOOT_TARGETS := \
mt7981_cmcc_a10 \
mt7981_cmcc_rax3000m-emmc \
mt7981_cmcc_rax3000m-nand \
mt7981_cudy_tr3000-v1 \
mt7981_gatonetworks_gdsp \
mt7981_glinet_gl-x3000 \
mt7981_glinet_gl-xe3000 \

View File

@@ -0,0 +1,330 @@
--- /dev/null
+++ b/configs/mt7981_cudy_tr3000-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="mt7981-cudy-tr3000-v1"
+CONFIG_OF_LIBFDT_OVERLAY=y
+CONFIG_TARGET_MT7981=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/mt7981-cudy-tr3000-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="MT7981> "
+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_GPT=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_PART=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="cudy_tr3000-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_LED=y
+CONFIG_LED_BLINK=y
+CONFIG_LED_GPIO=y
+# CONFIG_MMC is not set
+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_MT7981=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_ZSTD=y
+CONFIG_HEXDUMP=y
+CONFIG_LMB_MAX_REGIONS=64
--- /dev/null
+++ b/arch/arm/dts/mt7981-cudy-tr3000-v1.dts
@@ -0,0 +1,160 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/dts-v1/;
+#include "mt7981.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ model = "Cudy TR3000 v1";
+ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb";
+
+ chosen {
+ stdout-path = &uart0;
+ tick-timer = &timer0;
+ };
+
+ memory@40000000 {
+ device_type = "memory";
+ reg = <0x40000000 0x20000000>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+
+ button-reset {
+ label = "reset";
+ linux,code = <KEY_RESTART>;
+ gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+ };
+
+ button-mode {
+ label = "mode";
+ linux,code = <EV_SW>;
+ linux,input-type = <BTN_0>;
+ gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
+ debounce-interval = <60>;
+ };
+ };
+
+ gpio-leds {
+ compatible = "gpio-leds";
+
+ led_status: led-0 {
+ label = "red:power";
+ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+ default-state = "on";
+ };
+
+ led-1 {
+ label = "white:status";
+ gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ };
+ };
+};
+
+&eth {
+ status = "okay";
+ mediatek,gmac-id = <1>;
+ phy-mode = "gmii";
+ phy-handle = <&phy0>;
+
+ mdio {
+ phy0: ethernet-phy@0 {
+ compatible = "ethernet-phy-id03a2.9461";
+ reg = <0x0>;
+ phy-mode = "gmii";
+ };
+ };
+};
+
+&pinctrl {
+ spi_flash_pins: spi0-pins-func-1 {
+ mux {
+ function = "flash";
+ groups = "spi0", "spi0_wp_hold";
+ };
+
+ conf-pu {
+ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
+ drive-strength = <MTK_DRIVE_8mA>;
+ bias-pull-up = <MTK_PUPD_SET_R1R0_00>;
+ };
+
+ conf-pd {
+ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
+ drive-strength = <MTK_DRIVE_8mA>;
+ bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
+ };
+ };
+};
+
+&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;
+ support_quad;
+ tick_dly = <2>;
+ sample_sel = <0>;
+
+ spi_nand@0 {
+ compatible = "spi-nand";
+ reg = <0>;
+ spi-max-frequency = <52000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "bl2";
+ reg = <0x0 0x100000>;
+ };
+
+ partition@100000 {
+ label = "u-boot-env";
+ reg = <0x100000 0x80000>;
+ };
+
+ partition@180000 {
+ label = "factory";
+ reg = <0x180000 0x200000>;
+ };
+
+ partition@380000 {
+ label = "bdinfo";
+ reg = <0x380000 0x40000>;
+ };
+
+ partition@3c0000 {
+ label = "fip";
+ reg = <0x3c0000 0x200000>;
+ };
+
+ partition@5c0000 {
+ label = "ubi";
+ reg = <0x5c0000 0x7a40000>;
+ compatible = "linux,ubi";
+ };
+ };
+ };
+};
+
+&uart0 {
+ mediatek,force-highspeed;
+ status = "okay";
+};
+
+&watchdog {
+ status = "disabled";
+};
--- /dev/null
+++ b/cudy_tr3000-v1_env
@@ -0,0 +1,54 @@
+ipaddr=192.168.1.1
+serverip=192.168.1.254
+loadaddr=0x46000000
+console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0
+bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi
+bootconf=config-1
+bootdelay=0
+bootfile=immortalwrt-mediatek-filogic-cudy_tr3000-v1-ubootmod-initramfs-recovery.itb
+bootfile_bl2=immortalwrt-mediatek-filogic-cudy_tr3000-v1-ubootmod-preloader.bin
+bootfile_fip=immortalwrt-mediatek-filogic-cudy_tr3000-v1-ubootmod-bl31-uboot.fip
+bootfile_upg=immortalwrt-mediatek-filogic-cudy_tr3000-v1-ubootmod-squashfs-sysupgrade.itb
+bootled_pwr=red:power
+bootled_rec=white:status
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
+bootmenu_default=0
+bootmenu_delay=0
+bootmenu_title= ( ( ( OpenWrt ) ) )
+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.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return
+bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=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_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu
+boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever
+boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off
+boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off
+boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever
+boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done
+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
+boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf
+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory
+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2
+reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800
+mtd_write_fip=mtd erase fip && mtd write fip $loadaddr
+mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr
+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic || run ubi_format
+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset
+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_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 _switch_to_menu ; run _init_env ; run boot_first
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"

View File

@@ -519,7 +519,7 @@
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"
--- /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

View File

@@ -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

View File

@@ -236,6 +236,13 @@ define U-Boot/lyt-t68m-rk3568
lyt_t68m
endef
define U-Boot/mmbox-anas3035-rk3568
$(U-Boot/rk3568/Default)
NAME:=MMBOX ANAS3035
BUILD_DEVICES:= \
mmbox_anas3035
endef
define U-Boot/mrkaio-m68s-rk3568
$(U-Boot/rk3568/Default)
NAME:=Mrkaio M68S
@@ -401,6 +408,7 @@ UBOOT_TARGETS := \
fastrhino-r66s-rk3568 \
fastrhino-r68s-rk3568 \
lyt-t68m-rk3568 \
mmbox-anas3035-rk3568 \
mrkaio-m68s-rk3568 \
nanopi-r5c-rk3568 \
nanopi-r5s-rk3568 \

View File

@@ -1,29 +1,8 @@
From ed4ae7386257aa66455e330234e513d098a36f84 Mon Sep 17 00:00:00 2001
From: Alex Shumsky <alexthreed@gmail.com>
To: u-boot@lists.denx.de
Cc: Alex Shumsky <alexthreed@gmail.com>,
Dragan Simic <dsimic@manjaro.org>, Marek Vasut <marex@denx.de>,
Ben Wolsieffer <benwolsieffer@gmail.com>,
Caleb Connolly <caleb.connolly@linaro.org>,
Chris Morgan <macromorgan@hotmail.com>,
Devarsh Thakkar <devarsht@ti.com>,
Jagan Teki <jagan@amarulasolutions.com>,
Janne Grunau <j@jannau.net>,
Jerome Forissier <jerome.forissier@linaro.org>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
Jonas Karlman <jonas@kwiboo.se>,
Joshua Watt <jpewhacker@gmail.com>,
Kever Yang <kever.yang@rock-chips.com>,
Mattijs Korpershoek <mkorpershoek@baylibre.com>,
Neal Gompa <neal@gompa.dev>,
Philipp Tomsich <philipp.tomsich@theobroma-systems.com>,
Philipp Tomsich <philipp.tomsich@vrull.eu>,
Quentin Schulz <quentin.schulz@cherry.de>,
Rasmus Villemoes <rasmus.villemoes@prevas.dk>,
Simon Glass <sjg@chromium.org>, Stefan Roese <sr@denx.de>,
Tim Harvey <tharvey@gateworks.com>, Tom Rini <trini@konsulko.com>
Subject: [PATCH v6] rockchip: board: Increase rng-seed size to make it sufficient for modern Linux
Date: Wed, 16 Oct 2024 13:02:03 +0300 [thread overview]
Message-ID: <20241016100203.629713-1-alexthreed@gmail.com> (raw)
Date: Wed, 16 Oct 2024 13:02:03 +0300
Subject: [PATCH] rockchip: board: Increase rng-seed size to make it sufficient
for modern Linux
Increase rng-seed size to make Linux happy and initialize rng pool instantly.
Linux 5.19+ requires 32 bytes of entropy to initialize random pool, but u-boot
@@ -46,27 +25,9 @@ Signed-off-by: Alex Shumsky <alexthreed@gmail.com>
Fixes: d2048bafae40 ("rockchip: board: Add board_rng_seed() for all Rockchip devices")
Reviewed-by: Dragan Simic <dsimic@manjaro.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
---
Changes in v6:
- fix wording in docs and debug message
Changes in v5:
- add docs
Changes in v4:
- fix typos and code style
Changes in v3:
- reword warning
- increase default rng_seed_size to support older linux as well
- reword commit message
Changes in v2:
- add env config knob rng_seed_size
- add warning for small rng_seed_size
- 12-character commit SHA in Fixes
arch/arm/mach-rockchip/board.c | 11 ++++++++++-
common/Kconfig | 3 +++
doc/usage/environment.rst | 5 +++++

View File

@@ -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);
}
}

View File

@@ -1,6 +1,6 @@
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -87,6 +87,22 @@ dtb-$(CONFIG_ROCKCHIP_RK3368) += \
@@ -87,6 +87,23 @@ dtb-$(CONFIG_ROCKCHIP_RK3368) += \
rk3368-geekbox.dtb \
rk3368-px5-evb.dtb \
@@ -13,6 +13,7 @@
+
+dtb-$(CONFIG_ROCKCHIP_RK3568) += \
+ rk3568-armsom-sige3.dtb \
+ rk3568-mmbox-anas3035.dtb \
+ rk3568-lyt-t68m.dtb \
+ rk3568-mrkaio-m68s.dtb \
+ rk3568-photonicat.dtb

View File

@@ -0,0 +1,12 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "rk356x-u-boot.dtsi"
&sdhci {
mmc-ddr-1_8v;
};
&vcc5v0_usb_host {
/delete-property/ regulator-always-on;
/delete-property/ regulator-boot-on;
};

View File

@@ -0,0 +1,769 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/soc/rockchip,vop2.h>
#include "rk3568.dtsi"
/ {
model = "MMBOX ANAS3035";
compatible = "mmbox,anas3035", "rockchip,rk3568";
aliases {
mmc0 = &sdhci;
mmc1 = &sdmmc0;
};
chosen: chosen {
stdout-path = "serial2:1500000n8";
};
gpio-leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&power_led_pin>, <&sata0_pins>, <&sata1_pins>, <&sata2_pins>;
power_led: led-0 {
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_POWER;
gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_HIGH>;
};
sata0_led: led-1 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_DISK;
/* for to sata2 slot */
function-enumerator = <3>;
gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_LOW>;
linux,default-trigger = "disk-activity";
};
sata1_led: led-2 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_DISK;
/* for to sata0 slot */
function-enumerator = <1>;
gpios = <&gpio4 RK_PC5 GPIO_ACTIVE_LOW>;
linux,default-trigger = "disk-activity";
};
sata2_led: led-3 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_DISK;
/* for to sata1 slot */
function-enumerator = <2>;
gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
linux,default-trigger = "disk-activity";
};
};
hdmi-con {
compatible = "hdmi-connector";
type = "a";
port {
hdmi_con_in: endpoint {
remote-endpoint = <&hdmi_out_con>;
};
};
};
fan: pwm-fan {
compatible = "pwm-fan";
#cooling-cells = <2>;
cooling-levels = <0 80 128 175 230 255>;
fan-supply = <&vcc5v0_fan>;
pwms = <&pwm5 0 50000 0>;
};
vcc12v_dcin: regulator-vcc12v-dcin {
compatible = "regulator-fixed";
regulator-name = "vcc12v_dcin";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
};
vcc3v3_pcie: regulator-vcc3v3-pcie {
compatible = "regulator-fixed";
enable-active-high;
gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&pcie_pwr_en>;
regulator-name = "vcc3v3_pcie";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&vcc5v0_sys>;
};
vcc3v3_sys: regulator-vcc3v3-sys {
compatible = "regulator-fixed";
regulator-name = "vcc3v3_sys";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&vcc12v_dcin>;
};
vcc5v0_fan: regulator-vcc5v0-fan {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&fan_pwr_en>;
regulator-name = "vcc5v0_fan";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc5v0_sys>;
};
vcc5v0_sata: regulator-vcc5v0-sata {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&sata_pwr_en>;
regulator-name = "vcc5v0_sata";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc12v_dcin>;
};
vcc5v0_sys: regulator-vcc5v0-sys {
compatible = "regulator-fixed";
regulator-name = "vcc5v0_sys";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc12v_dcin>;
};
vcc5v0_usb: regulator-vcc5v0-usb {
compatible = "regulator-fixed";
regulator-name = "vcc5v0_usb";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc12v_dcin>;
};
vcc5v0_usb_host: regulator-vcc5v0-usb-host {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vcc5v0_usb_host_en>;
regulator-name = "vcc5v0_usb_host";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc5v0_usb>;
};
vcc5v0_usb_otg: regulator-vcc5v0-usb-otg {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vcc5v0_usb_otg_en>;
regulator-name = "vcc5v0_usb_otg";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc5v0_usb>;
};
};
&combphy0 {
status = "okay";
};
&combphy1 {
status = "okay";
};
&combphy2 {
status = "okay";
};
&cpu0 {
cpu-supply = <&vdd_cpu>;
};
&cpu1 {
cpu-supply = <&vdd_cpu>;
};
&cpu2 {
cpu-supply = <&vdd_cpu>;
};
&cpu3 {
cpu-supply = <&vdd_cpu>;
};
&cpu_thermal {
trips {
cpu_trip_active_cool: cpu-trip-active-cool {
temperature = <20000>;
hysteresis = <2000>;
type = "active";
};
cpu_trip_active_low: cpu-trip-active-low {
temperature = <30000>;
hysteresis = <2000>;
type = "active";
};
cpu_trip_active_med: cpu-trip-active-med {
temperature = <40000>;
hysteresis = <2000>;
type = "active";
};
cpu_trip_active_high: cpu-trip-active-high {
temperature = <50000>;
hysteresis = <2000>;
type = "active";
};
cpu_trip_active_hot: cpu-trip-active-hot {
temperature = <60000>;
hysteresis = <2000>;
type = "hot";
};
};
cooling-maps {
cpu-active-cool {
trip = <&cpu_trip_active_cool>;
cooling-device = <&fan THERMAL_NO_LIMIT 1>;
};
cpu-active-low {
trip = <&cpu_trip_active_low>;
cooling-device = <&fan 1 2>;
};
cpu-active-med {
trip = <&cpu_trip_active_med>;
cooling-device = <&fan 2 3>;
};
cpu-active-high {
trip = <&cpu_trip_active_high>;
cooling-device = <&fan 3 4>;
};
cpu-active-hot {
trip = <&cpu_trip_active_hot>;
cooling-device = <&fan 4 THERMAL_NO_LIMIT>;
};
};
};
&gpu {
mali-supply = <&vdd_gpu>;
status = "okay";
};
&hdmi {
avdd-0v9-supply = <&vdda0v9_image>;
avdd-1v8-supply = <&vcca1v8_image>;
status = "okay";
};
&hdmi_in {
hdmi_in_vp0: endpoint {
remote-endpoint = <&vp0_out_hdmi>;
};
};
&hdmi_out {
hdmi_out_con: endpoint {
remote-endpoint = <&hdmi_con_in>;
};
};
&hdmi_sound {
status = "okay";
};
&i2c0 {
status = "okay";
vdd_cpu: regulator@1c {
compatible = "tcs,tcs4525";
reg = <0x1c>;
fcs,suspend-voltage-selector = <1>;
regulator-name = "vdd_cpu";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1150000>;
regulator-ramp-delay = <2300>;
vin-supply = <&vcc5v0_sys>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
rk809: pmic@20 {
compatible = "rockchip,rk809";
reg = <0x20>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
#clock-cells = <1>;
pinctrl-names = "default";
pinctrl-0 = <&pmic_int>;
system-power-controller;
vcc1-supply = <&vcc3v3_sys>;
vcc2-supply = <&vcc3v3_sys>;
vcc3-supply = <&vcc3v3_sys>;
vcc4-supply = <&vcc3v3_sys>;
vcc5-supply = <&vcc3v3_sys>;
vcc6-supply = <&vcc3v3_sys>;
vcc7-supply = <&vcc3v3_sys>;
vcc8-supply = <&vcc3v3_sys>;
vcc9-supply = <&vcc3v3_sys>;
wakeup-source;
regulators {
vdd_logic: DCDC_REG1 {
regulator-name = "vdd_logic";
regulator-always-on;
regulator-boot-on;
regulator-initial-mode = <0x2>;
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <6001>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdd_gpu: DCDC_REG2 {
regulator-name = "vdd_gpu";
regulator-always-on;
regulator-initial-mode = <0x2>;
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <6001>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_ddr: DCDC_REG3 {
regulator-name = "vcc_ddr";
regulator-always-on;
regulator-boot-on;
regulator-initial-mode = <0x2>;
regulator-state-mem {
regulator-on-in-suspend;
};
};
vdd_npu: DCDC_REG4 {
regulator-name = "vdd_npu";
regulator-initial-mode = <0x2>;
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <6001>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_1v8: DCDC_REG5 {
regulator-name = "vcc_1v8";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdda0v9_image: LDO_REG1 {
regulator-name = "vdda0v9_image";
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <950000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdda_0v9: LDO_REG2 {
regulator-name = "vdda_0v9";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdda0v9_pmu: LDO_REG3 {
regulator-name = "vdda0v9_pmu";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <900000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <900000>;
};
};
vccio_acodec: LDO_REG4 {
regulator-name = "vccio_acodec";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vccio_sd: LDO_REG5 {
regulator-name = "vccio_sd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc3v3_pmu: LDO_REG6 {
regulator-name = "vcc3v3_pmu";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vcca_1v8: LDO_REG7 {
regulator-name = "vcca_1v8";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcca1v8_pmu: LDO_REG8 {
regulator-name = "vcca1v8_pmu";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
vcca1v8_image: LDO_REG9 {
regulator-name = "vcca1v8_image";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_3v3: SWITCH_REG1 {
regulator-name = "vcc_3v3";
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc3v3_sd: SWITCH_REG2 {
regulator-name = "vcc3v3_sd";
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
};
};
};
&i2c5 {
status = "okay";
hym8563: rtc@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
#clock-cells = <0>;
clock-output-names = "rtcic_32kout";
interrupt-parent = <&gpio0>;
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&hym8563_int>;
wakeup-source;
};
};
&i2s0_8ch {
status = "okay";
};
&pcie30phy {
data-lanes = <1 2>;
status = "okay";
};
&pcie3x1 {
num-lanes = <1>;
reset-gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
vpcie3v3-supply = <&vcc3v3_pcie>;
status = "okay";
};
&pcie3x2 {
num-lanes = <1>;
reset-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
vpcie3v3-supply = <&vcc3v3_pcie>;
status = "okay";
};
&pinctrl {
fan {
fan_pwr_en: fan-pwr-en {
rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
gpio-leds {
power_led_pin: power-led-pin {
rockchip,pins = <3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
hym8563 {
hym8563_int: hym8563-int {
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
pcie {
pcie_pwr_en: pcie-pwr-en {
rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
pmic {
pmic_int: pmic-int {
rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
rockchip-key {
reset_button_pin: reset-button-pin {
rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
sata {
sata_pwr_en: sata-pwr-en {
rockchip,pins = <0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
usb {
vcc5v0_usb_host_en: vcc5v0-usb-host-en {
rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
};
vcc5v0_usb_otg_en: vcc5v0-usb-otg-en {
rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
&pmu_io_domains {
pmuio1-supply = <&vcc3v3_pmu>;
pmuio2-supply = <&vcc3v3_pmu>;
vccio1-supply = <&vccio_acodec>;
vccio3-supply = <&vccio_sd>;
vccio4-supply = <&vcc_1v8>;
vccio5-supply = <&vcc_3v3>;
vccio6-supply = <&vcc_1v8>;
vccio7-supply = <&vcc_3v3>;
status = "okay";
};
&pwm5 {
status = "okay";
};
&sata0 {
phy-supply = <&vcc5v0_sata>;
status = "okay";
};
&sata1 {
phy-supply = <&vcc5v0_sata>;
status = "okay";
};
&sata2 {
phy-supply = <&vcc5v0_sata>;
status = "okay";
};
&saradc {
vref-supply = <&vcca_1v8>;
status = "okay";
};
&sdhci {
bus-width = <8>;
max-frequency = <200000000>;
mmc-hs200_1_8v;
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd &emmc_datastrobe>;
status = "okay";
};
&sdmmc0 {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
no-sdio;
no-mmc;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
sd-uhs-sdr50;
vmmc-supply = <&vcc3v3_sd>;
vqmmc-supply = <&vccio_sd>;
status = "okay";
};
&tsadc {
rockchip,hw-tshut-mode = <1>;
rockchip,hw-tshut-polarity = <0>;
status = "okay";
};
&uart2 {
status = "okay";
};
&usb_host0_ehci {
status = "okay";
};
&usb_host0_ohci {
status = "okay";
};
&usb_host0_xhci {
dr_mode = "host";
extcon = <&usb2phy0>;
maximum-speed = "high-speed";
phys = <&usb2phy0_otg>;
phy-names = "usb2-phy";
status = "okay";
};
&usb_host1_ehci {
status = "okay";
};
&usb_host1_ohci {
status = "okay";
};
&usb_host1_xhci {
maximum-speed = "high-speed";
phys = <&usb2phy0_host>;
phy-names = "usb2-phy";
status = "okay";
};
&usb2phy0 {
status = "okay";
};
&usb2phy0_host {
phy-supply = <&vcc5v0_usb_host>;
status = "okay";
};
&usb2phy0_otg {
phy-supply = <&vcc5v0_usb_otg>;
status = "okay";
};
&usb2phy1 {
status = "okay";
};
&usb2phy1_host {
status = "okay";
};
&usb2phy1_otg {
status = "okay";
};
&vop {
assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>;
assigned-clock-parents = <&pmucru PLL_HPLL>, <&cru PLL_VPLL>;
status = "okay";
};
&vop_mmu {
status = "okay";
};
&vp0 {
vp0_out_hdmi: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
reg = <ROCKCHIP_VOP2_EP_HDMI0>;
remote-endpoint = <&hdmi_in_vp0>;
};
};

View File

@@ -0,0 +1,77 @@
CONFIG_ARM=y
CONFIG_SKIP_LOWLEVEL_INIT=y
CONFIG_SYS_HAS_NONCACHED_MEMORY=y
CONFIG_COUNTER_FREQUENCY=24000000
CONFIG_ARCH_ROCKCHIP=y
CONFIG_DEFAULT_DEVICE_TREE="rk3568-mmbox-anas3035"
CONFIG_ROCKCHIP_RK3568=y
CONFIG_SPL_SERIAL=y
CONFIG_DEBUG_UART_BASE=0xFE660000
CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_SYS_LOAD_ADDR=0xc00800
CONFIG_PCI=y
CONFIG_DEBUG_UART=y
CONFIG_AHCI=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_SPL_FIT_SIGNATURE=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_LEGACY_IMAGE_FORMAT=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3568-mmbox-anas3035.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_MAX_SIZE=0x40000
CONFIG_SPL_PAD_TO=0x7f8000
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
CONFIG_SPL_ATF=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_PCI=y
CONFIG_CMD_USB=y
CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_DOS_PARTITION is not set
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_LIVE=y
# CONFIG_OF_UPSTREAM is not set
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_SPL_DM_SEQ_ALIAS=y
CONFIG_SPL_REGMAP=y
CONFIG_SPL_SYSCON=y
CONFIG_DWC_AHCI=y
CONFIG_SPL_CLK=y
CONFIG_ROCKCHIP_GPIO=y
CONFIG_SYS_I2C_ROCKCHIP=y
CONFIG_MISC=y
CONFIG_SUPPORT_EMMC_RPMB=y
CONFIG_MMC_DW=y
CONFIG_MMC_DW_ROCKCHIP=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_SDMA=y
CONFIG_MMC_SDHCI_ROCKCHIP=y
CONFIG_RTL8169=y
CONFIG_PCIE_DW_ROCKCHIP=y
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
CONFIG_SPL_PINCTRL=y
CONFIG_DM_PMIC=y
CONFIG_PMIC_RK8XX=y
CONFIG_REGULATOR_RK8XX=y
CONFIG_PWM_ROCKCHIP=y
CONFIG_SPL_RAM=y
CONFIG_SCSI=y
CONFIG_BAUDRATE=1500000
CONFIG_DEBUG_UART_SHIFT=2
CONFIG_SYS_NS16550_MEM32=y
CONFIG_SYSRESET=y
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_GENERIC=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_GENERIC=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_GENERIC=y
CONFIG_ERRNO_STR=y

View File

@@ -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

View File

@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=vrx518_tc
PKG_VERSION:=1.5.12.4
PKG_RELEASE:=3
PKG_RELEASE:=4
PKG_BASE_NAME:=vrx518_tc_drv
UGW_VERSION=8.5.2.10

View File

@@ -166,7 +166,7 @@
- return (skb->DW0 >> 3) & 0xF;
+// return (skb->DW0 >> 3) & 0xF;
+ return 1;
+ return 0; /* We use only one connection for now, so return the first connection id */
}
static int atm_get_qid_by_vcc(struct net_device *dev, struct sk_buff *skb,

View File

@@ -0,0 +1,144 @@
Extra ATM traffic classes requires atm_qos struct extension and a set of
new defines. What itself requires atm.h updates both in the kernel and
in the toolchain. On another hand we do not have any real users of these
traffic classes.
In absence of real user there are no benefits to support this
functionality. There is only the burden of maintenance of extra patches
all around the building framework. So just drop these extra QoS traffic
classes in order to facilitate maintenance and avoid side effects like
breaking compatibility with existing userspace tools like linux-atm.
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
--
--- a/dcdp/atm_tc.c
+++ b/dcdp/atm_tc.c
@@ -463,34 +463,9 @@ static void set_qsb(struct atm_priv *pri
/* Weighted Fair Queueing Factor (WFQF) */
switch (qos->txtp.traffic_class) {
case ATM_CBR:
- case ATM_VBR_RT:
/* real time queue gets weighted fair queueing bypass */
q_parm_tbl.bit.wfqf = 0;
break;
- case ATM_VBR_NRT:
- case ATM_UBR_PLUS:
- /* WFQF calculation here is based on virtual cell rates,
- to reduce granularity for high rates
- */
- /* WFQF is maximum cell rate / garenteed cell rate */
- /* wfqf = qsb_minimum_cell_rate * QSB_WFQ_NONUBR_MAX /
- requested_minimum_peak_cell_rate
- */
- if (qos->txtp.min_pcr == 0)
- q_parm_tbl.bit.wfqf = QSB_WFQ_NONUBR_MAX;
- else {
- tmp = QSB_GCR_MIN * QSB_WFQ_NONUBR_MAX /
- qos->txtp.min_pcr;
- if (tmp == 0)
- q_parm_tbl.bit.wfqf = 1;
- else if (tmp > QSB_WFQ_NONUBR_MAX)
- q_parm_tbl.bit.wfqf
- = QSB_WFQ_NONUBR_MAX;
- else
- q_parm_tbl.bit.wfqf = tmp;
- }
- break;
-
case ATM_UBR:
default:
q_parm_tbl.bit.wfqf = QSB_WFQ_UBR_BYPASS;
@@ -498,42 +473,9 @@ static void set_qsb(struct atm_priv *pri
}
/* Sustained Cell Rate (SCR) Leaky Bucket Shaper VBR.0/VBR.1 */
- if (qos->txtp.traffic_class == ATM_VBR_RT ||
- qos->txtp.traffic_class == ATM_VBR_NRT) {
- if (qos->txtp.scr == 0) {
- /* disable shaper */
- q_vbr_parm_tbl.bit.taus = 0;
- q_vbr_parm_tbl.bit.ts = 0;
- } else {
- /* Cell Loss Priority (CLP) */
- if ((vcc->atm_options & ATM_ATMOPT_CLP))
- /* CLP1 */
- q_parm_tbl.bit.vbr = 1;
- else
- /* CLP0 */
- q_parm_tbl.bit.vbr = 0;
- /* Rate Shaper Parameter (TS) and
- Burst Tolerance Parameter for SCR (tauS)
- */
- tmp = ((qsb_clk * param->qsb_tstep) >> 5) /
- qos->txtp.scr + 1;
- q_vbr_parm_tbl.bit.ts
- = tmp > QSB_TP_TS_MAX ? QSB_TP_TS_MAX : tmp;
- tmp = (qos->txtp.mbs - 1) *
- (q_vbr_parm_tbl.bit.ts -
- q_parm_tbl.bit.tp) / 64;
- if (tmp == 0)
- q_vbr_parm_tbl.bit.taus = 1;
- else if (tmp > QSB_TAUS_MAX)
- q_vbr_parm_tbl.bit.taus
- = QSB_TAUS_MAX;
- else
- q_vbr_parm_tbl.bit.taus = tmp;
- }
- } else {
- q_vbr_parm_tbl.bit.taus = 0;
- q_vbr_parm_tbl.bit.ts = 0;
- }
+ /* NB: shaper disabled since there no user interface to activate it */
+ q_vbr_parm_tbl.bit.taus = 0;
+ q_vbr_parm_tbl.bit.ts = 0;
/* Queue Parameter Table (QPT) */
tc_w32(QSB_QPT_SET_MASK, QSB_RTM);
@@ -1064,15 +1006,6 @@ static int ppe_open(struct atm_vcc *vcc)
/* check bandwidth */
if ((vcc->qos.txtp.traffic_class == ATM_CBR &&
vcc->qos.txtp.max_pcr >
- (port->tx_max_cell_rate - port->tx_used_cell_rate))
- || (vcc->qos.txtp.traffic_class == ATM_VBR_RT &&
- vcc->qos.txtp.max_pcr >
- (port->tx_max_cell_rate - port->tx_used_cell_rate))
- || (vcc->qos.txtp.traffic_class == ATM_VBR_NRT &&
- vcc->qos.txtp.scr >
- (port->tx_max_cell_rate - port->tx_used_cell_rate))
- || (vcc->qos.txtp.traffic_class == ATM_UBR_PLUS &&
- vcc->qos.txtp.min_pcr >
(port->tx_max_cell_rate - port->tx_used_cell_rate))) {
tc_dbg(priv->tc_priv, MSG_INIT, "exceed TX line rate\n");
return -EINVAL;
@@ -1128,15 +1061,8 @@ static int ppe_open(struct atm_vcc *vcc)
/* reserve bandwidth */
switch (vcc->qos.txtp.traffic_class) {
case ATM_CBR:
- case ATM_VBR_RT:
port->tx_used_cell_rate += vcc->qos.txtp.max_pcr;
break;
- case ATM_VBR_NRT:
- port->tx_used_cell_rate += vcc->qos.txtp.scr;
- break;
- case ATM_UBR_PLUS:
- port->tx_used_cell_rate += vcc->qos.txtp.min_pcr;
- break;
}
/* update atm_vcc structure */
@@ -1222,15 +1148,8 @@ static void ppe_close(struct atm_vcc *vc
/* release bandwidth */
switch (vcc->qos.txtp.traffic_class) {
case ATM_CBR:
- case ATM_VBR_RT:
port->tx_used_cell_rate -= vcc->qos.txtp.max_pcr;
break;
- case ATM_VBR_NRT:
- port->tx_used_cell_rate -= vcc->qos.txtp.scr;
- break;
- case ATM_UBR_PLUS:
- port->tx_used_cell_rate -= vcc->qos.txtp.min_pcr;
- break;
}
/* idle for a while to let parallel operation finish */

View File

@@ -3,7 +3,7 @@ This replaces it by a basic working implementation.
--- a/dcdp/atm_tc.c
+++ b/dcdp/atm_tc.c
@@ -603,7 +603,11 @@ static void atm_aca_init(struct atm_priv
@@ -545,7 +545,11 @@ static void atm_aca_init(struct atm_priv
cfg = &priv->tc_priv->cfg;
txin = &param.aca_txin;
@@ -15,7 +15,7 @@ This replaces it by a basic working implementation.
txin->hd_size_in_dw = cfg->txin.soc_desc_dwsz;
txin->pd_desc_base = SB_XBAR_ADDR(__ACA_TX_IN_PD_LIST_BASE);
txin->pd_desc_num = __ACA_TX_IN_PD_LIST_NUM;
@@ -625,7 +629,11 @@ static void atm_aca_init(struct atm_priv
@@ -567,7 +571,11 @@ static void atm_aca_init(struct atm_priv
txin->soc_cmlt_cnt_addr);
txout = &param.aca_txout;
@@ -27,7 +27,7 @@ This replaces it by a basic working implementation.
txout->hd_size_in_dw = cfg->txout.soc_desc_dwsz;
txout->pd_desc_base = SB_XBAR_ADDR(__ACA_TX_OUT_PD_LIST_BASE);
txout->pd_desc_num = __ACA_TX_OUT_PD_LIST_NUM;
@@ -647,7 +655,11 @@ static void atm_aca_init(struct atm_priv
@@ -589,7 +597,11 @@ static void atm_aca_init(struct atm_priv
txout->soc_cmlt_cnt_addr);
rxout = &param.aca_rxout;
@@ -39,7 +39,7 @@ This replaces it by a basic working implementation.
rxout->hd_size_in_dw = cfg->rxout.soc_desc_dwsz;
rxout->pd_desc_base = SB_XBAR_ADDR(__ACA_RX_OUT_PD_LIST_BASE);
rxout->pd_desc_num = __ACA_RX_OUT_PD_LIST_NUM;
@@ -669,7 +681,11 @@ static void atm_aca_init(struct atm_priv
@@ -611,7 +623,11 @@ static void atm_aca_init(struct atm_priv
rxout->soc_cmlt_cnt_addr);
rxin = &param.aca_rxin;
@@ -51,7 +51,7 @@ This replaces it by a basic working implementation.
rxin->hd_size_in_dw = cfg->rxin.soc_desc_dwsz;
rxin->pd_desc_base = SB_XBAR_ADDR(__RX_IN_PD_DES_LIST_BASE);
rxin->pd_desc_num = __ACA_RX_IN_PD_LIST_NUM;
@@ -1261,7 +1277,7 @@ static int ppe_ioctl(struct atm_dev *dev
@@ -1180,7 +1196,7 @@ static int ppe_ioctl(struct atm_dev *dev
static int ppe_send(struct atm_vcc *vcc, struct sk_buff *skb)
{
int ret, qid, mpoa_pt, mpoa_type, vid;
@@ -60,7 +60,7 @@ This replaces it by a basic working implementation.
struct atm_priv *priv;
if (!vcc) {
@@ -1327,12 +1343,14 @@ static int ppe_send(struct atm_vcc *vcc,
@@ -1246,12 +1262,14 @@ static int ppe_send(struct atm_vcc *vcc,
tc_dbg(priv->tc_priv, MSG_TX, "vid: 0x%x, qid: 0x%x\n",
vid, qid);
@@ -855,12 +855,12 @@ This replaces it by a basic working implementation.
- continue;
+
+ // this seems to be a pointer to a DS PKT buffer
+ phyaddr = desc->data_ptr + desc->byte_off;
+ phyaddr = desc->data_ptr;
+ ptr = plat_mem_virt(phyaddr);
+
+ len = desc->data_len;
+
+ dma_sync_single_range_for_cpu(pdev, phyaddr, 0, len, DMA_FROM_DEVICE);
+ dma_sync_single_for_cpu(pdev, phyaddr, desc->byte_off + len,
+ DMA_FROM_DEVICE);
+
+ skb = netdev_alloc_skb(g_plat_priv->netdev, len);
+ if (unlikely(!skb)) {
@@ -871,7 +871,7 @@ This replaces it by a basic working implementation.
- ring_idx_inc(rxout, idx);
+
+ dst = skb_put(skb, len);
+ memcpy(dst, ptr, len);
+ memcpy(dst, ptr + desc->byte_off, len);
+
+ priv->tc_ops.recv(g_plat_priv->netdev, skb);
+

View File

@@ -296,7 +296,7 @@
priv->tc_ops.umt_start = plat_umt_start;
--- a/dcdp/atm_tc.c
+++ b/dcdp/atm_tc.c
@@ -3650,7 +3650,7 @@ static void atm_aca_ring_config_init(str
@@ -3569,7 +3569,7 @@ static void atm_aca_ring_config_init(str
static int atm_ring_init(struct atm_priv *priv)
{
atm_aca_ring_config_init(priv);
@@ -305,7 +305,7 @@
}
static int atm_init(struct tc_priv *tcpriv, u32 ep_id)
@@ -4020,7 +4020,7 @@ void atm_tc_unload(void)
@@ -3939,7 +3939,7 @@ void atm_tc_unload(void)
/* unregister device */
if (priv->tc_priv->tc_ops.dev_unreg != NULL)
priv->tc_priv->tc_ops.dev_unreg(NULL,

View File

@@ -1,6 +1,6 @@
--- a/dcdp/atm_tc.c
+++ b/dcdp/atm_tc.c
@@ -746,7 +746,8 @@ static void atm_aca_init(struct atm_priv
@@ -688,7 +688,8 @@ static void atm_aca_init(struct atm_priv
ACA_TXOUT_EN | ACA_RXIN_EN | ACA_RXOUT_EN, 1);
}
@@ -10,7 +10,7 @@
{
struct tm nowtm;
char tmbuf[64];
@@ -765,7 +766,8 @@ static int print_datetime(char *buffer,
@@ -707,7 +708,8 @@ static int print_datetime(char *buffer,
nowtm.tm_hour,
nowtm.tm_min,
nowtm.tm_sec);
@@ -20,7 +20,7 @@
return 0;
}
@@ -967,7 +969,7 @@ void show_atm_pvc(struct seq_file *seq,
@@ -909,7 +911,7 @@ void show_atm_pvc(struct seq_file *seq,
char buf[64];
seq_printf(seq, "\tNet device: %s\n", pvc->dev->name);

View File

@@ -0,0 +1,75 @@
From: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Date: Fri, 10 Jan 2025 00:57:27 +0000
Subject: [PATCH] vrx518_tc: atm_tc: fix crash on subif_reg absence
VRX518 (sw_plat) platform does not provid the subif_reg/subif_unreg ops
in the same time ATM TC layer unconditionally calls them, what leads to
the kernel crash on the atm_hook_mpoa_setup hook invocation from the ATM
stack:
vrx518_tc:mpoa_setup_sync : sync: conn: 0, vpi: 0, vci: 35, mpoa_type: 0, mpoa_mode: 0
Unable to handle kernel NULL pointer dereference at virtual address 00000000
Subif registration is optional and PTM TC do this only when the
corresponding ops are defined. Do the same for ATM TC and call
subif_reg/subif_unreg only if they are not NULL.
While at it, move subif related data preparation under the 'if' block
in order to group and isolate that aux code.
Run tested with FRITZ!Box 7530.
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
---
--- a/dcdp/atm_tc.c
+++ b/dcdp/atm_tc.c
@@ -1158,8 +1158,9 @@ static void ppe_close(struct atm_vcc *vc
validate_oam_htu_entry(priv, 0);
spin_unlock_bh(&priv->atm_lock);
- priv->tc_priv->tc_ops.subif_unreg(dev, (!dev) ? dev_name : dev->name,
- priv->conn[cid].subif_id, 0);
+ if (priv->tc_priv->tc_ops.subif_unreg)
+ priv->tc_priv->tc_ops.subif_unreg(dev, (!dev) ? dev_name : dev->name,
+ priv->conn[cid].subif_id, 0);
memset(conn, 0, sizeof(*conn));
@@ -2710,24 +2711,26 @@ static void mpoa_setup_sync(struct atm_p
struct wtx_queue_config_t tx_qcfg;
struct uni_cell_header *cell_header;
struct atm_vcc *vcc;
- struct net_device *dev;
- char dev_name[32];
tc_dbg(priv->tc_priv, MSG_INIT,
"sync: conn: %d, vpi: %d, vci: %d, mpoa_type: %d, mpoa_mode: %d\n",
conn, priv->conn[conn].vcc->vpi, priv->conn[conn].vcc->vci,
priv->conn[conn].mpoa_type, priv->conn[conn].mpoa_mode);
- dev = priv->conn[conn].dev;
+ if (priv->tc_priv->tc_ops.subif_reg) {
+ struct net_device *dev;
+ char dev_name[32];
+
+ dev = priv->conn[conn].dev;
+ if (!dev)
+ sprintf(dev_name, "atm_%d%d",
+ priv->conn[conn].vcc->vpi, priv->conn[conn].vcc->vci);
- if (!dev)
- sprintf(dev_name, "atm_%d%d",
- priv->conn[conn].vcc->vpi, priv->conn[conn].vcc->vci);
-
- priv->tc_priv->tc_ops.subif_reg(dev, (!dev) ? dev_name : dev->name,
- &priv->conn[conn].subif_id, 0);
- tc_dbg(priv->tc_priv, MSG_INIT,
- "conn[%d]subif_id[%x]", conn, priv->conn[conn].subif_id);
+ priv->tc_priv->tc_ops.subif_reg(dev, !dev ? dev_name : dev->name,
+ &priv->conn[conn].subif_id, 0);
+ tc_dbg(priv->tc_priv, MSG_INIT,
+ "conn[%d]subif_id[%x]", conn, priv->conn[conn].subif_id);
+ }
vcc = priv->conn[conn].vcc;
/* set htu entry */

View File

@@ -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

View File

@@ -447,9 +447,10 @@ $(eval $(call KernelPackage,phy-micrel))
define KernelPackage/phy-realtek
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Realtek Ethernet PHY driver
KCONFIG:=CONFIG_REALTEK_PHY
DEPENDS:=+kmod-libphy
FILES:=$(LINUX_DIR)/drivers/net/phy/realtek.ko
KCONFIG:=CONFIG_REALTEK_PHY \
CONFIG_REALTEK_PHY_HWMON=y
DEPENDS:=+kmod-libphy +kmod-hwmon-core
FILES:=$(LINUX_DIR)/drivers/net/phy/realtek/realtek.ko
AUTOLOAD:=$(call AutoLoad,18,realtek,1)
endef
@@ -575,6 +576,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)

View File

@@ -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

View File

@@ -1026,7 +1026,7 @@ endef
$(eval $(call KernelPackage,bpf-test))
SCHED_MODULES_EXTRA = sch_codel sch_gred sch_multiq sch_sfq sch_teql sch_fq act_pedit act_simple act_skbmod act_csum em_cmp em_nbyte em_meta em_text
SCHED_MODULES_EXTRA = sch_codel sch_gred sch_multiq sch_sfq sch_teql sch_fq sch_ets act_pedit act_simple act_skbmod act_csum em_cmp em_nbyte em_meta em_text
SCHED_FILES_EXTRA = $(foreach mod,$(SCHED_MODULES_EXTRA),$(LINUX_DIR)/net/sched/$(mod).ko)
define KernelPackage/sched
@@ -1040,6 +1040,7 @@ define KernelPackage/sched
CONFIG_NET_SCH_SFQ \
CONFIG_NET_SCH_TEQL \
CONFIG_NET_SCH_FQ \
CONFIG_NET_SCH_ETS \
CONFIG_NET_ACT_PEDIT \
CONFIG_NET_ACT_SIMP \
CONFIG_NET_ACT_SKBMOD \

View File

@@ -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
@@ -1721,7 +1738,7 @@ $(eval $(call KernelPackage,usbip-server))
define KernelPackage/usb-chipidea
TITLE:=Host and device support for Chipidea controllers
DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget @TARGET_ath79 +kmod-usb-ehci +kmod-usb-phy-nop +kmod-usb-roles
DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget @TARGET_ath79 +kmod-usb-ehci +kmod-usb-phy-nop +kmod-usb-roles +kmod-phy-ath79-usb
KCONFIG:= \
CONFIG_EXTCON \
CONFIG_USB_CHIPIDEA \

View File

@@ -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)

View File

@@ -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;

View File

@@ -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
@@ -2946,6 +2946,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,
@@ -3521,7 +3526,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;
}
}
@@ -3782,7 +3787,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);
@@ -3801,6 +3811,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;
}
@@ -5985,7 +6000,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;
@@ -6165,6 +6180,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) {
@@ -6411,6 +6429,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;
@@ -6525,6 +6654,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;
@@ -6563,6 +6693,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;
@@ -6903,6 +7040,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)
@@ -7743,6 +7885,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);
}
@@ -8281,6 +8431,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);
@@ -9330,6 +9488,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;

View File

@@ -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 }
};

View File

@@ -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);

View File

@@ -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;

View File

@@ -81,7 +81,7 @@ Link: https://patch.msgid.link/20240910-wireless-mainline-v14-3-9d80fea5326d@wes
const char *prop;
int irq;
int err;
@@ -106,7 +108,7 @@ void brcmf_of_probe(struct device *dev,
@@ -106,15 +108,22 @@ void brcmf_of_probe(struct device *dev,
board_type = devm_kstrdup(dev, tmp, GFP_KERNEL);
if (!board_type) {
of_node_put(root);
@@ -90,9 +90,8 @@ Link: https://patch.msgid.link/20240910-wireless-mainline-v14-3-9d80fea5326d@wes
}
strreplace(board_type, '/', '-');
settings->board_type = board_type;
@@ -114,8 +116,15 @@ void brcmf_of_probe(struct device *dev,
of_node_put(root);
}
of_node_put(root);
+ clk = devm_clk_get_optional_enabled(dev, "lpo");
+ if (IS_ERR(clk))
@@ -107,7 +106,7 @@ Link: https://patch.msgid.link/20240910-wireless-mainline-v14-3-9d80fea5326d@wes
err = brcmf_of_get_country_codes(dev, settings);
if (err)
@@ -124,23 +133,25 @@ void brcmf_of_probe(struct device *dev,
@@ -123,23 +132,25 @@ void brcmf_of_probe(struct device *dev,
of_get_mac_address(np, settings->mac);
if (bus_type != BRCMF_BUSTYPE_SDIO)

View File

@@ -49,7 +49,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
int brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
struct brcmf_mp_device *settings)
{
@@ -123,6 +153,8 @@ int brcmf_of_probe(struct device *dev, e
@@ -122,6 +152,8 @@ int brcmf_of_probe(struct device *dev, e
brcmf_dbg(INFO, "%s LPO clock\n", clk ? "enable" : "no");
clk_set_rate(clk, 32768);

View File

@@ -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

View File

@@ -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)

View File

@@ -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(

View File

@@ -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;

View File

@@ -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;

View File

@@ -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[] = {

View File

@@ -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

View File

@@ -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;

View File

@@ -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,

View File

@@ -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, &reg)) {
/*
@@ -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(&reg, 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

View File

@@ -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;

View File

@@ -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)

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -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;

View File

@@ -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(&reg, 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)

View File

@@ -1,30 +0,0 @@
From 8fbcaa308591b91e9037ab6a8d733873b749a70d Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Sat, 6 Jul 2024 01:40:58 +0300
Subject: [PATCH] wifi: rtw88: Set efuse->ext_lna_5g - fix typo
efuse->ext_lna_2g is set twice and efuse->ext_lna_5g is not set at all.
Set each one once.
Nothing uses these members right now. They will be used by the RTL8821AU
and RTL8812AU drivers.
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/8ccc9e13-0d45-417d-8f88-93a0ad294f77@gmail.com
---
drivers/net/wireless/realtek/rtw88/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -2006,7 +2006,7 @@ static int rtw_chip_efuse_info_setup(str
efuse->ext_pa_2g = efuse->pa_type_2g & BIT(4) ? 1 : 0;
efuse->ext_lna_2g = efuse->lna_type_2g & BIT(3) ? 1 : 0;
efuse->ext_pa_5g = efuse->pa_type_5g & BIT(0) ? 1 : 0;
- efuse->ext_lna_2g = efuse->lna_type_5g & BIT(3) ? 1 : 0;
+ efuse->ext_lna_5g = efuse->lna_type_5g & BIT(3) ? 1 : 0;
if (!is_valid_ether_addr(efuse->addr)) {
eth_random_addr(efuse->addr);

View File

@@ -1,284 +0,0 @@
From 315c23a64e99552502dd4d18d6ddc073fad9a7c3 Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Thu, 11 Jul 2024 01:11:33 +0300
Subject: [PATCH] wifi: rtw88: usb: Support USB 3 with RTL8822CU/RTL8822BU
The Realtek wifi 5 devices which support USB 3 are weird: when first
plugged in, they pretend to be USB 2. The driver needs to send some
commands to the device, which make it disappear and come back as a
USB 3 device.
Implement the required commands in rtw88.
When a USB 3 device is plugged into a USB 2 port, rtw88 will try to
switch it to USB 3 mode only once. The device will disappear and come
back still in USB 2 mode, of course.
Some people experience heavy interference in the 2.4 GHz band in
USB 3 mode, so add a module parameter switch_usb_mode with the
default value 1 to let people disable the switching.
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/77906c62-5674-426f-bde1-1b2a12a0339d@gmail.com
---
drivers/net/wireless/realtek/rtw88/debug.h | 1 +
drivers/net/wireless/realtek/rtw88/main.h | 2 +
drivers/net/wireless/realtek/rtw88/reg.h | 11 +++
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 4 +-
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
drivers/net/wireless/realtek/rtw88/rtw8822c.h | 24 +++---
drivers/net/wireless/realtek/rtw88/usb.c | 84 +++++++++++++++++++
8 files changed, 116 insertions(+), 12 deletions(-)
--- a/drivers/net/wireless/realtek/rtw88/debug.h
+++ b/drivers/net/wireless/realtek/rtw88/debug.h
@@ -25,6 +25,7 @@ enum rtw_debug_mask {
RTW_DBG_HW_SCAN = 0x00010000,
RTW_DBG_STATE = 0x00020000,
RTW_DBG_SDIO = 0x00040000,
+ RTW_DBG_USB = 0x00080000,
RTW_DBG_UNEXP = 0x80000000,
RTW_DBG_ALL = 0xffffffff
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -1785,6 +1785,8 @@ struct rtw_efuse {
bool share_ant;
u8 bt_setting;
+ u8 usb_mode_switch;
+
struct {
u8 hci;
u8 bw;
--- a/drivers/net/wireless/realtek/rtw88/reg.h
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
@@ -15,6 +15,7 @@
#define BIT_WLOCK_1C_B6 BIT(5)
#define REG_SYS_PW_CTRL 0x0004
#define BIT_PFM_WOWL BIT(3)
+#define BIT_APFM_OFFMAC BIT(9)
#define REG_SYS_CLK_CTRL 0x0008
#define BIT_CPU_CLK_EN BIT(14)
@@ -133,6 +134,14 @@
#define REG_PMC_DBG_CTRL1 0xa8
#define BITS_PMC_BT_IQK_STS GENMASK(22, 21)
+#define REG_PAD_CTRL2 0x00C4
+#define BIT_RSM_EN_V1 BIT(16)
+#define BIT_NO_PDN_CHIPOFF_V1 BIT(17)
+#define BIT_MASK_USB23_SW_MODE_V1 GENMASK(19, 18)
+#define BIT_USB3_USB2_TRANSITION BIT(20)
+#define BIT_USB_MODE_U2 1
+#define BIT_USB_MODE_U3 2
+
#define REG_EFUSE_ACCESS 0x00CF
#define EFUSE_ACCESS_ON 0x69
#define EFUSE_ACCESS_OFF 0x00
@@ -568,6 +577,8 @@
#define BIT_WL_SECURITY_CLK BIT(15)
#define BIT_DDMA_EN BIT(8)
+#define REG_SW_MDIO 0x10C0
+
#define REG_H2C_PKT_READADDR 0x10D0
#define REG_H2C_PKT_WRITEADDR 0x10D4
#define REG_FW_DBG6 0x10F8
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
@@ -46,6 +46,7 @@ static int rtw8822b_read_efuse(struct rt
map = (struct rtw8822b_efuse *)log_map;
+ efuse->usb_mode_switch = u8_get_bits(map->usb_mode, BIT(7));
efuse->rfe_option = map->rfe_option;
efuse->rf_board_option = map->rf_board_option;
efuse->crystal_cap = map->xtal_k;
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
@@ -72,7 +72,9 @@ struct rtw8822bs_efuse {
struct rtw8822b_efuse {
__le16 rtl_id;
- u8 res0[0x0e];
+ u8 res0[4];
+ u8 usb_mode;
+ u8 res1[0x09];
/* power index for four RF paths */
struct rtw_txpwr_idx txpwr_idx_table[4];
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -49,6 +49,7 @@ static int rtw8822c_read_efuse(struct rt
map = (struct rtw8822c_efuse *)log_map;
+ efuse->usb_mode_switch = u8_get_bits(map->usb_mode, BIT(7));
efuse->rfe_option = map->rfe_option;
efuse->rf_board_option = map->rf_board_option;
efuse->crystal_cap = map->xtal_k & XCAP_MASK;
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
@@ -59,16 +59,18 @@ struct rtw8822ce_efuse {
struct rtw8822c_efuse {
__le16 rtl_id;
- u8 res0[0x0e];
+ u8 res0[4];
+ u8 usb_mode;
+ u8 res1[0x09];
/* power index for four RF paths */
struct rtw_txpwr_idx txpwr_idx_table[4];
u8 channel_plan; /* 0xb8 */
u8 xtal_k;
- u8 res1;
+ u8 res2;
u8 iqk_lck;
- u8 res2[5]; /* 0xbc */
+ u8 res3[5]; /* 0xbc */
u8 rf_board_option;
u8 rf_feature_option;
u8 rf_bt_setting;
@@ -80,21 +82,21 @@ struct rtw8822c_efuse {
u8 rf_antenna_option; /* 0xc9 */
u8 rfe_option;
u8 country_code[2];
- u8 res3[3];
+ u8 res4[3];
u8 path_a_thermal; /* 0xd0 */
u8 path_b_thermal;
- u8 res4[2];
+ u8 res5[2];
u8 rx_gain_gap_2g_ofdm;
- u8 res5;
- u8 rx_gain_gap_2g_cck;
u8 res6;
- u8 rx_gain_gap_5gl;
+ u8 rx_gain_gap_2g_cck;
u8 res7;
- u8 rx_gain_gap_5gm;
+ u8 rx_gain_gap_5gl;
u8 res8;
- u8 rx_gain_gap_5gh;
+ u8 rx_gain_gap_5gm;
u8 res9;
- u8 res10[0x42];
+ u8 rx_gain_gap_5gh;
+ u8 res10;
+ u8 res11[0x42];
union {
struct rtw8822ce_efuse e;
struct rtw8822cu_efuse u;
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -14,6 +14,11 @@
#include "ps.h"
#include "usb.h"
+static bool rtw_switch_usb_mode = true;
+module_param_named(switch_usb_mode, rtw_switch_usb_mode, bool, 0644);
+MODULE_PARM_DESC(switch_usb_mode,
+ "Set to N to disable switching to USB 3 mode to avoid potential interference in the 2.4 GHz band (default: Y)");
+
#define RTW_USB_MAX_RXQ_LEN 512
struct rtw_usb_txcb {
@@ -841,6 +846,77 @@ static void rtw_usb_intf_deinit(struct r
usb_set_intfdata(intf, NULL);
}
+static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
+{
+ enum usb_device_speed cur_speed;
+ u8 id = rtwdev->chip->id;
+ bool can_switch;
+ u32 pad_ctrl2;
+
+ if (rtw_read8(rtwdev, REG_SYS_CFG2 + 3) == 0x20)
+ cur_speed = USB_SPEED_SUPER;
+ else
+ cur_speed = USB_SPEED_HIGH;
+
+ if (cur_speed == USB_SPEED_SUPER)
+ return 0;
+
+ pad_ctrl2 = rtw_read32(rtwdev, REG_PAD_CTRL2);
+
+ can_switch = !!(pad_ctrl2 & (BIT_MASK_USB23_SW_MODE_V1 |
+ BIT_USB3_USB2_TRANSITION));
+
+ if (!can_switch) {
+ rtw_dbg(rtwdev, RTW_DBG_USB,
+ "Switching to USB 3 mode unsupported by the chip\n");
+ return 0;
+ }
+
+ /* At this point cur_speed is USB_SPEED_HIGH. If we already tried
+ * to switch don't try again - it's a USB 2 port.
+ */
+ if (u32_get_bits(pad_ctrl2, BIT_MASK_USB23_SW_MODE_V1) == BIT_USB_MODE_U3)
+ return 0;
+
+ /* Enable IO wrapper timeout */
+ if (id == RTW_CHIP_TYPE_8822B || id == RTW_CHIP_TYPE_8821C)
+ rtw_write8_clr(rtwdev, REG_SW_MDIO + 3, BIT(0));
+
+ u32p_replace_bits(&pad_ctrl2, BIT_USB_MODE_U3, BIT_MASK_USB23_SW_MODE_V1);
+ pad_ctrl2 |= BIT_RSM_EN_V1;
+
+ rtw_write32(rtwdev, REG_PAD_CTRL2, pad_ctrl2);
+ rtw_write8(rtwdev, REG_PAD_CTRL2 + 1, 4);
+
+ rtw_write16_set(rtwdev, REG_SYS_PW_CTRL, BIT_APFM_OFFMAC);
+ usleep_range(1000, 1001);
+ rtw_write32_set(rtwdev, REG_PAD_CTRL2, BIT_NO_PDN_CHIPOFF_V1);
+
+ return 1;
+}
+
+static int rtw_usb_switch_mode(struct rtw_dev *rtwdev)
+{
+ u8 id = rtwdev->chip->id;
+
+ if (id != RTW_CHIP_TYPE_8822C && id != RTW_CHIP_TYPE_8822B)
+ return 0;
+
+ if (!rtwdev->efuse.usb_mode_switch) {
+ rtw_dbg(rtwdev, RTW_DBG_USB,
+ "Switching to USB 3 mode disabled by chip's efuse\n");
+ return 0;
+ }
+
+ if (!rtw_switch_usb_mode) {
+ rtw_dbg(rtwdev, RTW_DBG_USB,
+ "Switching to USB 3 mode disabled by module parameter\n");
+ return 0;
+ }
+
+ return rtw_usb_switch_mode_new(rtwdev);
+}
+
int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
{
struct rtw_dev *rtwdev;
@@ -896,6 +972,14 @@ int rtw_usb_probe(struct usb_interface *
goto err_destroy_rxwq;
}
+ ret = rtw_usb_switch_mode(rtwdev);
+ if (ret) {
+ /* Not a fail, but we do need to skip rtw_register_hw. */
+ rtw_dbg(rtwdev, RTW_DBG_USB, "switching to USB 3 mode\n");
+ ret = 0;
+ goto err_destroy_rxwq;
+ }
+
ret = rtw_register_hw(rtwdev, rtwdev->hw);
if (ret) {
rtw_err(rtwdev, "failed to register hw\n");

View File

@@ -1,454 +0,0 @@
From 8db6c1ca64664ef9b071e6eeb646023ac5b240a8 Mon Sep 17 00:00:00 2001
From: Ping-Ke Shih <pkshih@realtek.com>
Date: Thu, 18 Jul 2024 14:41:55 +0800
Subject: [PATCH] wifi: rtw88: debugfs: support multiple adapters debugging
Originally in order to read partial registers from large area, we write
a range value stored into a static variable and read registers according
to the static variable.
However, if we install more than one adapters supported by this driver,
the static variables will be overwritten by latter adapters. To resolve
the problem, move the static variables to struct rtw_dev for each adapter.
With changes, smatch spends too much time to parse rtw_debugfs_init():
debug.c:1289 rtw_debugfs_init() parse error: turning off implications
after 60 seconds
Move stuffs of adding debugfs entries to three rtw_debugfs_add_xxx()
functions.
Reported-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Closes: https://lore.kernel.org/linux-wireless/cd6a2acf3c2c36d938b40140b52a779516f446a9.camel@realtek.com/T/#m27662022c70d9f893ba96f6c6a8dd8fce2434dfe
Tested-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240718064155.38955-1-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw88/debug.c | 303 ++++++++++++---------
drivers/net/wireless/realtek/rtw88/debug.h | 2 +
drivers/net/wireless/realtek/rtw88/main.c | 1 +
drivers/net/wireless/realtek/rtw88/main.h | 3 +-
4 files changed, 180 insertions(+), 129 deletions(-)
--- a/drivers/net/wireless/realtek/rtw88/debug.c
+++ b/drivers/net/wireless/realtek/rtw88/debug.c
@@ -43,6 +43,62 @@ struct rtw_debugfs_priv {
};
};
+struct rtw_debugfs {
+ struct rtw_debugfs_priv mac_0;
+ struct rtw_debugfs_priv mac_1;
+ struct rtw_debugfs_priv mac_2;
+ struct rtw_debugfs_priv mac_3;
+ struct rtw_debugfs_priv mac_4;
+ struct rtw_debugfs_priv mac_5;
+ struct rtw_debugfs_priv mac_6;
+ struct rtw_debugfs_priv mac_7;
+ struct rtw_debugfs_priv mac_10;
+ struct rtw_debugfs_priv mac_11;
+ struct rtw_debugfs_priv mac_12;
+ struct rtw_debugfs_priv mac_13;
+ struct rtw_debugfs_priv mac_14;
+ struct rtw_debugfs_priv mac_15;
+ struct rtw_debugfs_priv mac_16;
+ struct rtw_debugfs_priv mac_17;
+ struct rtw_debugfs_priv bb_8;
+ struct rtw_debugfs_priv bb_9;
+ struct rtw_debugfs_priv bb_a;
+ struct rtw_debugfs_priv bb_b;
+ struct rtw_debugfs_priv bb_c;
+ struct rtw_debugfs_priv bb_d;
+ struct rtw_debugfs_priv bb_e;
+ struct rtw_debugfs_priv bb_f;
+ struct rtw_debugfs_priv bb_18;
+ struct rtw_debugfs_priv bb_19;
+ struct rtw_debugfs_priv bb_1a;
+ struct rtw_debugfs_priv bb_1b;
+ struct rtw_debugfs_priv bb_1c;
+ struct rtw_debugfs_priv bb_1d;
+ struct rtw_debugfs_priv bb_1e;
+ struct rtw_debugfs_priv bb_1f;
+ struct rtw_debugfs_priv bb_2c;
+ struct rtw_debugfs_priv bb_2d;
+ struct rtw_debugfs_priv bb_40;
+ struct rtw_debugfs_priv bb_41;
+ struct rtw_debugfs_priv rf_dump;
+ struct rtw_debugfs_priv tx_pwr_tbl;
+ struct rtw_debugfs_priv write_reg;
+ struct rtw_debugfs_priv h2c;
+ struct rtw_debugfs_priv rf_write;
+ struct rtw_debugfs_priv rf_read;
+ struct rtw_debugfs_priv read_reg;
+ struct rtw_debugfs_priv fix_rate;
+ struct rtw_debugfs_priv dump_cam;
+ struct rtw_debugfs_priv rsvd_page;
+ struct rtw_debugfs_priv phy_info;
+ struct rtw_debugfs_priv coex_enable;
+ struct rtw_debugfs_priv coex_info;
+ struct rtw_debugfs_priv edcca_enable;
+ struct rtw_debugfs_priv fw_crash;
+ struct rtw_debugfs_priv force_lowest_basic_rate;
+ struct rtw_debugfs_priv dm_cap;
+};
+
static const char * const rtw_dm_cap_strs[] = {
[RTW_DM_CAP_NA] = "NA",
[RTW_DM_CAP_TXGAPK] = "TXGAPK",
@@ -524,7 +580,7 @@ static int rtw_debug_get_bb_page(struct
return 0;
}
-static int rtw_debug_get_rf_dump(struct seq_file *m, void *v)
+static int rtw_debugfs_get_rf_dump(struct seq_file *m, void *v)
{
struct rtw_debugfs_priv *debugfs_priv = m->private;
struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
@@ -1074,139 +1130,102 @@ static int rtw_debugfs_get_dm_cap(struct
return 0;
}
-#define rtw_debug_impl_mac(page, addr) \
-static struct rtw_debugfs_priv rtw_debug_priv_mac_ ##page = { \
+#define rtw_debug_priv_mac(addr) \
+{ \
.cb_read = rtw_debug_get_mac_page, \
.cb_data = addr, \
}
-rtw_debug_impl_mac(0, 0x0000);
-rtw_debug_impl_mac(1, 0x0100);
-rtw_debug_impl_mac(2, 0x0200);
-rtw_debug_impl_mac(3, 0x0300);
-rtw_debug_impl_mac(4, 0x0400);
-rtw_debug_impl_mac(5, 0x0500);
-rtw_debug_impl_mac(6, 0x0600);
-rtw_debug_impl_mac(7, 0x0700);
-rtw_debug_impl_mac(10, 0x1000);
-rtw_debug_impl_mac(11, 0x1100);
-rtw_debug_impl_mac(12, 0x1200);
-rtw_debug_impl_mac(13, 0x1300);
-rtw_debug_impl_mac(14, 0x1400);
-rtw_debug_impl_mac(15, 0x1500);
-rtw_debug_impl_mac(16, 0x1600);
-rtw_debug_impl_mac(17, 0x1700);
-
-#define rtw_debug_impl_bb(page, addr) \
-static struct rtw_debugfs_priv rtw_debug_priv_bb_ ##page = { \
+#define rtw_debug_priv_bb(addr) \
+{ \
.cb_read = rtw_debug_get_bb_page, \
.cb_data = addr, \
}
-rtw_debug_impl_bb(8, 0x0800);
-rtw_debug_impl_bb(9, 0x0900);
-rtw_debug_impl_bb(a, 0x0a00);
-rtw_debug_impl_bb(b, 0x0b00);
-rtw_debug_impl_bb(c, 0x0c00);
-rtw_debug_impl_bb(d, 0x0d00);
-rtw_debug_impl_bb(e, 0x0e00);
-rtw_debug_impl_bb(f, 0x0f00);
-rtw_debug_impl_bb(18, 0x1800);
-rtw_debug_impl_bb(19, 0x1900);
-rtw_debug_impl_bb(1a, 0x1a00);
-rtw_debug_impl_bb(1b, 0x1b00);
-rtw_debug_impl_bb(1c, 0x1c00);
-rtw_debug_impl_bb(1d, 0x1d00);
-rtw_debug_impl_bb(1e, 0x1e00);
-rtw_debug_impl_bb(1f, 0x1f00);
-rtw_debug_impl_bb(2c, 0x2c00);
-rtw_debug_impl_bb(2d, 0x2d00);
-rtw_debug_impl_bb(40, 0x4000);
-rtw_debug_impl_bb(41, 0x4100);
-
-static struct rtw_debugfs_priv rtw_debug_priv_rf_dump = {
- .cb_read = rtw_debug_get_rf_dump,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_tx_pwr_tbl = {
- .cb_read = rtw_debugfs_get_tx_pwr_tbl,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_write_reg = {
- .cb_write = rtw_debugfs_set_write_reg,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_h2c = {
- .cb_write = rtw_debugfs_set_h2c,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_rf_write = {
- .cb_write = rtw_debugfs_set_rf_write,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_rf_read = {
- .cb_write = rtw_debugfs_set_rf_read,
- .cb_read = rtw_debugfs_get_rf_read,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_read_reg = {
- .cb_write = rtw_debugfs_set_read_reg,
- .cb_read = rtw_debugfs_get_read_reg,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_fix_rate = {
- .cb_write = rtw_debugfs_set_fix_rate,
- .cb_read = rtw_debugfs_get_fix_rate,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_dump_cam = {
- .cb_write = rtw_debugfs_set_single_input,
- .cb_read = rtw_debugfs_get_dump_cam,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_rsvd_page = {
- .cb_write = rtw_debugfs_set_rsvd_page,
- .cb_read = rtw_debugfs_get_rsvd_page,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_phy_info = {
- .cb_read = rtw_debugfs_get_phy_info,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_coex_enable = {
- .cb_write = rtw_debugfs_set_coex_enable,
- .cb_read = rtw_debugfs_get_coex_enable,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_coex_info = {
- .cb_read = rtw_debugfs_get_coex_info,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_edcca_enable = {
- .cb_write = rtw_debugfs_set_edcca_enable,
- .cb_read = rtw_debugfs_get_edcca_enable,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_fw_crash = {
- .cb_write = rtw_debugfs_set_fw_crash,
- .cb_read = rtw_debugfs_get_fw_crash,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_force_lowest_basic_rate = {
- .cb_write = rtw_debugfs_set_force_lowest_basic_rate,
- .cb_read = rtw_debugfs_get_force_lowest_basic_rate,
-};
-
-static struct rtw_debugfs_priv rtw_debug_priv_dm_cap = {
- .cb_write = rtw_debugfs_set_dm_cap,
- .cb_read = rtw_debugfs_get_dm_cap,
+#define rtw_debug_priv_get(name) \
+{ \
+ .cb_read = rtw_debugfs_get_ ##name, \
+}
+
+#define rtw_debug_priv_set(name) \
+{ \
+ .cb_write = rtw_debugfs_set_ ##name, \
+}
+
+#define rtw_debug_priv_set_and_get(name) \
+{ \
+ .cb_write = rtw_debugfs_set_ ##name, \
+ .cb_read = rtw_debugfs_get_ ##name, \
+}
+
+#define rtw_debug_priv_set_single_and_get(name) \
+{ \
+ .cb_write = rtw_debugfs_set_single_input, \
+ .cb_read = rtw_debugfs_get_ ##name, \
+}
+
+static const struct rtw_debugfs rtw_debugfs_templ = {
+ .mac_0 = rtw_debug_priv_mac(0x0000),
+ .mac_1 = rtw_debug_priv_mac(0x0100),
+ .mac_2 = rtw_debug_priv_mac(0x0200),
+ .mac_3 = rtw_debug_priv_mac(0x0300),
+ .mac_4 = rtw_debug_priv_mac(0x0400),
+ .mac_5 = rtw_debug_priv_mac(0x0500),
+ .mac_6 = rtw_debug_priv_mac(0x0600),
+ .mac_7 = rtw_debug_priv_mac(0x0700),
+ .mac_10 = rtw_debug_priv_mac(0x1000),
+ .mac_11 = rtw_debug_priv_mac(0x1100),
+ .mac_12 = rtw_debug_priv_mac(0x1200),
+ .mac_13 = rtw_debug_priv_mac(0x1300),
+ .mac_14 = rtw_debug_priv_mac(0x1400),
+ .mac_15 = rtw_debug_priv_mac(0x1500),
+ .mac_16 = rtw_debug_priv_mac(0x1600),
+ .mac_17 = rtw_debug_priv_mac(0x1700),
+ .bb_8 = rtw_debug_priv_bb(0x0800),
+ .bb_9 = rtw_debug_priv_bb(0x0900),
+ .bb_a = rtw_debug_priv_bb(0x0a00),
+ .bb_b = rtw_debug_priv_bb(0x0b00),
+ .bb_c = rtw_debug_priv_bb(0x0c00),
+ .bb_d = rtw_debug_priv_bb(0x0d00),
+ .bb_e = rtw_debug_priv_bb(0x0e00),
+ .bb_f = rtw_debug_priv_bb(0x0f00),
+ .bb_18 = rtw_debug_priv_bb(0x1800),
+ .bb_19 = rtw_debug_priv_bb(0x1900),
+ .bb_1a = rtw_debug_priv_bb(0x1a00),
+ .bb_1b = rtw_debug_priv_bb(0x1b00),
+ .bb_1c = rtw_debug_priv_bb(0x1c00),
+ .bb_1d = rtw_debug_priv_bb(0x1d00),
+ .bb_1e = rtw_debug_priv_bb(0x1e00),
+ .bb_1f = rtw_debug_priv_bb(0x1f00),
+ .bb_2c = rtw_debug_priv_bb(0x2c00),
+ .bb_2d = rtw_debug_priv_bb(0x2d00),
+ .bb_40 = rtw_debug_priv_bb(0x4000),
+ .bb_41 = rtw_debug_priv_bb(0x4100),
+ .rf_dump = rtw_debug_priv_get(rf_dump),
+ .tx_pwr_tbl = rtw_debug_priv_get(tx_pwr_tbl),
+ .write_reg = rtw_debug_priv_set(write_reg),
+ .h2c = rtw_debug_priv_set(h2c),
+ .rf_write = rtw_debug_priv_set(rf_write),
+ .rf_read = rtw_debug_priv_set_and_get(rf_read),
+ .read_reg = rtw_debug_priv_set_and_get(read_reg),
+ .fix_rate = rtw_debug_priv_set_and_get(fix_rate),
+ .dump_cam = rtw_debug_priv_set_single_and_get(dump_cam),
+ .rsvd_page = rtw_debug_priv_set_and_get(rsvd_page),
+ .phy_info = rtw_debug_priv_get(phy_info),
+ .coex_enable = rtw_debug_priv_set_and_get(coex_enable),
+ .coex_info = rtw_debug_priv_get(coex_info),
+ .edcca_enable = rtw_debug_priv_set_and_get(edcca_enable),
+ .fw_crash = rtw_debug_priv_set_and_get(fw_crash),
+ .force_lowest_basic_rate = rtw_debug_priv_set_and_get(force_lowest_basic_rate),
+ .dm_cap = rtw_debug_priv_set_and_get(dm_cap),
};
#define rtw_debugfs_add_core(name, mode, fopname, parent) \
do { \
- rtw_debug_priv_ ##name.rtwdev = rtwdev; \
+ struct rtw_debugfs_priv *priv = &rtwdev->debugfs->name; \
+ priv->rtwdev = rtwdev; \
if (IS_ERR(debugfs_create_file(#name, mode, \
- parent, &rtw_debug_priv_ ##name,\
+ parent, priv, \
&file_ops_ ##fopname))) \
pr_debug("Unable to initialize debugfs:%s\n", \
#name); \
@@ -1219,12 +1238,9 @@ static struct rtw_debugfs_priv rtw_debug
#define rtw_debugfs_add_r(name) \
rtw_debugfs_add_core(name, S_IFREG | 0444, single_r, debugfs_topdir)
-void rtw_debugfs_init(struct rtw_dev *rtwdev)
+static
+void rtw_debugfs_add_basic(struct rtw_dev *rtwdev, struct dentry *debugfs_topdir)
{
- struct dentry *debugfs_topdir;
-
- debugfs_topdir = debugfs_create_dir("rtw88",
- rtwdev->hw->wiphy->debugfsdir);
rtw_debugfs_add_w(write_reg);
rtw_debugfs_add_rw(read_reg);
rtw_debugfs_add_w(rf_write);
@@ -1236,6 +1252,17 @@ void rtw_debugfs_init(struct rtw_dev *rt
rtw_debugfs_add_r(coex_info);
rtw_debugfs_add_rw(coex_enable);
rtw_debugfs_add_w(h2c);
+ rtw_debugfs_add_r(rf_dump);
+ rtw_debugfs_add_r(tx_pwr_tbl);
+ rtw_debugfs_add_rw(edcca_enable);
+ rtw_debugfs_add_rw(fw_crash);
+ rtw_debugfs_add_rw(force_lowest_basic_rate);
+ rtw_debugfs_add_rw(dm_cap);
+}
+
+static
+void rtw_debugfs_add_sec0(struct rtw_dev *rtwdev, struct dentry *debugfs_topdir)
+{
rtw_debugfs_add_r(mac_0);
rtw_debugfs_add_r(mac_1);
rtw_debugfs_add_r(mac_2);
@@ -1252,6 +1279,11 @@ void rtw_debugfs_init(struct rtw_dev *rt
rtw_debugfs_add_r(bb_d);
rtw_debugfs_add_r(bb_e);
rtw_debugfs_add_r(bb_f);
+}
+
+static
+void rtw_debugfs_add_sec1(struct rtw_dev *rtwdev, struct dentry *debugfs_topdir)
+{
rtw_debugfs_add_r(mac_10);
rtw_debugfs_add_r(mac_11);
rtw_debugfs_add_r(mac_12);
@@ -1274,14 +1306,29 @@ void rtw_debugfs_init(struct rtw_dev *rt
rtw_debugfs_add_r(bb_40);
rtw_debugfs_add_r(bb_41);
}
- rtw_debugfs_add_r(rf_dump);
- rtw_debugfs_add_r(tx_pwr_tbl);
- rtw_debugfs_add_rw(edcca_enable);
- rtw_debugfs_add_rw(fw_crash);
- rtw_debugfs_add_rw(force_lowest_basic_rate);
- rtw_debugfs_add_rw(dm_cap);
}
+void rtw_debugfs_init(struct rtw_dev *rtwdev)
+{
+ struct dentry *debugfs_topdir;
+
+ rtwdev->debugfs = kmemdup(&rtw_debugfs_templ, sizeof(rtw_debugfs_templ),
+ GFP_KERNEL);
+ if (!rtwdev->debugfs)
+ return;
+
+ debugfs_topdir = debugfs_create_dir("rtw88",
+ rtwdev->hw->wiphy->debugfsdir);
+
+ rtw_debugfs_add_basic(rtwdev, debugfs_topdir);
+ rtw_debugfs_add_sec0(rtwdev, debugfs_topdir);
+ rtw_debugfs_add_sec1(rtwdev, debugfs_topdir);
+}
+
+void rtw_debugfs_deinit(struct rtw_dev *rtwdev)
+{
+ kfree(rtwdev->debugfs);
+}
#endif /* CPTCFG_RTW88_DEBUGFS */
#ifdef CPTCFG_RTW88_DEBUG
--- a/drivers/net/wireless/realtek/rtw88/debug.h
+++ b/drivers/net/wireless/realtek/rtw88/debug.h
@@ -34,11 +34,13 @@ enum rtw_debug_mask {
#ifdef CPTCFG_RTW88_DEBUGFS
void rtw_debugfs_init(struct rtw_dev *rtwdev);
+void rtw_debugfs_deinit(struct rtw_dev *rtwdev);
void rtw_debugfs_get_simple_phy_info(struct seq_file *m);
#else
static inline void rtw_debugfs_init(struct rtw_dev *rtwdev) {}
+static inline void rtw_debugfs_deinit(struct rtw_dev *rtwdev) {}
#endif /* CPTCFG_RTW88_DEBUGFS */
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -2300,6 +2300,7 @@ void rtw_unregister_hw(struct rtw_dev *r
ieee80211_unregister_hw(hw);
rtw_unset_supported_band(hw, chip);
+ rtw_debugfs_deinit(rtwdev);
}
EXPORT_SYMBOL(rtw_unregister_hw);
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -50,6 +50,7 @@ extern const struct ieee80211_ops rtw_op
#define RTW_MAX_CHANNEL_NUM_5G 49
struct rtw_dev;
+struct rtw_debugfs;
enum rtw_hci_type {
RTW_HCI_TYPE_PCIE,
@@ -2053,7 +2054,7 @@ struct rtw_dev {
bool beacon_loss;
struct completion lps_leave_check;
- struct dentry *debugfs;
+ struct rtw_debugfs *debugfs;
u8 sta_cnt;
u32 rts_threshold;

View File

@@ -1,25 +0,0 @@
From 7e989b0c1e33210c07340bf5228aa83ea52515b5 Mon Sep 17 00:00:00 2001
From: Zong-Zhe Yang <kevin_yang@realtek.com>
Date: Thu, 18 Jul 2024 15:06:15 +0800
Subject: [PATCH] wifi: rtw88: select WANT_DEV_COREDUMP
We have invoked device coredump when fw crash.
Should select WANT_DEV_COREDUMP by ourselves.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240718070616.42217-1-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw88/Kconfig | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/net/wireless/realtek/rtw88/Kconfig
+++ b/drivers/net/wireless/realtek/rtw88/Kconfig
@@ -14,6 +14,7 @@ if RTW88
config RTW88_CORE
tristate
depends on m
+ select BPAUTO_WANT_DEV_COREDUMP
config RTW88_PCI
tristate

View File

@@ -1,151 +0,0 @@
From 53ed4b25a79aeec5991c2dc579e635b136ef7676 Mon Sep 17 00:00:00 2001
From: Po-Hao Huang <phhuang@realtek.com>
Date: Wed, 24 Jul 2024 13:05:01 +0800
Subject: [PATCH] wifi: rtw88: 8822c: Parse channel from IE to correct invalid
hardware reports
For CCK packets we could get incorrect reports from hardware.
And this causes wrong frequencies being reported. Parse the channel
information from IE if provided by AP to fix this.
Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240724050501.7550-1-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw88/main.h | 1 +
drivers/net/wireless/realtek/rtw88/pci.c | 1 +
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 7 ++--
drivers/net/wireless/realtek/rtw88/rx.c | 41 +++++++++++++++++++
drivers/net/wireless/realtek/rtw88/rx.h | 13 ++++++
drivers/net/wireless/realtek/rtw88/sdio.c | 1 +
drivers/net/wireless/realtek/rtw88/usb.c | 2 +
7 files changed, 63 insertions(+), 3 deletions(-)
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -623,6 +623,7 @@ struct rtw_rx_pkt_stat {
bool crc_err;
bool decrypted;
bool is_c2h;
+ bool channel_invalid;
s32 signal_power;
u16 pkt_len;
--- a/drivers/net/wireless/realtek/rtw88/pci.c
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
@@ -1088,6 +1088,7 @@ static u32 rtw_pci_rx_napi(struct rtw_de
/* remove rx_desc */
skb_pull(new, pkt_offset);
+ rtw_update_rx_freq_for_invalid(rtwdev, new, &rx_status, &pkt_stat);
rtw_rx_stats(rtwdev, pkt_stat.vif, new);
memcpy(new->cb, &rx_status, sizeof(rx_status));
ieee80211_rx_napi(rtwdev->hw, NULL, new, napi);
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -2576,9 +2576,10 @@ static void query_phy_status_page0(struc
rx_power[RF_PATH_B] -= 110;
channel = GET_PHY_STAT_P0_CHANNEL(phy_status);
- if (channel == 0)
- channel = rtwdev->hal.current_channel;
- rtw_set_rx_freq_band(pkt_stat, channel);
+ if (channel != 0)
+ rtw_set_rx_freq_band(pkt_stat, channel);
+ else
+ pkt_stat->channel_invalid = true;
pkt_stat->rx_power[RF_PATH_A] = rx_power[RF_PATH_A];
pkt_stat->rx_power[RF_PATH_B] = rx_power[RF_PATH_B];
--- a/drivers/net/wireless/realtek/rtw88/rx.c
+++ b/drivers/net/wireless/realtek/rtw88/rx.c
@@ -146,6 +146,47 @@ static void rtw_set_rx_freq_by_pktstat(s
rx_status->band = pkt_stat->band;
}
+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)
+{
+ struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
+ int channel = rtwdev->hal.current_channel;
+ size_t hdr_len, ielen;
+ int channel_number;
+ u8 *variable;
+
+ if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
+ goto fill_rx_status;
+
+ if (ieee80211_is_beacon(mgmt->frame_control)) {
+ variable = mgmt->u.beacon.variable;
+ hdr_len = offsetof(struct ieee80211_mgmt,
+ u.beacon.variable);
+ } else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
+ variable = mgmt->u.probe_resp.variable;
+ hdr_len = offsetof(struct ieee80211_mgmt,
+ u.probe_resp.variable);
+ } else {
+ goto fill_rx_status;
+ }
+
+ if (skb->len > hdr_len)
+ ielen = skb->len - hdr_len;
+ else
+ goto fill_rx_status;
+
+ channel_number = cfg80211_get_ies_channel_number(variable, ielen,
+ NL80211_BAND_2GHZ);
+ if (channel_number != -1)
+ channel = channel_number;
+
+fill_rx_status:
+ rtw_set_rx_freq_band(pkt_stat, channel);
+ rtw_set_rx_freq_by_pktstat(pkt_stat, 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,
--- a/drivers/net/wireless/realtek/rtw88/rx.h
+++ b/drivers/net/wireless/realtek/rtw88/rx.h
@@ -50,5 +50,18 @@ void rtw_rx_fill_rx_status(struct rtw_de
struct ieee80211_hdr *hdr,
struct ieee80211_rx_status *rx_status,
u8 *phy_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);
+
+static inline
+void rtw_update_rx_freq_for_invalid(struct rtw_dev *rtwdev, struct sk_buff *skb,
+ struct ieee80211_rx_status *rx_status,
+ struct rtw_rx_pkt_stat *pkt_stat)
+{
+ if (pkt_stat->channel_invalid)
+ rtw_update_rx_freq_from_ie(rtwdev, skb, rx_status, pkt_stat);
+}
+
#endif
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
@@ -948,6 +948,7 @@ static void rtw_sdio_rx_skb(struct rtw_d
skb_put(skb, pkt_stat->pkt_len);
skb_reserve(skb, pkt_offset);
+ rtw_update_rx_freq_for_invalid(rtwdev, skb, rx_status, pkt_stat);
rtw_rx_stats(rtwdev, pkt_stat->vif, skb);
ieee80211_rx_irqsafe(rtwdev->hw, skb);
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -579,6 +579,8 @@ static void rtw_usb_rx_handler(struct wo
skb_put(skb, pkt_stat.pkt_len);
skb_reserve(skb, pkt_offset);
+
+ rtw_update_rx_freq_for_invalid(rtwdev, skb, &rx_status, &pkt_stat);
memcpy(skb->cb, &rx_status, sizeof(rx_status));
ieee80211_rx_irqsafe(rtwdev->hw, skb);
}

View File

@@ -1,73 +0,0 @@
From fbbd8cb347e25b68d25c4f3871821afc495ee7a9 Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Thu, 8 Aug 2024 01:19:36 +0300
Subject: [PATCH] wifi: rtw88: usb: Init RX burst length according to USB speed
This is needed in order to make USB RX aggregation work with RTL8811CU
(and presumably RTL8822BU and RTL8822CU also).
I don't know what BIT_DMA_BURST_CNT, BIT_DMA_MODE, and BIT_DROP_DATA_EN
are doing.
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
The RX speed is unchanged in my tests.
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/ac569c6f-7129-4341-b523-901fe10cabff@gmail.com
---
drivers/net/wireless/realtek/rtw88/reg.h | 6 ++++++
drivers/net/wireless/realtek/rtw88/usb.c | 23 ++++++++++++++++++++++-
2 files changed, 28 insertions(+), 1 deletion(-)
--- a/drivers/net/wireless/realtek/rtw88/reg.h
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
@@ -322,6 +322,12 @@
#define REG_RXDMA_DPR 0x028C
#define REG_RXDMA_MODE 0x0290
#define BIT_DMA_MODE BIT(1)
+#define BIT_DMA_BURST_CNT GENMASK(3, 2)
+#define BIT_DMA_BURST_SIZE GENMASK(5, 4)
+#define BIT_DMA_BURST_SIZE_64 2
+#define BIT_DMA_BURST_SIZE_512 1
+#define BIT_DMA_BURST_SIZE_1024 0
+
#define REG_RXPKTNUM 0x02B0
#define REG_INT_MIG 0x0304
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -720,9 +720,30 @@ static void rtw_usb_link_ps(struct rtw_d
/* empty function for rtw_hci_ops */
}
+static void rtw_usb_init_burst_pkt_len(struct rtw_dev *rtwdev)
+{
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
+ enum usb_device_speed speed = rtwusb->udev->speed;
+ u8 rxdma, burst_size;
+
+ rxdma = BIT_DMA_BURST_CNT | BIT_DMA_MODE;
+
+ if (speed == USB_SPEED_SUPER)
+ burst_size = BIT_DMA_BURST_SIZE_1024;
+ else if (speed == USB_SPEED_HIGH)
+ burst_size = BIT_DMA_BURST_SIZE_512;
+ else
+ burst_size = BIT_DMA_BURST_SIZE_64;
+
+ u8p_replace_bits(&rxdma, burst_size, BIT_DMA_BURST_SIZE);
+
+ rtw_write8(rtwdev, REG_RXDMA_MODE, rxdma);
+ rtw_write16_set(rtwdev, REG_TXDMA_OFFSET_CHK, BIT_DROP_DATA_EN);
+}
+
static void rtw_usb_interface_cfg(struct rtw_dev *rtwdev)
{
- /* empty function for rtw_hci_ops */
+ rtw_usb_init_burst_pkt_len(rtwdev);
}
static struct rtw_hci_ops rtw_usb_ops = {

View File

@@ -1,31 +0,0 @@
From 38ea04a79ad0f8cc30bb5e9ad98d665e4ae5060c Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Thu, 8 Aug 2024 01:20:36 +0300
Subject: [PATCH] wifi: rtw88: usb: Update the RX stats after every frame
Update the number of received unicast data frames and bytes every time
a frame is received. This is what the PCI and SDIO drivers do.
This has an influence on the power saving, bluetooth coexistence, and
(in a future patch) the use of RX aggregation.
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/75a2ca52-8f01-45c5-926f-d3a68ae3b284@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
@@ -581,6 +581,7 @@ static void rtw_usb_rx_handler(struct wo
skb_reserve(skb, pkt_offset);
rtw_update_rx_freq_for_invalid(rtwdev, skb, &rx_status, &pkt_stat);
+ rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
memcpy(skb->cb, &rx_status, sizeof(rx_status));
ieee80211_rx_irqsafe(rtwdev->hw, skb);
}

View File

@@ -1,118 +0,0 @@
From df3d8f463b1dfc7cb8f4fb52b1b81d290b850d03 Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Thu, 8 Aug 2024 01:21:36 +0300
Subject: [PATCH] wifi: rtw88: usb: Support RX aggregation
The chips can be configured to aggregate several frames into a single
USB transfer. Modify rtw_usb_rx_handler() to support this case.
RX aggregation improves the RX speed of RTL8811CU on certain ARM
systems, like the NanoPi NEO Core2. It also improves the RX speed of
RTL8822CU on some x86_64 systems.
Currently none of the chips are configured to aggregate frames.
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/f845826d-de71-492d-9a22-e48c07989a1f@gmail.com
---
drivers/net/wireless/realtek/rtw88/usb.c | 61 ++++++++++++++++--------
1 file changed, 40 insertions(+), 21 deletions(-)
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -546,11 +546,12 @@ static void rtw_usb_rx_handler(struct wo
struct rtw_usb *rtwusb = container_of(work, struct rtw_usb, rx_work);
struct rtw_dev *rtwdev = rtwusb->rtwdev;
const struct rtw_chip_info *chip = rtwdev->chip;
- struct rtw_rx_pkt_stat pkt_stat;
+ u32 pkt_desc_sz = chip->rx_pkt_desc_sz;
struct ieee80211_rx_status rx_status;
+ u32 pkt_offset, next_pkt, urb_len;
+ struct rtw_rx_pkt_stat pkt_stat;
+ struct sk_buff *next_skb;
struct sk_buff *skb;
- u32 pkt_desc_sz = chip->rx_pkt_desc_sz;
- u32 pkt_offset;
u8 *rx_desc;
int limit;
@@ -559,31 +560,48 @@ static void rtw_usb_rx_handler(struct wo
if (!skb)
break;
- rx_desc = skb->data;
- chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
- &rx_status);
- pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
- pkt_stat.shift;
-
- if (pkt_stat.is_c2h) {
- skb_put(skb, pkt_stat.pkt_len + pkt_offset);
- rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb);
- continue;
- }
-
if (skb_queue_len(&rtwusb->rx_queue) >= RTW_USB_MAX_RXQ_LEN) {
dev_dbg_ratelimited(rtwdev->dev, "failed to get rx_queue, overflow\n");
dev_kfree_skb_any(skb);
continue;
}
- skb_put(skb, pkt_stat.pkt_len);
- skb_reserve(skb, pkt_offset);
+ urb_len = skb->len;
+
+ do {
+ rx_desc = skb->data;
+ chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
+ &rx_status);
+ pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
+ pkt_stat.shift;
+
+ next_pkt = round_up(pkt_stat.pkt_len + pkt_offset, 8);
+
+ if (urb_len >= next_pkt + pkt_desc_sz)
+ next_skb = skb_clone(skb, GFP_KERNEL);
+ else
+ next_skb = NULL;
+
+ if (pkt_stat.is_c2h) {
+ skb_trim(skb, pkt_stat.pkt_len + pkt_offset);
+ rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb);
+ } else {
+ skb_pull(skb, pkt_offset);
+ skb_trim(skb, pkt_stat.pkt_len);
+ rtw_update_rx_freq_for_invalid(rtwdev, skb,
+ &rx_status,
+ &pkt_stat);
+ rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
+ memcpy(skb->cb, &rx_status, sizeof(rx_status));
+ ieee80211_rx_irqsafe(rtwdev->hw, skb);
+ }
+
+ skb = next_skb;
+ if (skb)
+ skb_pull(skb, next_pkt);
- rtw_update_rx_freq_for_invalid(rtwdev, skb, &rx_status, &pkt_stat);
- rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
- memcpy(skb->cb, &rx_status, sizeof(rx_status));
- ieee80211_rx_irqsafe(rtwdev->hw, skb);
+ urb_len -= next_pkt;
+ } while (skb);
}
}
@@ -627,6 +645,7 @@ static void rtw_usb_read_port_complete(s
if (skb)
dev_kfree_skb_any(skb);
} else {
+ skb_put(skb, urb->actual_length);
skb_queue_tail(&rtwusb->rx_queue, skb);
queue_work(rtwusb->rxwq, &rtwusb->rx_work);
}

View File

@@ -1,168 +0,0 @@
From 002a5db9a52a0e7af0fa9a450d31049748435748 Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Thu, 8 Aug 2024 01:23:06 +0300
Subject: [PATCH] wifi: rtw88: Enable USB RX aggregation for 8822c/8822b/8821c
Enable USB RX aggregation when there is at least 1 Mbps RX or TX
traffic, otherwise disable it.
USB RX aggregation improves the RX speed of RTL8811CU on certain ARM
systems, like the NanoPi NEO Core2. Before: 28 Mbps, after: 231 Mbps.
It also improves the RX speed of RTL8822CU on some x86_64 systems.
Before: ~200 Mbps, after: ~300 Mbps.
The official drivers for these chips use the same logic for SDIO, but
for some reason the SDIO driver in rtw88 always enables RX aggregation,
so this patch only toggles aggregation for USB devices.
RTL8703B is likely not found in USB devices, and RTL8723DU doesn't like
aggregation.
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/b4c0d54c-6755-4b0f-9dd7-f9196fd74b68@gmail.com
---
drivers/net/wireless/realtek/rtw88/hci.h | 7 ++++
drivers/net/wireless/realtek/rtw88/main.c | 13 +++++---
drivers/net/wireless/realtek/rtw88/pci.c | 1 +
drivers/net/wireless/realtek/rtw88/sdio.c | 1 +
drivers/net/wireless/realtek/rtw88/usb.c | 40 +++++++++++++++++++++++
5 files changed, 58 insertions(+), 4 deletions(-)
--- a/drivers/net/wireless/realtek/rtw88/hci.h
+++ b/drivers/net/wireless/realtek/rtw88/hci.h
@@ -18,6 +18,7 @@ struct rtw_hci_ops {
void (*deep_ps)(struct rtw_dev *rtwdev, bool enter);
void (*link_ps)(struct rtw_dev *rtwdev, bool enter);
void (*interface_cfg)(struct rtw_dev *rtwdev);
+ void (*dynamic_rx_agg)(struct rtw_dev *rtwdev, bool enable);
int (*write_data_rsvd_page)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
int (*write_data_h2c)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
@@ -72,6 +73,12 @@ static inline void rtw_hci_interface_cfg
rtwdev->hci.ops->interface_cfg(rtwdev);
}
+static inline void rtw_hci_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
+{
+ if (rtwdev->hci.ops->dynamic_rx_agg)
+ rtwdev->hci.ops->dynamic_rx_agg(rtwdev, enable);
+}
+
static inline int
rtw_hci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, u32 size)
{
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -212,6 +212,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);
+ u32 tx_unicast_mbps, rx_unicast_mbps;
bool ps_active;
mutex_lock(&rtwdev->mutex);
@@ -236,10 +237,11 @@ static void rtw_watch_dog_work(struct wo
else
ps_active = false;
- ewma_tp_add(&stats->tx_ewma_tp,
- (u32)(stats->tx_unicast >> RTW_TP_SHIFT));
- ewma_tp_add(&stats->rx_ewma_tp,
- (u32)(stats->rx_unicast >> RTW_TP_SHIFT));
+ tx_unicast_mbps = stats->tx_unicast >> RTW_TP_SHIFT;
+ rx_unicast_mbps = stats->rx_unicast >> RTW_TP_SHIFT;
+
+ ewma_tp_add(&stats->tx_ewma_tp, tx_unicast_mbps);
+ ewma_tp_add(&stats->rx_ewma_tp, rx_unicast_mbps);
stats->tx_throughput = ewma_tp_read(&stats->tx_ewma_tp);
stats->rx_throughput = ewma_tp_read(&stats->rx_ewma_tp);
@@ -259,6 +261,9 @@ static void rtw_watch_dog_work(struct wo
rtw_phy_dynamic_mechanism(rtwdev);
+ rtw_hci_dynamic_rx_agg(rtwdev,
+ tx_unicast_mbps >= 1 || rx_unicast_mbps >= 1);
+
data.rtwdev = rtwdev;
/* rtw_iterate_vifs internally uses an atomic iterator which is needed
* to avoid taking local->iflist_mtx mutex
--- a/drivers/net/wireless/realtek/rtw88/pci.c
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
@@ -1601,6 +1601,7 @@ static struct rtw_hci_ops rtw_pci_ops =
.deep_ps = rtw_pci_deep_ps,
.link_ps = rtw_pci_link_ps,
.interface_cfg = rtw_pci_interface_cfg,
+ .dynamic_rx_agg = NULL,
.read8 = rtw_pci_read8,
.read16 = rtw_pci_read16,
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
@@ -1157,6 +1157,7 @@ static struct rtw_hci_ops rtw_sdio_ops =
.deep_ps = rtw_sdio_deep_ps,
.link_ps = rtw_sdio_link_ps,
.interface_cfg = rtw_sdio_interface_cfg,
+ .dynamic_rx_agg = NULL,
.read8 = rtw_sdio_read8,
.read16 = rtw_sdio_read16,
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -766,6 +766,45 @@ static void rtw_usb_interface_cfg(struct
rtw_usb_init_burst_pkt_len(rtwdev);
}
+static void rtw_usb_dynamic_rx_agg_v1(struct rtw_dev *rtwdev, bool enable)
+{
+ u8 size, timeout;
+ u16 val16;
+
+ rtw_write32_set(rtwdev, REG_RXDMA_AGG_PG_TH, BIT_EN_PRE_CALC);
+ rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
+ rtw_write8_clr(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7));
+
+ if (enable) {
+ size = 0x5;
+ timeout = 0x20;
+ } else {
+ 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);
+}
+
+static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
+{
+ switch (rtwdev->chip->id) {
+ case RTW_CHIP_TYPE_8822C:
+ case RTW_CHIP_TYPE_8822B:
+ case RTW_CHIP_TYPE_8821C:
+ rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
+ break;
+ case RTW_CHIP_TYPE_8723D:
+ /* Doesn't like aggregation. */
+ break;
+ case RTW_CHIP_TYPE_8703B:
+ /* Likely not found in USB devices. */
+ break;
+ }
+}
+
static struct rtw_hci_ops rtw_usb_ops = {
.tx_write = rtw_usb_tx_write,
.tx_kick_off = rtw_usb_tx_kick_off,
@@ -775,6 +814,7 @@ static struct rtw_hci_ops rtw_usb_ops =
.deep_ps = rtw_usb_deep_ps,
.link_ps = rtw_usb_link_ps,
.interface_cfg = rtw_usb_interface_cfg,
+ .dynamic_rx_agg = rtw_usb_dynamic_rx_agg,
.write8 = rtw_usb_write8,
.write16 = rtw_usb_write16,

View File

@@ -1,231 +0,0 @@
From 902cb7b11f9a7ff07233cc4c626b54c3e4703149 Mon Sep 17 00:00:00 2001
From: Ping-Ke Shih <pkshih@realtek.com>
Date: Mon, 19 Aug 2024 10:52:48 +0800
Subject: [PATCH] wifi: rtw88: assign mac_id for vif/sta and update to TX desc
A mac_id as an instance in firmware has to be assigned for each station
including AP and connected stations. Firmware will use the mac_id to
control TX rate and do statistics.
Assignment rule is to assign mac_id to each vif when adding vif.
For station mode, sta->mac_id will reuse vif->mac_id. For AP mode,
dynamically allocate an sta->mac_id to a station, and vif->mac_id is
used to send broadcast/multicast packets which are not belong to
a station. For example,
vif->mac_id sta->mac_id
vif0 (STA mode) 0 0
vif1 (AP mode) 1 2...
By the way, remove unused RTW_BC_MC_MACID, which was planed to send
broadcast/multicast packets on fixed mac_id.
Tested-on RTL8822CE with STA + AP SCC mode.
Link: https://lore.kernel.org/linux-wireless/e4be0a75-43b2-4ae5-9aab-5c4a88e78097@gmail.com/
Cc: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240819025248.17939-1-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw88/mac80211.c | 13 ++++++--
drivers/net/wireless/realtek/rtw88/main.c | 30 ++++++++-----------
drivers/net/wireless/realtek/rtw88/main.h | 14 +++++++--
drivers/net/wireless/realtek/rtw88/tx.c | 11 +++++--
drivers/net/wireless/realtek/rtw88/tx.h | 1 +
5 files changed, 44 insertions(+), 25 deletions(-)
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
@@ -167,6 +167,12 @@ static int rtw_ops_add_interface(struct
mutex_lock(&rtwdev->mutex);
+ rtwvif->mac_id = rtw_acquire_macid(rtwdev);
+ if (rtwvif->mac_id >= RTW_MAX_MAC_ID_NUM) {
+ mutex_unlock(&rtwdev->mutex);
+ return -ENOSPC;
+ }
+
port = find_first_zero_bit(rtwdev->hw_port, RTW_PORT_NUM);
if (port >= RTW_PORT_NUM) {
mutex_unlock(&rtwdev->mutex);
@@ -214,7 +220,8 @@ static int rtw_ops_add_interface(struct
mutex_unlock(&rtwdev->mutex);
- rtw_dbg(rtwdev, RTW_DBG_STATE, "start vif %pM on port %d\n", vif->addr, rtwvif->port);
+ rtw_dbg(rtwdev, RTW_DBG_STATE, "start vif %pM mac_id %d on port %d\n",
+ vif->addr, rtwvif->mac_id, rtwvif->port);
return 0;
}
@@ -225,7 +232,8 @@ static void rtw_ops_remove_interface(str
struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
u32 config = 0;
- rtw_dbg(rtwdev, RTW_DBG_STATE, "stop vif %pM on port %d\n", vif->addr, rtwvif->port);
+ rtw_dbg(rtwdev, RTW_DBG_STATE, "stop vif %pM mac_id %d on port %d\n",
+ vif->addr, rtwvif->mac_id, rtwvif->port);
mutex_lock(&rtwdev->mutex);
@@ -242,6 +250,7 @@ static void rtw_ops_remove_interface(str
config |= PORT_SET_BCN_CTRL;
rtw_vif_port_config(rtwdev, rtwvif, config);
clear_bit(rtwvif->port, rtwdev->hw_port);
+ rtw_release_macid(rtwdev, rtwvif->mac_id);
rtw_recalc_lps(rtwdev, NULL);
mutex_unlock(&rtwdev->mutex);
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -311,17 +311,6 @@ static void rtw_ips_work(struct work_str
mutex_unlock(&rtwdev->mutex);
}
-static u8 rtw_acquire_macid(struct rtw_dev *rtwdev)
-{
- unsigned long mac_id;
-
- mac_id = find_first_zero_bit(rtwdev->mac_id_map, RTW_MAX_MAC_ID_NUM);
- if (mac_id < RTW_MAX_MAC_ID_NUM)
- set_bit(mac_id, rtwdev->mac_id_map);
-
- return mac_id;
-}
-
static void rtw_sta_rc_work(struct work_struct *work)
{
struct rtw_sta_info *si = container_of(work, struct rtw_sta_info,
@@ -340,12 +329,14 @@ int rtw_sta_add(struct rtw_dev *rtwdev,
struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
int i;
- si->mac_id = rtw_acquire_macid(rtwdev);
- if (si->mac_id >= RTW_MAX_MAC_ID_NUM)
- return -ENOSPC;
+ if (vif->type == NL80211_IFTYPE_STATION) {
+ si->mac_id = rtwvif->mac_id;
+ } else {
+ si->mac_id = rtw_acquire_macid(rtwdev);
+ if (si->mac_id >= RTW_MAX_MAC_ID_NUM)
+ return -ENOSPC;
+ }
- if (vif->type == NL80211_IFTYPE_STATION && vif->cfg.assoc == 0)
- rtwvif->mac_id = si->mac_id;
si->rtwdev = rtwdev;
si->sta = sta;
si->vif = vif;
@@ -370,11 +361,13 @@ void rtw_sta_remove(struct rtw_dev *rtwd
bool fw_exist)
{
struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv;
+ struct ieee80211_vif *vif = si->vif;
int i;
cancel_work_sync(&si->rc_work);
- rtw_release_macid(rtwdev, si->mac_id);
+ if (vif->type != NL80211_IFTYPE_STATION)
+ rtw_release_macid(rtwdev, si->mac_id);
if (fw_exist)
rtw_fw_media_status_report(rtwdev, si->mac_id, false);
@@ -614,6 +607,8 @@ static void rtw_reset_vif_iter(void *dat
rtw_bf_disassoc(rtwdev, vif, NULL);
rtw_vif_assoc_changed(rtwvif, NULL);
rtw_txq_cleanup(rtwdev, vif->txq);
+
+ rtw_release_macid(rtwdev, rtwvif->mac_id);
}
void rtw_fw_recovery(struct rtw_dev *rtwdev)
@@ -2139,7 +2134,6 @@ int rtw_core_init(struct rtw_dev *rtwdev
rtwdev->sec.total_cam_num = 32;
rtwdev->hal.current_channel = 1;
rtwdev->dm_info.fix_rate = U8_MAX;
- set_bit(RTW_BC_MC_MACID, rtwdev->mac_id_map);
rtw_stats_init(rtwdev);
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -742,7 +742,6 @@ struct rtw_txq {
unsigned long flags;
};
-#define RTW_BC_MC_MACID 1
DECLARE_EWMA(rssi, 10, 16);
struct rtw_sta_info {
@@ -805,7 +804,7 @@ struct rtw_bf_info {
struct rtw_vif {
enum rtw_net_type net_type;
u16 aid;
- u8 mac_id; /* for STA mode only */
+ u8 mac_id;
u8 mac_addr[ETH_ALEN];
u8 bssid[ETH_ALEN];
u8 port;
@@ -2131,6 +2130,17 @@ static inline bool rtw_chip_has_tx_stbc(
return rtwdev->chip->tx_stbc;
}
+static inline u8 rtw_acquire_macid(struct rtw_dev *rtwdev)
+{
+ unsigned long mac_id;
+
+ mac_id = find_first_zero_bit(rtwdev->mac_id_map, RTW_MAX_MAC_ID_NUM);
+ if (mac_id < RTW_MAX_MAC_ID_NUM)
+ set_bit(mac_id, rtwdev->mac_id_map);
+
+ return mac_id;
+}
+
static inline void rtw_release_macid(struct rtw_dev *rtwdev, u8 mac_id)
{
clear_bit(mac_id, rtwdev->mac_id_map);
--- a/drivers/net/wireless/realtek/rtw88/tx.c
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
@@ -46,7 +46,8 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_p
le32_encode_bits(pkt_info->ls, RTW_TX_DESC_W0_LS) |
le32_encode_bits(pkt_info->dis_qselseq, RTW_TX_DESC_W0_DISQSELSEQ);
- tx_desc->w1 = le32_encode_bits(pkt_info->qsel, RTW_TX_DESC_W1_QSEL) |
+ tx_desc->w1 = le32_encode_bits(pkt_info->mac_id, RTW_TX_DESC_W1_MACID) |
+ le32_encode_bits(pkt_info->qsel, RTW_TX_DESC_W1_QSEL) |
le32_encode_bits(pkt_info->rate_id, RTW_TX_DESC_W1_RATE_ID) |
le32_encode_bits(pkt_info->sec_type, RTW_TX_DESC_W1_SEC_TYPE) |
le32_encode_bits(pkt_info->pkt_offset, RTW_TX_DESC_W1_PKT_OFFSET) |
@@ -401,14 +402,18 @@ void rtw_tx_pkt_info_update(struct rtw_d
const struct rtw_chip_info *chip = rtwdev->chip;
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+ struct ieee80211_vif *vif = info->control.vif;
struct rtw_sta_info *si;
- struct ieee80211_vif *vif = NULL;
+ struct rtw_vif *rtwvif;
__le16 fc = hdr->frame_control;
bool bmc;
if (sta) {
si = (struct rtw_sta_info *)sta->drv_priv;
- vif = si->vif;
+ pkt_info->mac_id = si->mac_id;
+ } else if (vif) {
+ rtwvif = (struct rtw_vif *)vif->drv_priv;
+ pkt_info->mac_id = rtwvif->mac_id;
}
if (ieee80211_is_mgmt(fc) || ieee80211_is_nullfunc(fc))
--- a/drivers/net/wireless/realtek/rtw88/tx.h
+++ b/drivers/net/wireless/realtek/rtw88/tx.h
@@ -27,6 +27,7 @@ struct rtw_tx_desc {
#define RTW_TX_DESC_W0_BMC BIT(24)
#define RTW_TX_DESC_W0_LS BIT(26)
#define RTW_TX_DESC_W0_DISQSELSEQ BIT(31)
+#define RTW_TX_DESC_W1_MACID GENMASK(7, 0)
#define RTW_TX_DESC_W1_QSEL GENMASK(12, 8)
#define RTW_TX_DESC_W1_RATE_ID GENMASK(20, 16)
#define RTW_TX_DESC_W1_SEC_TYPE GENMASK(23, 22)

View File

@@ -547,7 +547,7 @@ Link: https://patch.msgid.link/913f1747-38fc-4409-85a4-57bb9cee506b@gmail.com
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -570,8 +570,8 @@ static void rtw_usb_rx_handler(struct wo
@@ -571,8 +571,8 @@ static void rtw_usb_rx_handler(struct wo
do {
rx_desc = skb->data;

View File

@@ -1,70 +0,0 @@
From 4aefde403da7af30757915e0462d88398c9388c5 Mon Sep 17 00:00:00 2001
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date: Tue, 8 Oct 2024 21:44:02 +0300
Subject: [PATCH] wifi: rtw88: Fix the RX aggregation in USB 3 mode
RTL8822CU, RTL8822BU, and RTL8821CU don't need BIT_EN_PRE_CALC.
In fact, RTL8822BU in USB 3 mode doesn't pass all the frames to the
driver, resulting in much lower download speed than normal:
$ iperf3 -c 192.168.0.1 -R
Connecting to host 192.168.0.1, port 5201
Reverse mode, remote host 192.168.0.1 is sending
[ 5] local 192.168.0.50 port 43062 connected to 192.168.0.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 26.9 MBytes 225 Mbits/sec
[ 5] 1.00-2.00 sec 7.50 MBytes 62.9 Mbits/sec
[ 5] 2.00-3.00 sec 8.50 MBytes 71.3 Mbits/sec
[ 5] 3.00-4.00 sec 8.38 MBytes 70.3 Mbits/sec
[ 5] 4.00-5.00 sec 7.75 MBytes 65.0 Mbits/sec
[ 5] 5.00-6.00 sec 8.00 MBytes 67.1 Mbits/sec
[ 5] 6.00-7.00 sec 8.00 MBytes 67.1 Mbits/sec
[ 5] 7.00-8.00 sec 7.75 MBytes 65.0 Mbits/sec
[ 5] 8.00-9.00 sec 7.88 MBytes 66.1 Mbits/sec
[ 5] 9.00-10.00 sec 7.88 MBytes 66.1 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.02 sec 102 MBytes 85.1 Mbits/sec 224 sender
[ 5] 0.00-10.00 sec 98.6 MBytes 82.7 Mbits/sec receiver
Don't set BIT_EN_PRE_CALC. Then the speed is much better:
% iperf3 -c 192.168.0.1 -R
Connecting to host 192.168.0.1, port 5201
Reverse mode, remote host 192.168.0.1 is sending
[ 5] local 192.168.0.50 port 39000 connected to 192.168.0.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 52.8 MBytes 442 Mbits/sec
[ 5] 1.00-2.00 sec 71.9 MBytes 603 Mbits/sec
[ 5] 2.00-3.00 sec 74.8 MBytes 627 Mbits/sec
[ 5] 3.00-4.00 sec 75.9 MBytes 636 Mbits/sec
[ 5] 4.00-5.00 sec 76.0 MBytes 638 Mbits/sec
[ 5] 5.00-6.00 sec 74.1 MBytes 622 Mbits/sec
[ 5] 6.00-7.00 sec 74.0 MBytes 621 Mbits/sec
[ 5] 7.00-8.00 sec 76.0 MBytes 638 Mbits/sec
[ 5] 8.00-9.00 sec 74.4 MBytes 624 Mbits/sec
[ 5] 9.00-10.00 sec 63.9 MBytes 536 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 717 MBytes 601 Mbits/sec 24 sender
[ 5] 0.00-10.00 sec 714 MBytes 599 Mbits/sec receiver
Fixes: 002a5db9a52a ("wifi: rtw88: Enable USB RX aggregation for 8822c/8822b/8821c")
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/afb94a82-3d18-459e-97fc-1a217608cdf0@gmail.com
---
drivers/net/wireless/realtek/rtw88/usb.c | 1 -
1 file changed, 1 deletion(-)
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -771,7 +771,6 @@ static void rtw_usb_dynamic_rx_agg_v1(st
u8 size, timeout;
u16 val16;
- rtw_write32_set(rtwdev, REG_RXDMA_AGG_PG_TH, BIT_EN_PRE_CALC);
rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
rtw_write8_clr(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7));

View File

@@ -174,7 +174,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
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
@@ -457,7 +457,7 @@ static int rtw_usb_write_data(struct rtw
@@ -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);
@@ -183,7 +183,7 @@ Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
ret = rtw_usb_write_port(rtwdev, qsel, skb,
@@ -524,7 +524,7 @@ static int rtw_usb_tx_write(struct rtw_d
@@ -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);

View File

@@ -17,7 +17,7 @@ Link: https://patch.msgid.link/e443f5d9-4b53-4f64-985c-64313ec80bef@gmail.com
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -477,6 +477,7 @@ static int rtw_usb_write_data_rsvd_page(
@@ -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;

View File

@@ -12,7 +12,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -929,6 +929,32 @@ static void rtw_usb_intf_deinit(struct r
@@ -930,6 +930,32 @@ static void rtw_usb_intf_deinit(struct r
usb_set_intfdata(intf, NULL);
}
@@ -45,7 +45,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
{
enum usb_device_speed cur_speed;
@@ -982,7 +1008,8 @@ static int rtw_usb_switch_mode(struct rt
@@ -983,7 +1009,8 @@ static int rtw_usb_switch_mode(struct rt
{
u8 id = rtwdev->chip->id;
@@ -55,7 +55,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
return 0;
if (!rtwdev->efuse.usb_mode_switch) {
@@ -997,7 +1024,10 @@ static int rtw_usb_switch_mode(struct rt
@@ -998,7 +1025,10 @@ static int rtw_usb_switch_mode(struct rt
return 0;
}

View File

@@ -19,7 +19,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -788,6 +788,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
@@ -789,6 +789,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st
rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
}
@@ -52,7 +52,7 @@ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
{
switch (rtwdev->chip->id) {
@@ -796,6 +822,10 @@ static void rtw_usb_dynamic_rx_agg(struc
@@ -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;

View File

@@ -1,6 +1,6 @@
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -1581,24 +1581,6 @@ int ieee80211_register_hw(struct ieee802
@@ -1583,24 +1583,6 @@ int ieee80211_register_hw(struct ieee802
ieee80211_check_wbrf_support(local);

View File

@@ -16,7 +16,7 @@ and we should ignore this.
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -654,21 +654,6 @@ static int wiphy_verify_combinations(str
@@ -678,21 +678,6 @@ int wiphy_verify_iface_combinations(stru
c->limits[j].max > 1))
return -EINVAL;

View File

@@ -113,7 +113,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
{
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -467,6 +467,8 @@ void cfg80211_set_dfs_state(struct wiphy
@@ -475,6 +475,8 @@ void cfg80211_set_dfs_state(struct wiphy
enum nl80211_dfs_state dfs_state);
void cfg80211_dfs_channels_update_work(struct work_struct *work);
@@ -124,7 +124,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -1037,6 +1037,8 @@ void cfg80211_dfs_channels_update_work(s
@@ -1031,6 +1031,8 @@ void cfg80211_dfs_channels_update_work(s
if (c->dfs_state == NL80211_DFS_UNAVAILABLE) {
time_dfs_update = IEEE80211_DFS_MIN_NOP_TIME_MS;
radar_event = NL80211_RADAR_NOP_FINISHED;
@@ -133,7 +133,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
} else {
if (regulatory_pre_cac_allowed(wiphy) ||
cfg80211_any_wiphy_oper_chan(wiphy, c))
@@ -1044,11 +1046,10 @@ void cfg80211_dfs_channels_update_work(s
@@ -1038,11 +1040,10 @@ void cfg80211_dfs_channels_update_work(s
time_dfs_update = REG_PRE_CAC_EXPIRY_GRACE_MS;
radar_event = NL80211_RADAR_PRE_CAC_EXPIRED;

View File

@@ -85,7 +85,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
const struct ieee80211_ops *ops;
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -952,6 +952,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
@@ -954,6 +954,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
spin_lock_init(&local->rx_path_lock);
spin_lock_init(&local->queue_stop_reason_lock);

View File

@@ -1,24 +0,0 @@
From: Felix Fietkau <nbd@nbd.name>
Date: Wed, 2 Oct 2024 11:45:35 +0200
Subject: [PATCH] wifi: mac80211: do not pass a stopped vif to the driver in
.get_txpower
Avoid potentially crashing in the driver because of uninitialized private data
Fixes: 5b3dc42b1b0d ("mac80211: add support for driver tx power reporting")
Cc: stable@vger.kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -3134,7 +3134,8 @@ static int ieee80211_get_tx_power(struct
struct ieee80211_local *local = wiphy_priv(wiphy);
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
- if (local->ops->get_txpower)
+ if (local->ops->get_txpower &&
+ (sdata->flags & IEEE80211_SDATA_IN_DRIVER))
return drv_get_txpower(local, sdata, dbm);
if (local->emulate_chanctx)

View File

@@ -23,15 +23,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -6227,6 +6227,7 @@ enum ieee80211_ap_reg_power {
@@ -6271,6 +6271,7 @@ enum ieee80211_ap_reg_power {
* entered.
* @links[].cac_time_ms: CAC time in ms
* @links.cac_time_ms: CAC time in ms
* @valid_links: bitmap describing what elements of @links are valid
+ * @radio_mask: Bitmask of radios that this interface is allowed to operate on.
*/
struct wireless_dev {
struct wiphy *wiphy;
@@ -6339,6 +6340,8 @@ struct wireless_dev {
@@ -6383,6 +6384,8 @@ struct wireless_dev {
unsigned int cac_time_ms;
} links[IEEE80211_MLD_MAX_NUM_LINKS];
u16 valid_links;
@@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
};
static inline const u8 *wdev_address(struct wireless_dev *wdev)
@@ -6525,6 +6528,17 @@ bool cfg80211_radio_chandef_valid(const
@@ -6569,6 +6572,17 @@ bool cfg80211_radio_chandef_valid(const
const struct cfg80211_chan_def *chandef);
/**
@@ -246,7 +246,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
continue;
for (i = 0; i < rdev_req->n_channels; i++) {
@@ -3490,9 +3491,12 @@ int cfg80211_wext_siwscan(struct net_dev
@@ -3519,9 +3520,12 @@ int cfg80211_wext_siwscan(struct net_dev
continue;
for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
@@ -298,7 +298,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+EXPORT_SYMBOL(cfg80211_wdev_channel_allowed);
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -1415,6 +1415,8 @@ void cfg80211_init_wdev(struct wireless_
@@ -1424,6 +1424,8 @@ void cfg80211_init_wdev(struct wireless_
/* allow mac80211 to determine the timeout */
wdev->ps_timeout = -1;

View File

@@ -1,233 +0,0 @@
From: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
Date: Wed, 4 Sep 2024 19:12:56 +0800
Subject: [PATCH] wifi: mac80211: introduce EHT rate support in AQL airtime
Add definitions related to EHT mode and airtime calculation
according to the 802.11BE_D4.0.
Co-developed-by: Bo Jiao <Bo.Jiao@mediatek.com>
Signed-off-by: Bo Jiao <Bo.Jiao@mediatek.com>
Signed-off-by: Deren Wu <deren.wu@mediatek.com>
Signed-off-by: Quan Zhou <quan.zhou@mediatek.com>
Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
Link: https://patch.msgid.link/20240904111256.11734-1-mingyen.hsieh@mediatek.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
--- a/net/mac80211/airtime.c
+++ b/net/mac80211/airtime.c
@@ -55,10 +55,21 @@
#define HE_DURATION_S(shift, streams, gi, bps) \
(HE_DURATION(streams, gi, bps) >> shift)
+/* gi in HE/EHT is identical. It matches enum nl80211_eht_gi as well */
+#define EHT_GI_08 HE_GI_08
+#define EHT_GI_16 HE_GI_16
+#define EHT_GI_32 HE_GI_32
+
+#define EHT_DURATION(streams, gi, bps) \
+ HE_DURATION(streams, gi, bps)
+#define EHT_DURATION_S(shift, streams, gi, bps) \
+ HE_DURATION_S(shift, streams, gi, bps)
+
#define BW_20 0
#define BW_40 1
#define BW_80 2
#define BW_160 3
+#define BW_320 4
/*
* Define group sort order: HT40 -> SGI -> #streams
@@ -68,17 +79,26 @@
#define IEEE80211_VHT_STREAM_GROUPS 8 /* BW(=4) * SGI(=2) */
#define IEEE80211_HE_MAX_STREAMS 8
+#define IEEE80211_HE_STREAM_GROUPS 12 /* BW(=4) * GI(=3) */
+
+#define IEEE80211_EHT_MAX_STREAMS 8
+#define IEEE80211_EHT_STREAM_GROUPS 15 /* BW(=5) * GI(=3) */
#define IEEE80211_HT_GROUPS_NB (IEEE80211_MAX_STREAMS * \
IEEE80211_HT_STREAM_GROUPS)
#define IEEE80211_VHT_GROUPS_NB (IEEE80211_MAX_STREAMS * \
IEEE80211_VHT_STREAM_GROUPS)
+#define IEEE80211_HE_GROUPS_NB (IEEE80211_HE_MAX_STREAMS * \
+ IEEE80211_HE_STREAM_GROUPS)
+#define IEEE80211_EHT_GROUPS_NB (IEEE80211_EHT_MAX_STREAMS * \
+ IEEE80211_EHT_STREAM_GROUPS)
#define IEEE80211_HT_GROUP_0 0
#define IEEE80211_VHT_GROUP_0 (IEEE80211_HT_GROUP_0 + IEEE80211_HT_GROUPS_NB)
#define IEEE80211_HE_GROUP_0 (IEEE80211_VHT_GROUP_0 + IEEE80211_VHT_GROUPS_NB)
+#define IEEE80211_EHT_GROUP_0 (IEEE80211_HE_GROUP_0 + IEEE80211_HE_GROUPS_NB)
-#define MCS_GROUP_RATES 12
+#define MCS_GROUP_RATES 14
#define HT_GROUP_IDX(_streams, _sgi, _ht40) \
IEEE80211_HT_GROUP_0 + \
@@ -203,6 +223,69 @@
#define HE_GROUP(_streams, _gi, _bw) \
__HE_GROUP(_streams, _gi, _bw, \
HE_GROUP_SHIFT(_streams, _gi, _bw))
+
+#define EHT_BW2VBPS(_bw, r5, r4, r3, r2, r1) \
+ ((_bw) == BW_320 ? r5 : BW2VBPS(_bw, r4, r3, r2, r1))
+
+#define EHT_GROUP_IDX(_streams, _gi, _bw) \
+ (IEEE80211_EHT_GROUP_0 + \
+ IEEE80211_EHT_MAX_STREAMS * 3 * (_bw) + \
+ IEEE80211_EHT_MAX_STREAMS * (_gi) + \
+ (_streams) - 1)
+
+#define __EHT_GROUP(_streams, _gi, _bw, _s) \
+ [EHT_GROUP_IDX(_streams, _gi, _bw)] = { \
+ .shift = _s, \
+ .duration = { \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 1960, 980, 490, 234, 117)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 3920, 1960, 980, 468, 234)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 5880, 2937, 1470, 702, 351)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 7840, 3920, 1960, 936, 468)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 11760, 5880, 2940, 1404, 702)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 15680, 7840, 3920, 1872, 936)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 17640, 8820, 4410, 2106, 1053)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 19600, 9800, 4900, 2340, 1170)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 23520, 11760, 5880, 2808, 1404)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 26133, 13066, 6533, 3120, 1560)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 29400, 14700, 7350, 3510, 1755)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 32666, 16333, 8166, 3900, 1950)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 35280, 17640, 8820, 4212, 2106)), \
+ EHT_DURATION_S(_s, _streams, _gi, \
+ EHT_BW2VBPS(_bw, 39200, 19600, 9800, 4680, 2340)) \
+ } \
+}
+
+#define EHT_GROUP_SHIFT(_streams, _gi, _bw) \
+ GROUP_SHIFT(EHT_DURATION(_streams, _gi, \
+ EHT_BW2VBPS(_bw, 1960, 980, 490, 234, 117)))
+
+#define EHT_GROUP(_streams, _gi, _bw) \
+ __EHT_GROUP(_streams, _gi, _bw, \
+ EHT_GROUP_SHIFT(_streams, _gi, _bw))
+
+#define EHT_GROUP_RANGE(_gi, _bw) \
+ EHT_GROUP(1, _gi, _bw), \
+ EHT_GROUP(2, _gi, _bw), \
+ EHT_GROUP(3, _gi, _bw), \
+ EHT_GROUP(4, _gi, _bw), \
+ EHT_GROUP(5, _gi, _bw), \
+ EHT_GROUP(6, _gi, _bw), \
+ EHT_GROUP(7, _gi, _bw), \
+ EHT_GROUP(8, _gi, _bw)
+
struct mcs_group {
u8 shift;
u16 duration[MCS_GROUP_RATES];
@@ -376,6 +459,26 @@ static const struct mcs_group airtime_mc
HE_GROUP(6, HE_GI_32, BW_160),
HE_GROUP(7, HE_GI_32, BW_160),
HE_GROUP(8, HE_GI_32, BW_160),
+
+ EHT_GROUP_RANGE(EHT_GI_08, BW_20),
+ EHT_GROUP_RANGE(EHT_GI_16, BW_20),
+ EHT_GROUP_RANGE(EHT_GI_32, BW_20),
+
+ EHT_GROUP_RANGE(EHT_GI_08, BW_40),
+ EHT_GROUP_RANGE(EHT_GI_16, BW_40),
+ EHT_GROUP_RANGE(EHT_GI_32, BW_40),
+
+ EHT_GROUP_RANGE(EHT_GI_08, BW_80),
+ EHT_GROUP_RANGE(EHT_GI_16, BW_80),
+ EHT_GROUP_RANGE(EHT_GI_32, BW_80),
+
+ EHT_GROUP_RANGE(EHT_GI_08, BW_160),
+ EHT_GROUP_RANGE(EHT_GI_16, BW_160),
+ EHT_GROUP_RANGE(EHT_GI_32, BW_160),
+
+ EHT_GROUP_RANGE(EHT_GI_08, BW_320),
+ EHT_GROUP_RANGE(EHT_GI_16, BW_320),
+ EHT_GROUP_RANGE(EHT_GI_32, BW_320),
};
static u32
@@ -422,6 +525,9 @@ static u32 ieee80211_get_rate_duration(s
case RATE_INFO_BW_160:
bw = BW_160;
break;
+ case RATE_INFO_BW_320:
+ bw = BW_320;
+ break;
default:
WARN_ON_ONCE(1);
return 0;
@@ -443,14 +549,27 @@ static u32 ieee80211_get_rate_duration(s
idx = status->rate_idx;
group = HE_GROUP_IDX(streams, status->he_gi, bw);
break;
+ case RX_ENC_EHT:
+ streams = status->nss;
+ idx = status->rate_idx;
+ group = EHT_GROUP_IDX(streams, status->eht.gi, bw);
+ break;
default:
WARN_ON_ONCE(1);
return 0;
}
- if (WARN_ON_ONCE((status->encoding != RX_ENC_HE && streams > 4) ||
- (status->encoding == RX_ENC_HE && streams > 8)))
- return 0;
+ switch (status->encoding) {
+ case RX_ENC_EHT:
+ case RX_ENC_HE:
+ if (WARN_ON_ONCE(streams > 8))
+ return 0;
+ break;
+ default:
+ if (WARN_ON_ONCE(streams > 4))
+ return 0;
+ break;
+ }
if (idx >= MCS_GROUP_RATES)
return 0;
@@ -517,7 +636,9 @@ static bool ieee80211_fill_rate_info(str
stat->nss = ri->nss;
stat->rate_idx = ri->mcs;
- if (ri->flags & RATE_INFO_FLAGS_HE_MCS)
+ if (ri->flags & RATE_INFO_FLAGS_EHT_MCS)
+ stat->encoding = RX_ENC_EHT;
+ else if (ri->flags & RATE_INFO_FLAGS_HE_MCS)
stat->encoding = RX_ENC_HE;
else if (ri->flags & RATE_INFO_FLAGS_VHT_MCS)
stat->encoding = RX_ENC_VHT;
@@ -529,7 +650,14 @@ static bool ieee80211_fill_rate_info(str
if (ri->flags & RATE_INFO_FLAGS_SHORT_GI)
stat->enc_flags |= RX_ENC_FLAG_SHORT_GI;
- stat->he_gi = ri->he_gi;
+ switch (stat->encoding) {
+ case RX_ENC_EHT:
+ stat->eht.gi = ri->eht_gi;
+ break;
+ default:
+ stat->he_gi = ri->he_gi;
+ break;
+ }
if (stat->encoding != RX_ENC_LEGACY)
return true;

View File

@@ -1,122 +0,0 @@
From: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
Date: Tue, 17 Sep 2024 19:32:39 +0530
Subject: [PATCH] wifi: cfg80211: check radio iface combination for multi radio
per wiphy
Currently, wiphy_verify_combinations() fails for the multi-radio per wiphy
due to the condition check on new global interface combination that DFS
only works on one channel. In a multi-radio scenario, new global interface
combination encompasses the capabilities of all radio combinations, so it
supports more than one channel with DFS. For multi-radio per wiphy,
interface combination verification needs to be performed for radio specific
interface combinations. This is necessary as the new global interface
combination combines the capabilities of all radio combinations.
Fixes: a01b1e9f9955 ("wifi: mac80211: add support for DFS with multiple radios")
Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
---
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -599,16 +599,20 @@ use_default_name:
}
EXPORT_SYMBOL(wiphy_new_nm);
-static int wiphy_verify_combinations(struct wiphy *wiphy)
+static
+int wiphy_verify_iface_combinations(struct wiphy *wiphy,
+ const struct ieee80211_iface_combination *iface_comb,
+ int n_iface_comb,
+ bool combined_radio)
{
const struct ieee80211_iface_combination *c;
int i, j;
- for (i = 0; i < wiphy->n_iface_combinations; i++) {
+ for (i = 0; i < n_iface_comb; i++) {
u32 cnt = 0;
u16 all_iftypes = 0;
- c = &wiphy->iface_combinations[i];
+ c = &iface_comb[i];
/*
* Combinations with just one interface aren't real,
@@ -621,9 +625,13 @@ static int wiphy_verify_combinations(str
if (WARN_ON(!c->num_different_channels))
return -EINVAL;
- /* DFS only works on one channel. */
- if (WARN_ON(c->radar_detect_widths &&
- (c->num_different_channels > 1)))
+ /* DFS only works on one channel. Avoid this check
+ * for multi-radio global combination, since it hold
+ * the capabilities of all radio combinations.
+ */
+ if (!combined_radio &&
+ WARN_ON(c->radar_detect_widths &&
+ c->num_different_channels > 1))
return -EINVAL;
if (WARN_ON(!c->n_limits))
@@ -644,13 +652,21 @@ static int wiphy_verify_combinations(str
if (WARN_ON(wiphy->software_iftypes & types))
return -EINVAL;
- /* Only a single P2P_DEVICE can be allowed */
- if (WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
+ /* Only a single P2P_DEVICE can be allowed, avoid this
+ * check for multi-radio global combination, since it
+ * hold the capabilities of all radio combinations.
+ */
+ if (!combined_radio &&
+ WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
c->limits[j].max > 1))
return -EINVAL;
- /* Only a single NAN can be allowed */
- if (WARN_ON(types & BIT(NL80211_IFTYPE_NAN) &&
+ /* Only a single NAN can be allowed, avoid this
+ * check for multi-radio global combination, since it
+ * hold the capabilities of all radio combinations.
+ */
+ if (!combined_radio &&
+ WARN_ON(types & BIT(NL80211_IFTYPE_NAN) &&
c->limits[j].max > 1))
return -EINVAL;
@@ -674,6 +690,34 @@ static int wiphy_verify_combinations(str
return 0;
}
+static int wiphy_verify_combinations(struct wiphy *wiphy)
+{
+ int i, ret;
+ bool combined_radio = false;
+
+ if (wiphy->n_radio) {
+ for (i = 0; i < wiphy->n_radio; i++) {
+ const struct wiphy_radio *radio = &wiphy->radio[i];
+
+ ret = wiphy_verify_iface_combinations(wiphy,
+ radio->iface_combinations,
+ radio->n_iface_combinations,
+ false);
+ if (ret)
+ return ret;
+ }
+
+ combined_radio = true;
+ }
+
+ ret = wiphy_verify_iface_combinations(wiphy,
+ wiphy->iface_combinations,
+ wiphy->n_iface_combinations,
+ combined_radio);
+
+ return ret;
+}
+
int wiphy_register(struct wiphy *wiphy)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);

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