diff options
author | Taijian | 2023-04-30 18:03:18 +0200 |
---|---|---|
committer | Taijian | 2023-04-30 18:03:18 +0200 |
commit | 2bbfe28010ae41a3b1c86d9c25a6f290c684d73c (patch) | |
tree | 914baa11ce95f6fd7f51e830515f40560539611c /sys-kernel_arch-sources-g14_files-8013-mt76-mt7921-robustify-hardware-initialization-flow.patch | |
parent | b22e68a9a1b450e86ef9a67dcfaea475633a4f4f (diff) | |
download | aur-2bbfe28010ae41a3b1c86d9c25a6f290c684d73c.tar.gz |
update to 6.2.12-2
Diffstat (limited to 'sys-kernel_arch-sources-g14_files-8013-mt76-mt7921-robustify-hardware-initialization-flow.patch')
-rw-r--r-- | sys-kernel_arch-sources-g14_files-8013-mt76-mt7921-robustify-hardware-initialization-flow.patch | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/sys-kernel_arch-sources-g14_files-8013-mt76-mt7921-robustify-hardware-initialization-flow.patch b/sys-kernel_arch-sources-g14_files-8013-mt76-mt7921-robustify-hardware-initialization-flow.patch deleted file mode 100644 index f475476f8832..000000000000 --- a/sys-kernel_arch-sources-g14_files-8013-mt76-mt7921-robustify-hardware-initialization-flow.patch +++ /dev/null @@ -1,125 +0,0 @@ -From: <sean.wang@mediatek.com> -To: <nbd@nbd.name>, <lorenzo.bianconi@redhat.com> -CC: <sean.wang@mediatek.com>, <Soul.Huang@mediatek.com>, - <YN.Chen@mediatek.com>, <Leon.Yen@mediatek.com>, - <Eric-SY.Chang@mediatek.com>, <Deren.Wu@mediatek.com>, <km.lin@mediatek.com>, - <robin.chiu@mediatek.com>, <ch.yeh@mediatek.com>, <posh.sun@mediatek.com>, - <ted.huang@mediatek.com>, <Eric.Liang@mediatek.com>, - <Stella.Chang@mediatek.com>, <jemele@google.com>, - <linux-wireless@vger.kernel.org>, <linux-mediatek@lists.infradead.org> -Subject: [PATCH 1/2] mt76: mt7921: robustify hardware initialization flow -Date: Tue, 14 Sep 2021 23:50:21 +0800 - -From: Sean Wang <sean.wang@mediatek.com> - -Robustify hardware initialization in the current driver probing flow -to get rid of the device is possibly lost after the machine boot due -to possible firmware abnormal state by trying to recover the failure -with more chances. - -Tested-by: Leon Yen <Leon.Yen@mediatek.com> -Tested-by: YN Chen <YN.Chen@mediatek.com> -Signed-off-by: Sean Wang <sean.wang@mediatek.com> ---- - .../net/wireless/mediatek/mt76/mt7921/init.c | 53 ++++++++++++++----- - .../wireless/mediatek/mt76/mt7921/mt7921.h | 1 + - 2 files changed, 41 insertions(+), 13 deletions(-) - -diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c -index 1f37e64b6038..d26166a612f0 100644 ---- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c -+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c -@@ -146,33 +146,60 @@ int mt7921_mac_init(struct mt7921_dev *dev) - return mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b, 0); - } - --static int mt7921_init_hardware(struct mt7921_dev *dev) -+static int __mt7921_init_hardware(struct mt7921_dev *dev) - { -- int ret, idx; -- -- ret = mt7921_dma_init(dev); -- if (ret) -- return ret; -- -- set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state); -+ struct mt76_dev *mdev = &dev->mt76; -+ int ret; - - /* force firmware operation mode into normal state, - * which should be set before firmware download stage. - */ - mt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE); -- - ret = mt7921_mcu_init(dev); - if (ret) -- return ret; -+ goto out; - - ret = mt7921_eeprom_init(dev); -- if (ret < 0) -- return ret; -+ if (ret) -+ goto out; - - ret = mt7921_mcu_set_eeprom(dev); -+ if (ret) -+ goto out; -+ -+ ret = mt7921_mac_init(dev); -+out: -+ if (ret && mdev->eeprom.data) { -+ devm_kfree(mdev->dev, mdev->eeprom.data); -+ mdev->eeprom.data = NULL; -+ } -+ -+ return ret; -+} -+ -+static int mt7921_init_hardware(struct mt7921_dev *dev) -+{ -+ int ret, idx, i; -+ -+ ret = mt7921_dma_init(dev); - if (ret) - return ret; - -+ set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state); -+ -+ for (i = 0; i < MT7921_MCU_INIT_RETRY_COUNT; i++) { -+ ret = __mt7921_init_hardware(dev); -+ if (!ret) -+ break; -+ -+ mt7921_wpdma_reset(dev, true); -+ } -+ -+ if (i == MT7921_MCU_INIT_RETRY_COUNT) { -+ dev_err(dev->mt76.dev, "hardware init failed\n"); -+ return ret; -+ } -+ - /* Beacon and mgmt frames should occupy wcid 0 */ - idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1); - if (idx) -@@ -183,7 +210,7 @@ static int mt7921_init_hardware(struct mt7921_dev *dev) - dev->mt76.global_wcid.tx_info |= MT_WCID_TX_INFO_SET; - rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid); - -- return mt7921_mac_init(dev); -+ return 0; - } - - int mt7921_register_device(struct mt7921_dev *dev) -diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h -index 6a47ba65b96e..cee7a2507224 100644 ---- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h -+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h -@@ -29,6 +29,7 @@ - #define MT7921_RX_MCU_RING_SIZE 512 - - #define MT7921_DRV_OWN_RETRY_COUNT 10 -+#define MT7921_MCU_INIT_RETRY_COUNT 10 - - #define MT7921_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7961_1.bin" - #define MT7921_ROM_PATCH "mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin" |