diff mbox series

usb: mtu3: flush cache for next GPD

Message ID 1614758825-6402-1-git-send-email-chunfeng.yun@mediatek.com
State Accepted
Commit 044d7003a7118ad4633e619a81d634cd4c35e670
Delegated to: Marek Vasut
Headers show
Series usb: mtu3: flush cache for next GPD | expand

Commit Message

Chunfeng Yun (云春峰) March 3, 2021, 8:07 a.m. UTC
When flush cache of the current GPD and resume QMU, the controller
will try to access the next GPD after processing the current one,
if not flush the next GPD, the controller may get wrong GPD status.

Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
 drivers/usb/mtu3/mtu3_qmu.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Marek Vasut March 3, 2021, 10:58 a.m. UTC | #1
On 3/3/21 9:07 AM, Chunfeng Yun wrote:
> When flush cache of the current GPD and resume QMU, the controller
> will try to access the next GPD after processing the current one,
> if not flush the next GPD, the controller may get wrong GPD status.

Applied, thanks
diff mbox series

Patch

diff --git a/drivers/usb/mtu3/mtu3_qmu.c b/drivers/usb/mtu3/mtu3_qmu.c
index 801c2bc416..95eaf6d236 100644
--- a/drivers/usb/mtu3/mtu3_qmu.c
+++ b/drivers/usb/mtu3/mtu3_qmu.c
@@ -198,6 +198,7 @@  static int mtu3_prepare_tx_gpd(struct mtu3_ep *mep, struct mtu3_request *mreq)
 
 	enq->flag &= ~GPD_FLAGS_HWO;
 	gpd->next_gpd = cpu_to_le32((u32)gpd_virt_to_dma(ring, enq));
+	mtu3_flush_cache((uintptr_t)enq, sizeof(*gpd));
 
 	if (req->zero)
 		gpd->ext_flag |= GPD_EXT_FLAG_ZLP;
@@ -234,6 +235,8 @@  static int mtu3_prepare_rx_gpd(struct mtu3_ep *mep, struct mtu3_request *mreq)
 
 	enq->flag &= ~GPD_FLAGS_HWO;
 	gpd->next_gpd = cpu_to_le32((u32)gpd_virt_to_dma(ring, enq));
+	mtu3_flush_cache((uintptr_t)enq, sizeof(*gpd));
+
 	gpd->flag |= GPD_FLAGS_IOC | GPD_FLAGS_HWO;
 
 	mreq->gpd = gpd;