Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Dec 2009 22:41:50 +0000 (UTC)
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r200333 - in stable/8/sys/dev: pci usb/controller
Message-ID:  <200912092241.nB9MfoM5042353@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: thompsa
Date: Wed Dec  9 22:41:50 2009
New Revision: 200333
URL: http://svn.freebsd.org/changeset/base/200333

Log:
  MFC r199814
  
   Disable interrupts after doing early takeover of the usb controller in case usb
   isnt actually compiled in (or kldloaded) as the controller could cause spurious
   interrupts.

Modified:
  stable/8/sys/dev/pci/pci.c
  stable/8/sys/dev/usb/controller/uhci_pci.c
  stable/8/sys/dev/usb/controller/uhcireg.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/pci/pci.c
==============================================================================
--- stable/8/sys/dev/pci/pci.c	Wed Dec  9 22:41:11 2009	(r200332)
+++ stable/8/sys/dev/pci/pci.c	Wed Dec  9 22:41:50 2009	(r200333)
@@ -2610,6 +2610,8 @@ ohci_early_takeover(device_t self)
 				    "SMM does not respond, resetting\n");
 			bus_write_4(res, OHCI_CONTROL, OHCI_HCFS_RESET);
 		}
+		/* Disable interrupts */
+		bus_write_4(res, OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTRS);
 	}
 
 	bus_release_resource(self, SYS_RES_MEMORY, rid, res);
@@ -2619,6 +2621,9 @@ ohci_early_takeover(device_t self)
 static void
 uhci_early_takeover(device_t self)
 {
+	struct resource *res;
+	int rid;
+
 	/*
 	 * Set the PIRQD enable bit and switch off all the others. We don't
 	 * want legacy support to interfere with us XXX Does this also mean
@@ -2626,6 +2631,14 @@ uhci_early_takeover(device_t self)
 	 * to the ports of the root hub?
 	 */
 	pci_write_config(self, PCI_LEGSUP, PCI_LEGSUP_USBPIRQDEN, 2);
+
+	/* Disable interrupts */
+	rid = PCI_UHCI_BASE_REG;
+	res = bus_alloc_resource_any(self, SYS_RES_IOPORT, &rid, RF_ACTIVE);
+	if (res != NULL) {
+		bus_write_2(res, UHCI_INTR, 0);
+		bus_release_resource(self, SYS_RES_IOPORT, rid, res);
+	}
 }
 
 /* Perform early EHCI takeover from SMM. */
@@ -2637,6 +2650,7 @@ ehci_early_takeover(device_t self)
 	uint32_t eec;
 	uint8_t eecp;
 	uint8_t bios_sem;
+	uint8_t offs;
 	int rid;
 	int i;
 
@@ -2676,6 +2690,9 @@ ehci_early_takeover(device_t self)
 				printf("ehci early: "
 				    "SMM does not respond\n");
 		}
+		/* Disable interrupts */
+		offs = bus_read_1(res, EHCI_CAPLENGTH);
+		bus_write_4(res, offs + EHCI_USBINTR, 0);
 	}
 	bus_release_resource(self, SYS_RES_MEMORY, rid, res);
 }

Modified: stable/8/sys/dev/usb/controller/uhci_pci.c
==============================================================================
--- stable/8/sys/dev/usb/controller/uhci_pci.c	Wed Dec  9 22:41:11 2009	(r200332)
+++ stable/8/sys/dev/usb/controller/uhci_pci.c	Wed Dec  9 22:41:50 2009	(r200333)
@@ -88,8 +88,6 @@ __FBSDID("$FreeBSD$");
 
 /* PIIX4E has no separate stepping */
 
-#define	PCI_UHCI_BASE_REG               0x20
-
 static device_probe_t uhci_pci_probe;
 static device_attach_t uhci_pci_attach;
 static device_detach_t uhci_pci_detach;

Modified: stable/8/sys/dev/usb/controller/uhcireg.h
==============================================================================
--- stable/8/sys/dev/usb/controller/uhcireg.h	Wed Dec  9 22:41:11 2009	(r200332)
+++ stable/8/sys/dev/usb/controller/uhcireg.h	Wed Dec  9 22:41:50 2009	(r200333)
@@ -39,6 +39,8 @@
 #ifndef _UHCIREG_H_
 #define	_UHCIREG_H_
 
+#define	PCI_UHCI_BASE_REG	0x20
+
 /* PCI config registers  */
 #define	PCI_USBREV		0x60	/* USB protocol revision */
 #define	PCI_USB_REV_MASK		0xff



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912092241.nB9MfoM5042353>