Date: Tue, 27 Apr 2010 22:50:45 +0000 (UTC) From: Juli Mallett <jmallett@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r207301 - in user/jmallett/octeon/sys/mips: cavium conf Message-ID: <201004272250.o3RMojOG045738@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jmallett Date: Tue Apr 27 22:50:45 2010 New Revision: 207301 URL: http://svn.freebsd.org/changeset/base/207301 Log: Attach obio to ciu to avoid sending lots of stray interrupts to the UART handlers. (It used to simply connect to the same interrupt as CIU's 0 line and unmask the UART interrupts in CIU.) Modified: user/jmallett/octeon/sys/mips/cavium/obio.c user/jmallett/octeon/sys/mips/conf/OCTEON1.hints Modified: user/jmallett/octeon/sys/mips/cavium/obio.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/obio.c Tue Apr 27 22:04:39 2010 (r207300) +++ user/jmallett/octeon/sys/mips/cavium/obio.c Tue Apr 27 22:50:45 2010 (r207301) @@ -57,29 +57,29 @@ __FBSDID("$FreeBSD$"); #include <mips/cavium/obiovar.h> #include <contrib/octeon-sdk/cvmx.h> +#include <contrib/octeon-sdk/cvmx-interrupt.h> extern struct bus_space octeon_uart_tag; -int obio_probe(device_t); -int obio_attach(device_t); +static void obio_identify(driver_t *, device_t); +static int obio_probe(device_t); +static int obio_attach(device_t); -/* - * We need only one obio. Any other device hanging off of it, - * shouldn't cause multiple of these to be found. - */ -static int have_one = 0; +static void +obio_identify(driver_t *drv, device_t parent) +{ + BUS_ADD_CHILD(parent, 0, "obio", 0); +} -int +static int obio_probe(device_t dev) { - if (!have_one) { - have_one = 1; - return 0; - } - return (ENXIO); + if (device_get_unit(dev) != 0) + return (ENXIO); + return (0); } -int +static int obio_attach(device_t dev) { struct obio_softc *sc = device_get_softc(dev); @@ -104,10 +104,10 @@ obio_attach(device_t dev) /* * This module is intended for UART purposes only and - * it's IRQ is 0 corresponding to IP2. + * manages IRQs for UART0 and UART1. */ if (rman_init(&sc->oba_irq_rman) != 0 || - rman_manage_region(&sc->oba_irq_rman, 0, 0) != 0) + rman_manage_region(&sc->oba_irq_rman, CVMX_IRQ_UART0, CVMX_IRQ_UART1) != 0) panic("obio_attach: failed to set up IRQ rman"); device_add_child(dev, "uart", 1); /* Setup Uart-1 first. */ @@ -129,6 +129,16 @@ obio_alloc_resource(device_t bus, device switch (type) { case SYS_RES_IRQ: + switch (device_get_unit(child)) { + case 0: + start = end = CVMX_IRQ_UART0; + break; + case 1: + start = end = CVMX_IRQ_UART1; + break; + default: + return (NULL); + } rm = &sc->oba_irq_rman; break; case SYS_RES_MEMORY: @@ -171,11 +181,14 @@ obio_activate_resource(device_t bus, dev return (0); } static device_method_t obio_methods[] = { - DEVMETHOD(device_probe, obio_probe), - DEVMETHOD(device_attach, obio_attach), - - DEVMETHOD(bus_alloc_resource, obio_alloc_resource), - DEVMETHOD(bus_activate_resource, obio_activate_resource), + /* Device methods */ + DEVMETHOD(device_identify, obio_identify), + DEVMETHOD(device_probe, obio_probe), + DEVMETHOD(device_attach, obio_attach), + + /* Bus methods */ + DEVMETHOD(bus_alloc_resource, obio_alloc_resource), + DEVMETHOD(bus_activate_resource,obio_activate_resource), DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), @@ -189,4 +202,4 @@ static driver_t obio_driver = { }; static devclass_t obio_devclass; -DRIVER_MODULE(obio, nexus, obio_driver, obio_devclass, 0, 0); +DRIVER_MODULE(obio, ciu, obio_driver, obio_devclass, 0, 0); Modified: user/jmallett/octeon/sys/mips/conf/OCTEON1.hints ============================================================================== --- user/jmallett/octeon/sys/mips/conf/OCTEON1.hints Tue Apr 27 22:04:39 2010 (r207300) +++ user/jmallett/octeon/sys/mips/conf/OCTEON1.hints Tue Apr 27 22:50:45 2010 (r207301) @@ -3,7 +3,7 @@ # All these values are complete nonsense... hw.uart.console="io:0x1" hint.ciu.0.at="nexus" -hint.obio.0.at="nexus" +hint.obio.0.at="ciu" hint.obio.0.maddr="0x1" hint.obio.0.msize="0x1" hint.obio.0.flags="0x1"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004272250.o3RMojOG045738>