From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A961303C83 for ; Sat, 25 Apr 2026 19:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777146680; cv=none; b=c8MuA4DInP9Nl/ZHhWTujXYIhvKz/mrc9dH+bG7JATlHiBmHSuVuvJ+hgqS6adIa8lmuVT9HxnOGnuYlP2Ftrys4lA0DLq/33OUXj9vW/suyA1xynDcTm3LITcOGm/IIX31o83O8yvlKI7C0ktxtOWN9N2lsD2gz4mlRQ/CXrEQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777146680; c=relaxed/simple; bh=LETCSAWF6YXu9BnNcXUXHnGG6yRcoZX5kL7KBDzu6X8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hZ1HTsEU9Tu0Jc+g8k0nJLCBZ3vOOTQAhM1ZMvtuEieYpL/55PpcVuvaRf0FymAsFtagGSnnCWUefrfRD2QvoMGHHk839DjlOud3QEK3xgwx1jQtKulEdV6JEJbTIt9OR+rg4hZYTOHqX+jnXQ95mgflh+yXiU6BICIakUkJQ30= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=kernel.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=kernel.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-7de4550dfabso2817783a34.2 for ; Sat, 25 Apr 2026 12:51:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777146678; x=1777751478; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tuwf+IrsTpmukx1qHarGwYw+wkWNu4tsqhqDQWh45rg=; b=dU7r4370gsmGTIvIrrgVxKMuII0XJfwsGSUa5iFSXd8C6sPBLGRhlotLiLf3AtTMvV 0QuDoh99PJpLOpCV7Aa4z/SY1ur8ADyH+lfkSg3q+HNCazN6wpV0XA5DkSKgkFACyoR1 LA64yW5b9XwYY/y0o+BxeQhBHk2z8arRSBWAoFINHj2Xauv+7xAYw9bapmSidUrIvJnx 91m08lfzhoSpL/27roCgoj9Io4b5mQGBpyPkBK/XyUBgkftZePPGyudbYisR7+PLnCzY V4R4UjIf30sp4FETosMBXn2Ap0xCBJupaCk0iGc/yDs+R03yHO9kHPYRcIWPRHRpx5z4 nPVg== X-Gm-Message-State: AOJu0YzsrvuERUz2V2lSYur+Pd7JZL72pbGknv0pTx3wSgc8ZWDc7Wfu qah+hlSzGqabtpETlSRCHxAKNMY6Ofbb34/mxG2EnMYEWhrvlvznYqAU X-Gm-Gg: AeBDietEq8BBeJeV6JbbjhtA4S7UVjETcUfA4Hw43flKOXDjJJDSzsK4DrBnhbUhoDm 7SSETaX3vXazxJo6EqHrHc/fVM1Qho7BTfqRVYsc7zWik6wqGSaIWzG3e29j01Adqcb7hkNwWV5 FwcZtaLQNNM4VUEg/w787CQihzHK/AtitAzFTdk0o+sQV9jVnMd+kyV2dTfC9NgYxdVStBZNJcG kxeg+OR2x0faRM1J4kjkHyentuSJ3N7WOn4Q0kfe0FuAdPfsEJe0yzVhimgglmQ6LGAO7LnCECe vvkrq8YcH72ggpl2fvQ8eiOl0W6dnTL4KOh8ZhhIAMDpjllLdM5JFt9VDZ6Ri1pCDPUe+bsR1jy vztUpN8Ta3t3kwCbW/istN3Wyxgpv8I/x2za1f+K3RmSkbpa728azij0tBN5gCYSmrAUoS7Lbni X95vWKrROrX6gCWbtQjEHmHhdayp3QrnQRbvNG3W9B1qlYxJLmtbpuLL68EfPzfvT+dn3Dny28I Q== X-Received: by 2002:a05:6830:370a:b0:7d9:7201:1ac1 with SMTP id 46e09a7af769-7dc94fca71bmr22040110a34.3.1777146678174; Sat, 25 Apr 2026 12:51:18 -0700 (PDT) Received: from sean-HP-EliteBook-830-G6.attlocal.net ([2600:1702:5083:7610:2e29:c3c3:de27:ce76]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7dcd164d2c3sm13987624a34.24.2026.04.25.12.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Apr 2026 12:51:17 -0700 (PDT) From: Sean Wang To: nbd@nbd.name, lorenzo.bianconi@redhat.com Cc: linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org, Javier Tia , Marcin FM , Cristian-Florin Radoi , George Salukvadze , Evgeny Kapusta <3193631@gmail.com>, Samu Toljamo , Ariel Rosenfeld , Chapuis Dario , =?UTF-8?q?Thibaut=20Fran=C3=A7ois?= , =?UTF-8?q?=E5=BC=A0=E6=97=AD=E6=B6=B5?= , Sean Wang Subject: [PATCH v5 08/21] wifi: mt76: mt7925: use irq_map for chip-specific interrupt handling Date: Sat, 25 Apr 2026 14:49:58 -0500 Message-ID: <20260425195011.790265-9-sean.wang@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260425195011.790265-1-sean.wang@kernel.org> References: <20260425195011.790265-1-sean.wang@kernel.org> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Javier Tia The mac_reset and resume paths use the hardcoded MT_INT_RX_DONE_ALL constant (bits 0-2) to re-enable RX interrupts. This is correct for MT7925 (RX rings 0, 1, 2) but wrong for chips using different ring indices. Define a per-chip irq_map with the correct RX interrupt enable bits and replace hardcoded MT_INT_RX_DONE_ALL with irq_map field reads in the resume and mac_reset paths. Add the MT7927 irq_map with interrupt bits matching its RX ring layout (rings 4, 6, 7), selected at probe time based on PCI device ID. This ensures the correct interrupt bits are enabled regardless of the chip variant. Tested-by: Marcin FM Tested-by: Cristian-Florin Radoi Tested-by: George Salukvadze Tested-by: Evgeny Kapusta <3193631@gmail.com> Tested-by: Samu Toljamo Tested-by: Ariel Rosenfeld Tested-by: Chapuis Dario Tested-by: Thibaut François Tested-by: 张旭涵 Reviewed-by: Sean Wang Signed-off-by: Javier Tia --- .../net/wireless/mediatek/mt76/mt7925/pci.c | 21 +++++++++++++++++-- .../wireless/mediatek/mt76/mt7925/pci_mac.c | 5 ++++- .../net/wireless/mediatek/mt76/mt792x_regs.h | 3 +++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c index f820d5aeb723..604c0e9ae7ba 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c @@ -266,6 +266,18 @@ static int mt7925_dma_init(struct mt792x_dev *dev) return mt792x_dma_enable(dev); } +static const struct mt792x_irq_map mt7927_irq_map = { + .host_irq_enable = MT_WFDMA0_HOST_INT_ENA, + .tx = { + .all_complete_mask = MT_INT_TX_DONE_ALL, + .mcu_complete_mask = MT_INT_TX_DONE_MCU, + }, + .rx = { + .data_complete_mask = MT7927_RX_DONE_INT_ENA4, + .wm_complete_mask = MT7927_RX_DONE_INT_ENA6, + .wm2_complete_mask = MT7927_RX_DONE_INT_ENA7, + }, +}; static int mt7925_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -310,6 +322,7 @@ static int mt7925_pci_probe(struct pci_dev *pdev, struct mt76_bus_ops *bus_ops; struct mt792x_dev *dev; struct mt76_dev *mdev; + bool is_mt7927_hw; u8 features; int ret; u16 cmd; @@ -358,7 +371,8 @@ static int mt7925_pci_probe(struct pci_dev *pdev, dev = container_of(mdev, struct mt792x_dev, mt76); dev->fw_features = features; dev->hif_ops = &mt7925_pcie_ops; - dev->irq_map = &irq_map; + is_mt7927_hw = (pdev->device == 0x6639 || pdev->device == 0x7927); + dev->irq_map = is_mt7927_hw ? &mt7927_irq_map : &irq_map; mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]); tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev); @@ -549,7 +563,10 @@ static int _mt7925_pci_resume(struct device *device, bool restore) mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff); mt76_connac_irq_enable(&dev->mt76, dev->irq_map->tx.all_complete_mask | - MT_INT_RX_DONE_ALL | MT_INT_MCU_CMD); + dev->irq_map->rx.data_complete_mask | + dev->irq_map->rx.wm_complete_mask | + dev->irq_map->rx.wm2_complete_mask | + MT_INT_MCU_CMD); mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE); /* put dma enabled */ diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c index 3072850c2752..1626a3684082 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c @@ -118,7 +118,10 @@ int mt7925e_mac_reset(struct mt792x_dev *dev) mt76_wr(dev, dev->irq_map->host_irq_enable, dev->irq_map->tx.all_complete_mask | - MT_INT_RX_DONE_ALL | MT_INT_MCU_CMD); + dev->irq_map->rx.data_complete_mask | + dev->irq_map->rx.wm_complete_mask | + dev->irq_map->rx.wm2_complete_mask | + MT_INT_MCU_CMD); mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff); err = mt792xe_mcu_fw_pmctrl(dev); diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_regs.h b/drivers/net/wireless/mediatek/mt76/mt792x_regs.h index d2a8b2b0df32..20d27ae89aca 100644 --- a/drivers/net/wireless/mediatek/mt76/mt792x_regs.h +++ b/drivers/net/wireless/mediatek/mt76/mt792x_regs.h @@ -310,6 +310,9 @@ #define HOST_RX_DONE_INT_ENA1 BIT(1) #define HOST_RX_DONE_INT_ENA2 BIT(2) #define HOST_RX_DONE_INT_ENA3 BIT(3) +#define MT7927_RX_DONE_INT_ENA4 BIT(12) +#define MT7927_RX_DONE_INT_ENA6 BIT(14) +#define MT7927_RX_DONE_INT_ENA7 BIT(15) #define HOST_TX_DONE_INT_ENA0 BIT(4) #define HOST_TX_DONE_INT_ENA1 BIT(5) #define HOST_TX_DONE_INT_ENA2 BIT(6) -- 2.43.0