Module Name: src Committed By: matt Date: Tue Aug 2 01:34:36 UTC 2011
Modified Files: src/sys/arch/evbppc/mpc85xx [matt-nb5-pq3]: autoconf.c machdep.c src/sys/arch/powerpc/booke/dev [matt-nb5-pq3]: pq3ehci.c src/sys/arch/powerpc/include/booke [matt-nb5-pq3]: cpuvar.h e500reg.h Log Message: Pull in changes from -current to get ehci at cpunode working. To generate a diff of this commit: cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/evbppc/mpc85xx/autoconf.c cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/arch/evbppc/mpc85xx/machdep.c cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/powerpc/booke/dev/pq3ehci.c cvs rdiff -u -r1.1.2.2 -r1.1.2.3 src/sys/arch/powerpc/include/booke/cpuvar.h cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/powerpc/include/booke/e500reg.h 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/evbppc/mpc85xx/autoconf.c diff -u src/sys/arch/evbppc/mpc85xx/autoconf.c:1.1.2.1 src/sys/arch/evbppc/mpc85xx/autoconf.c:1.1.2.2 --- src/sys/arch/evbppc/mpc85xx/autoconf.c:1.1.2.1 Fri Jan 7 01:40:36 2011 +++ src/sys/arch/evbppc/mpc85xx/autoconf.c Tue Aug 2 01:34:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: autoconf.c,v 1.1.2.1 2011/01/07 01:40:36 matt Exp $ */ +/* $NetBSD: autoconf.c,v 1.1.2.2 2011/08/02 01:34:36 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.1.2.1 2011/01/07 01:40:36 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.1.2.2 2011/08/02 01:34:36 matt Exp $"); #define __INTR_PRIVATE @@ -121,6 +121,7 @@ ma.ma_name = "cpunode"; ma.ma_node = 0; ma.ma_memt = curcpu()->ci_softc->cpu_bst; + ma.ma_le_memt = curcpu()->ci_softc->cpu_le_bst; ma.ma_dmat = &booke_bus_dma_tag; config_found_sm_loc(self, "mainbus", NULL, &ma, mainbus_print, NULL); Index: src/sys/arch/evbppc/mpc85xx/machdep.c diff -u src/sys/arch/evbppc/mpc85xx/machdep.c:1.1.2.3 src/sys/arch/evbppc/mpc85xx/machdep.c:1.1.2.4 --- src/sys/arch/evbppc/mpc85xx/machdep.c:1.1.2.3 Tue Jul 26 03:32:45 2011 +++ src/sys/arch/evbppc/mpc85xx/machdep.c Tue Aug 2 01:34:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.1.2.3 2011/07/26 03:32:45 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.1.2.4 2011/08/02 01:34:36 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -131,6 +131,12 @@ .pbs_limit = GUR_SIZE, }; +struct powerpc_bus_space gur_le_bst = { + .pbs_flags = _BUS_SPACE_LITTLE_ENDIAN|_BUS_SPACE_MEM_TYPE, + .pbs_offset = GUR_BASE, + .pbs_limit = GUR_SIZE, +}; + const bus_space_handle_t gur_bsh = (bus_space_handle_t)(uintptr_t)(GUR_BASE); #ifdef CADMUS @@ -614,7 +620,9 @@ CTASSERT(offsetof(struct tlb_md_ops, md_tlb_mapiodev) == 0); cpu_md_ops.md_tlb_ops = (const void *)&early_tlb_mapiodev; bus_space_init(&gur_bst, NULL, NULL, 0); + bus_space_init(&gur_le_bst, NULL, NULL, 0); cpu->cpu_bst = &gur_bst; + cpu->cpu_le_bst = &gur_le_bst; cpu->cpu_bsh = gur_bsh; /* @@ -653,6 +661,7 @@ * Now find out how much memory is attached */ pmemsize = memprobe(endkernel); + cpu->cpu_highmem = pmemsize; printf(" memprobe=%zuMB", (size_t) (pmemsize >> 20)); /* Index: src/sys/arch/powerpc/booke/dev/pq3ehci.c diff -u src/sys/arch/powerpc/booke/dev/pq3ehci.c:1.1.2.1 src/sys/arch/powerpc/booke/dev/pq3ehci.c:1.1.2.2 --- src/sys/arch/powerpc/booke/dev/pq3ehci.c:1.1.2.1 Fri Jan 7 01:26:19 2011 +++ src/sys/arch/powerpc/booke/dev/pq3ehci.c Tue Aug 2 01:34:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pq3ehci.c,v 1.1.2.1 2011/01/07 01:26:19 matt Exp $ */ +/* $NetBSD: pq3ehci.c,v 1.1.2.2 2011/08/02 01:34:36 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -29,7 +29,9 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pq3ehci.c,v 1.1.2.1 2011/01/07 01:26:19 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pq3ehci.c,v 1.1.2.2 2011/08/02 01:34:36 matt Exp $"); + +#include "opt_usb.h" #include <sys/param.h> #include <sys/systm.h> @@ -90,7 +92,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 +113,17 @@ } 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)); + cpu_write_4(cnl->cnl_addr + USB_CONTROL, USB_EN); + + 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", Index: src/sys/arch/powerpc/include/booke/cpuvar.h diff -u src/sys/arch/powerpc/include/booke/cpuvar.h:1.1.2.2 src/sys/arch/powerpc/include/booke/cpuvar.h:1.1.2.3 --- src/sys/arch/powerpc/include/booke/cpuvar.h:1.1.2.2 Mon Jan 17 07:46:00 2011 +++ src/sys/arch/powerpc/include/booke/cpuvar.h Tue Aug 2 01:34:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: cpuvar.h,v 1.1.2.2 2011/01/17 07:46:00 matt Exp $ */ +/* $NetBSD: cpuvar.h,v 1.1.2.3 2011/08/02 01:34:36 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -49,9 +49,12 @@ struct cpu_info *cpu_ci; struct evcnt *cpu_evcnt_intrs; bus_space_tag_t cpu_bst; + bus_space_tag_t cpu_le_bst; bus_space_handle_t cpu_bsh; bus_addr_t cpu_clock_gtbcr; + paddr_t cpu_highmem; + u_int cpu_pcpls[5]; struct evcnt cpu_evcnt_spurious_intr; struct lwp *cpu_softlwps[SOFTINT_COUNT]; @@ -74,6 +77,7 @@ struct cpunode_attach_args { const char *cna_busname; bus_space_tag_t cna_memt; + bus_space_tag_t cna_le_memt; bus_dma_tag_t cna_dmat; struct cpunode_locators cna_locs; u_int cna_childmask; @@ -82,6 +86,7 @@ struct mainbus_attach_args { const char *ma_name; bus_space_tag_t ma_memt; + bus_space_tag_t ma_le_memt; bus_dma_tag_t ma_dmat; int ma_node; }; Index: src/sys/arch/powerpc/include/booke/e500reg.h diff -u src/sys/arch/powerpc/include/booke/e500reg.h:1.1.2.1 src/sys/arch/powerpc/include/booke/e500reg.h:1.1.2.2 --- src/sys/arch/powerpc/include/booke/e500reg.h:1.1.2.1 Fri Jan 7 01:26:20 2011 +++ src/sys/arch/powerpc/include/booke/e500reg.h Tue Aug 2 01:34:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: e500reg.h,v 1.1.2.1 2011/01/07 01:26:20 matt Exp $ */ +/* $NetBSD: e500reg.h,v 1.1.2.2 2011/08/02 01:34:36 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -271,8 +271,15 @@ #define USB1_BASE 0x22100 /* MPC8536 */ #define USB2_BASE 0x23100 /* MPC8536 */ #define USB3_BASE 0x2b100 /* MPC8536 */ +#define USB_SNOOP1 0x0300 /* DMA Snooping Register 1 */ +#define USB_SNOOP2 0x0304 /* DMA Snooping Register 2 */ +#define USB_CONTROL 0x0400 /* USB General Purpose Register */ +#define USB_EN __PPCBIT(29) +#define USB_ULPI_INT_EN __PPCBIT(31) #define USB_SIZE 0x00f00 +#define SNOOP_2GB 0x1e + #define ETSEC1_BASE 0x24000 #define ETSEC2_BASE 0x25000 #define ETSEC3_BASE 0x26000