aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2014-07-16 06:14:41 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2014-07-16 06:14:41 +0000
commit0a54509ff96034fc3a2fdebfa17223d6eab6cf75 (patch)
tree04509544a0f8b9d217362f88cffbe2dc10f7f75d
parent4622bc4e31f19430847e9e8aa96371d9fe4961ee (diff)
Notes
-rw-r--r--sys/dev/usb/controller/xhci_pci.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/dev/usb/controller/xhci_pci.c b/sys/dev/usb/controller/xhci_pci.c
index 3d18d34c0a087..f0b789a3d66b2 100644
--- a/sys/dev/usb/controller/xhci_pci.c
+++ b/sys/dev/usb/controller/xhci_pci.c
@@ -150,6 +150,8 @@ static int
xhci_pci_port_route(device_t self, uint32_t set, uint32_t clear)
{
uint32_t temp;
+ uint32_t usb3_mask;
+ uint32_t usb2_mask;
temp = pci_read_config(self, PCI_XHCI_INTEL_USB3_PSSEN, 4) |
pci_read_config(self, PCI_XHCI_INTEL_XUSB2PR, 4);
@@ -158,10 +160,11 @@ xhci_pci_port_route(device_t self, uint32_t set, uint32_t clear)
temp &= ~clear;
/* Don't set bits which the hardware doesn't support */
- temp &= pci_read_config(self, PCI_XHCI_INTEL_USB3PRM, 4);
+ usb3_mask = pci_read_config(self, PCI_XHCI_INTEL_USB3PRM, 4);
+ usb2_mask = pci_read_config(self, PCI_XHCI_INTEL_USB2PRM, 4);
- pci_write_config(self, PCI_XHCI_INTEL_USB3_PSSEN, temp, 4);
- pci_write_config(self, PCI_XHCI_INTEL_XUSB2PR, temp, 4);
+ pci_write_config(self, PCI_XHCI_INTEL_USB3_PSSEN, temp & usb3_mask, 4);
+ pci_write_config(self, PCI_XHCI_INTEL_XUSB2PR, temp & usb2_mask, 4);
device_printf(self, "Port routing mask set to 0x%08x\n", temp);