]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: xhci-mtk: remove or operator for setting schedule parameters
authorChunfeng Yun <chunfeng.yun@mediatek.com>
Mon, 8 Mar 2021 02:51:50 +0000 (10:51 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 May 2021 08:49:23 +0000 (10:49 +0200)
commit 5fa5827566e3affa1657ccf9b22706c06a5d021a upstream.

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 <stable@vger.kernel.org>
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Link: https://lore.kernel.org/r/d287899e6beb2fc1bfb8900c75a872f628ecde55.1615170625.git.chunfeng.yun@mediatek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-mtk-sch.c

index b45e5bf0899798efbda164feab120da4c424fd30..5891f56c64da357df21fcd29ab98fb1be052e229 100644 (file)
@@ -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",