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