diff options
author | andrew <andrew@FreeBSD.org> | 2015-04-11 17:52:47 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-04-11 17:52:47 +0000 |
commit | ed466759a985a7f5326a7117d59e71551d14540a (patch) | |
tree | 754c5ab05b40e73a417ecd2c2d88e980a9f3d5f0 /sys/arm/qemu | |
parent | e2a65d5cfa2a52472daa9b9658f4fa10f742291f (diff) | |
download | FreeBSD-src-ed466759a985a7f5326a7117d59e71551d14540a.zip FreeBSD-src-ed466759a985a7f5326a7117d59e71551d14540a.tar.gz |
Add support for the QEMU virt SoC. This is a SoC built depending on the
command line arguments passed in. It will then generate a dtb on the fly,
as such no dts will be added as it may be incorrect.
Relnotes: yes
Diffstat (limited to 'sys/arm/qemu')
-rw-r--r-- | sys/arm/qemu/files.qemu | 16 | ||||
-rw-r--r-- | sys/arm/qemu/std.virt | 15 | ||||
-rw-r--r-- | sys/arm/qemu/virt_common.c | 45 | ||||
-rw-r--r-- | sys/arm/qemu/virt_machdep.c | 92 |
4 files changed, 168 insertions, 0 deletions
diff --git a/sys/arm/qemu/files.qemu b/sys/arm/qemu/files.qemu new file mode 100644 index 0000000..d23524e --- /dev/null +++ b/sys/arm/qemu/files.qemu @@ -0,0 +1,16 @@ +# $FreeBSD$ + +# +# Standard ARM support. +# +arm/arm/bus_space_base.c standard +arm/arm/bus_space_generic.c standard +kern/kern_clocksource.c standard + +# +# Standard qemu virt devices and support. +# +arm/arm/gic.c standard +arm/arm/generic_timer.c standard +arm/qemu/virt_common.c standard +arm/qemu/virt_machdep.c standard diff --git a/sys/arm/qemu/std.virt b/sys/arm/qemu/std.virt new file mode 100644 index 0000000..ed94303 --- /dev/null +++ b/sys/arm/qemu/std.virt @@ -0,0 +1,15 @@ +# $FreeBSD$ +machine arm armv6 +cpu CPU_CORTEXA +makeoptions CONF_CFLAGS="-march=armv7a" +makeoptions ARM_LITTLE_ENDIAN +options ARM_L2_PIPT + +options KERNVIRTADDR = 0xc0000000 +makeoptions KERNVIRTADDR = 0xc0000000 + +options IPI_IRQ_START=0 +options IPI_IRQ_END=15 + +files "../qemu/files.qemu" + diff --git a/sys/arm/qemu/virt_common.c b/sys/arm/qemu/virt_common.c new file mode 100644 index 0000000..fc02247 --- /dev/null +++ b/sys/arm/qemu/virt_common.c @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2015 Andrew Turner + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/systm.h> + +#include <dev/fdt/fdt_common.h> + +#include <machine/intr.h> + +struct fdt_fixup_entry fdt_fixup_table[] = { + { NULL, NULL } +}; + +fdt_pic_decode_t fdt_pic_table[] = { + &gic_decode_fdt, + NULL +}; diff --git a/sys/arm/qemu/virt_machdep.c b/sys/arm/qemu/virt_machdep.c new file mode 100644 index 0000000..6b0cba2 --- /dev/null +++ b/sys/arm/qemu/virt_machdep.c @@ -0,0 +1,92 @@ +/*- + * Copyright (c) 2015 Andrew Turner + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "opt_platform.h" + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#define _ARM32_BUS_DMA_PRIVATE +#include <sys/param.h> +#include <sys/systm.h> + +#include <vm/vm.h> + +#include <machine/bus.h> +#include <machine/devmap.h> +#include <machine/platform.h> +#include <machine/platformvar.h> + +#include "platform_if.h" + +struct arm32_dma_range * +bus_dma_get_range(void) +{ + + return (NULL); +} + +int +bus_dma_get_range_nb(void) +{ + + return (0); +} + +void +cpu_reset(void) +{ + + while (1); +} + +static vm_offset_t +virt_lastaddr(platform_t plat) +{ + + return (arm_devmap_lastaddr()); +} + +/* + * Set up static device mappings. + */ +static int +virt_devmap_init(platform_t plat) +{ + + arm_devmap_add_entry(0x09000000, 0x100000); /* Uart */ + return (0); +} + +static platform_method_t virt_methods[] = { + PLATFORMMETHOD(platform_devmap_init, virt_devmap_init), + PLATFORMMETHOD(platform_lastaddr, virt_lastaddr), + + PLATFORMMETHOD_END, +}; + +FDT_PLATFORM_DEF(virt, "virt", 0, "linux,dummy-virt"); |