Date: Wed, 23 Feb 2005 07:06:10 GMT From: John-Mark Gurney <jmg@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 71635 for review Message-ID: <200502230706.j1N76A7P021989@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=71635 Change 71635 by jmg@jmg_carbon on 2005/02/23 07:05:27 fix up epclk to use the new resource system... the interrupt and timer resources are assigned via hints.. make attach return an int like it's suppose to, I guess we've been lucky... keep proper allocation of information when we setup the interrupt.. Affected files ... .. //depot/projects/arm/src/sys/arm/ep93xx/epclk.c#3 edit Differences ... ==== //depot/projects/arm/src/sys/arm/ep93xx/epclk.c#3 (text+ko) ==== @@ -69,7 +69,7 @@ #include <arm/ep93xx/ep93xxvar.h> static int epclk_probe(device_t); -static void epclk_attach(device_t); +static int epclk_attach(device_t); /* callback functions for intr_functions */ static void epclk_intr(void* arg); @@ -108,33 +108,52 @@ epclk_probe(device_t dev) { + if (device_get_unit(dev) != 0) + return ENXIO; + return 0; } struct epclk_softc { - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - bus_space_handle_t sc_teoi_ioh; - device_t dev; + struct resource *sc_timerres; + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; + + struct resource *sc_irqres; + void *sc_irqcookie; + + bus_space_handle_t sc_teoi_ioh; + device_t dev; }; static struct epclk_softc *epclk; -static void +static int epclk_attach(device_t dev) { + int i; epclk = device_get_softc(dev); - epclk->sc_iot = &ep93xx_bs_tag; - epclk->sc_ioh = EP93XX_APB_VBASE; + + i = 0; + epclk->sc_timerres = bus_alloc_resource(dev, SYS_RES_MEMORY, &i, 0, ~0, + ~0, RF_ACTIVE); + + if (epclk->sc_timerres == NULL) + return ENXIO; + + epclk->sc_iot = rman_get_bustag(epclk->sc_timerres); + epclk->sc_ioh = rman_get_bushandle(epclk->sc_timerres); epclk->dev = dev; epclk->sc_teoi_ioh = EP93XX_APB_VBASE + EP93XX_APB_SYSCON + - EP93XX_SYSCON_TEOI; + EP93XX_SYSCON_TEOI; /* XXX - second memory res? */ /* clear and start the debug timer (Timer4) */ bus_space_write_4(epclk->sc_iot, epclk->sc_ioh, EP93XX_TIMERS_Timer4Enable, 0); bus_space_write_4(epclk->sc_iot, epclk->sc_ioh, EP93XX_TIMERS_Timer4Enable, 0x100); + + return 0; } static device_method_t epclk_methods[] = { @@ -161,7 +180,7 @@ { bus_space_write_4(epclk->sc_iot, epclk->sc_teoi_ioh, 0, 1); - hardclock((struct clockframe*) arg); + hardclock((struct clockframe *)arg); } @@ -173,9 +192,7 @@ void cpu_initclocks(void) { - struct resource *irq; - void *ihl; - int rid = 0; + int rid; stathz = profhz = 0; @@ -185,13 +202,15 @@ /* clear 64Hz interrupt status */ bus_space_write_4(epclk->sc_iot, epclk->sc_teoi_ioh, 0, 1); - irq = bus_alloc_resource(epclk->dev, SYS_RES_IRQ, &rid, 35, - 35, 1, RF_ACTIVE); - if (!irq) + rid = 0; + epclk->sc_irqres = bus_alloc_resource(epclk->dev, SYS_RES_IRQ, &rid, + 0, ~0, 1, RF_ACTIVE); + if (!epclk->sc_irqres) panic("Unable to setup the clock irq handler.\n"); else - bus_setup_intr(epclk->dev, irq, INTR_TYPE_CLK | INTR_FAST, - epclk_intr, NULL, &ihl); + bus_setup_intr(epclk->dev, epclk->sc_irqres, + INTR_TYPE_CLK | INTR_FAST, epclk_intr, NULL, + &epclk->sc_irqcookie); } /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200502230706.j1N76A7P021989>