From: Lorenzo Bianconi <lorenzo@kernel.org> To: sean.wang@mediatek.com Cc: nbd@nbd.name, lorenzo.bianconi@redhat.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, Eric.Liang@mediatek.com, Stella.Chang@mediatek.com, jemele@google.com, yenlinlai@google.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org Subject: Re: [PATCH 3/7] mt76: mt7921: fix reset under the deep sleep is enabled Date: Sun, 23 May 2021 23:14:03 +0200 [thread overview] Message-ID: <YKrFm69xI1vZ135y@lore-desk> (raw) In-Reply-To: <1621482401-29025-3-git-send-email-sean.wang@mediatek.com> [-- Attachment #1: Type: text/plain, Size: 8452 bytes --] > From: Sean Wang <sean.wang@mediatek.com> > > To fix possibly the race to access register between the WiFi reset > and the other context that is caused by explicitly cancelling ps_work > and wake_work to break PM_STATE consistency. > > Deep sleep would cause the hardware into the inactive state, > so we forcely put device drv_own state before we start to reset. > > The patch also ignore the reset request when the procedure is in > progress to avoid the consecutive WiFi resets. > > localhost ~ # [ 2932.073966] SError Interrupt on CPU7, code 0xbe000011 > [ 2932.073967] CPU: 7 PID: 8761 Comm: kworker/u16:2 Not tainted 5.4.112 #30 > [ 2932.073968] Hardware name: MediaTek Asurada rev1 board (DT) > [ 2932.073968] Workqueue: phy0 ieee80211_reconfig_filter [mac80211] > [ 2932.073969] pstate: 80400089 (Nzcv daIf +PAN -UAO) > [ 2932.073969] pc : el1_irq+0x78/0x180 > [ 2932.073970] lr : mt76_mmio_rmw+0x30/0x5c [mt76] > [ 2932.073970] sp : ffffffc01142bad0 > [ 2932.073970] x29: ffffffc01142bc00 x28: ffffff8f96fb1e00 > [ 2932.073971] x27: ffffffd2cdc12138 x26: ffffffd2cdaeb018 > [ 2932.073972] x25: 0000000000000000 x24: ffffff8fa8e14c08 > [ 2932.073973] x23: 0000000080c00009 x22: ffffffd2a5603918 > [ 2932.073974] x21: ffffffc01142bc10 x20: 0000007fffffffff > [ 2932.073975] x19: 0000000000000000 x18: 0000000000000400 > [ 2932.073975] x17: 0000000000000400 x16: ffffffd2cd2b87dc > [ 2932.073976] x15: 0000000000000000 x14: 0000000000000000 > [ 2932.073977] x13: 0000000000000001 x12: 0000000000000001 > [ 2932.073978] x11: 0000000000000001 x10: 000000000010e000 > [ 2932.073978] x9 : 0000000000000000 x8 : ffffffc013921404 > [ 2932.073979] x7 : 000000b2b5593519 x6 : 0000000000300000 > [ 2932.073980] x5 : 0000000000000000 x4 : ffffffc01142bbc8 > [ 2932.073980] x3 : 00000000000001f0 x2 : 0000000000000000 > [ 2932.073981] x1 : 0000000000021404 x0 : ffffff8fa8e12300 > [ 2932.073982] Kernel panic - not syncing: Asynchronous SError Interrupt > [ 2932.073983] CPU: 7 PID: 8761 Comm: kworker/u16:2 Not tainted 5.4.112 #30 > [ 2932.073983] Hardware name: MediaTek Asurada rev1 board (DT) > [ 2932.073984] Workqueue: phy0 ieee80211_reconfig_filter [mac80211] > [ 2932.073984] Call trace: > [ 2932.073985] dump_backtrace+0x0/0x14c > [ 2932.073985] show_stack+0x20/0x2c > [ 2932.073985] dump_stack+0xa0/0xf8 > [ 2932.073986] panic+0x154/0x360 > [ 2932.073986] test_taint+0x0/0x44 > [ 2932.073986] arm64_serror_panic+0x78/0x84 > [ 2932.073987] do_serror+0x0/0x118 > [ 2932.073987] do_serror+0xa4/0x118 > [ 2932.073987] el1_error+0x84/0xf8 > [ 2932.073988] el1_irq+0x78/0x180 > [ 2932.073988] mt76_mmio_rr+0x30/0xf0 [mt76] > [ 2932.073988] mt76_mmio_rmw+0x30/0x5c [mt76] > [ 2932.073989] mt7921_rmw+0x4c/0x5c [mt7921e] > [ 2932.073989] mt7921_configure_filter+0x138/0x160 [mt7921e] > [ 2932.073990] ieee80211_configure_filter+0x2f0/0x3e0 [mac80211] > [ 2932.073990] ieee80211_reconfig_filter+0x1c/0x28 [mac80211] > [ 2932.073990] process_one_work+0x208/0x3c8 > [ 2932.073991] worker_thread+0x23c/0x3e8 > [ 2932.073991] kthread+0x140/0x17c > [ 2932.073992] ret_from_fork+0x10/0x18 > [ 2932.074071] SMP: stopping secondary CPUs > [ 2932.074071] Kernel Offset: 0x12bc800000 from 0xffffffc010000000 > [ 2932.074072] PHYS_OFFSET: 0xfffffff180000000 > [ 2932.074072] CPU features: 0x080026,2a80aa18 > [ 2932.074072] Memory Limit: none > > Fixes: 87843566e581 ("mt76: mt7921: enable deep sleep at runtime") > Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > Signed-off-by: Sean Wang <sean.wang@mediatek.com> > --- > .../net/wireless/mediatek/mt76/mt7921/mac.c | 21 +++++++++-------- > .../net/wireless/mediatek/mt76/mt7921/mcu.c | 23 ++++++++++++++----- > .../wireless/mediatek/mt76/mt7921/mt7921.h | 1 + > 3 files changed, 30 insertions(+), 15 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > index e29d4fdab572..ebd365ceb70d 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > @@ -1284,9 +1284,10 @@ mt7921_mac_reset(struct mt7921_dev *dev) > mt76_worker_enable(&dev->mt76.tx_worker); > > clear_bit(MT76_MCU_RESET, &dev->mphy.state); > - clear_bit(MT76_STATE_PM, &dev->mphy.state); > > - mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0); > + mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, > + MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL | > + MT_INT_MCU_CMD); > mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff); > > err = mt7921_run_firmware(dev); > @@ -1304,22 +1305,23 @@ mt7921_mac_reset(struct mt7921_dev *dev) > /* system error recovery */ > void mt7921_mac_reset_work(struct work_struct *work) > { > - struct ieee80211_hw *hw; > - struct mt7921_dev *dev; > + struct mt7921_dev *dev = container_of(work, struct mt7921_dev, > + reset_work); > + struct ieee80211_hw *hw = mt76_hw(dev); > + struct mt76_connac_pm *pm = &dev->pm; > int i; > > - dev = container_of(work, struct mt7921_dev, reset_work); > - hw = mt76_hw(dev); > - > dev_err(dev->mt76.dev, "chip reset\n"); > ieee80211_stop_queues(hw); > > cancel_delayed_work_sync(&dev->mphy.mac_work); > - cancel_delayed_work_sync(&dev->pm.ps_work); > - cancel_work_sync(&dev->pm.wake_work); > + cancel_delayed_work_sync(&pm->ps_work); > + cancel_work_sync(&pm->wake_work); > > mutex_lock(&dev->mt76.mutex); > for (i = 0; i < 10; i++) { > + __mt7921_mcu_drv_pmctrl(dev); > + > if (!mt7921_mac_reset(dev)) > break; > } > @@ -1340,6 +1342,7 @@ void mt7921_mac_reset_work(struct work_struct *work) > ieee80211_iterate_active_interfaces(hw, > IEEE80211_IFACE_ITER_RESUME_ALL, > mt7921_vif_connect_iter, NULL); > + mt76_connac_power_save_sched(&dev->mt76.phy, pm); I guess we should avoid mt7921_vif_connect_iter and mt76_connac_power_save_sched if hw reset fails, what do you think? Regards, Lorenzo > } > > void mt7921_reset(struct mt76_dev *mdev) > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > index 5a4c695f73c9..486e5593d99a 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > @@ -1296,17 +1296,12 @@ int mt7921_mcu_sta_add(struct mt7921_dev *dev, struct ieee80211_sta *sta, > return mt76_connac_mcu_add_sta_cmd(&dev->mphy, &info); > } > > -int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > +int __mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > { > struct mt76_phy *mphy = &dev->mt76.phy; > struct mt76_connac_pm *pm = &dev->pm; > int i, err = 0; > > - mutex_lock(&pm->mutex); > - > - if (!test_bit(MT76_STATE_PM, &mphy->state)) > - goto out; > - > for (i = 0; i < MT7921_DRV_OWN_RETRY_COUNT; i++) { > mt76_wr(dev, MT_CONN_ON_LPCTL, PCIE_LPCR_HOST_CLR_OWN); > if (mt76_poll_msec(dev, MT_CONN_ON_LPCTL, > @@ -1326,6 +1321,22 @@ int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > pm->stats.last_wake_event = jiffies; > pm->stats.doze_time += pm->stats.last_wake_event - > pm->stats.last_doze_event; > +out: > + return err; > +} > + > +int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > +{ > + struct mt76_phy *mphy = &dev->mt76.phy; > + struct mt76_connac_pm *pm = &dev->pm; > + int err = 0; > + > + mutex_lock(&pm->mutex); > + > + if (!test_bit(MT76_STATE_PM, &mphy->state)) > + goto out; > + > + err = __mt7921_mcu_drv_pmctrl(dev); > out: > mutex_unlock(&pm->mutex); > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h > index 59862ea4951c..03bcb210c357 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h > @@ -368,6 +368,7 @@ int mt7921_mcu_uni_bss_bcnft(struct mt7921_dev *dev, struct ieee80211_vif *vif, > bool enable); > int mt7921_mcu_set_bss_pm(struct mt7921_dev *dev, struct ieee80211_vif *vif, > bool enable); > +int __mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev); > int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev); > int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev); > void mt7921_pm_wake_work(struct work_struct *work); > -- > 2.25.1 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Lorenzo Bianconi <lorenzo@kernel.org> To: sean.wang@mediatek.com Cc: nbd@nbd.name, lorenzo.bianconi@redhat.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, Eric.Liang@mediatek.com, Stella.Chang@mediatek.com, jemele@google.com, yenlinlai@google.com, linux-wireless@vger.kernel.org, linux-mediatek@lists.infradead.org Subject: Re: [PATCH 3/7] mt76: mt7921: fix reset under the deep sleep is enabled Date: Sun, 23 May 2021 23:14:03 +0200 [thread overview] Message-ID: <YKrFm69xI1vZ135y@lore-desk> (raw) In-Reply-To: <1621482401-29025-3-git-send-email-sean.wang@mediatek.com> [-- Attachment #1.1: Type: text/plain, Size: 8452 bytes --] > From: Sean Wang <sean.wang@mediatek.com> > > To fix possibly the race to access register between the WiFi reset > and the other context that is caused by explicitly cancelling ps_work > and wake_work to break PM_STATE consistency. > > Deep sleep would cause the hardware into the inactive state, > so we forcely put device drv_own state before we start to reset. > > The patch also ignore the reset request when the procedure is in > progress to avoid the consecutive WiFi resets. > > localhost ~ # [ 2932.073966] SError Interrupt on CPU7, code 0xbe000011 > [ 2932.073967] CPU: 7 PID: 8761 Comm: kworker/u16:2 Not tainted 5.4.112 #30 > [ 2932.073968] Hardware name: MediaTek Asurada rev1 board (DT) > [ 2932.073968] Workqueue: phy0 ieee80211_reconfig_filter [mac80211] > [ 2932.073969] pstate: 80400089 (Nzcv daIf +PAN -UAO) > [ 2932.073969] pc : el1_irq+0x78/0x180 > [ 2932.073970] lr : mt76_mmio_rmw+0x30/0x5c [mt76] > [ 2932.073970] sp : ffffffc01142bad0 > [ 2932.073970] x29: ffffffc01142bc00 x28: ffffff8f96fb1e00 > [ 2932.073971] x27: ffffffd2cdc12138 x26: ffffffd2cdaeb018 > [ 2932.073972] x25: 0000000000000000 x24: ffffff8fa8e14c08 > [ 2932.073973] x23: 0000000080c00009 x22: ffffffd2a5603918 > [ 2932.073974] x21: ffffffc01142bc10 x20: 0000007fffffffff > [ 2932.073975] x19: 0000000000000000 x18: 0000000000000400 > [ 2932.073975] x17: 0000000000000400 x16: ffffffd2cd2b87dc > [ 2932.073976] x15: 0000000000000000 x14: 0000000000000000 > [ 2932.073977] x13: 0000000000000001 x12: 0000000000000001 > [ 2932.073978] x11: 0000000000000001 x10: 000000000010e000 > [ 2932.073978] x9 : 0000000000000000 x8 : ffffffc013921404 > [ 2932.073979] x7 : 000000b2b5593519 x6 : 0000000000300000 > [ 2932.073980] x5 : 0000000000000000 x4 : ffffffc01142bbc8 > [ 2932.073980] x3 : 00000000000001f0 x2 : 0000000000000000 > [ 2932.073981] x1 : 0000000000021404 x0 : ffffff8fa8e12300 > [ 2932.073982] Kernel panic - not syncing: Asynchronous SError Interrupt > [ 2932.073983] CPU: 7 PID: 8761 Comm: kworker/u16:2 Not tainted 5.4.112 #30 > [ 2932.073983] Hardware name: MediaTek Asurada rev1 board (DT) > [ 2932.073984] Workqueue: phy0 ieee80211_reconfig_filter [mac80211] > [ 2932.073984] Call trace: > [ 2932.073985] dump_backtrace+0x0/0x14c > [ 2932.073985] show_stack+0x20/0x2c > [ 2932.073985] dump_stack+0xa0/0xf8 > [ 2932.073986] panic+0x154/0x360 > [ 2932.073986] test_taint+0x0/0x44 > [ 2932.073986] arm64_serror_panic+0x78/0x84 > [ 2932.073987] do_serror+0x0/0x118 > [ 2932.073987] do_serror+0xa4/0x118 > [ 2932.073987] el1_error+0x84/0xf8 > [ 2932.073988] el1_irq+0x78/0x180 > [ 2932.073988] mt76_mmio_rr+0x30/0xf0 [mt76] > [ 2932.073988] mt76_mmio_rmw+0x30/0x5c [mt76] > [ 2932.073989] mt7921_rmw+0x4c/0x5c [mt7921e] > [ 2932.073989] mt7921_configure_filter+0x138/0x160 [mt7921e] > [ 2932.073990] ieee80211_configure_filter+0x2f0/0x3e0 [mac80211] > [ 2932.073990] ieee80211_reconfig_filter+0x1c/0x28 [mac80211] > [ 2932.073990] process_one_work+0x208/0x3c8 > [ 2932.073991] worker_thread+0x23c/0x3e8 > [ 2932.073991] kthread+0x140/0x17c > [ 2932.073992] ret_from_fork+0x10/0x18 > [ 2932.074071] SMP: stopping secondary CPUs > [ 2932.074071] Kernel Offset: 0x12bc800000 from 0xffffffc010000000 > [ 2932.074072] PHYS_OFFSET: 0xfffffff180000000 > [ 2932.074072] CPU features: 0x080026,2a80aa18 > [ 2932.074072] Memory Limit: none > > Fixes: 87843566e581 ("mt76: mt7921: enable deep sleep at runtime") > Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > Signed-off-by: Sean Wang <sean.wang@mediatek.com> > --- > .../net/wireless/mediatek/mt76/mt7921/mac.c | 21 +++++++++-------- > .../net/wireless/mediatek/mt76/mt7921/mcu.c | 23 ++++++++++++++----- > .../wireless/mediatek/mt76/mt7921/mt7921.h | 1 + > 3 files changed, 30 insertions(+), 15 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > index e29d4fdab572..ebd365ceb70d 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c > @@ -1284,9 +1284,10 @@ mt7921_mac_reset(struct mt7921_dev *dev) > mt76_worker_enable(&dev->mt76.tx_worker); > > clear_bit(MT76_MCU_RESET, &dev->mphy.state); > - clear_bit(MT76_STATE_PM, &dev->mphy.state); > > - mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0); > + mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, > + MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL | > + MT_INT_MCU_CMD); > mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff); > > err = mt7921_run_firmware(dev); > @@ -1304,22 +1305,23 @@ mt7921_mac_reset(struct mt7921_dev *dev) > /* system error recovery */ > void mt7921_mac_reset_work(struct work_struct *work) > { > - struct ieee80211_hw *hw; > - struct mt7921_dev *dev; > + struct mt7921_dev *dev = container_of(work, struct mt7921_dev, > + reset_work); > + struct ieee80211_hw *hw = mt76_hw(dev); > + struct mt76_connac_pm *pm = &dev->pm; > int i; > > - dev = container_of(work, struct mt7921_dev, reset_work); > - hw = mt76_hw(dev); > - > dev_err(dev->mt76.dev, "chip reset\n"); > ieee80211_stop_queues(hw); > > cancel_delayed_work_sync(&dev->mphy.mac_work); > - cancel_delayed_work_sync(&dev->pm.ps_work); > - cancel_work_sync(&dev->pm.wake_work); > + cancel_delayed_work_sync(&pm->ps_work); > + cancel_work_sync(&pm->wake_work); > > mutex_lock(&dev->mt76.mutex); > for (i = 0; i < 10; i++) { > + __mt7921_mcu_drv_pmctrl(dev); > + > if (!mt7921_mac_reset(dev)) > break; > } > @@ -1340,6 +1342,7 @@ void mt7921_mac_reset_work(struct work_struct *work) > ieee80211_iterate_active_interfaces(hw, > IEEE80211_IFACE_ITER_RESUME_ALL, > mt7921_vif_connect_iter, NULL); > + mt76_connac_power_save_sched(&dev->mt76.phy, pm); I guess we should avoid mt7921_vif_connect_iter and mt76_connac_power_save_sched if hw reset fails, what do you think? Regards, Lorenzo > } > > void mt7921_reset(struct mt76_dev *mdev) > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > index 5a4c695f73c9..486e5593d99a 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c > @@ -1296,17 +1296,12 @@ int mt7921_mcu_sta_add(struct mt7921_dev *dev, struct ieee80211_sta *sta, > return mt76_connac_mcu_add_sta_cmd(&dev->mphy, &info); > } > > -int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > +int __mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > { > struct mt76_phy *mphy = &dev->mt76.phy; > struct mt76_connac_pm *pm = &dev->pm; > int i, err = 0; > > - mutex_lock(&pm->mutex); > - > - if (!test_bit(MT76_STATE_PM, &mphy->state)) > - goto out; > - > for (i = 0; i < MT7921_DRV_OWN_RETRY_COUNT; i++) { > mt76_wr(dev, MT_CONN_ON_LPCTL, PCIE_LPCR_HOST_CLR_OWN); > if (mt76_poll_msec(dev, MT_CONN_ON_LPCTL, > @@ -1326,6 +1321,22 @@ int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > pm->stats.last_wake_event = jiffies; > pm->stats.doze_time += pm->stats.last_wake_event - > pm->stats.last_doze_event; > +out: > + return err; > +} > + > +int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) > +{ > + struct mt76_phy *mphy = &dev->mt76.phy; > + struct mt76_connac_pm *pm = &dev->pm; > + int err = 0; > + > + mutex_lock(&pm->mutex); > + > + if (!test_bit(MT76_STATE_PM, &mphy->state)) > + goto out; > + > + err = __mt7921_mcu_drv_pmctrl(dev); > out: > mutex_unlock(&pm->mutex); > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h > index 59862ea4951c..03bcb210c357 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h > @@ -368,6 +368,7 @@ int mt7921_mcu_uni_bss_bcnft(struct mt7921_dev *dev, struct ieee80211_vif *vif, > bool enable); > int mt7921_mcu_set_bss_pm(struct mt7921_dev *dev, struct ieee80211_vif *vif, > bool enable); > +int __mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev); > int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev); > int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev); > void mt7921_pm_wake_work(struct work_struct *work); > -- > 2.25.1 > [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek
next prev parent reply other threads:[~2021-05-23 21:14 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-20 3:46 [PATCH RESEND 1/7] mt76: connac: add bss color support for sta mode sean.wang 2021-05-20 3:46 ` [PATCH 2/7] mt76: connac: update BA win size in Rx direction sean.wang 2021-05-20 3:46 ` sean.wang 2021-05-20 3:46 ` [PATCH 3/7] mt76: mt7921: fix reset under the deep sleep is enabled sean.wang 2021-05-20 3:46 ` sean.wang 2021-05-23 21:14 ` Lorenzo Bianconi [this message] 2021-05-23 21:14 ` Lorenzo Bianconi 2021-05-20 3:46 ` [PATCH 4/7] mt76: mt7921: avoid unnecessary consecutive WiFi resets sean.wang 2021-05-20 3:46 ` sean.wang 2021-05-20 3:46 ` [PATCH 5/7] mt76: mt7921: fix invalid register access in wake_work sean.wang 2021-05-20 3:46 ` sean.wang 2021-05-20 3:46 ` [PATCH 6/7] mt76: mt7921: fix OMAC idx usage sean.wang 2021-05-20 3:46 ` sean.wang 2021-05-20 3:46 ` [PATCH 7/7] mt76: mt7921: enable runtime pm by default sean.wang 2021-05-20 3:46 ` sean.wang
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=YKrFm69xI1vZ135y@lore-desk \ --to=lorenzo@kernel.org \ --cc=Deren.Wu@mediatek.com \ --cc=Eric-SY.Chang@mediatek.com \ --cc=Eric.Liang@mediatek.com \ --cc=Leon.Yen@mediatek.com \ --cc=Soul.Huang@mediatek.com \ --cc=Stella.Chang@mediatek.com \ --cc=YN.Chen@mediatek.com \ --cc=ch.yeh@mediatek.com \ --cc=jemele@google.com \ --cc=km.lin@mediatek.com \ --cc=linux-mediatek@lists.infradead.org \ --cc=linux-wireless@vger.kernel.org \ --cc=lorenzo.bianconi@redhat.com \ --cc=nbd@nbd.name \ --cc=posh.sun@mediatek.com \ --cc=robin.chiu@mediatek.com \ --cc=sean.wang@mediatek.com \ --cc=yenlinlai@google.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.