Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Sep 2010 02:41:53 +0000 (UTC)
From:      Juli Mallett <jmallett@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r213090 - head/sys/mips/cavium
Message-ID:  <201009240241.o8O2frHM087292@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jmallett
Date: Fri Sep 24 02:41:52 2010
New Revision: 213090
URL: http://svn.freebsd.org/changeset/base/213090

Log:
  o) Add bus_teardown_intr for pci and ciu.  This allows the Promise SATA
     driver to try to switch interrupt handlers at setup.  It's not a very
     good implementation of bus_teardown_intr, though.
  o) Set cache line size and latency timers for PCI devices per Linux.

Modified:
  head/sys/mips/cavium/ciu.c
  head/sys/mips/cavium/octopci.c

Modified: head/sys/mips/cavium/ciu.c
==============================================================================
--- head/sys/mips/cavium/ciu.c	Fri Sep 24 00:14:24 2010	(r213089)
+++ head/sys/mips/cavium/ciu.c	Fri Sep 24 02:41:52 2010	(r213090)
@@ -78,6 +78,8 @@ static struct resource	*ciu_alloc_resour
 static int		ciu_setup_intr(device_t, device_t, struct resource *,
 				       int, driver_filter_t *, driver_intr_t *,
 				       void *, void **);
+static int		ciu_teardown_intr(device_t, device_t,
+					  struct resource *, void *);
 static void		ciu_hinted_child(device_t, const char *, int);
 
 static void		ciu_en0_intr_mask(void *);
@@ -230,6 +232,19 @@ ciu_setup_intr(device_t bus, device_t ch
 	return (0);
 }
 
+static int
+ciu_teardown_intr(device_t bus, device_t child, struct resource *res,
+		  void *cookie)
+{
+	int error;
+
+	error = intr_event_remove_handler(cookie);
+	if (error != 0)
+		return (error);
+
+	return (0);
+}
+
 static void
 ciu_hinted_child(device_t bus, const char *dname, int dunit)
 {
@@ -342,7 +357,7 @@ static device_method_t ciu_methods[] = {
 	DEVMETHOD(bus_alloc_resource,	ciu_alloc_resource),
 	DEVMETHOD(bus_activate_resource,bus_generic_activate_resource),
 	DEVMETHOD(bus_setup_intr,	ciu_setup_intr),
-	DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),
+	DEVMETHOD(bus_teardown_intr,	ciu_teardown_intr),
 
 	DEVMETHOD(bus_add_child,	bus_generic_add_child),
 	DEVMETHOD(bus_hinted_child,	ciu_hinted_child),

Modified: head/sys/mips/cavium/octopci.c
==============================================================================
--- head/sys/mips/cavium/octopci.c	Fri Sep 24 00:14:24 2010	(r213089)
+++ head/sys/mips/cavium/octopci.c	Fri Sep 24 02:41:52 2010	(r213090)
@@ -658,6 +658,16 @@ octopci_init_device(device_t dev, unsign
 	command |= PCIM_CMD_BUSMASTEREN;
 	octopci_write_config(dev, b, s, f, PCIR_COMMAND, command, 1);
 
+	/* 
+	 * Set cache line size.  On Octeon it should be 128 bytes,
+	 * but according to Linux some Intel bridges have trouble
+	 * with values over 64 bytes, so use 64 bytes.
+	 */
+	octopci_write_config(dev, b, s, f, PCIR_CACHELNSZ, 16, 1);
+
+	/* Set latency timer.  */
+	octopci_write_config(dev, b, s, f, PCIR_LATTIMER, 48, 1);
+
 	/* Configure PCI-PCI bridges.  */
 	class = octopci_read_config(dev, b, s, f, PCIR_CLASS, 1);
 	if (class != PCIC_BRIDGE)
@@ -783,6 +793,7 @@ static device_method_t octopci_methods[]
 	DEVMETHOD(bus_activate_resource,octopci_activate_resource),
 	DEVMETHOD(bus_deactivate_resource,bus_generic_deactivate_resource),
 	DEVMETHOD(bus_setup_intr,	bus_generic_setup_intr),
+	DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),
 
 	DEVMETHOD(bus_add_child,	bus_generic_add_child),
 



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