Module Name: src Committed By: matt Date: Wed Feb 16 18:46:37 UTC 2011
Modified Files: src/sys/arch/powerpc/booke/dev: pq3ehci.c Log Message: Use LE bus space tag for EHCI register access. Initialize SNOOP for all of RAM. Use IPL_USB To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/powerpc/booke/dev/pq3ehci.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/powerpc/booke/dev/pq3ehci.c diff -u src/sys/arch/powerpc/booke/dev/pq3ehci.c:1.2 src/sys/arch/powerpc/booke/dev/pq3ehci.c:1.3 --- src/sys/arch/powerpc/booke/dev/pq3ehci.c:1.2 Tue Jan 18 01:02:53 2011 +++ src/sys/arch/powerpc/booke/dev/pq3ehci.c Wed Feb 16 18:46:37 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pq3ehci.c,v 1.2 2011/01/18 01:02:53 matt Exp $ */ +/* $NetBSD: pq3ehci.c,v 1.3 2011/02/16 18:46:37 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pq3ehci.c,v 1.2 2011/01/18 01:02:53 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pq3ehci.c,v 1.3 2011/02/16 18:46:37 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -90,7 +90,7 @@ int error; psc->sc_children |= cna->cna_childmask; - sc->sc.iot = cna->cna_memt; + sc->sc.iot = cna->cna_le_memt; /* EHCI registers are little endian */ sc->sc.sc_dev = self; sc->sc.sc_bus.dmatag = cna->cna_dmat; sc->sc.sc_bus.hci_private = sc; @@ -111,7 +111,16 @@ } sc->sc.sc_size = cnl->cnl_size; - sc->sc_ih = intr_establish(cnl->cnl_intrs[0], IPL_VM, IST_ONCHIP, + /* + * We need to tell the USB interface to snoop all off RAM starting + * at 0. Since it can do it by powers of 2, get the highest RAM + * address and roughly round it to the next power of 2 and find + * the number of leading zero bits. + */ + cpu_write_4(cnl->cnl_addr + USB_SNOOP1, + SNOOP_2GB - __builtin_clz(curcpu()->ci_softc->cpu_highmem * 2 - 1)); + + sc->sc_ih = intr_establish(cnl->cnl_intrs[0], IPL_USB, IST_ONCHIP, ehci_intr, sc); if (sc->sc_ih == NULL) { aprint_error_dev(self, "failed to establish interrupt %d\n",