Module Name: src
Committed By: jmcneill
Date: Thu Jan 30 10:51:39 UTC 2025
Modified Files:
src/sys/dev/usb: xhci.c
Log Message:
xhci: Do not clobber existing state in xhci_update_ep0_mps
When updating the MPS field, make sure to preserve existing configuration.
Without this, the XHCI IP on CIX CD8180 was returning a parameter error
in response to the command.
To generate a diff of this commit:
cvs rdiff -u -r1.187 -r1.188 src/sys/dev/usb/xhci.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/xhci.c
diff -u src/sys/dev/usb/xhci.c:1.187 src/sys/dev/usb/xhci.c:1.188
--- src/sys/dev/usb/xhci.c:1.187 Thu Jan 30 00:42:47 2025
+++ src/sys/dev/usb/xhci.c Thu Jan 30 10:51:39 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: xhci.c,v 1.187 2025/01/30 00:42:47 jmcneill Exp $ */
+/* $NetBSD: xhci.c,v 1.188 2025/01/30 10:51:39 jmcneill Exp $ */
/*
* Copyright (c) 2013 Jonathan A. Kollasch
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.187 2025/01/30 00:42:47 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.188 2025/01/30 10:51:39 jmcneill Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -3446,7 +3446,8 @@ xhci_update_ep0_mps(struct xhci_softc *
cp[1] = htole32(XHCI_INCTX_1_ADD_MASK(XHCI_DCI_EP_CONTROL));
cp = xhci_slot_get_icv(sc, xs, xhci_dci_to_ici(XHCI_DCI_EP_CONTROL));
- cp[1] = htole32(XHCI_EPCTX_1_MAXP_SIZE_SET(mps));
+ cp[1] &= ~htole32(XHCI_EPCTX_1_MAXP_SIZE_MASK);
+ cp[1] |= htole32(XHCI_EPCTX_1_MAXP_SIZE_SET(mps));
/* sync input contexts before they are read from memory */
usb_syncmem(&xs->xs_ic_dma, 0, sc->sc_pgsz, BUS_DMASYNC_PREWRITE);