Skip to content

Commit 55c5df2

Browse files
Merge branch 'openwrt:main' into main
2 parents 67bedc7 + 17784ad commit 55c5df2

57 files changed

Lines changed: 4983 additions & 1475 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Claude Code Review
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
7+
permissions:
8+
contents: read
9+
pull-requests: write
10+
actions: read
11+
12+
jobs:
13+
code-review:
14+
name: Claude Code Review
15+
# Only run on PR comments containing "/claude" from users with write access
16+
if: >-
17+
github.event.issue.pull_request &&
18+
contains(github.event.comment.body, '/claude') &&
19+
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'),
20+
github.event.comment.author_association)
21+
runs-on: ubuntu-latest
22+
steps:
23+
- name: Checkout
24+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
25+
with:
26+
fetch-depth: 1
27+
28+
- name: PR Review
29+
uses: hauke/claude-code-action@95d07da986168a9998e8e4713ec29b7c162b4dd9 # v1.0.77-fixed
30+
with:
31+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
32+
github_token: ${{ secrets.GITHUB_TOKEN }}
33+
trigger_phrase: "/claude"

package/boot/uboot-lantiq/patches/0017-tools-add-some-helper-tools-for-Lantiq-SoCs.patch

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
251251
+}
252252
+
253253
+/^#define/ {
254-
+ /* DC03 contains MC enable bit and must not be set here */
254+
+ # DC03 contains MC enable bit and must not be set here
255255
+ if (tolower($2) != "mc_dc03_value")
256256
+ printf("WM32 0x%x %s\n", reg_base, tolower($3))
257257
+
@@ -357,7 +357,7 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
357357
+}
358358
--- /dev/null
359359
+++ b/tools/lantiq_ram_init_uart.awk
360-
@@ -0,0 +1,117 @@
360+
@@ -0,0 +1,115 @@
361361
+#!/usr/bin/awk -f
362362
+#
363363
+# Copyright (C) 2011-2012 Luka Perkov <luka@openwrt.org>
@@ -383,45 +383,45 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
383383
+
384384
+function mc_danube_prologue()
385385
+{
386-
+ /* Clear access error log registers */
386+
+ # Clear access error log registers
387387
+ print "0xbf800010", "0x0"
388388
+ print "0xbf800020", "0x0"
389389
+
390-
+ /* Enable DDR and SRAM module in memory controller */
390+
+ # Enable DDR and SRAM module in memory controller
391391
+ print "0xbf800060", "0x5"
392392
+
393-
+ /* Clear start bit of DDR memory controller */
393+
+ # Clear start bit of DDR memory controller
394394
+ print "0xbf801030", "0x0"
395395
+}
396396
+
397397
+function mc_ar9_prologue()
398398
+{
399-
+ /* Clear access error log registers */
399+
+ # Clear access error log registers
400400
+ print "0xbf800010", "0x0"
401401
+ print "0xbf800020", "0x0"
402402
+
403-
+ /* Enable FPI, DDR and SRAM module in memory controller */
403+
+ # Enable FPI, DDR and SRAM module in memory controller
404404
+ print "0xbf800060", "0xD"
405405
+
406-
+ /* Clear start bit of DDR memory controller */
406+
+ # Clear start bit of DDR memory controller
407407
+ print "0xbf801030", "0x0"
408408
+}
409409
+
410410
+function mc_ddr1_epilogue()
411411
+{
412-
+ /* Set start bit of DDR memory controller */
412+
+ # Set start bit of DDR memory controller
413413
+ print "0xbf801030", "0x100"
414414
+}
415415
+
416416
+function mc_ddr2_prologue()
417417
+{
418-
+ /* Put memory controller in inactive mode */
418+
+ # Put memory controller in inactive mode
419419
+ print "0xbf401070", "0x0"
420420
+}
421421
+
422422
+function mc_ddr2_epilogue(mc_ccr07_value)
423423
+{
424-
+ /* Put memory controller in active mode */
424+
+ # Put memory controller in active mode
425425
+ mc_ccr07_value = or(mc_ccr07_value, 0x100)
426426
+ printf("0xbf401070 0x%x\n", mc_ccr07_value)
427427
+}
@@ -452,12 +452,10 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
452452
+}
453453
+
454454
+/^#define/ {
455-
+ /* CCR07 contains MC enable bit and must not be set here */
455+
+ # CCR07 contains MC enable bit and must not be set here
456456
+ if (tolower($2) == "mc_ccr07_value")
457457
+ mc_ccr07_value = strtonum($3)
458-
+ if (tolower($2) == "mc_dc03_value")
459-
+ /* CCR07 contains MC enable bit and must not be set here */
460-
+ else
458+
+ if (tolower($2) != "mc_dc03_value")
461459
+ printf("0x%x %s\n", reg_base, tolower($3))
462460
+
463461
+ reg_base += 0x10
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#
2+
# Copyright (C) 2017 OpenWrt.org
3+
#
4+
# This is free software, licensed under the GNU General Public License v2.
5+
# See /LICENSE for more information.
6+
#
7+
8+
[ -e /etc/config/ubootenv ] && exit 0
9+
10+
touch /etc/config/ubootenv
11+
12+
. /lib/uboot-envtools.sh
13+
. /lib/functions.sh
14+
15+
board=$(board_name)
16+
17+
case "$board" in
18+
starfive,visionfive-2-v1.3b)
19+
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000"
20+
;;
21+
esac
22+
23+
config_load ubootenv
24+
config_foreach ubootenv_add_app_config ubootenv
25+
26+
exit 0

package/kernel/mt76/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
88

99
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
1010
PKG_SOURCE_PROTO:=git
11-
PKG_SOURCE_DATE:=2026-03-19
12-
PKG_SOURCE_VERSION:=39c960c3ada558b4c2e7915772483d3731573d09
13-
PKG_MIRROR_HASH:=7a9f8ea21eee5324e6638ace627dd305b3650ae6ca86109317d9ee83702140eb
11+
PKG_SOURCE_DATE:=2026-03-21
12+
PKG_SOURCE_VERSION:=018f60316d4dd6b4e741874eda40e2dfaa29df3b
13+
PKG_MIRROR_HASH:=54a8125453a6fe04c89cf5335bdf0ea16c409361e1e5a79fb339d67cee26df0e
1414

1515
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
1616
PKG_USE_NINJA:=0

package/network/services/bridger/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk
1010
PKG_NAME:=bridger
1111
PKG_SOURCE_PROTO:=git
1212
PKG_SOURCE_URL=https://github.com/nbd168/bridger
13-
PKG_SOURCE_DATE:=2025-10-23
14-
PKG_SOURCE_VERSION:=9fc2bc3e3d4d3ffa63ee202ce8097620ce300e4f
15-
PKG_MIRROR_HASH:=111a95327337a775e202f1aded74069887ff85f308cdf3eeb994a21160110afb
13+
PKG_SOURCE_DATE:=2026-03-23
14+
PKG_SOURCE_VERSION:=de7e00a5a673fdda38d3326b624c45facc6245d2
15+
PKG_MIRROR_HASH:=480047262ad886699f8abd8b25a8c292b190648d0098d207c2d1e260d0e97ab2
1616

1717
PKG_LICENSE:=GPL-2.0
1818
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
From: Felix Fietkau <nbd@nbd.name>
2+
Date: Fri, 20 Mar 2026 11:53:30 +0000
3+
Subject: [PATCH] nl80211: fix HE MCS set parsing
4+
5+
The Channel Width Set bits occupy B1-B4 of byte 0 of he_cap_phy.
6+
Since this attribute is a byte array, not an integer, reading it via
7+
nla_get_u16() produces an endian-dependent result. The << 8 shift was
8+
correct on big-endian but wrong on little-endian.
9+
10+
Fix this by reading byte 0 directly as a uint8_t, making the check
11+
endian-neutral.
12+
13+
Signed-off-by: Felix Fietkau <nbd@nbd.name>
14+
---
15+
16+
--- a/lib/nl80211.c
17+
+++ b/lib/nl80211.c
18+
@@ -1575,21 +1575,22 @@ uc_nl_convert_rta_he_mcs(const uc_nl_att
19+
uint8_t bw_support_mask[] = { (1 << 1) | (1 << 2), (1 << 3), (1 << 4) };
20+
uc_value_t *mcs_set, *mcs_bw, *mcs_dir, *mcs_entry, *mcs_idx;
21+
uint16_t bw[] = { 80, 160, 8080 }, mcs[6];
22+
- uint16_t u16, phy_cap_0 = 0;
23+
+ uint8_t phy_cap_0 = 0;
24+
+ uint16_t u16;
25+
size_t i, j, k, l, max_idx;
26+
27+
if (!nla_check_len(attr, sizeof(mcs)))
28+
return NULL;
29+
30+
if (nla_check_len(phy_attr, sizeof(phy_cap_0)))
31+
- phy_cap_0 = nla_get_u16(phy_attr);
32+
+ phy_cap_0 = *(uint8_t *)nla_data(phy_attr);
33+
34+
memcpy(mcs, nla_data(attr), sizeof(mcs));
35+
36+
mcs_set = ucv_array_new_length(vm, 3);
37+
38+
for (i = 0; i < ARRAY_SIZE(bw); i++) {
39+
- if (!(phy_cap_0 & (bw_support_mask[i] << 8)))
40+
+ if (!(phy_cap_0 & bw_support_mask[i]))
41+
continue;
42+
43+
mcs_bw = ucv_object_new(vm);
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
From df8e1e4a2eb5f8ecdef36c502601e8afbc6ad891 Mon Sep 17 00:00:00 2001
2+
From: Lorenzo Bianconi <lorenzo@kernel.org>
3+
Date: Wed, 24 Dec 2025 17:29:33 +0100
4+
Subject: [PATCH] net: airoha: Reset PPE default cput port in
5+
airoha_ppe_hw_init()
6+
7+
Before this patch the default PPE cpu port used for a specific GDM
8+
device was set running ndo_init() callback during device initialization.
9+
The selected PPE cpu port configured for the specific GDM device depends
10+
on the QDMA block assigned to the GDM device. The selected QDMA block
11+
depends on LAN/WAN configuration as specified in commmit XXXX.
12+
However, the user selected PPE cpu port can be different with respect to
13+
the one hardcoded in the NPU firmware binary. The hardcoded PPE cput port
14+
value is loaded initializing the PPE engine running npu ops ppe_init()
15+
callback in airoha_ppe_offload_setup routine.
16+
Reset the default value for PPE cpu ports in airoha_ppe_hw_init routine
17+
in order to apply the user requested configuration according to the device
18+
DTS setup.
19+
Please note this patch is fixing an issue not visible to the user (so we
20+
do not need to backport it) since airoha_eth driver currently supports just
21+
the internal phy available via the MT7530 DSA switch and there are no WAN
22+
interfaces officially supporte since PCS/external phy is not merged mainline
23+
yet (it will be posted with following patches).
24+
25+
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
26+
---
27+
drivers/net/ethernet/airoha/airoha_eth.c | 28 +++++------------------
28+
drivers/net/ethernet/airoha/airoha_eth.h | 2 ++
29+
drivers/net/ethernet/airoha/airoha_ppe.c | 23 ++++++++++++++++++-
30+
drivers/net/ethernet/airoha/airoha_regs.h | 7 +++---
31+
4 files changed, 33 insertions(+), 27 deletions(-)
32+
33+
--- a/drivers/net/ethernet/airoha/airoha_eth.c
34+
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
35+
@@ -1755,8 +1755,7 @@ static int airoha_dev_init(struct net_de
36+
{
37+
struct airoha_gdm_port *port = netdev_priv(dev);
38+
struct airoha_eth *eth = port->eth;
39+
- u32 fe_cpu_port;
40+
- u8 ppe_id;
41+
+ int i;
42+
43+
/* QDMA0 is used for lan ports while QDMA1 is used for WAN ports */
44+
port->qdma = &eth->qdma[!airoha_is_lan_gdm_port(port)];
45+
@@ -1774,28 +1773,13 @@ static int airoha_dev_init(struct net_de
46+
if (err)
47+
return err;
48+
}
49+
- fallthrough;
50+
- case AIROHA_GDM2_IDX:
51+
- if (airoha_ppe_is_enabled(eth, 1)) {
52+
- /* For PPE2 always use secondary cpu port. */
53+
- fe_cpu_port = FE_PSE_PORT_CDM2;
54+
- ppe_id = 1;
55+
- break;
56+
- }
57+
- fallthrough;
58+
- default: {
59+
- u8 qdma_id = port->qdma - &eth->qdma[0];
60+
-
61+
- /* For PPE1 select cpu port according to the running QDMA. */
62+
- fe_cpu_port = qdma_id ? FE_PSE_PORT_CDM2 : FE_PSE_PORT_CDM1;
63+
- ppe_id = 0;
64+
break;
65+
- }
66+
+ default:
67+
+ break;
68+
}
69+
70+
- airoha_fe_rmw(eth, REG_PPE_DFT_CPORT0(ppe_id),
71+
- DFT_CPORT_MASK(port->id),
72+
- __field_prep(DFT_CPORT_MASK(port->id), fe_cpu_port));
73+
+ for (i = 0; i < eth->soc->num_ppe; i++)
74+
+ airoha_ppe_set_cpu_port(port, i);
75+
76+
return 0;
77+
}
78+
@@ -1898,7 +1882,7 @@ static u32 airoha_get_dsa_tag(struct sk_
79+
#endif
80+
}
81+
82+
-static int airoha_get_fe_port(struct airoha_gdm_port *port)
83+
+int airoha_get_fe_port(struct airoha_gdm_port *port)
84+
{
85+
struct airoha_qdma *qdma = port->qdma;
86+
struct airoha_eth *eth = qdma->eth;
87+
--- a/drivers/net/ethernet/airoha/airoha_eth.h
88+
+++ b/drivers/net/ethernet/airoha/airoha_eth.h
89+
@@ -646,9 +646,11 @@ static inline bool airoha_is_7583(struct
90+
return eth->soc->version == 0x7583;
91+
}
92+
93+
+int airoha_get_fe_port(struct airoha_gdm_port *port);
94+
bool airoha_is_valid_gdm_port(struct airoha_eth *eth,
95+
struct airoha_gdm_port *port);
96+
97+
+void airoha_ppe_set_cpu_port(struct airoha_gdm_port *port, u8 ppe_id);
98+
bool airoha_ppe_is_enabled(struct airoha_eth *eth, int index);
99+
void airoha_ppe_check_skb(struct airoha_ppe_dev *dev, struct sk_buff *skb,
100+
u16 hash, bool rx_wlan);
101+
--- a/drivers/net/ethernet/airoha/airoha_ppe.c
102+
+++ b/drivers/net/ethernet/airoha/airoha_ppe.c
103+
@@ -85,6 +85,20 @@ static u32 airoha_ppe_get_timestamp(stru
104+
return FIELD_GET(AIROHA_FOE_IB1_BIND_TIMESTAMP, timestamp);
105+
}
106+
107+
+void airoha_ppe_set_cpu_port(struct airoha_gdm_port *port, u8 ppe_id)
108+
+{
109+
+ struct airoha_qdma *qdma = port->qdma;
110+
+ u8 fport = airoha_get_fe_port(port);
111+
+ struct airoha_eth *eth = qdma->eth;
112+
+ u8 qdma_id = qdma - &eth->qdma[0];
113+
+ u32 fe_cpu_port;
114+
+
115+
+ fe_cpu_port = qdma_id ? FE_PSE_PORT_CDM2 : FE_PSE_PORT_CDM1;
116+
+ airoha_fe_rmw(eth, REG_PPE_DFT_CPORT(ppe_id, fport),
117+
+ DFT_CPORT_MASK(fport),
118+
+ __field_prep(DFT_CPORT_MASK(fport), fe_cpu_port));
119+
+}
120+
+
121+
static void airoha_ppe_hw_init(struct airoha_ppe *ppe)
122+
{
123+
u32 sram_ppe_num_data_entries = PPE_SRAM_NUM_ENTRIES, sram_num_entries;
124+
@@ -147,7 +161,9 @@ static void airoha_ppe_hw_init(struct ai
125+
126+
airoha_fe_wr(eth, REG_PPE_HASH_SEED(i), PPE_HASH_SEED);
127+
128+
- for (p = 0; p < ARRAY_SIZE(eth->ports); p++)
129+
+ for (p = 0; p < ARRAY_SIZE(eth->ports); p++) {
130+
+ struct airoha_gdm_port *port = eth->ports[p];
131+
+
132+
airoha_fe_rmw(eth, REG_PPE_MTU(i, p),
133+
FP0_EGRESS_MTU_MASK |
134+
FP1_EGRESS_MTU_MASK,
135+
@@ -155,6 +171,11 @@ static void airoha_ppe_hw_init(struct ai
136+
AIROHA_MAX_MTU) |
137+
FIELD_PREP(FP1_EGRESS_MTU_MASK,
138+
AIROHA_MAX_MTU));
139+
+ if (!port)
140+
+ continue;
141+
+
142+
+ airoha_ppe_set_cpu_port(port, i);
143+
+ }
144+
}
145+
}
146+
147+
--- a/drivers/net/ethernet/airoha/airoha_regs.h
148+
+++ b/drivers/net/ethernet/airoha/airoha_regs.h
149+
@@ -312,10 +312,9 @@
150+
#define REG_PPE_HASH_SEED(_n) (((_n) ? PPE2_BASE : PPE1_BASE) + 0x244)
151+
#define PPE_HASH_SEED 0x12345678
152+
153+
-#define REG_PPE_DFT_CPORT0(_n) (((_n) ? PPE2_BASE : PPE1_BASE) + 0x248)
154+
-#define DFT_CPORT_MASK(_n) GENMASK(3 + ((_n) << 2), ((_n) << 2))
155+
-
156+
-#define REG_PPE_DFT_CPORT1(_n) (((_n) ? PPE2_BASE : PPE1_BASE) + 0x24c)
157+
+#define REG_PPE_DFT_CPORT_BASE(_n) (((_n) ? PPE2_BASE : PPE1_BASE) + 0x248)
158+
+#define REG_PPE_DFT_CPORT(_m, _n) (REG_PPE_DFT_CPORT_BASE(_m) + (((_n) / 8) << 2))
159+
+#define DFT_CPORT_MASK(_n) GENMASK(3 + (((_n) % 8) << 2), (((_n) % 8) << 2))
160+
161+
#define REG_PPE_TB_HASH_CFG(_n) (((_n) ? PPE2_BASE : PPE1_BASE) + 0x250)
162+
#define PPE_DRAM_HASH1_MODE_MASK GENMASK(31, 28)

0 commit comments

Comments
 (0)