Skip to content

Commit 525c469

Browse files
Quanzhoucenkuba-moo
authored andcommitted
wifi: mt76: mt7921e: fix init command fail with enabled device
For some cases as below, we may encounter the unpreditable chip stats in driver probe() * The system reboot flow do not work properly, such as kernel oops while rebooting, and then the driver do not go back to default status at this moment. * Similar to the flow above. If the device was enabled in BIOS or UEFI, the system may switch to Linux without driver fully shutdown. To avoid the problem, force push the device back to default in probe() * mt7921e_mcu_fw_pmctrl() : return control privilege to chip side. * mt7921_wfsys_reset() : cleanup chip config before resource init. Error log [59007.600714] mt7921e 0000:02:00.0: ASIC revision: 79220010 [59010.889773] mt7921e 0000:02:00.0: Message 00000010 (seq 1) timeout [59010.889786] mt7921e 0000:02:00.0: Failed to get patch semaphore [59014.217839] mt7921e 0000:02:00.0: Message 00000010 (seq 2) timeout [59014.217852] mt7921e 0000:02:00.0: Failed to get patch semaphore [59017.545880] mt7921e 0000:02:00.0: Message 00000010 (seq 3) timeout [59017.545893] mt7921e 0000:02:00.0: Failed to get patch semaphore [59020.874086] mt7921e 0000:02:00.0: Message 00000010 (seq 4) timeout [59020.874099] mt7921e 0000:02:00.0: Failed to get patch semaphore [59024.202019] mt7921e 0000:02:00.0: Message 00000010 (seq 5) timeout [59024.202033] mt7921e 0000:02:00.0: Failed to get patch semaphore [59027.530082] mt7921e 0000:02:00.0: Message 00000010 (seq 6) timeout [59027.530096] mt7921e 0000:02:00.0: Failed to get patch semaphore [59030.857888] mt7921e 0000:02:00.0: Message 00000010 (seq 7) timeout [59030.857904] mt7921e 0000:02:00.0: Failed to get patch semaphore [59034.185946] mt7921e 0000:02:00.0: Message 00000010 (seq 8) timeout [59034.185961] mt7921e 0000:02:00.0: Failed to get patch semaphore [59037.514249] mt7921e 0000:02:00.0: Message 00000010 (seq 9) timeout [59037.514262] mt7921e 0000:02:00.0: Failed to get patch semaphore [59040.842362] mt7921e 0000:02:00.0: Message 00000010 (seq 10) timeout [59040.842375] mt7921e 0000:02:00.0: Failed to get patch semaphore [59040.923845] mt7921e 0000:02:00.0: hardware init failed Cc: stable@vger.kernel.org Fixes: 5c14a5f ("mt76: mt7921: introduce mt7921e support") Tested-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Tested-by: Juan Martinez <juan.martinez@amd.com> Co-developed-by: Leon Yen <leon.yen@mediatek.com> Signed-off-by: Leon Yen <leon.yen@mediatek.com> Signed-off-by: Quan Zhou <quan.zhou@mediatek.com> Signed-off-by: Deren Wu <deren.wu@mediatek.com> Message-ID: <39fcb7cee08d4ab940d38d82f21897483212483f.1688569385.git.deren.wu@mediatek.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 1ce1a74 commit 525c469

3 files changed

Lines changed: 8 additions & 12 deletions

File tree

drivers/net/wireless/mediatek/mt76/mt7921/dma.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,6 @@ int mt7921_dma_init(struct mt7921_dev *dev)
231231
if (ret)
232232
return ret;
233233

234-
ret = mt7921_wfsys_reset(dev);
235-
if (ret)
236-
return ret;
237-
238234
/* init tx queue */
239235
ret = mt76_connac_init_tx_queues(dev->phy.mt76, MT7921_TXQ_BAND0,
240236
MT7921_TX_RING_SIZE,

drivers/net/wireless/mediatek/mt76/mt7921/mcu.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -476,12 +476,6 @@ static int mt7921_load_firmware(struct mt7921_dev *dev)
476476
{
477477
int ret;
478478

479-
ret = mt76_get_field(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY);
480-
if (ret && mt76_is_mmio(&dev->mt76)) {
481-
dev_dbg(dev->mt76.dev, "Firmware is already download\n");
482-
goto fw_loaded;
483-
}
484-
485479
ret = mt76_connac2_load_patch(&dev->mt76, mt7921_patch_name(dev));
486480
if (ret)
487481
return ret;
@@ -504,8 +498,6 @@ static int mt7921_load_firmware(struct mt7921_dev *dev)
504498
return -EIO;
505499
}
506500

507-
fw_loaded:
508-
509501
#ifdef CONFIG_PM
510502
dev->mt76.hw->wiphy->wowlan = &mt76_connac_wowlan_support;
511503
#endif /* CONFIG_PM */

drivers/net/wireless/mediatek/mt76/mt7921/pci.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,10 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
325325
bus_ops->rmw = mt7921_rmw;
326326
dev->mt76.bus = bus_ops;
327327

328+
ret = mt7921e_mcu_fw_pmctrl(dev);
329+
if (ret)
330+
goto err_free_dev;
331+
328332
ret = __mt7921e_mcu_drv_pmctrl(dev);
329333
if (ret)
330334
goto err_free_dev;
@@ -333,6 +337,10 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
333337
(mt7921_l1_rr(dev, MT_HW_REV) & 0xff);
334338
dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
335339

340+
ret = mt7921_wfsys_reset(dev);
341+
if (ret)
342+
goto err_free_dev;
343+
336344
mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
337345

338346
mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);

0 commit comments

Comments
 (0)