wifi: mt76: mt792x: fix mt7925u USB WFSYS reset handling

mt7925u uses different reset/status registers from mt7921u. Reusing the
mt7921u register set causes the WFSYS reset to fail.

Add a chip-specific descriptor in mt792xu_wfsys_reset() to select the
correct registers and fix mt7925u failing to initialize after a warm
reboot.

Fixes: d28e1a4895 ("wifi: mt76: mt792x: introduce mt792x-usb module")
Cc: stable@vger.kernel.org
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Link: https://patch.msgid.link/20260311002825.15502-2-sean.wang@kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Sean Wang 2026-03-10 19:28:25 -05:00 committed by Felix Fietkau
parent e6f48512c1
commit 56154fef47
2 changed files with 16 additions and 1 deletions

View File

@ -392,6 +392,10 @@
#define MT_CBTOP_RGU_WF_SUBSYS_RST MT_CBTOP_RGU(0x600)
#define MT_CBTOP_RGU_WF_SUBSYS_RST_WF_WHOLE_PATH BIT(0)
#define MT7925_CBTOP_RGU_WF_SUBSYS_RST 0x70028600
#define MT7925_WFSYS_INIT_DONE_ADDR 0x184c1604
#define MT7925_WFSYS_INIT_DONE 0x00001d1e
#define MT_HW_BOUND 0x70010020
#define MT_HW_CHIPID 0x70010200
#define MT_HW_REV 0x70010204

View File

@ -224,6 +224,15 @@ static const struct mt792xu_wfsys_desc mt7921_wfsys_desc = {
.need_status_sel = true,
};
static const struct mt792xu_wfsys_desc mt7925_wfsys_desc = {
.rst_reg = MT7925_CBTOP_RGU_WF_SUBSYS_RST,
.done_reg = MT7925_WFSYS_INIT_DONE_ADDR,
.done_mask = U32_MAX,
.done_val = MT7925_WFSYS_INIT_DONE,
.delay_ms = 20,
.need_status_sel = false,
};
int mt792xu_dma_init(struct mt792x_dev *dev, bool resume)
{
int err;
@ -254,7 +263,9 @@ EXPORT_SYMBOL_GPL(mt792xu_dma_init);
int mt792xu_wfsys_reset(struct mt792x_dev *dev)
{
const struct mt792xu_wfsys_desc *desc = &mt7921_wfsys_desc;
const struct mt792xu_wfsys_desc *desc = is_mt7925(&dev->mt76) ?
&mt7925_wfsys_desc :
&mt7921_wfsys_desc;
u32 val;
int i;