Search Linux Wireless

Re: [PATCH] wifi: mt76: mt7921e: Perform FLR to recovery the device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Il 14/06/23 08:32, Kai-Heng Feng ha scritto:
When "Pre-boot WiFi" is enabled in BIOS, the mt7921e device may not
work:
mt7921e 0000:02:00.0: ASIC revision: 79220010
mt7921e 0000:02:00.0: Message 00000010 (seq 1) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 2) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 3) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 4) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 5) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 6) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 7) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 8) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 9) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: Message 00000010 (seq 10) timeout
mt7921e 0000:02:00.0: Failed to get patch semaphore
mt7921e 0000:02:00.0: hardware init failed

After some trials and errors, it shows that PCI function level reset can
recover the device back to a functional state.

So perform FLR at probe routine to workaround the issue.

Is there any way to check if the device was enabled before booting Linux?

I'm thinking of something like

if (device_is_already_enabled)
	ret = pci_reset_function_locked(....)

Regards,
Angelo


Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
---
  drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index ddb1fa4ee01d..9671fbe35a8e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -262,6 +262,10 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
  	int ret;
  	u16 cmd;
+ ret = pci_reset_function_locked(pdev);
+	if (ret)
+		pci_info(pdev, "Unable to perform FLR\n");
+
  	ret = pcim_enable_device(pdev);
  	if (ret)
  		return ret;





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux