Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/powerpc Add support for BookE Freescale MPC85xx (e5...



details:   https://anonhg.NetBSD.org/src/rev/10052de5b090
branches:  trunk
changeset: 760973:10052de5b090
user:      matt <matt%NetBSD.org@localhost>
date:      Tue Jan 18 01:02:52 2011 +0000

description:
Add support for BookE Freescale MPC85xx (e500 core) processors.
Add fast softint support for PowerPC (though only booke uses it).
Redo FPU/VEC support and add e500 SPE support.
Rework trap/intrs to use a common trapframe format.
Support SOFTFLOAT (no hardfloat or fpu emulation) for BookE.

diffstat:

 sys/arch/powerpc/booke/board_prop.c           |   148 +
 sys/arch/powerpc/booke/booke_autoconf.c       |    81 +
 sys/arch/powerpc/booke/booke_cache.c          |   158 +
 sys/arch/powerpc/booke/booke_machdep.c        |   442 ++++
 sys/arch/powerpc/booke/booke_pmap.c           |   298 +++
 sys/arch/powerpc/booke/booke_stubs.c          |   274 ++
 sys/arch/powerpc/booke/copyin.c               |   298 +++
 sys/arch/powerpc/booke/copyinstr.c            |    90 +
 sys/arch/powerpc/booke/copyout.c              |   471 ++++
 sys/arch/powerpc/booke/copyoutstr.c           |    90 +
 sys/arch/powerpc/booke/dev/cpunode.c          |   168 +
 sys/arch/powerpc/booke/dev/e500wdog.c         |   187 +
 sys/arch/powerpc/booke/dev/pq3diic.c          |   130 +
 sys/arch/powerpc/booke/dev/pq3duart.c         |   218 ++
 sys/arch/powerpc/booke/dev/pq3ehci.c          |   151 +
 sys/arch/powerpc/booke/dev/pq3etsec.c         |  2382 +++++++++++++++++++++++++
 sys/arch/powerpc/booke/dev/pq3gpio.c          |   332 +++
 sys/arch/powerpc/booke/dev/pq3obio.c          |   303 +++
 sys/arch/powerpc/booke/dev/pq3sdhc.c          |   125 +
 sys/arch/powerpc/booke/e500_autoconf.c        |   130 +
 sys/arch/powerpc/booke/e500_intr.c            |  1176 ++++++++++++
 sys/arch/powerpc/booke/e500_timer.c           |   237 ++
 sys/arch/powerpc/booke/e500_tlb.c             |   965 ++++++++++
 sys/arch/powerpc/booke/genassym.cf            |   282 ++
 sys/arch/powerpc/booke/kcopy.c                |    69 +
 sys/arch/powerpc/booke/pci/pq3pci.c           |  1459 +++++++++++++++
 sys/arch/powerpc/booke/spe.c                  |   262 ++
 sys/arch/powerpc/booke/spe_subr.S             |   145 +
 sys/arch/powerpc/booke/trap.c                 |   854 ++++++++
 sys/arch/powerpc/booke/trap_subr.S            |   958 ++++++++++
 sys/arch/powerpc/conf/Makefile.powerpc        |    17 +-
 sys/arch/powerpc/conf/files.booke             |    73 +-
 sys/arch/powerpc/conf/files.powerpc           |    19 +-
 sys/arch/powerpc/conf/kern.ldscript           |    67 +
 sys/arch/powerpc/fpu/fpu_emu.c                |    56 +-
 sys/arch/powerpc/ibm4xx/4xx_trap_subr.S       |    55 +-
 sys/arch/powerpc/ibm4xx/clock.c               |     6 +-
 sys/arch/powerpc/ibm4xx/genassym.cf           |   190 +-
 sys/arch/powerpc/ibm4xx/ibm4xx_machdep.c      |     6 +-
 sys/arch/powerpc/ibm4xx/trap.c                |   100 +-
 sys/arch/powerpc/ibm4xx/trap_subr.S           |   569 ++---
 sys/arch/powerpc/include/altivec.h            |    28 +-
 sys/arch/powerpc/include/asm.h                |    34 +-
 sys/arch/powerpc/include/booke/cpuvar.h       |   205 ++
 sys/arch/powerpc/include/booke/e500reg.h      |   573 ++++++
 sys/arch/powerpc/include/booke/e500var.h      |    88 +
 sys/arch/powerpc/include/booke/etsecreg.h     |   581 ++++++
 sys/arch/powerpc/include/booke/intr.h         |    63 +-
 sys/arch/powerpc/include/booke/openpicreg.h   |   132 +-
 sys/arch/powerpc/include/booke/pmap.h         |   121 +
 sys/arch/powerpc/include/booke/pte.h          |   201 ++-
 sys/arch/powerpc/include/booke/spr.h          |   102 +-
 sys/arch/powerpc/include/booke/trap.h         |    13 +-
 sys/arch/powerpc/include/booke/vmparam.h      |    84 +-
 sys/arch/powerpc/include/cpu.h                |   163 +-
 sys/arch/powerpc/include/cpu_counter.h        |     9 +-
 sys/arch/powerpc/include/db_machdep.h         |     4 +-
 sys/arch/powerpc/include/fpu.h                |    21 +-
 sys/arch/powerpc/include/frame.h              |   141 +-
 sys/arch/powerpc/include/ibm4xx/cpu.h         |    55 +-
 sys/arch/powerpc/include/ibm4xx/ibm4xx_intr.h |     4 +-
 sys/arch/powerpc/include/ibm4xx/pmap.h        |     8 +-
 sys/arch/powerpc/include/instr.h              |    61 +-
 sys/arch/powerpc/include/mcontext.h           |     3 +-
 sys/arch/powerpc/include/oea/pmap.h           |     4 +-
 sys/arch/powerpc/include/pcb.h                |    15 +-
 sys/arch/powerpc/include/proc.h               |    23 +-
 sys/arch/powerpc/include/psl.h                |    10 +-
 sys/arch/powerpc/include/ptrace.h             |     6 +-
 sys/arch/powerpc/include/reg.h                |     4 +-
 sys/arch/powerpc/include/userret.h            |    40 +-
 sys/arch/powerpc/oea/altivec.c                |   241 +-
 sys/arch/powerpc/oea/altivec_subr.S           |   156 +
 sys/arch/powerpc/oea/cpu_subr.c               |    28 +-
 sys/arch/powerpc/oea/genassym.cf              |   247 +-
 sys/arch/powerpc/oea/oea_machdep.c            |    14 +-
 sys/arch/powerpc/oea/pmap.c                   |     8 +-
 sys/arch/powerpc/powerpc/bus_dma.c            |    43 +-
 sys/arch/powerpc/powerpc/bus_space.c          |    68 +-
 sys/arch/powerpc/powerpc/clock.c              |    12 +-
 sys/arch/powerpc/powerpc/compat_13_machdep.c  |    22 +-
 sys/arch/powerpc/powerpc/compat_16_machdep.c  |    83 +-
 sys/arch/powerpc/powerpc/core_machdep.c       |    20 +-
 sys/arch/powerpc/powerpc/db_interface.c       |   190 +-
 sys/arch/powerpc/powerpc/db_trace.c           |    67 +-
 sys/arch/powerpc/powerpc/fixup.c              |   200 ++
 sys/arch/powerpc/powerpc/fpu.c                |   256 +-
 sys/arch/powerpc/powerpc/fpu_subr.S           |   117 +
 sys/arch/powerpc/powerpc/ipkdb_glue.c         |    44 +-
 sys/arch/powerpc/powerpc/locore_subr.S        |   234 ++-
 sys/arch/powerpc/powerpc/mach_machdep.c       |    50 +-
 sys/arch/powerpc/powerpc/pio_subr.S           |     7 +-
 sys/arch/powerpc/powerpc/powerpc_machdep.c    |    60 +-
 sys/arch/powerpc/powerpc/process_machdep.c    |    63 +-
 sys/arch/powerpc/powerpc/setfault.S           |    14 +-
 sys/arch/powerpc/powerpc/sig_machdep.c        |   133 +-
 sys/arch/powerpc/powerpc/sys_machdep.c        |     6 +-
 sys/arch/powerpc/powerpc/syscall.c            |    78 +-
 sys/arch/powerpc/powerpc/trap.c               |   235 +-
 sys/arch/powerpc/powerpc/trap_subr.S          |   506 ++--
 sys/arch/powerpc/powerpc/vm_machdep.c         |   113 +-
 101 files changed, 17949 insertions(+), 2203 deletions(-)

diffs (truncated from 24150 to 300 lines):

diff -r bfa69886a7f4 -r 10052de5b090 sys/arch/powerpc/booke/board_prop.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/powerpc/booke/board_prop.c       Tue Jan 18 01:02:52 2011 +0000
@@ -0,0 +1,148 @@
+/*     $NetBSD: board_prop.c,v 1.2 2011/01/18 01:02:52 matt Exp $      */
+
+/*
+ * Copyright (c) 2004 Shigeyuki Fukushima.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: board_prop.c,v 1.2 2011/01/18 01:02:52 matt Exp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/cpu.h>
+
+#include <prop/proplib.h>
+
+#include <powerpc/booke/cpuvar.h>
+
+prop_dictionary_t board_properties;
+
+void
+board_info_init(void)
+{
+
+       /*
+        * Set up the board properties dictionary.
+        */
+       if (board_properties != NULL)
+               return;
+       board_properties = prop_dictionary_create();
+       KASSERT(board_properties != NULL);
+}
+
+bool
+board_info_get_bool(const char *name)
+{
+       KASSERT(board_properties != NULL);
+       prop_bool_t pb = prop_dictionary_get(board_properties, name);
+       if (pb == NULL)
+               return false;
+       const bool value = prop_bool_true(pb);
+       /* XXX -- do we need object release pb? */
+       return value;
+}
+
+void
+board_info_add_bool(const char *name)
+{
+       KASSERT(board_properties != NULL);
+       prop_bool_t pb = prop_bool_create(true);
+       KASSERT(pb != NULL);
+       if (prop_dictionary_set(board_properties, name, pb) == false)
+               panic("%s: setting %s", __func__, name);
+       prop_object_release(pb);
+}
+
+uint64_t
+board_info_get_number(const char *name)
+{
+       KASSERT(board_properties != NULL);
+       prop_number_t pn = prop_dictionary_get(board_properties, name);
+       KASSERT(pn != NULL);
+       const uint64_t number = prop_number_unsigned_integer_value(pn);
+       /* XXX -- do we need object release pn? */
+       return number;
+}
+
+void
+board_info_add_number(const char *name, uint64_t number)
+{
+       KASSERT(board_properties != NULL);
+       prop_number_t pn = prop_number_create_integer(number);
+       KASSERT(pn != NULL);
+       if (prop_dictionary_set(board_properties, name, pn) == false)
+               panic("%s: setting %s failed", __func__, name);
+       prop_object_release(pn);
+}
+
+void
+board_info_add_data(const char *name, const void *data, size_t len)
+{
+       KASSERT(board_properties != NULL);
+       prop_data_t pd = prop_data_create_data(data, len);
+       KASSERT(pd != NULL);
+       if (prop_dictionary_set(board_properties, name, pd) == false)
+               panic("%s: setting %s failed", __func__, name);
+       prop_object_release(pd);
+}
+
+const void *
+board_info_get_data(const char *name, size_t *lenp)
+{
+       KASSERT(board_properties != NULL);
+       prop_data_t pd = prop_dictionary_get(board_properties, name);
+       KASSERT(pd != NULL);
+       *lenp = prop_data_size(pd);
+       /* XXX -- do we need object release pn? */
+       return prop_data_data(pd);
+}
+
+void
+board_info_add_string(const char *name, const char *data)
+{
+       KASSERT(board_properties != NULL);
+       prop_string_t ps = prop_string_create_cstring(data);
+       KASSERT(ps != NULL);
+       if (prop_dictionary_set(board_properties, name, ps) == false)
+               panic("%s: setting %s failed", __func__, name);
+       prop_object_release(ps);
+}
+
+void
+board_info_add_object(const char *name, void *obj)
+{
+       if (prop_dictionary_set(board_properties, name, obj) == false)
+               panic("%s: setting %s failed", __func__, name);
+}
+
+void *
+board_info_get_object(const char *name)
+{
+       return prop_dictionary_get(board_properties, name);
+}
diff -r bfa69886a7f4 -r 10052de5b090 sys/arch/powerpc/booke/booke_autoconf.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/powerpc/booke/booke_autoconf.c   Tue Jan 18 01:02:52 2011 +0000
@@ -0,0 +1,81 @@
+/*     $NetBSD: booke_autoconf.c,v 1.2 2011/01/18 01:02:52 matt Exp $  */
+/*-
+ * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Raytheon BBN Technologies Corp and Defense Advanced Research Projects
+ * Agency and which was developed by Matt Thomas of 3am Software Foundry.
+ *
+ * This material is based upon work supported by the Defense Advanced Research
+ * Projects Agency and Space and Naval Warfare Systems Center, Pacific, under
+ * Contract No. N66001-09-C-2073.
+ * Approved for Public Release, Distribution Unlimited
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: booke_autoconf.c,v 1.2 2011/01/18 01:02:52 matt Exp $");
+
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/cpu.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+
+#include <net/if.h>
+#include <net/if_ether.h>
+
+#include <powerpc/booke/cpuvar.h>
+
+void
+e500_device_register(device_t dev, void *aux)
+{
+       device_t parent = device_parent(dev);
+
+       if (device_is_a(dev, "etsec") && device_is_a(parent, "cpunode")) {
+               /* Set the mac-addr of the on-chip Ethernet. */
+               struct cpunode_attach_args *cna = aux;
+
+               if (cna->cna_locs.cnl_instance < 4) {
+                       prop_data_t pd;
+                       char prop_name[15];
+
+                       snprintf(prop_name, sizeof(prop_name),
+                           "etsec%d-mac-addr", cna->cna_locs.cnl_instance);
+
+                       pd = prop_dictionary_get(board_properties, prop_name);
+                       if (pd == NULL) {
+                               printf("WARNING: unable to get mac-addr "
+                                   "property from board properties\n");
+                               return;
+                       }
+                       if (prop_dictionary_set(device_properties(dev),
+                                               "mac-address", pd) == false) {
+                               printf("WARNING: unable to set mac-addr "
+                                   "property for %s\n", dev->dv_xname);
+                       }
+               }
+               return;
+       }
+}
diff -r bfa69886a7f4 -r 10052de5b090 sys/arch/powerpc/booke/booke_cache.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/powerpc/booke/booke_cache.c      Tue Jan 18 01:02:52 2011 +0000
@@ -0,0 +1,158 @@
+/*-
+ * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Raytheon BBN Technologies Corp and Defense Advanced Research Projects
+ * Agency and which was developed by Matt Thomas of 3am Software Foundry.
+ *
+ * This material is based upon work supported by the Defense Advanced Research
+ * Projects Agency and Space and Naval Warfare Systems Center, Pacific, under
+ * Contract No. N66001-09-C-2073.
+ * Approved for Public Release, Distribution Unlimited
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ *
+ */
+#include <sys/cdefs.h>
+
+__KERNEL_RCSID(0, "$NetBSD: booke_cache.c,v 1.2 2011/01/18 01:02:52 matt Exp $");
+
+#include <sys/param.h>
+#include <sys/cpu.h>
+
+#include <uvm/uvm_extern.h>
+
+static void inline
+dcbf(vaddr_t va, vsize_t off)
+{
+       __asm volatile("dcbf\t%0,%1" : : "b" (va), "r" (off));
+}
+
+static void inline
+dcbst(vaddr_t va, vsize_t off)
+{
+       __asm volatile("dcbst\t%0,%1" : : "b" (va), "r" (off));
+}
+
+static void inline



Home | Main Index | Thread Index | Old Index