Side effect may happen if use or operator to set schedule parameters
when the parameters are already set before. Set them directly due to
other bits are reserved.

Fixes: 54f6a8af3722 ("usb: xhci-mtk: skip dropping bandwidth of unchecked 
endpoints")
Cc: stable <sta...@vger.kernel.org>
Signed-off-by: Chunfeng Yun <chunfeng....@mediatek.com>
---
 drivers/usb/host/xhci-mtk-sch.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c
index b45e5bf08997..5891f56c64da 100644
--- a/drivers/usb/host/xhci-mtk-sch.c
+++ b/drivers/usb/host/xhci-mtk-sch.c
@@ -643,7 +643,7 @@ int xhci_mtk_add_ep_quirk(struct usb_hcd *hcd, struct 
usb_device *udev,
                 */
                if (usb_endpoint_xfer_int(&ep->desc)
                        || usb_endpoint_xfer_isoc(&ep->desc))
-                       ep_ctx->reserved[0] |= cpu_to_le32(EP_BPKTS(1));
+                       ep_ctx->reserved[0] = cpu_to_le32(EP_BPKTS(1));
 
                return 0;
        }
@@ -730,10 +730,10 @@ int xhci_mtk_check_bandwidth(struct usb_hcd *hcd, struct 
usb_device *udev)
                list_move_tail(&sch_ep->endpoint, &sch_bw->bw_ep_list);
 
                ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
-               ep_ctx->reserved[0] |= cpu_to_le32(EP_BPKTS(sch_ep->pkts)
+               ep_ctx->reserved[0] = cpu_to_le32(EP_BPKTS(sch_ep->pkts)
                        | EP_BCSCOUNT(sch_ep->cs_count)
                        | EP_BBM(sch_ep->burst_mode));
-               ep_ctx->reserved[1] |= cpu_to_le32(EP_BOFFSET(sch_ep->offset)
+               ep_ctx->reserved[1] = cpu_to_le32(EP_BOFFSET(sch_ep->offset)
                        | EP_BREPEAT(sch_ep->repeat));
 
                xhci_dbg(xhci, " PKTS:%x, CSCOUNT:%x, BM:%x, OFFSET:%x, 
REPEAT:%x\n",
-- 
2.18.0

Reply via email to