Module Name: src Committed By: matt Date: Wed Sep 5 00:19:59 UTC 2012
Modified Files: src/sys/arch/arm/omap: files.omap2 obio_ohci.c obio_wdt.c omap2_obio.c omap2_obiovar.h omap2_reg.h omap3_ehci.c omap_wdt.c Log Message: Get USB closer to working on OMAP3 and OMAP4. Get OMAP4430 closer to working. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/omap/files.omap2 cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/omap/obio_ohci.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/omap/obio_wdt.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/omap/omap2_obio.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/omap/omap2_obiovar.h cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/omap/omap2_reg.h cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/omap/omap3_ehci.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/omap/omap_wdt.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/omap/files.omap2 diff -u src/sys/arch/arm/omap/files.omap2:1.14 src/sys/arch/arm/omap/files.omap2:1.15 --- src/sys/arch/arm/omap/files.omap2:1.14 Wed Aug 29 17:48:17 2012 +++ src/sys/arch/arm/omap/files.omap2 Wed Sep 5 00:19:59 2012 @@ -1,10 +1,11 @@ -# $NetBSD: files.omap2,v 1.14 2012/08/29 17:48:17 matt Exp $ +# $NetBSD: files.omap2,v 1.15 2012/09/05 00:19:59 matt Exp $ # # Configuration info for Texas Instruments OMAP2/OMAP3 CPU support # Based on xscale/files.pxa2x0 # include "arch/arm/pic/files.pic" +include "arch/arm/cortex/files.cortex" file arch/arm/arm32/irq_dispatch.S file arch/arm/omap/omap_dma.c @@ -98,7 +99,6 @@ attach prcm at obio file arch/arm/omap/omap2_prcm.c prcm needs-flag # OHCI USB controller -##attach ohci at obio with obioohci: omapgpio attach ohci at obio with obioohci file arch/arm/omap/obio_ohci.c obioohci Index: src/sys/arch/arm/omap/obio_ohci.c diff -u src/sys/arch/arm/omap/obio_ohci.c:1.6 src/sys/arch/arm/omap/obio_ohci.c:1.7 --- src/sys/arch/arm/omap/obio_ohci.c:1.6 Mon Feb 13 17:34:21 2012 +++ src/sys/arch/arm/omap/obio_ohci.c Wed Sep 5 00:19:59 2012 @@ -1,7 +1,7 @@ -/* $Id: obio_ohci.c,v 1.6 2012/02/13 17:34:21 matt Exp $ */ +/* $Id: obio_ohci.c,v 1.7 2012/09/05 00:19:59 matt Exp $ */ /* adapted from: */ -/* $NetBSD: obio_ohci.c,v 1.6 2012/02/13 17:34:21 matt Exp $ */ +/* $NetBSD: obio_ohci.c,v 1.7 2012/09/05 00:19:59 matt Exp $ */ /* $OpenBSD: pxa2x0_ohci.c,v 1.19 2005/04/08 02:32:54 dlg Exp $ */ /* @@ -21,9 +21,10 @@ */ #include "opt_omap.h" +#include "locators.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: obio_ohci.c,v 1.6 2012/02/13 17:34:21 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: obio_ohci.c,v 1.7 2012/09/05 00:19:59 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -52,7 +53,6 @@ struct obioohci_softc { void *sc_ih; bus_addr_t sc_addr; bus_addr_t sc_size; - void *sc_powerhook; }; static int obioohci_match(struct device *, struct cfdata *, void *); @@ -65,7 +65,6 @@ CFATTACH_DECL_NEW(obioohci, sizeof(struc obioohci_match, obioohci_attach, obioohci_detach, ohci_activate); static void obioohci_clkinit(struct obio_attach_args *); -static void obioohci_power(int, void *); static void obioohci_enable(struct obioohci_softc *); static void obioohci_disable(struct obioohci_softc *); @@ -75,30 +74,52 @@ static void obioohci_disable(struct obio static int obioohci_match(device_t parent, cfdata_t cf, void *aux) { - struct obio_attach_args *obio = aux; - if ((obio->obio_addr == -1) - || (obio->obio_size == 0) - || (obio->obio_intr == -1)) - panic("obioohci must have addr, size and intr" - " specified in config."); + if (obio->obio_addr == OBIOCF_ADDR_DEFAULT + || obio->obio_size == OBIOCF_SIZE_DEFAULT + || obio->obio_intr == OBIOCF_INTR_DEFAULT) + return 0; + +#if defined(OMAP_2430) || defined(OMAP_2420) + if (obio->obio_addr != OHCI1_BASE_2430) + return 0; +#endif +#if defined(OMAP_3530) + if (obio->obio_addr != OHCI1_BASE_3530) + return 0; +#endif +#if defined(OMAP_4430) + if (obio->obio_addr != OHCI1_BASE_4430) + return 0; +#endif obioohci_clkinit(obio); - return 1; /* XXX */ + return 1; } static void obioohci_attach(device_t parent, device_t self, void *aux) { + struct obio_softc *psc = device_private(parent); struct obioohci_softc *sc = device_private(self); struct obio_attach_args *obio = aux; usbd_status r; - sc->sc.sc_size = 0; - sc->sc_ih = NULL; - sc->sc.sc_bus.dmatag = 0; + KASSERT(psc->sc_obio_dev == NULL); + psc->sc_obio_dev = self; + + aprint_naive(": USB Controller\n"); + aprint_normal(": USB Controller\n"); + + sc->sc_addr = obio->obio_addr; + + sc->sc.iot = obio->obio_iot; + sc->sc.sc_dev = self; + sc->sc.sc_size = obio->obio_size; + sc->sc.sc_bus.dmatag = obio->obio_dmat; + sc->sc.sc_bus.hci_private = &sc->sc; /* Map I/O space */ if (bus_space_map(obio->obio_iot, obio->obio_addr, obio->obio_size, 0, @@ -106,10 +127,6 @@ obioohci_attach(device_t parent, device_ aprint_error(": couldn't map memory space\n"); return; } - sc->sc.iot = obio->obio_iot; - sc->sc_addr = obio->obio_addr; - sc->sc.sc_size = obio->obio_size; - sc->sc.sc_bus.dmatag = obio->obio_dmat; /* XXX copied from ohci_pci.c. needed? */ bus_space_barrier(sc->sc.iot, sc->sc.ioh, 0, sc->sc.sc_size, @@ -123,40 +140,26 @@ obioohci_attach(device_t parent, device_ /* Disable interrupts, so we don't get any spurious ones. */ bus_space_write_4(sc->sc.iot, sc->sc.ioh, OHCI_INTERRUPT_DISABLE, - OHCI_MIE); + OHCI_ALL_INTRS); -#if 1 sc->sc_ih = intr_establish(obio->obio_intr, IPL_USB, IST_LEVEL, ohci_intr, &sc->sc); if (sc->sc_ih == NULL) { aprint_error(": unable to establish interrupt\n"); goto free_map; } -#else - sc->sc_ih = obioohci_fake_intr_establish(ohci_intr, &sc->sc); -#endif - strlcpy(sc->sc.sc_vendor, "OMAP2", sizeof(sc->sc.sc_vendor)); + strlcpy(sc->sc.sc_vendor, "OMAP", sizeof(sc->sc.sc_vendor)); r = ohci_init(&sc->sc); if (r != USBD_NORMAL_COMPLETION) { aprint_error_dev(self, "init failed, error=%d\n", r); goto free_intr; } - sc->sc_powerhook = powerhook_establish(device_xname(self), - obioohci_power, sc); - if (sc->sc_powerhook == NULL) { - aprint_error_dev(self, "cannot establish powerhook\n"); - } - - sc->sc.sc_child = config_found((void *)sc, &sc->sc.sc_bus, usbctlprint); - + sc->sc.sc_child = config_found(self, &sc->sc.sc_bus, usbctlprint); return; free_intr: -#ifdef NOTYET - obio_gpio_intr_disestablish(sc->sc_ih); -#endif sc->sc_ih = NULL; free_map: obioohci_disable(sc); @@ -177,14 +180,9 @@ obioohci_detach(device_t self, int flags if (error) return error; - if (sc->sc_powerhook) { - powerhook_disestablish(sc->sc_powerhook); - sc->sc_powerhook = NULL; - } - if (sc->sc_ih) { #ifdef NOTYET - obio_gpio_intr_disestablish(sc->sc_ih); + intr_disestablish(sc->sc_ih); #endif sc->sc_ih = NULL; } @@ -207,42 +205,11 @@ obioohci_detach(device_t self, int flags } static void -obioohci_power(int why, void *arg) -{ - struct obioohci_softc *sc = (struct obioohci_softc *)arg; - int s; - - s = splhardusb(); - sc->sc.sc_bus.use_polling++; - switch (why) { - case PWR_STANDBY: - case PWR_SUSPEND: -#if 0 - ohci_power(why, &sc->sc); -#endif -#ifdef NOTYET - pxa2x0_clkman_config(CKEN_USBHC, 0); -#endif - break; - - case PWR_RESUME: -#ifdef NOTYET - pxa2x0_clkman_config(CKEN_USBHC, 1); -#endif - obioohci_enable(sc); -#if 0 - ohci_power(why, &sc->sc); -#endif - break; - } - sc->sc.sc_bus.use_polling--; - splx(s); -} - -static void obioohci_enable(struct obioohci_softc *sc) { +#ifdef NOTYET printf("%s: TBD\n", __func__); +#endif } static void @@ -265,7 +232,7 @@ obioohci_disable(struct obioohci_softc * static void obioohci_clkinit(struct obio_attach_args *obio) { - +#if defined(OMAP_2430) || defined(OMAP_2420) bus_space_handle_t ioh; uint32_t r; int err; @@ -286,23 +253,5 @@ obioohci_clkinit(struct obio_attach_args bus_space_write_4(obio->obio_iot, ioh, OMAP2_CM_ICLKEN2_CORE, r); bus_space_unmap(obio->obio_iot, ioh, OMAP2_CM_SIZE); -} - -#if 0 -int (*obioohci_fake_intr_func)(void *); -void *obioohci_fake_intr_arg; - -void * -obioohci_fake_intr_establish(int (*func)(void *), void *arg) -{ - obioohci_fake_intr_func = func; - obioohci_fake_intr_arg = arg; - return (void *)1; -} - -void -obioohci_fake_intr(void) -{ - (void)(*obioohci_fake_intr_func)(obioohci_fake_intr_arg); -} #endif +} Index: src/sys/arch/arm/omap/obio_wdt.c diff -u src/sys/arch/arm/omap/obio_wdt.c:1.5 src/sys/arch/arm/omap/obio_wdt.c:1.6 --- src/sys/arch/arm/omap/obio_wdt.c:1.5 Fri Jul 1 20:30:21 2011 +++ src/sys/arch/arm/omap/obio_wdt.c Wed Sep 5 00:19:59 2012 @@ -33,7 +33,7 @@ #include "opt_omap.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: obio_wdt.c,v 1.5 2011/07/01 20:30:21 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: obio_wdt.c,v 1.6 2012/09/05 00:19:59 matt Exp $"); #include <sys/param.h> #include <sys/callout.h> @@ -79,8 +79,8 @@ obiowdt32k_attach(device_t parent, devic sc->sc_smw.smw_period = OMAPWDT32K_DEFAULT_PERIOD; sc->sc_iot = obio->obio_iot; - if (bus_space_map(sc->sc_iot, obio->obio_addr, obio->obio_size, - 0, &sc->sc_ioh)) + if (bus_space_map(sc->sc_iot, obio->obio_addr, obio->obio_size, 0, + &sc->sc_ioh)) panic("%s: Cannot map registers", device_xname(self)); val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, WIDR); Index: src/sys/arch/arm/omap/omap2_obio.c diff -u src/sys/arch/arm/omap/omap2_obio.c:1.13 src/sys/arch/arm/omap/omap2_obio.c:1.14 --- src/sys/arch/arm/omap/omap2_obio.c:1.13 Mon Aug 20 12:38:28 2012 +++ src/sys/arch/arm/omap/omap2_obio.c Wed Sep 5 00:19:59 2012 @@ -1,7 +1,7 @@ -/* $Id: omap2_obio.c,v 1.13 2012/08/20 12:38:28 matt Exp $ */ +/* $Id: omap2_obio.c,v 1.14 2012/09/05 00:19:59 matt Exp $ */ /* adapted from: */ -/* $NetBSD: omap2_obio.c,v 1.13 2012/08/20 12:38:28 matt Exp $ */ +/* $NetBSD: omap2_obio.c,v 1.14 2012/09/05 00:19:59 matt Exp $ */ /* @@ -103,7 +103,7 @@ #include "opt_omap.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: omap2_obio.c,v 1.13 2012/08/20 12:38:28 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: omap2_obio.c,v 1.14 2012/09/05 00:19:59 matt Exp $"); #include "locators.h" #include "obio.h" @@ -130,16 +130,6 @@ typedef struct { ulong cs_size; } obio_csconfig_t; -struct obio_softc { - device_t sc_dev; - bus_dma_tag_t sc_dmat; - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - bus_addr_t sc_base; - bus_size_t sc_size; -}; - - /* prototypes */ static int obio_match(device_t, cfdata_t, void *); static void obio_attach(device_t, device_t, void *); @@ -227,6 +217,7 @@ obio_attach(device_t parent, device_t se * Attach critical devices first. */ obio_attach_critical(sc); + /* * Then attach the rest of our devices */ @@ -348,11 +339,12 @@ static const struct { bus_addr_t addr; bool required; } critical_devs[] = { -#ifdef OMAP3 - { .name = "avic", .addr = INTC_BASE_3530, .required = true }, -#else +#if defined(OMAP_2430) || defined(OMAP_2420) { .name = "avic", .addr = INTC_BASE, .required = true }, #endif +#if defined(OMAP_3530) + { .name = "avic", .addr = INTC_BASE_3530, .required = true }, +#endif { .name = "gpio1", .addr = GPIO1_BASE, .required = false }, { .name = "gpio2", .addr = GPIO2_BASE, .required = false }, { .name = "gpio3", .addr = GPIO3_BASE, .required = false }, Index: src/sys/arch/arm/omap/omap2_obiovar.h diff -u src/sys/arch/arm/omap/omap2_obiovar.h:1.1 src/sys/arch/arm/omap/omap2_obiovar.h:1.2 --- src/sys/arch/arm/omap/omap2_obiovar.h:1.1 Wed Aug 27 11:03:10 2008 +++ src/sys/arch/arm/omap/omap2_obiovar.h Wed Sep 5 00:19:59 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: omap2_obiovar.h,v 1.1 2008/08/27 11:03:10 matt Exp $ */ +/* $NetBSD: omap2_obiovar.h,v 1.2 2012/09/05 00:19:59 matt Exp $ */ /* * Copyright (c) 2007 Microsoft @@ -32,6 +32,7 @@ #define _ARM_OMAP_OMAP2_OBIOVAR_H_ struct obio_attach_args { + const char *obio_name; bus_space_tag_t obio_iot; bus_addr_t obio_addr; bus_size_t obio_size; @@ -41,4 +42,14 @@ struct obio_attach_args { unsigned int obio_intrbase; }; +struct obio_softc { + device_t sc_dev; + bus_dma_tag_t sc_dmat; + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; + bus_addr_t sc_base; + bus_size_t sc_size; + device_t sc_obio_dev; +}; + #endif /* _ARM_OMAP_OMAP2_OBIOVAR_H_ */ Index: src/sys/arch/arm/omap/omap2_reg.h diff -u src/sys/arch/arm/omap/omap2_reg.h:1.10 src/sys/arch/arm/omap/omap2_reg.h:1.11 --- src/sys/arch/arm/omap/omap2_reg.h:1.10 Wed Aug 29 17:48:17 2012 +++ src/sys/arch/arm/omap/omap2_reg.h Wed Sep 5 00:19:59 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: omap2_reg.h,v 1.10 2012/08/29 17:48:17 matt Exp $ */ +/* $NetBSD: omap2_reg.h,v 1.11 2012/09/05 00:19:59 matt Exp $ */ /* * Copyright (c) 2007 Microsoft @@ -67,10 +67,10 @@ #define OMAP4430_L4_WAKEUP_BASE 0x4A300000 #define OMAP4430_L4_WAKEUP_SIZE 0x00040000 /* 256KB */ -#define OMAP4430_L4_PERIPHERAL_BASE 0x49000000 +#define OMAP4430_L4_PERIPHERAL_BASE 0x48000000 #define OMAP4430_L4_PERIPHERAL_SIZE 0x01000000 /* 16MB */ -#define OMAP4430_L4_ABE_BASE 0x40000000 /* Actually L3 */ +#define OMAP4430_L4_ABE_BASE 0x49000000 /* Actually L3 */ #define OMAP4430_L4_ABE_SIZE 0x01000000 /* 16MB */ /* TI Sitara AM335x (OMAP like) */ @@ -366,6 +366,10 @@ #define OMAP3_PRM_CLKSEL_FREQS { 12000, 13000, 19200, 26000, 38400, 16800, 0, 0 } #define OMAP3_PRM_CLKSEL_MULT 1000 +#define OMAP4_PRM_RSTCTRL 0x1b00 +#define OMAP4_PRM_RSTCTRL_WARM 0x0001 +#define OMAP4_PRM_RSTCTRL_COLD 0x0002 + /* * L3 Interconnect Target Agent Common Registers */ @@ -658,12 +662,12 @@ /* * USB Host */ +#define OHCI1_BASE_2430 0x4805e000 + #define OHCI1_BASE_3530 0x48064400 #define EHCI1_BASE_3530 0x48064800 -#define OHCI1_BASE_4430 OHCI1_BASE_3530 -#define EHCI1_BASE_4430 EHCI1_BASE_3530 - -#define OHCI2_BASE_4430 0x4A0A9000 +#define OHCI1_BASE_4430 0x4A064800 +#define EHCI1_BASE_4430 0x4A064C00 #endif /* _ARM_OMAP_OMAP2_REG_H_ */ Index: src/sys/arch/arm/omap/omap3_ehci.c diff -u src/sys/arch/arm/omap/omap3_ehci.c:1.2 src/sys/arch/arm/omap/omap3_ehci.c:1.3 --- src/sys/arch/arm/omap/omap3_ehci.c:1.2 Fri Jul 20 02:14:01 2012 +++ src/sys/arch/arm/omap/omap3_ehci.c Wed Sep 5 00:19:59 2012 @@ -1,7 +1,7 @@ -/* $Id: omap3_ehci.c,v 1.2 2012/07/20 02:14:01 matt Exp $ */ +/* $Id: omap3_ehci.c,v 1.3 2012/09/05 00:19:59 matt Exp $ */ /* adapted from: */ -/* $NetBSD: omap3_ehci.c,v 1.2 2012/07/20 02:14:01 matt Exp $ */ +/* $NetBSD: omap3_ehci.c,v 1.3 2012/09/05 00:19:59 matt Exp $ */ /* $OpenBSD: pxa2x0_ehci.c,v 1.19 2005/04/08 02:32:54 dlg Exp $ */ /* @@ -23,7 +23,7 @@ #include "opt_omap.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: omap3_ehci.c,v 1.2 2012/07/20 02:14:01 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: omap3_ehci.c,v 1.3 2012/09/05 00:19:59 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -53,20 +53,16 @@ struct obioehci_softc { void *sc_ih; bus_addr_t sc_addr; bus_size_t sc_size; - void *sc_powerhook; }; static int obioehci_match(struct device *, struct cfdata *, void *); static void obioehci_attach(struct device *, struct device *, void *); static int obioehci_detach(struct device *, int); -void * obioehci_fake_intr_establish(int (*)(void *), void *); -void obioehci_fake_intr(void); CFATTACH_DECL_NEW(obioehci, sizeof(struct obioehci_softc), obioehci_match, obioehci_attach, obioehci_detach, ehci_activate); static void obioehci_clkinit(struct obio_attach_args *); -static void obioehci_power(int, void *); static void obioehci_enable(struct obioehci_softc *); static void obioehci_disable(struct obioehci_softc *); @@ -82,45 +78,51 @@ obioehci_match(device_t parent, cfdata_t if (obio->obio_addr == OBIOCF_ADDR_DEFAULT || obio->obio_size == OBIOCF_SIZE_DEFAULT || obio->obio_intr == OBIOCF_INTR_DEFAULT) - panic("obioehci must have addr, size and intr" - " specified in config."); + return 0; #ifdef OMAP_3530 + if (obio->obio_addr != EHCI1_BASE_3530) + return 0; #endif #ifdef OMAP_4430 + if (obio->obio_addr != EHCI1_BASE_4430) + return 0; #endif obioehci_clkinit(obio); - return 0; /* XXX */ + return 1; } static void obioehci_attach(device_t parent, device_t self, void *aux) { - struct obioehci_softc *sc = device_private(self); - struct obio_attach_args *obio = aux; + struct obio_softc * const psc = device_private(parent); + struct obioehci_softc * const sc = device_private(self); + struct obio_attach_args * const obio = aux; usbd_status r; - sc->sc.sc_size = 0; - sc->sc_ih = NULL; - sc->sc.sc_bus.dmatag = 0; - /* Map I/O space */ if (bus_space_map(obio->obio_iot, obio->obio_addr, obio->obio_size, 0, &sc->sc.ioh)) { aprint_error(": couldn't map memory space\n"); return; } + sc->sc.iot = obio->obio_iot; sc->sc_addr = obio->obio_addr; + + aprint_naive(": USB Controller\n"); + aprint_normal(": USB Controller\n"); + sc->sc.sc_dev = self; sc->sc.sc_size = obio->obio_size; sc->sc.sc_bus.dmatag = obio->obio_dmat; sc->sc.sc_bus.usbrev = USBREV_2_0; - sc->sc.sc_bus.hci_private = sc; - sc->sc.sc_ncomp = 0; + sc->sc.sc_bus.hci_private = &sc->sc; + if (psc->sc_obio_dev) + sc->sc.sc_comps[sc->sc.sc_ncomp++] = psc->sc_obio_dev; /* XXX copied from ehci_pci.c. needed? */ bus_space_barrier(sc->sc.iot, sc->sc.ioh, 0, sc->sc.sc_size, @@ -138,16 +140,12 @@ obioehci_attach(device_t parent, device_ /* Disable interrupts, so we don't get any spurious ones. */ EOWRITE4(&sc->sc, EHCI_USBINTR, 0); -#if 1 sc->sc_ih = intr_establish(obio->obio_intr, IPL_USB, IST_LEVEL, ehci_intr, &sc->sc); if (sc->sc_ih == NULL) { aprint_error(": unable to establish interrupt\n"); goto free_map; } -#else - sc->sc_ih = obioehci_fake_intr_establish(ehci_intr, &sc->sc); -#endif r = ehci_init(&sc->sc); if (r != USBD_NORMAL_COMPLETION) { @@ -155,19 +153,10 @@ obioehci_attach(device_t parent, device_ goto free_intr; } - sc->sc_powerhook = powerhook_establish(device_xname(self), - obioehci_power, sc); - if (sc->sc_powerhook == NULL) { - aprint_error_dev(self, "cannot establish powerhook\n"); - } - sc->sc.sc_child = config_found(self, &sc->sc.sc_bus, usbctlprint); return; free_intr: -#ifdef NOTYET - obio_gpio_intr_disestablish(sc->sc_ih); -#endif sc->sc_ih = NULL; free_map: obioehci_disable(sc); @@ -188,11 +177,6 @@ obioehci_detach(device_t self, int flags if (error) return error; - if (sc->sc_powerhook) { - powerhook_disestablish(sc->sc_powerhook); - sc->sc_powerhook = NULL; - } - if (sc->sc_ih) { #ifdef NOTYET obio_gpio_intr_disestablish(sc->sc_ih); @@ -218,42 +202,11 @@ obioehci_detach(device_t self, int flags } static void -obioehci_power(int why, void *arg) -{ - struct obioehci_softc *sc = (struct obioehci_softc *)arg; - int s; - - s = splhardusb(); - sc->sc.sc_bus.use_polling++; - switch (why) { - case PWR_STANDBY: - case PWR_SUSPEND: -#if 0 - ehci_power(why, &sc->sc); -#endif -#ifdef NOTYET - pxa2x0_clkman_config(CKEN_USBHC, 0); -#endif - break; - - case PWR_RESUME: -#ifdef NOTYET - pxa2x0_clkman_config(CKEN_USBHC, 1); -#endif - obioehci_enable(sc); -#if 0 - ehci_power(why, &sc->sc); -#endif - break; - } - sc->sc.sc_bus.use_polling--; - splx(s); -} - -static void obioehci_enable(struct obioehci_softc *sc) { +#if 0 printf("%s: TBD\n", __func__); +#endif } static void @@ -276,7 +229,7 @@ obioehci_disable(struct obioehci_softc * static void obioehci_clkinit(struct obio_attach_args *obio) { - +#ifdef OMAP2 bus_space_handle_t ioh; uint32_t r; int err; @@ -297,23 +250,5 @@ obioehci_clkinit(struct obio_attach_args bus_space_write_4(obio->obio_iot, ioh, OMAP2_CM_ICLKEN2_CORE, r); bus_space_unmap(obio->obio_iot, ioh, OMAP2_CM_SIZE); -} - -#if 0 -int (*obioehci_fake_intr_func)(void *); -void *obioehci_fake_intr_arg; - -void * -obioehci_fake_intr_establish(int (*func)(void *), void *arg) -{ - obioehci_fake_intr_func = func; - obioehci_fake_intr_arg = arg; - return (void *)1; -} - -void -obioehci_fake_intr(void) -{ - (void)(*obioehci_fake_intr_func)(obioehci_fake_intr_arg); -} #endif +} Index: src/sys/arch/arm/omap/omap_wdt.c diff -u src/sys/arch/arm/omap/omap_wdt.c:1.4 src/sys/arch/arm/omap/omap_wdt.c:1.5 --- src/sys/arch/arm/omap/omap_wdt.c:1.4 Fri Aug 24 15:25:11 2012 +++ src/sys/arch/arm/omap/omap_wdt.c Wed Sep 5 00:19:59 2012 @@ -231,7 +231,10 @@ omapwdt32k_tickle(struct sysmon_wdog *sm void omapwdt32k_reboot(void) { - int s = splhigh(); + if (omapwdt32k_sc == NULL) + return; + + const int s = splhigh(); omapwdt32k_set_timeout(0); omapwdt32k_start();