Module Name: src
Committed By: slp
Date: Mon Feb 9 07:47:15 UTC 2015
Added Files:
src/sys/arch/evbarm/conf: files.vexpress mk.vexpress std.vexpress
src/sys/arch/evbarm/vexpress: if_smsh_axi.c platform.h vexpress_axi.c
vexpress_intr.h vexpress_machdep.c vexpress_plcom.c
vexpress_plmmc.c vexpress_space.c vexpress_start.S vexpress_var.h
Log Message:
Add support for Versatile Express A15 board.
This has not been tested with real hardware, just with the software
model emulated by QEMU.
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/evbarm/conf/files.vexpress \
src/sys/arch/evbarm/conf/mk.vexpress \
src/sys/arch/evbarm/conf/std.vexpress
cvs rdiff -u -r0 -r1.1 src/sys/arch/evbarm/vexpress/if_smsh_axi.c \
src/sys/arch/evbarm/vexpress/platform.h \
src/sys/arch/evbarm/vexpress/vexpress_axi.c \
src/sys/arch/evbarm/vexpress/vexpress_intr.h \
src/sys/arch/evbarm/vexpress/vexpress_machdep.c \
src/sys/arch/evbarm/vexpress/vexpress_plcom.c \
src/sys/arch/evbarm/vexpress/vexpress_plmmc.c \
src/sys/arch/evbarm/vexpress/vexpress_space.c \
src/sys/arch/evbarm/vexpress/vexpress_start.S \
src/sys/arch/evbarm/vexpress/vexpress_var.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Added files:
Index: src/sys/arch/evbarm/conf/files.vexpress
diff -u /dev/null src/sys/arch/evbarm/conf/files.vexpress:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/conf/files.vexpress Mon Feb 9 07:47:15 2015
@@ -0,0 +1,68 @@
+# $NetBSD: files.vexpress,v 1.1 2015/02/09 07:47:15 slp Exp $
+#
+# Versatile Express board configuration info
+#
+
+file arch/evbarm/vexpress/vexpress_machdep.c
+
+include "arch/arm/pic/files.pic"
+include "arch/arm/cortex/files.cortex"
+
+file arch/arm/arm32/arm32_boot.c
+file arch/arm/arm32/arm32_kvminit.c
+file arch/arm/arm32/arm32_reboot.c
+file arch/arm/arm32/irq_dispatch.S
+
+file arch/evbarm/vexpress/vexpress_space.c
+
+# VEXPRESS AXI/AHB bus interface and SoC domains
+device axi { [addr=-1], [size=0], [irq=-1], [irqbase=-1]} : bus_space_generic
+attach axi at mainbus
+file arch/evbarm/vexpress/vexpress_axi.c axi
+
+# UART Interface
+attach plcom at axi with vexpressplcom
+file arch/evbarm/vexpress/vexpress_plcom.c vexpressplcom
+
+# MMCI host controller
+attach plmmc at axi with vexpressplmmc
+file arch/evbarm/vexpress/vexpress_plmmc.c vexpressplmmc
+
+# SMSC LAN9118
+attach smsh at axi with smsh_axi
+file arch/evbarm/vexpress/if_smsh_axi.c smsh_axi
+
+# $NetBSD: files.vexpress,v 1.1 2015/02/09 07:47:15 slp Exp $
+#
+# Versatile Express board configuration info
+#
+
+file arch/evbarm/vexpress/vexpress_machdep.c
+
+include "arch/arm/pic/files.pic"
+include "arch/arm/cortex/files.cortex"
+
+file arch/arm/arm32/arm32_boot.c
+file arch/arm/arm32/arm32_kvminit.c
+file arch/arm/arm32/arm32_reboot.c
+file arch/arm/arm32/irq_dispatch.S
+
+file arch/evbarm/vexpress/vexpress_space.c
+
+# VEXPRESS AXI/AHB bus interface and SoC domains
+device axi { [addr=-1], [size=0], [irq=-1], [irqbase=-1]} : bus_space_generic
+attach axi at mainbus
+file arch/evbarm/vexpress/vexpress_axi.c axi
+
+# UART Interface
+attach plcom at axi with vexpressplcom
+file arch/evbarm/vexpress/vexpress_plcom.c vexpressplcom
+
+# MMCI host controller
+attach plmmc at axi with vexpressplmmc
+file arch/evbarm/vexpress/vexpress_plmmc.c vexpressplmmc
+
+# SMSC LAN9118
+attach smsh at axi with smsh_axi
+file arch/evbarm/vexpress/if_smsh_axi.c smsh_axi
+
Index: src/sys/arch/evbarm/conf/mk.vexpress
diff -u /dev/null src/sys/arch/evbarm/conf/mk.vexpress:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/conf/mk.vexpress Mon Feb 9 07:47:15 2015
@@ -0,0 +1,70 @@
+# $NetBSD: mk.vexpress,v 1.1 2015/02/09 07:47:15 slp Exp $
+
+.if !empty(MACHINE_ARCH:M*eb)
+EXTRA_LINKFLAGS+= --be8
+.endif
+
+SYSTEM_FIRST_OBJ= vexpress_start.o
+SYSTEM_FIRST_SFILE= ${THISARM}/vexpress/vexpress_start.S
+
+_OSRELEASE!= ${HOST_SH} $S/conf/osrelease.sh
+
+KERNEL_BASE_PHYS?=$(LOADADDRESS)
+KERNEL_BASE_VIRT?=$(LOADADDRESS)
+
+MKUBOOTIMAGEARGS= -A arm -T kernel
+MKUBOOTIMAGEARGS+= -a $(KERNEL_BASE_PHYS) -e $(KERNEL_BASE_PHYS)
+MKUBOOTIMAGEARGS+= -n "NetBSD/$(BOARDTYPE) ${_OSRELEASE}"
+MKUBOOTIMAGEARGS_NONE= ${MKUBOOTIMAGEARGS} -C none
+MKUBOOTIMAGEARGS_GZ= ${MKUBOOTIMAGEARGS} -C gz
+
+SYSTEM_LD_TAIL_EXTRA+=; \
+ echo ${OBJCOPY} -S -O binary $@ [email protected]; \
+ ${OBJCOPY} -S -O binary $@ [email protected]; \
+ echo ${TOOL_GZIP} -9c [email protected] > [email protected]; \
+ ${TOOL_GZIP} -9c [email protected] > [email protected]; \
+ echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_GZ} [email protected] [email protected]; \
+ ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_GZ} [email protected] [email protected]; \
+ echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_NONE} [email protected] [email protected]; \
+ ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_NONE} [email protected] [email protected]; \
+ echo
+
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin@}
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.ub@}
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin.gz@}
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.gz.ub@}
+# $NetBSD: mk.vexpress,v 1.1 2015/02/09 07:47:15 slp Exp $
+
+.if !empty(MACHINE_ARCH:M*eb)
+EXTRA_LINKFLAGS+= --be8
+.endif
+
+SYSTEM_FIRST_OBJ= vexpress_start.o
+SYSTEM_FIRST_SFILE= ${THISARM}/vexpress/vexpress_start.S
+
+_OSRELEASE!= ${HOST_SH} $S/conf/osrelease.sh
+
+KERNEL_BASE_PHYS?=$(LOADADDRESS)
+KERNEL_BASE_VIRT?=$(LOADADDRESS)
+
+MKUBOOTIMAGEARGS= -A arm -T kernel
+MKUBOOTIMAGEARGS+= -a $(KERNEL_BASE_PHYS) -e $(KERNEL_BASE_PHYS)
+MKUBOOTIMAGEARGS+= -n "NetBSD/$(BOARDTYPE) ${_OSRELEASE}"
+MKUBOOTIMAGEARGS_NONE= ${MKUBOOTIMAGEARGS} -C none
+MKUBOOTIMAGEARGS_GZ= ${MKUBOOTIMAGEARGS} -C gz
+
+SYSTEM_LD_TAIL_EXTRA+=; \
+ echo ${OBJCOPY} -S -O binary $@ [email protected]; \
+ ${OBJCOPY} -S -O binary $@ [email protected]; \
+ echo ${TOOL_GZIP} -9c [email protected] > [email protected]; \
+ ${TOOL_GZIP} -9c [email protected] > [email protected]; \
+ echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_GZ} [email protected] [email protected]; \
+ ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_GZ} [email protected] [email protected]; \
+ echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_NONE} [email protected] [email protected]; \
+ ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS_NONE} [email protected] [email protected]; \
+ echo
+
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin@}
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.ub@}
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin.gz@}
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.gz.ub@}
Index: src/sys/arch/evbarm/conf/std.vexpress
diff -u /dev/null src/sys/arch/evbarm/conf/std.vexpress:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/conf/std.vexpress Mon Feb 9 07:47:15 2015
@@ -0,0 +1,64 @@
+# $NetBSD: std.vexpress,v 1.1 2015/02/09 07:47:15 slp Exp $
+#
+# standard NetBSD/evbarm for VEXPRESS options
+
+machine evbarm arm
+include "arch/evbarm/conf/std.evbarm"
+
+# Pull in VEXPRESS config definitions
+include "arch/evbarm/conf/files.vexpress"
+
+makeoptions CPUFLAGS="-march=armv7-a -mfpu=neon"
+
+# To support easy transit to ../arch/arm/arm32
+options MODULAR
+options MODULAR_DEFAULT_AUTOLOAD
+options ARM_HAS_VBAR
+options CORTEX_PMC
+options __HAVE_CPU_COUNTER
+options __HAVE_FAST_SOFTINTS # should be in types.h
+#options __HAVE_MM_MD_DIRECT_MAPPED_PHYS
+options TPIDRPRW_IS_CURCPU
+options KERNEL_BASE_EXT=0x80000000
+options FPU_VFP
+
+makeoptions KERNEL_BASE_PHYS="0x80000000"
+makeoptions KERNEL_BASE_VIRT="0x80000000"
+makeoptions BOARDTYPE="vexpress"
+makeoptions BOARDMKFRAG="${THISARM}/conf/mk.vexpress"
+
+options ARM_INTR_IMPL="<arch/evbarm/vexpress/vexpress_intr.h>"
+options ARM_GENERIC_TODR
+
+# $NetBSD: std.vexpress,v 1.1 2015/02/09 07:47:15 slp Exp $
+#
+# standard NetBSD/evbarm for VEXPRESS options
+
+machine evbarm arm
+include "arch/evbarm/conf/std.evbarm"
+
+# Pull in VEXPRESS config definitions
+include "arch/evbarm/conf/files.vexpress"
+
+makeoptions CPUFLAGS="-march=armv7-a -mfpu=neon"
+
+# To support easy transit to ../arch/arm/arm32
+options MODULAR
+options MODULAR_DEFAULT_AUTOLOAD
+options ARM_HAS_VBAR
+options CORTEX_PMC
+options __HAVE_CPU_COUNTER
+options __HAVE_FAST_SOFTINTS # should be in types.h
+#options __HAVE_MM_MD_DIRECT_MAPPED_PHYS
+options TPIDRPRW_IS_CURCPU
+options KERNEL_BASE_EXT=0x80000000
+options FPU_VFP
+
+makeoptions KERNEL_BASE_PHYS="0x80000000"
+makeoptions KERNEL_BASE_VIRT="0x80000000"
+makeoptions BOARDTYPE="vexpress"
+makeoptions BOARDMKFRAG="${THISARM}/conf/mk.vexpress"
+
+options ARM_INTR_IMPL="<arch/evbarm/vexpress/vexpress_intr.h>"
+options ARM_GENERIC_TODR
+
Index: src/sys/arch/evbarm/vexpress/if_smsh_axi.c
diff -u /dev/null src/sys/arch/evbarm/vexpress/if_smsh_axi.c:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/if_smsh_axi.c Mon Feb 9 07:47:15 2015
@@ -0,0 +1,234 @@
+/* $NetBSD: if_smsh_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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: if_smsh_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include "locators.h"
+
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/errno.h>
+#include <sys/bus.h>
+#include <sys/systm.h>
+
+#include <net/if.h>
+#include <net/if_ether.h>
+#include <net/if_media.h>
+
+#include <dev/mii/miivar.h>
+
+#include <dev/ic/lan9118var.h>
+#include <dev/ic/lan9118reg.h>
+
+#include <evbarm/vexpress/vexpress_var.h>
+
+
+static int smsh_axi_match(device_t, struct cfdata *, void *);
+static void smsh_axi_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(smsh_axi, sizeof(struct lan9118_softc),
+ smsh_axi_match, smsh_axi_attach, NULL, NULL);
+
+
+/* ARGSUSED */
+static int
+smsh_axi_match(device_t parent, struct cfdata * match, void *aux)
+{
+ struct axi_attach_args *aa = aux;
+
+ /* Disallow wildcarded values. */
+ if (aa->aa_addr == 0)
+ return 0;
+ if (aa->aa_irq == 0)
+ return 0;
+
+ return 1;
+}
+
+/* ARGSUSED */
+static void
+smsh_axi_attach(device_t parent, device_t self, void *aux)
+{
+ struct lan9118_softc *sc = device_private(self);
+ struct axi_attach_args *aa = aux;
+ prop_dictionary_t dict = device_properties(self);
+ void *ih;
+
+ sc->sc_dev = self;
+
+ /*
+ * Prefer the Ethernet address in device properties.
+ */
+ prop_data_t ea = prop_dictionary_get(dict, "mac-address");
+ if (ea != NULL) {
+ KASSERT(prop_object_type(ea) == PROP_TYPE_DATA);
+ KASSERT(prop_data_size(ea) == ETHER_ADDR_LEN);
+ memcpy(sc->sc_enaddr, prop_data_data_nocopy(ea),
+ ETHER_ADDR_LEN);
+ sc->sc_flags |= LAN9118_FLAGS_NO_EEPROM;
+ }
+ /* Map i/o space. */
+ if (bus_space_map(aa->aa_iot, aa->aa_addr, LAN9118_IOSIZE, 0,
+ &sc->sc_ioh))
+ panic("smsh_axi_attach: can't map i/o space");
+ sc->sc_iot = aa->aa_iot;
+
+ if (lan9118_attach(sc) != 0) {
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh, LAN9118_IOSIZE);
+ return;
+ }
+ /* Establish the interrupt handler. */
+ ih = intr_establish(aa->aa_irq, IPL_NET, IST_LEVEL,
+ lan9118_intr, sc);
+ if (ih == NULL) {
+ aprint_error_dev(self,
+ "couldn't establish interrupt handler\n");
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh, LAN9118_IOSIZE);
+ return;
+ }
+}
+/* $NetBSD: if_smsh_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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: if_smsh_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include "locators.h"
+
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/errno.h>
+#include <sys/bus.h>
+#include <sys/systm.h>
+
+#include <net/if.h>
+#include <net/if_ether.h>
+#include <net/if_media.h>
+
+#include <dev/mii/miivar.h>
+
+#include <dev/ic/lan9118var.h>
+#include <dev/ic/lan9118reg.h>
+
+#include <evbarm/vexpress/vexpress_var.h>
+
+
+static int smsh_axi_match(device_t, struct cfdata *, void *);
+static void smsh_axi_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(smsh_axi, sizeof(struct lan9118_softc),
+ smsh_axi_match, smsh_axi_attach, NULL, NULL);
+
+
+/* ARGSUSED */
+static int
+smsh_axi_match(device_t parent, struct cfdata * match, void *aux)
+{
+ struct axi_attach_args *aa = aux;
+
+ /* Disallow wildcarded values. */
+ if (aa->aa_addr == 0)
+ return 0;
+ if (aa->aa_irq == 0)
+ return 0;
+
+ return 1;
+}
+
+/* ARGSUSED */
+static void
+smsh_axi_attach(device_t parent, device_t self, void *aux)
+{
+ struct lan9118_softc *sc = device_private(self);
+ struct axi_attach_args *aa = aux;
+ prop_dictionary_t dict = device_properties(self);
+ void *ih;
+
+ sc->sc_dev = self;
+
+ /*
+ * Prefer the Ethernet address in device properties.
+ */
+ prop_data_t ea = prop_dictionary_get(dict, "mac-address");
+ if (ea != NULL) {
+ KASSERT(prop_object_type(ea) == PROP_TYPE_DATA);
+ KASSERT(prop_data_size(ea) == ETHER_ADDR_LEN);
+ memcpy(sc->sc_enaddr, prop_data_data_nocopy(ea),
+ ETHER_ADDR_LEN);
+ sc->sc_flags |= LAN9118_FLAGS_NO_EEPROM;
+ }
+ /* Map i/o space. */
+ if (bus_space_map(aa->aa_iot, aa->aa_addr, LAN9118_IOSIZE, 0,
+ &sc->sc_ioh))
+ panic("smsh_axi_attach: can't map i/o space");
+ sc->sc_iot = aa->aa_iot;
+
+ if (lan9118_attach(sc) != 0) {
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh, LAN9118_IOSIZE);
+ return;
+ }
+ /* Establish the interrupt handler. */
+ ih = intr_establish(aa->aa_irq, IPL_NET, IST_LEVEL,
+ lan9118_intr, sc);
+ if (ih == NULL) {
+ aprint_error_dev(self,
+ "couldn't establish interrupt handler\n");
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh, LAN9118_IOSIZE);
+ return;
+ }
+}
Index: src/sys/arch/evbarm/vexpress/platform.h
diff -u /dev/null src/sys/arch/evbarm/vexpress/platform.h:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/platform.h Mon Feb 9 07:47:15 2015
@@ -0,0 +1,102 @@
+/* $NetBSD: platform.h,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+#ifndef _ARM_VEXPRESS_PLATFORM_H
+#define _ARM_VEXPRESS_PLATFORM_H
+
+/*
+ * IO space
+ */
+
+#define VEXPRESS_CORE_VBASE 0xf0000000
+#define VEXPRESS_CORE_PBASE 0x10000000
+#define VEXPRESS_CORE_SIZE 0x10000000
+
+/*
+ * Kernel VM space 16Mb behind KERNEL_BASE upto 0xeff00000
+ */
+#define KERNEL_VM_BASE 0xc0000000
+#define KERNEL_VM_SIZE (VEXPRESS_CORE_VBASE - KERNEL_VM_BASE)
+
+#define VEXPRESS_REF_FREQ (24*1000*1000) /* 24MHz */
+
+#endif /* _ARM_VEXPRESS_PLATFORM_H */
+/* $NetBSD: platform.h,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+#ifndef _ARM_VEXPRESS_PLATFORM_H
+#define _ARM_VEXPRESS_PLATFORM_H
+
+/*
+ * IO space
+ */
+
+#define VEXPRESS_CORE_VBASE 0xf0000000
+#define VEXPRESS_CORE_PBASE 0x10000000
+#define VEXPRESS_CORE_SIZE 0x10000000
+
+/*
+ * Kernel VM space 16Mb behind KERNEL_BASE upto 0xeff00000
+ */
+#define KERNEL_VM_BASE 0xc0000000
+#define KERNEL_VM_SIZE (VEXPRESS_CORE_VBASE - KERNEL_VM_BASE)
+
+#define VEXPRESS_REF_FREQ (24*1000*1000) /* 24MHz */
+
+#endif /* _ARM_VEXPRESS_PLATFORM_H */
Index: src/sys/arch/evbarm/vexpress/vexpress_axi.c
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_axi.c:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_axi.c Mon Feb 9 07:47:15 2015
@@ -0,0 +1,312 @@
+/* $NetBSD: vexpress_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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: vexpress_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/device.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <evbarm/vexpress/vexpress_var.h>
+
+#include "locators.h"
+
+struct axi_softc {
+ device_t sc_dev;
+ bus_space_tag_t sc_iot;
+ bus_dma_tag_t sc_dmat;
+};
+
+static int axi_match(device_t, struct cfdata *, void *);
+static void axi_attach(device_t, device_t, void *);
+static int axi_search(device_t, struct cfdata *, const int *, void *);
+static int axi_critical_search(device_t, struct cfdata *, const int *, void *);
+static int axi_search(device_t, struct cfdata *, const int *, void *);
+static int axi_print(void *, const char *);
+
+CFATTACH_DECL_NEW(axi, sizeof(struct axi_softc),
+ axi_match, axi_attach, NULL, NULL);
+
+/* ARGSUSED */
+static int
+axi_match(device_t parent __unused, struct cfdata * match __unused,
+ void *aux __unused)
+{
+ return 1;
+}
+
+/* ARGSUSED */
+static void
+axi_attach(device_t parent __unused, device_t self, void *aux __unused)
+{
+ struct axi_softc *sc;
+ struct axi_attach_args aa;
+
+ aprint_normal(": Advanced eXtensible Interface\n");
+ aprint_naive("\n");
+
+ sc = device_private(self);
+ sc->sc_iot = &vexpress_bs_tag;
+#if NBUS_DMA_GENERIC > 0
+ sc->sc_dmat = &vexpress_bus_dma_tag;
+#else
+ sc->sc_dmat = 0;
+#endif
+
+ aa.aa_name = "axi";
+ aa.aa_iot = sc->sc_iot;
+ aa.aa_dmat = sc->sc_dmat;
+ config_search_ia(axi_critical_search, self, "axi", &aa);
+ config_search_ia(axi_search, self, "axi", &aa);
+}
+
+/* ARGSUSED */
+static int
+axi_critical_search(device_t parent, struct cfdata * cf,
+ const int *ldesc __unused, void *aux)
+{
+ struct axi_attach_args *aa;
+
+ aa = aux;
+
+ if (strcmp(cf->cf_name, "plcom") != 0)
+ return 0;
+
+ aa->aa_name = cf->cf_name;
+ aa->aa_addr = cf->cf_loc[AXICF_ADDR];
+ aa->aa_size = cf->cf_loc[AXICF_SIZE];
+ aa->aa_irq = cf->cf_loc[AXICF_IRQ];
+ aa->aa_irqbase = cf->cf_loc[AXICF_IRQBASE];
+
+ if (config_match(parent, cf, aux) > 0)
+ config_attach(parent, cf, aux, axi_print);
+
+ return 0;
+}
+
+/* ARGSUSED */
+static int
+axi_search(device_t parent, struct cfdata * cf, const int *ldesc __unused,
+ void *aux)
+{
+ struct axi_attach_args *aa;
+
+ aa = aux;
+
+ aa->aa_addr = cf->cf_loc[AXICF_ADDR];
+ aa->aa_size = cf->cf_loc[AXICF_SIZE];
+ aa->aa_irq = cf->cf_loc[AXICF_IRQ];
+ aa->aa_irqbase = cf->cf_loc[AXICF_IRQBASE];
+
+ if (config_match(parent, cf, aux) > 0)
+ config_attach(parent, cf, aux, axi_print);
+
+ return 0;
+}
+
+/* ARGSUSED */
+static int
+axi_print(void *aux, const char *name __unused)
+{
+ struct axi_attach_args *aa = (struct axi_attach_args *) aux;
+
+ if (aa->aa_addr != AXICF_ADDR_DEFAULT) {
+ aprint_normal(" addr 0x%lx", aa->aa_addr);
+ if (aa->aa_size > AXICF_SIZE_DEFAULT)
+ aprint_normal("-0x%lx",
+ aa->aa_addr + aa->aa_size - 1);
+ }
+ if (aa->aa_irq != AXICF_IRQ_DEFAULT)
+ aprint_normal(" intr %d", aa->aa_irq);
+ if (aa->aa_irqbase != AXICF_IRQBASE_DEFAULT)
+ aprint_normal(" irqbase %d", aa->aa_irqbase);
+
+ return (UNCONF);
+}
+/* $NetBSD: vexpress_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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: vexpress_axi.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/device.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <evbarm/vexpress/vexpress_var.h>
+
+#include "locators.h"
+
+struct axi_softc {
+ device_t sc_dev;
+ bus_space_tag_t sc_iot;
+ bus_dma_tag_t sc_dmat;
+};
+
+static int axi_match(device_t, struct cfdata *, void *);
+static void axi_attach(device_t, device_t, void *);
+static int axi_search(device_t, struct cfdata *, const int *, void *);
+static int axi_critical_search(device_t, struct cfdata *, const int *, void *);
+static int axi_search(device_t, struct cfdata *, const int *, void *);
+static int axi_print(void *, const char *);
+
+CFATTACH_DECL_NEW(axi, sizeof(struct axi_softc),
+ axi_match, axi_attach, NULL, NULL);
+
+/* ARGSUSED */
+static int
+axi_match(device_t parent __unused, struct cfdata * match __unused,
+ void *aux __unused)
+{
+ return 1;
+}
+
+/* ARGSUSED */
+static void
+axi_attach(device_t parent __unused, device_t self, void *aux __unused)
+{
+ struct axi_softc *sc;
+ struct axi_attach_args aa;
+
+ aprint_normal(": Advanced eXtensible Interface\n");
+ aprint_naive("\n");
+
+ sc = device_private(self);
+ sc->sc_iot = &vexpress_bs_tag;
+#if NBUS_DMA_GENERIC > 0
+ sc->sc_dmat = &vexpress_bus_dma_tag;
+#else
+ sc->sc_dmat = 0;
+#endif
+
+ aa.aa_name = "axi";
+ aa.aa_iot = sc->sc_iot;
+ aa.aa_dmat = sc->sc_dmat;
+ config_search_ia(axi_critical_search, self, "axi", &aa);
+ config_search_ia(axi_search, self, "axi", &aa);
+}
+
+/* ARGSUSED */
+static int
+axi_critical_search(device_t parent, struct cfdata * cf,
+ const int *ldesc __unused, void *aux)
+{
+ struct axi_attach_args *aa;
+
+ aa = aux;
+
+ if (strcmp(cf->cf_name, "plcom") != 0)
+ return 0;
+
+ aa->aa_name = cf->cf_name;
+ aa->aa_addr = cf->cf_loc[AXICF_ADDR];
+ aa->aa_size = cf->cf_loc[AXICF_SIZE];
+ aa->aa_irq = cf->cf_loc[AXICF_IRQ];
+ aa->aa_irqbase = cf->cf_loc[AXICF_IRQBASE];
+
+ if (config_match(parent, cf, aux) > 0)
+ config_attach(parent, cf, aux, axi_print);
+
+ return 0;
+}
+
+/* ARGSUSED */
+static int
+axi_search(device_t parent, struct cfdata * cf, const int *ldesc __unused,
+ void *aux)
+{
+ struct axi_attach_args *aa;
+
+ aa = aux;
+
+ aa->aa_addr = cf->cf_loc[AXICF_ADDR];
+ aa->aa_size = cf->cf_loc[AXICF_SIZE];
+ aa->aa_irq = cf->cf_loc[AXICF_IRQ];
+ aa->aa_irqbase = cf->cf_loc[AXICF_IRQBASE];
+
+ if (config_match(parent, cf, aux) > 0)
+ config_attach(parent, cf, aux, axi_print);
+
+ return 0;
+}
+
+/* ARGSUSED */
+static int
+axi_print(void *aux, const char *name __unused)
+{
+ struct axi_attach_args *aa = (struct axi_attach_args *) aux;
+
+ if (aa->aa_addr != AXICF_ADDR_DEFAULT) {
+ aprint_normal(" addr 0x%lx", aa->aa_addr);
+ if (aa->aa_size > AXICF_SIZE_DEFAULT)
+ aprint_normal("-0x%lx",
+ aa->aa_addr + aa->aa_size - 1);
+ }
+ if (aa->aa_irq != AXICF_IRQ_DEFAULT)
+ aprint_normal(" intr %d", aa->aa_irq);
+ if (aa->aa_irqbase != AXICF_IRQBASE_DEFAULT)
+ aprint_normal(" irqbase %d", aa->aa_irqbase);
+
+ return (UNCONF);
+}
Index: src/sys/arch/evbarm/vexpress/vexpress_intr.h
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_intr.h:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_intr.h Mon Feb 9 07:47:15 2015
@@ -0,0 +1,108 @@
+/* $NetBSD: vexpress_intr.h,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+#ifndef _ARM_VEXPRESS_INTR_H_
+#define _ARM_VEXPRESS_INTR_H_
+
+#define PIC_MAXSOURCES GIC_MAXSOURCES(224)
+#define PIC_MAXMAXSOURCES (PIC_MAXSOURCES + 32) /* XXX */
+
+/*
+ * The Exynos uses a generic interrupt controller
+ */
+#include <arm/cortex/gic_intr.h>
+
+/*
+ * The GIC supports
+ * - 16 Software Generated Interrupts (SGIs)
+ * - 16 Private Peripheral Interrupts (PPIs)
+ * - 127 Shared Peripheral Interrupts (SPIs)
+ */
+
+#define IRQ_MCT_LTIMER IRQ_PPI(12)
+
+#include <arm/cortex/gtmr_intr.h>
+
+#endif /* _ARM_VEXPRESS_INTR_H_ */
+/* $NetBSD: vexpress_intr.h,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+#ifndef _ARM_VEXPRESS_INTR_H_
+#define _ARM_VEXPRESS_INTR_H_
+
+#define PIC_MAXSOURCES GIC_MAXSOURCES(224)
+#define PIC_MAXMAXSOURCES (PIC_MAXSOURCES + 32) /* XXX */
+
+/*
+ * The Exynos uses a generic interrupt controller
+ */
+#include <arm/cortex/gic_intr.h>
+
+/*
+ * The GIC supports
+ * - 16 Software Generated Interrupts (SGIs)
+ * - 16 Private Peripheral Interrupts (PPIs)
+ * - 127 Shared Peripheral Interrupts (SPIs)
+ */
+
+#define IRQ_MCT_LTIMER IRQ_PPI(12)
+
+#include <arm/cortex/gtmr_intr.h>
+
+#endif /* _ARM_VEXPRESS_INTR_H_ */
Index: src/sys/arch/evbarm/vexpress/vexpress_machdep.c
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_machdep.c:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_machdep.c Mon Feb 9 07:47:15 2015
@@ -0,0 +1,568 @@
+/* $NetBSD: vexpress_machdep.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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: vexpress_machdep.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include "opt_machdep.h"
+#include "opt_ddb.h"
+#include "opt_kgdb.h"
+#include "opt_ipkdb.h"
+#include "opt_md.h"
+#include "opt_arm_debug.h"
+
+#include "ukbd.h"
+#include "arml2cc.h" // RPZ why is it not called opt_l2cc.h?
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/device.h>
+#include <sys/exec.h>
+#include <sys/kernel.h>
+#include <sys/ksyms.h>
+#include <sys/msgbuf.h>
+#include <sys/proc.h>
+#include <sys/reboot.h>
+#include <sys/termios.h>
+#include <sys/gpio.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <sys/conf.h>
+#include <dev/cons.h>
+#include <dev/md.h>
+
+#include <machine/db_machdep.h>
+#include <ddb/db_sym.h>
+#include <ddb/db_extern.h>
+#ifdef KGDB
+#include <sys/kgdb.h>
+#endif
+
+#include <machine/bootconfig.h>
+#include <arm/armreg.h>
+#include <arm/undefined.h>
+#include <arm/cortex/pl310_var.h>
+
+#include <arm/arm32/machdep.h>
+#include <arm/mainbus/mainbus.h>
+
+#include <evbarm/vexpress/vexpress_var.h>
+
+#include <evbarm/include/autoconf.h>
+#include <evbarm/vexpress/platform.h>
+
+#include <dev/i2c/i2cvar.h>
+#include <dev/i2c/ddcreg.h>
+
+#include <dev/usb/ukbdvar.h>
+#include <net/if_ether.h>
+
+#include "plcom.h"
+
+#if NPLCOM > 0
+#include <evbarm/dev/plcomreg.h>
+#include <evbarm/dev/plcomvar.h>
+#endif
+
+#define PLCONADDR 0x1c090000
+
+#ifndef CONSDEVNAME
+#define CONSDEVNAME "plcom"
+#endif
+
+#ifndef PLCONSPEED
+#define PLCONSPEED B115200
+#endif
+#ifndef PLCONMODE
+#define PLCONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
+#endif
+#ifndef PLCOMCNUNIT
+#define PLCOMCNUNIT -1
+#endif
+
+#if (NPLCOM > 0)
+static const bus_addr_t consaddr = (bus_addr_t) PLCONADDR;
+
+int plcomcnspeed = PLCONSPEED;
+int plcomcnmode = PLCONMODE;
+#endif
+
+#if (NPLCOM > 0 && (defined(PLCONSOLE) || defined(KGDB)))
+static struct plcom_instance vexpress_pi = {
+ .pi_type = PLCOM_TYPE_PL011,
+ .pi_flags = PLC_FLAG_32BIT_ACCESS,
+ .pi_iot = &vexpress_bs_tag,
+ .pi_size = PL011COM_UART_SIZE
+};
+#endif
+
+/*
+ * kernel start and end from the linker
+ */
+extern char KERNEL_BASE_phys[]; /* physical start of kernel */
+extern char KERNEL_BASE_virt[]; /* virtual start of kernel */
+extern char _end[]; /* physical end of kernel */
+#define KERNEL_BASE_PHYS ((paddr_t)KERNEL_BASE_phys)
+
+#define KERN_VTOPDIFF ((vaddr_t)KERNEL_BASE_phys - (vaddr_t)KERNEL_BASE_virt)
+#define KERN_VTOPHYS(va) ((paddr_t)((vaddr_t)va + (vaddr_t)KERN_VTOPDIFF))
+#define KERN_PHYSTOV(pa) ((vaddr_t)((paddr_t)pa - (vaddr_t)KERN_VTOPDIFF))
+
+BootConfig bootconfig; /* Boot config storage */
+char *boot_args = NULL;
+
+/* prototypes */
+void consinit(void);
+#ifdef KGDB
+static void kgdb_port_init(void);
+#endif
+static void vexpress_device_register(device_t, void *);
+
+/*
+ * Our static device mappings at fixed virtual addresses so we can use them
+ * while booting the kernel.
+ *
+ * Map the extents segment-aligned and segment-rounded in size to avoid L2
+ * page tables
+ */
+
+#define _A(a) ((a) & ~L1_S_OFFSET)
+#define _S(s) (((s) + L1_S_SIZE - 1) & (~(L1_S_SIZE-1)))
+
+static const struct pmap_devmap vexpress_devmap[] = {
+ {
+ /* map in core IO space */
+ .pd_va = _A(VEXPRESS_CORE_VBASE),
+ .pd_pa = _A(VEXPRESS_CORE_PBASE),
+ .pd_size = _S(VEXPRESS_CORE_SIZE),
+ .pd_prot = VM_PROT_READ | VM_PROT_WRITE,
+ .pd_cache = PTE_NOCACHE
+ },
+ {0}
+};
+#undef _A
+#undef _S
+
+/*
+ * u_int initarm(...)
+ *
+ * Our entry point from the assembly before main() is called.
+ * - take a copy of the config we got from uboot
+ * - init the physical console
+ * - setting up page tables for the kernel
+ */
+
+u_int
+initarm(void *arg)
+{
+#ifdef MEMSIZE
+ psize_t memsize = (unsigned) MEMSIZE * 1024 * 1024;
+#else
+ /* If MEMSIZE is not defined, use QEMU's default value (128 MB) */
+ psize_t memsize = (unsigned) 128 * 1024 * 1024;
+#endif
+
+ pmap_devmap_register(vexpress_devmap);
+
+ set_cpufuncs();
+
+ consinit();
+
+ /* Talk to the user */
+#define BDSTR(s) _BDSTR(s)
+#define _BDSTR(s) #s
+ printf("\nNetBSD/evbarm (" BDSTR(EVBARM_BOARDTYPE) ") booting ...\n");
+
+#ifdef VERBOSE_INIT_ARM
+ printf("initarm: cbar=%#x\n", armreg_cbar_read());
+#endif
+
+ bootconfig.dramblocks = 1;
+ bootconfig.dram[0].address = KERN_VTOPHYS(KERNEL_BASE);
+ bootconfig.dram[0].pages = memsize / PAGE_SIZE;
+
+ arm32_bootmem_init(bootconfig.dram[0].address, memsize,
+ (uintptr_t) KERNEL_BASE_phys);
+
+ arm32_kernel_vm_init(KERNEL_VM_BASE, ARM_VECTORS_HIGH, 0, vexpress_devmap,
+ true);
+
+#ifdef VERBOSE_INIT_ARM
+ printf("initarm: Configuring system ...\n");
+#endif
+
+ cortex_pmc_ccnt_init();
+
+ /* We've a specific device_register routine */
+ evbarm_device_register = vexpress_device_register;
+
+ return initarm_common(KERNEL_VM_BASE, KERNEL_VM_SIZE, NULL, 0);
+}
+
+void
+consinit(void)
+{
+ static int consinit_called = 0;
+
+ if (consinit_called != 0)
+ return;
+
+ consinit_called = 1;
+
+#if (NPLCOM > 0 && defined(PLCONSOLE))
+ /*
+ * Initialise the diagnostic serial console
+ * This allows a means of generating output during initarm().
+ */
+ vexpress_pi.pi_iobase = consaddr;
+
+ plcomcnattach(&vexpress_pi, plcomcnspeed, 3000000,
+ plcomcnmode, PLCOMCNUNIT);
+
+#endif
+}
+
+void
+vexpress_device_register(device_t self, void *aux)
+{
+ prop_dictionary_t dict = device_properties(self);
+
+ if (device_is_a(self, "armperiph")
+ && device_is_a(device_parent(self), "mainbus")) {
+ /*
+ * XXX KLUDGE ALERT XXX
+ * The iot mainbus supplies is completely wrong since it scales
+ * addresses by 2. The simpliest remedy is to replace with our
+ * bus space used for the armcore regisers (which armperiph uses).
+ */
+ struct mainbus_attach_args *const mb = aux;
+ mb->mb_iot = &vexpress_bs_tag;
+ return;
+ }
+#if defined(CPU_CORTEXA7) || defined(CPU_CORTEXA15)
+ if (device_is_a(self, "armgtmr")) {
+ /*
+ * The frequency of the generic timer is the reference
+ * frequency.
+ */
+ prop_dictionary_set_uint32(dict, "frequency", VEXPRESS_REF_FREQ);
+ return;
+ }
+#endif
+}
+/* $NetBSD: vexpress_machdep.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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: vexpress_machdep.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include "opt_machdep.h"
+#include "opt_ddb.h"
+#include "opt_kgdb.h"
+#include "opt_ipkdb.h"
+#include "opt_md.h"
+#include "opt_arm_debug.h"
+
+#include "ukbd.h"
+#include "arml2cc.h" // RPZ why is it not called opt_l2cc.h?
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/device.h>
+#include <sys/exec.h>
+#include <sys/kernel.h>
+#include <sys/ksyms.h>
+#include <sys/msgbuf.h>
+#include <sys/proc.h>
+#include <sys/reboot.h>
+#include <sys/termios.h>
+#include <sys/gpio.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <sys/conf.h>
+#include <dev/cons.h>
+#include <dev/md.h>
+
+#include <machine/db_machdep.h>
+#include <ddb/db_sym.h>
+#include <ddb/db_extern.h>
+#ifdef KGDB
+#include <sys/kgdb.h>
+#endif
+
+#include <machine/bootconfig.h>
+#include <arm/armreg.h>
+#include <arm/undefined.h>
+#include <arm/cortex/pl310_var.h>
+
+#include <arm/arm32/machdep.h>
+#include <arm/mainbus/mainbus.h>
+
+#include <evbarm/vexpress/vexpress_var.h>
+
+#include <evbarm/include/autoconf.h>
+#include <evbarm/vexpress/platform.h>
+
+#include <dev/i2c/i2cvar.h>
+#include <dev/i2c/ddcreg.h>
+
+#include <dev/usb/ukbdvar.h>
+#include <net/if_ether.h>
+
+#include "plcom.h"
+
+#if NPLCOM > 0
+#include <evbarm/dev/plcomreg.h>
+#include <evbarm/dev/plcomvar.h>
+#endif
+
+#define PLCONADDR 0x1c090000
+
+#ifndef CONSDEVNAME
+#define CONSDEVNAME "plcom"
+#endif
+
+#ifndef PLCONSPEED
+#define PLCONSPEED B115200
+#endif
+#ifndef PLCONMODE
+#define PLCONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
+#endif
+#ifndef PLCOMCNUNIT
+#define PLCOMCNUNIT -1
+#endif
+
+#if (NPLCOM > 0)
+static const bus_addr_t consaddr = (bus_addr_t) PLCONADDR;
+
+int plcomcnspeed = PLCONSPEED;
+int plcomcnmode = PLCONMODE;
+#endif
+
+#if (NPLCOM > 0 && (defined(PLCONSOLE) || defined(KGDB)))
+static struct plcom_instance vexpress_pi = {
+ .pi_type = PLCOM_TYPE_PL011,
+ .pi_flags = PLC_FLAG_32BIT_ACCESS,
+ .pi_iot = &vexpress_bs_tag,
+ .pi_size = PL011COM_UART_SIZE
+};
+#endif
+
+/*
+ * kernel start and end from the linker
+ */
+extern char KERNEL_BASE_phys[]; /* physical start of kernel */
+extern char KERNEL_BASE_virt[]; /* virtual start of kernel */
+extern char _end[]; /* physical end of kernel */
+#define KERNEL_BASE_PHYS ((paddr_t)KERNEL_BASE_phys)
+
+#define KERN_VTOPDIFF ((vaddr_t)KERNEL_BASE_phys - (vaddr_t)KERNEL_BASE_virt)
+#define KERN_VTOPHYS(va) ((paddr_t)((vaddr_t)va + (vaddr_t)KERN_VTOPDIFF))
+#define KERN_PHYSTOV(pa) ((vaddr_t)((paddr_t)pa - (vaddr_t)KERN_VTOPDIFF))
+
+BootConfig bootconfig; /* Boot config storage */
+char *boot_args = NULL;
+
+/* prototypes */
+void consinit(void);
+#ifdef KGDB
+static void kgdb_port_init(void);
+#endif
+static void vexpress_device_register(device_t, void *);
+
+/*
+ * Our static device mappings at fixed virtual addresses so we can use them
+ * while booting the kernel.
+ *
+ * Map the extents segment-aligned and segment-rounded in size to avoid L2
+ * page tables
+ */
+
+#define _A(a) ((a) & ~L1_S_OFFSET)
+#define _S(s) (((s) + L1_S_SIZE - 1) & (~(L1_S_SIZE-1)))
+
+static const struct pmap_devmap vexpress_devmap[] = {
+ {
+ /* map in core IO space */
+ .pd_va = _A(VEXPRESS_CORE_VBASE),
+ .pd_pa = _A(VEXPRESS_CORE_PBASE),
+ .pd_size = _S(VEXPRESS_CORE_SIZE),
+ .pd_prot = VM_PROT_READ | VM_PROT_WRITE,
+ .pd_cache = PTE_NOCACHE
+ },
+ {0}
+};
+#undef _A
+#undef _S
+
+/*
+ * u_int initarm(...)
+ *
+ * Our entry point from the assembly before main() is called.
+ * - take a copy of the config we got from uboot
+ * - init the physical console
+ * - setting up page tables for the kernel
+ */
+
+u_int
+initarm(void *arg)
+{
+#ifdef MEMSIZE
+ psize_t memsize = (unsigned) MEMSIZE * 1024 * 1024;
+#else
+ /* If MEMSIZE is not defined, use QEMU's default value (128 MB) */
+ psize_t memsize = (unsigned) 128 * 1024 * 1024;
+#endif
+
+ pmap_devmap_register(vexpress_devmap);
+
+ set_cpufuncs();
+
+ consinit();
+
+ /* Talk to the user */
+#define BDSTR(s) _BDSTR(s)
+#define _BDSTR(s) #s
+ printf("\nNetBSD/evbarm (" BDSTR(EVBARM_BOARDTYPE) ") booting ...\n");
+
+#ifdef VERBOSE_INIT_ARM
+ printf("initarm: cbar=%#x\n", armreg_cbar_read());
+#endif
+
+ bootconfig.dramblocks = 1;
+ bootconfig.dram[0].address = KERN_VTOPHYS(KERNEL_BASE);
+ bootconfig.dram[0].pages = memsize / PAGE_SIZE;
+
+ arm32_bootmem_init(bootconfig.dram[0].address, memsize,
+ (uintptr_t) KERNEL_BASE_phys);
+
+ arm32_kernel_vm_init(KERNEL_VM_BASE, ARM_VECTORS_HIGH, 0, vexpress_devmap,
+ true);
+
+#ifdef VERBOSE_INIT_ARM
+ printf("initarm: Configuring system ...\n");
+#endif
+
+ cortex_pmc_ccnt_init();
+
+ /* We've a specific device_register routine */
+ evbarm_device_register = vexpress_device_register;
+
+ return initarm_common(KERNEL_VM_BASE, KERNEL_VM_SIZE, NULL, 0);
+}
+
+void
+consinit(void)
+{
+ static int consinit_called = 0;
+
+ if (consinit_called != 0)
+ return;
+
+ consinit_called = 1;
+
+#if (NPLCOM > 0 && defined(PLCONSOLE))
+ /*
+ * Initialise the diagnostic serial console
+ * This allows a means of generating output during initarm().
+ */
+ vexpress_pi.pi_iobase = consaddr;
+
+ plcomcnattach(&vexpress_pi, plcomcnspeed, 3000000,
+ plcomcnmode, PLCOMCNUNIT);
+
+#endif
+}
+
+void
+vexpress_device_register(device_t self, void *aux)
+{
+ prop_dictionary_t dict = device_properties(self);
+
+ if (device_is_a(self, "armperiph")
+ && device_is_a(device_parent(self), "mainbus")) {
+ /*
+ * XXX KLUDGE ALERT XXX
+ * The iot mainbus supplies is completely wrong since it scales
+ * addresses by 2. The simpliest remedy is to replace with our
+ * bus space used for the armcore regisers (which armperiph uses).
+ */
+ struct mainbus_attach_args *const mb = aux;
+ mb->mb_iot = &vexpress_bs_tag;
+ return;
+ }
+#if defined(CPU_CORTEXA7) || defined(CPU_CORTEXA15)
+ if (device_is_a(self, "armgtmr")) {
+ /*
+ * The frequency of the generic timer is the reference
+ * frequency.
+ */
+ prop_dictionary_set_uint32(dict, "frequency", VEXPRESS_REF_FREQ);
+ return;
+ }
+#endif
+}
Index: src/sys/arch/evbarm/vexpress/vexpress_plcom.c
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_plcom.c:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_plcom.c Mon Feb 9 07:47:15 2015
@@ -0,0 +1,194 @@
+/* $NetBSD: vexpress_plcom.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+/* Interface to plcom (PL011) serial driver. */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: vexpress_plcom.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include <sys/types.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+#include <sys/param.h>
+#include <sys/termios.h>
+#include <sys/bus.h>
+
+#include <evbarm/vexpress/platform.h>
+#include <evbarm/vexpress/vexpress_var.h>
+
+#include <evbarm/dev/plcomreg.h>
+#include <evbarm/dev/plcomvar.h>
+
+static int vexpress_plcom_match(device_t, cfdata_t, void *);
+static void vexpress_plcom_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(vexpressplcom, sizeof(struct plcom_softc),
+ vexpress_plcom_match, vexpress_plcom_attach, NULL, NULL);
+
+static int
+vexpress_plcom_match(device_t parent, cfdata_t cf, void *aux)
+{
+ struct axi_attach_args *aa = aux;
+
+ if (strcmp(aa->aa_name, "plcom") != 0)
+ return 0;
+
+ return 1;
+}
+
+static void
+vexpress_plcom_attach(device_t parent, device_t self, void *aux)
+{
+ struct plcom_softc *sc = device_private(self);
+ struct axi_attach_args *aa = aux;
+ void *ih;
+
+ sc->sc_dev = self;
+ sc->sc_frequency = VEXPRESS_REF_FREQ;
+ sc->sc_hwflags = PLCOM_HW_TXFIFO_DISABLE;
+ sc->sc_swflags = 0;
+ sc->sc_set_mcr = NULL;
+ sc->sc_set_mcr_arg = NULL;
+
+ sc->sc_pi.pi_type = PLCOM_TYPE_PL011;
+ sc->sc_pi.pi_flags = PLC_FLAG_32BIT_ACCESS;
+ sc->sc_pi.pi_iot = aa->aa_iot;
+ sc->sc_pi.pi_iobase = aa->aa_addr;
+
+ if (bus_space_map(aa->aa_iot, aa->aa_addr, PL011COM_UART_SIZE, 0,
+ &sc->sc_pi.pi_ioh)) {
+ aprint_error_dev(sc->sc_dev, "unable to map device\n");
+ return;
+ }
+ plcom_attach_subr(sc);
+
+ ih = intr_establish(aa->aa_irq, IPL_SERIAL, IST_LEVEL_LOW, plcomintr, sc);
+ if (ih == NULL)
+ panic("%s: cannot install interrupt handler",
+ device_xname(sc->sc_dev));
+}
+/* $NetBSD: vexpress_plcom.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+/* Interface to plcom (PL011) serial driver. */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: vexpress_plcom.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include <sys/types.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+#include <sys/param.h>
+#include <sys/termios.h>
+#include <sys/bus.h>
+
+#include <evbarm/vexpress/platform.h>
+#include <evbarm/vexpress/vexpress_var.h>
+
+#include <evbarm/dev/plcomreg.h>
+#include <evbarm/dev/plcomvar.h>
+
+static int vexpress_plcom_match(device_t, cfdata_t, void *);
+static void vexpress_plcom_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(vexpressplcom, sizeof(struct plcom_softc),
+ vexpress_plcom_match, vexpress_plcom_attach, NULL, NULL);
+
+static int
+vexpress_plcom_match(device_t parent, cfdata_t cf, void *aux)
+{
+ struct axi_attach_args *aa = aux;
+
+ if (strcmp(aa->aa_name, "plcom") != 0)
+ return 0;
+
+ return 1;
+}
+
+static void
+vexpress_plcom_attach(device_t parent, device_t self, void *aux)
+{
+ struct plcom_softc *sc = device_private(self);
+ struct axi_attach_args *aa = aux;
+ void *ih;
+
+ sc->sc_dev = self;
+ sc->sc_frequency = VEXPRESS_REF_FREQ;
+ sc->sc_hwflags = PLCOM_HW_TXFIFO_DISABLE;
+ sc->sc_swflags = 0;
+ sc->sc_set_mcr = NULL;
+ sc->sc_set_mcr_arg = NULL;
+
+ sc->sc_pi.pi_type = PLCOM_TYPE_PL011;
+ sc->sc_pi.pi_flags = PLC_FLAG_32BIT_ACCESS;
+ sc->sc_pi.pi_iot = aa->aa_iot;
+ sc->sc_pi.pi_iobase = aa->aa_addr;
+
+ if (bus_space_map(aa->aa_iot, aa->aa_addr, PL011COM_UART_SIZE, 0,
+ &sc->sc_pi.pi_ioh)) {
+ aprint_error_dev(sc->sc_dev, "unable to map device\n");
+ return;
+ }
+ plcom_attach_subr(sc);
+
+ ih = intr_establish(aa->aa_irq, IPL_SERIAL, IST_LEVEL_LOW, plcomintr, sc);
+ if (ih == NULL)
+ panic("%s: cannot install interrupt handler",
+ device_xname(sc->sc_dev));
+}
Index: src/sys/arch/evbarm/vexpress/vexpress_plmmc.c
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_plmmc.c:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_plmmc.c Mon Feb 9 07:47:15 2015
@@ -0,0 +1,182 @@
+/* $NetBSD: vexpress_plmmc.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+/* Interface to plmmc (PL181) MMC driver. */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: vexpress_plmmc.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include <sys/types.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+#include <sys/param.h>
+#include <sys/malloc.h>
+
+#include <sys/termios.h>
+
+#include <machine/intr.h>
+#include <sys/bus.h>
+
+#include <dev/ic/pl181reg.h>
+#include <dev/ic/pl181var.h>
+
+#include <evbarm/vexpress/platform.h>
+#include <evbarm/vexpress/vexpress_var.h>
+
+static int plmmc_vexpress_match(device_t, cfdata_t, void *);
+static void plmmc_vexpress_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(vexpressplmmc, sizeof(struct plmmc_softc),
+ plmmc_vexpress_match, plmmc_vexpress_attach, NULL, NULL);
+
+static int
+plmmc_vexpress_match(device_t parent, cfdata_t cf, void *aux)
+{
+ return 1;
+}
+
+static void
+plmmc_vexpress_attach(device_t parent, device_t self, void *aux)
+{
+ struct plmmc_softc *sc = device_private(self);
+ struct axi_attach_args *aa = aux;
+ void *ih;
+
+ sc->sc_dev = self;
+ sc->sc_clock_freq = VEXPRESS_REF_FREQ;
+ sc->sc_bst = aa->aa_iot;
+ if (bus_space_map(aa->aa_iot, aa->aa_addr, 0x1000, 0,
+ &sc->sc_bsh)) {
+ printf("%s: unable to map device\n", device_xname(sc->sc_dev));
+ return;
+ }
+
+ aprint_naive("\n");
+ aprint_normal("\n");
+
+ ih = intr_establish(aa->aa_irq, IPL_BIO, IST_LEVEL_LOW, plmmc_intr, sc);
+ if (ih == NULL)
+ panic("%s: cannot install interrupt handler",
+ device_xname(sc->sc_dev));
+ plmmc_init(sc);
+}
+
+/* $NetBSD: vexpress_plmmc.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+/* Interface to plmmc (PL181) MMC driver. */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: vexpress_plmmc.c,v 1.1 2015/02/09 07:47:15 slp Exp $");
+
+#include <sys/types.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+#include <sys/param.h>
+#include <sys/malloc.h>
+
+#include <sys/termios.h>
+
+#include <machine/intr.h>
+#include <sys/bus.h>
+
+#include <dev/ic/pl181reg.h>
+#include <dev/ic/pl181var.h>
+
+#include <evbarm/vexpress/platform.h>
+#include <evbarm/vexpress/vexpress_var.h>
+
+static int plmmc_vexpress_match(device_t, cfdata_t, void *);
+static void plmmc_vexpress_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(vexpressplmmc, sizeof(struct plmmc_softc),
+ plmmc_vexpress_match, plmmc_vexpress_attach, NULL, NULL);
+
+static int
+plmmc_vexpress_match(device_t parent, cfdata_t cf, void *aux)
+{
+ return 1;
+}
+
+static void
+plmmc_vexpress_attach(device_t parent, device_t self, void *aux)
+{
+ struct plmmc_softc *sc = device_private(self);
+ struct axi_attach_args *aa = aux;
+ void *ih;
+
+ sc->sc_dev = self;
+ sc->sc_clock_freq = VEXPRESS_REF_FREQ;
+ sc->sc_bst = aa->aa_iot;
+ if (bus_space_map(aa->aa_iot, aa->aa_addr, 0x1000, 0,
+ &sc->sc_bsh)) {
+ printf("%s: unable to map device\n", device_xname(sc->sc_dev));
+ return;
+ }
+
+ aprint_naive("\n");
+ aprint_normal("\n");
+
+ ih = intr_establish(aa->aa_irq, IPL_BIO, IST_LEVEL_LOW, plmmc_intr, sc);
+ if (ih == NULL)
+ panic("%s: cannot install interrupt handler",
+ device_xname(sc->sc_dev));
+ plmmc_init(sc);
+}
+
Index: src/sys/arch/evbarm/vexpress/vexpress_space.c
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_space.c:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_space.c Mon Feb 9 07:47:15 2015
@@ -0,0 +1,506 @@
+/* $NetBSD: vexpress_space.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+/*
+ * bus_space(9) support for Versatile Express AXI
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <uvm/uvm_extern.h>
+#include <sys/bus.h>
+
+bs_protos(vexpress);
+bs_protos(generic);
+bs_protos(generic_armv4);
+bs_protos(bs_notimpl);
+
+struct bus_space vexpress_bs_tag = {
+ /* cookie */
+ (void *) 0,
+
+ /* mapping/unmapping */
+ vexpress_bs_map,
+ vexpress_bs_unmap,
+ vexpress_bs_subregion,
+
+ /* allocation/deallocation */
+ vexpress_bs_alloc, /* not implemented */
+ vexpress_bs_free, /* not implemented */
+
+ /* get kernel virtual address */
+ vexpress_bs_vaddr,
+
+ /* mmap */
+ bs_notimpl_bs_mmap,
+
+ /* barrier */
+ vexpress_bs_barrier,
+
+ /* read (single) */
+ generic_bs_r_1,
+ generic_armv4_bs_r_2,
+ generic_bs_r_4,
+ bs_notimpl_bs_r_8,
+
+ /* read multiple */
+ generic_bs_rm_1,
+ generic_armv4_bs_rm_2,
+ generic_bs_rm_4,
+ bs_notimpl_bs_rm_8,
+
+ /* read region */
+ generic_bs_rr_1,
+ generic_armv4_bs_rr_2,
+ generic_bs_rr_4,
+ bs_notimpl_bs_rr_8,
+
+ /* write (single) */
+ generic_bs_w_1,
+ generic_armv4_bs_w_2,
+ generic_bs_w_4,
+ bs_notimpl_bs_w_8,
+
+ /* write multiple */
+ generic_bs_wm_1,
+ generic_armv4_bs_wm_2,
+ generic_bs_wm_4,
+ bs_notimpl_bs_wm_8,
+
+ /* write region */
+ generic_bs_wr_1,
+ generic_armv4_bs_wr_2,
+ generic_bs_wr_4,
+ bs_notimpl_bs_wr_8,
+
+ /* set multiple */
+ bs_notimpl_bs_sm_1,
+ bs_notimpl_bs_sm_2,
+ bs_notimpl_bs_sm_4,
+ bs_notimpl_bs_sm_8,
+
+ /* set region */
+ generic_bs_sr_1,
+ generic_armv4_bs_sr_2,
+ bs_notimpl_bs_sr_4,
+ bs_notimpl_bs_sr_8,
+
+ /* copy */
+ bs_notimpl_bs_c_1,
+ generic_armv4_bs_c_2,
+ bs_notimpl_bs_c_4,
+ bs_notimpl_bs_c_8,
+
+#ifdef __BUS_SPACE_HAS_STREAM_METHODS
+ /* read (single) */
+ generic_bs_r_1,
+ generic_armv4_bs_r_2,
+ generic_bs_r_4,
+ bs_notimpl_bs_r_8,
+
+ /* read multiple */
+ generic_bs_rm_1,
+ generic_armv4_bs_rm_2,
+ generic_bs_rm_4,
+ bs_notimpl_bs_rm_8,
+
+ /* read region */
+ generic_bs_rr_1,
+ generic_armv4_bs_rr_2,
+ generic_bs_rr_4,
+ bs_notimpl_bs_rr_8,
+
+ /* write (single) */
+ generic_bs_w_1,
+ generic_armv4_bs_w_2,
+ generic_bs_w_4,
+ bs_notimpl_bs_w_8,
+
+ /* write multiple */
+ generic_bs_wm_1,
+ generic_armv4_bs_wm_2,
+ generic_bs_wm_4,
+ bs_notimpl_bs_wm_8,
+
+ /* write region */
+ generic_bs_wr_1,
+ generic_armv4_bs_wr_2,
+ generic_bs_wr_4,
+ bs_notimpl_bs_wr_8,
+#endif
+};
+
+int
+vexpress_bs_map(void *t, bus_addr_t bpa, bus_size_t size,
+ int flag, bus_space_handle_t * bshp)
+{
+ const struct pmap_devmap *pd;
+ paddr_t startpa, endpa, pa;
+ vaddr_t va;
+
+ if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) {
+ /* Device was statically mapped. */
+ *bshp = pd->pd_va + (bpa - pd->pd_pa);
+ return 0;
+ }
+ startpa = trunc_page(bpa);
+ endpa = round_page(bpa + size);
+
+ /* XXX use extent manager to check duplicate mapping */
+
+ va = uvm_km_alloc(kernel_map, endpa - startpa, 0,
+ UVM_KMF_VAONLY | UVM_KMF_NOWAIT);
+ if (!va)
+ return (ENOMEM);
+
+ *bshp = (bus_space_handle_t) (va + (bpa - startpa));
+
+ for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) {
+ pmap_kenter_pa(va, pa, VM_PROT_READ | VM_PROT_WRITE,
+ (flag & BUS_SPACE_MAP_CACHEABLE) ? 0 : PMAP_NOCACHE);
+ }
+ pmap_update(pmap_kernel());
+
+ return (0);
+}
+
+void
+vexpress_bs_unmap(void *t, bus_space_handle_t bsh, bus_size_t size)
+{
+ vaddr_t va;
+ vsize_t sz;
+
+ if (pmap_devmap_find_va(bsh, size) != NULL) {
+ /* Device was statically mapped; nothing to do. */
+ return;
+ }
+ va = trunc_page(bsh);
+ sz = round_page(bsh + size) - va;
+
+ pmap_kremove(va, sz);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, va, sz, UVM_KMF_VAONLY);
+}
+
+
+int
+vexpress_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset,
+ bus_size_t size, bus_space_handle_t * nbshp)
+{
+
+ *nbshp = bsh + offset;
+ return (0);
+}
+
+void
+vexpress_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset,
+ bus_size_t len, int flags)
+{
+
+ /* Nothing to do. */
+}
+
+void *
+vexpress_bs_vaddr(void *t, bus_space_handle_t bsh)
+{
+
+ return ((void *) bsh);
+}
+
+
+int
+vexpress_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend,
+ bus_size_t size, bus_size_t alignment, bus_size_t boundary, int flags,
+ bus_addr_t * bpap, bus_space_handle_t * bshp)
+{
+
+ panic("vexpress_io_bs_alloc(): not implemented\n");
+}
+
+void
+vexpress_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size)
+{
+
+ panic("vexpress_io_bs_free(): not implemented\n");
+}
+/* $NetBSD: vexpress_space.c,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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.
+ */
+
+/*
+ * bus_space(9) support for Versatile Express AXI
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <uvm/uvm_extern.h>
+#include <sys/bus.h>
+
+bs_protos(vexpress);
+bs_protos(generic);
+bs_protos(generic_armv4);
+bs_protos(bs_notimpl);
+
+struct bus_space vexpress_bs_tag = {
+ /* cookie */
+ (void *) 0,
+
+ /* mapping/unmapping */
+ vexpress_bs_map,
+ vexpress_bs_unmap,
+ vexpress_bs_subregion,
+
+ /* allocation/deallocation */
+ vexpress_bs_alloc, /* not implemented */
+ vexpress_bs_free, /* not implemented */
+
+ /* get kernel virtual address */
+ vexpress_bs_vaddr,
+
+ /* mmap */
+ bs_notimpl_bs_mmap,
+
+ /* barrier */
+ vexpress_bs_barrier,
+
+ /* read (single) */
+ generic_bs_r_1,
+ generic_armv4_bs_r_2,
+ generic_bs_r_4,
+ bs_notimpl_bs_r_8,
+
+ /* read multiple */
+ generic_bs_rm_1,
+ generic_armv4_bs_rm_2,
+ generic_bs_rm_4,
+ bs_notimpl_bs_rm_8,
+
+ /* read region */
+ generic_bs_rr_1,
+ generic_armv4_bs_rr_2,
+ generic_bs_rr_4,
+ bs_notimpl_bs_rr_8,
+
+ /* write (single) */
+ generic_bs_w_1,
+ generic_armv4_bs_w_2,
+ generic_bs_w_4,
+ bs_notimpl_bs_w_8,
+
+ /* write multiple */
+ generic_bs_wm_1,
+ generic_armv4_bs_wm_2,
+ generic_bs_wm_4,
+ bs_notimpl_bs_wm_8,
+
+ /* write region */
+ generic_bs_wr_1,
+ generic_armv4_bs_wr_2,
+ generic_bs_wr_4,
+ bs_notimpl_bs_wr_8,
+
+ /* set multiple */
+ bs_notimpl_bs_sm_1,
+ bs_notimpl_bs_sm_2,
+ bs_notimpl_bs_sm_4,
+ bs_notimpl_bs_sm_8,
+
+ /* set region */
+ generic_bs_sr_1,
+ generic_armv4_bs_sr_2,
+ bs_notimpl_bs_sr_4,
+ bs_notimpl_bs_sr_8,
+
+ /* copy */
+ bs_notimpl_bs_c_1,
+ generic_armv4_bs_c_2,
+ bs_notimpl_bs_c_4,
+ bs_notimpl_bs_c_8,
+
+#ifdef __BUS_SPACE_HAS_STREAM_METHODS
+ /* read (single) */
+ generic_bs_r_1,
+ generic_armv4_bs_r_2,
+ generic_bs_r_4,
+ bs_notimpl_bs_r_8,
+
+ /* read multiple */
+ generic_bs_rm_1,
+ generic_armv4_bs_rm_2,
+ generic_bs_rm_4,
+ bs_notimpl_bs_rm_8,
+
+ /* read region */
+ generic_bs_rr_1,
+ generic_armv4_bs_rr_2,
+ generic_bs_rr_4,
+ bs_notimpl_bs_rr_8,
+
+ /* write (single) */
+ generic_bs_w_1,
+ generic_armv4_bs_w_2,
+ generic_bs_w_4,
+ bs_notimpl_bs_w_8,
+
+ /* write multiple */
+ generic_bs_wm_1,
+ generic_armv4_bs_wm_2,
+ generic_bs_wm_4,
+ bs_notimpl_bs_wm_8,
+
+ /* write region */
+ generic_bs_wr_1,
+ generic_armv4_bs_wr_2,
+ generic_bs_wr_4,
+ bs_notimpl_bs_wr_8,
+#endif
+};
+
+int
+vexpress_bs_map(void *t, bus_addr_t bpa, bus_size_t size,
+ int flag, bus_space_handle_t * bshp)
+{
+ const struct pmap_devmap *pd;
+ paddr_t startpa, endpa, pa;
+ vaddr_t va;
+
+ if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) {
+ /* Device was statically mapped. */
+ *bshp = pd->pd_va + (bpa - pd->pd_pa);
+ return 0;
+ }
+ startpa = trunc_page(bpa);
+ endpa = round_page(bpa + size);
+
+ /* XXX use extent manager to check duplicate mapping */
+
+ va = uvm_km_alloc(kernel_map, endpa - startpa, 0,
+ UVM_KMF_VAONLY | UVM_KMF_NOWAIT);
+ if (!va)
+ return (ENOMEM);
+
+ *bshp = (bus_space_handle_t) (va + (bpa - startpa));
+
+ for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) {
+ pmap_kenter_pa(va, pa, VM_PROT_READ | VM_PROT_WRITE,
+ (flag & BUS_SPACE_MAP_CACHEABLE) ? 0 : PMAP_NOCACHE);
+ }
+ pmap_update(pmap_kernel());
+
+ return (0);
+}
+
+void
+vexpress_bs_unmap(void *t, bus_space_handle_t bsh, bus_size_t size)
+{
+ vaddr_t va;
+ vsize_t sz;
+
+ if (pmap_devmap_find_va(bsh, size) != NULL) {
+ /* Device was statically mapped; nothing to do. */
+ return;
+ }
+ va = trunc_page(bsh);
+ sz = round_page(bsh + size) - va;
+
+ pmap_kremove(va, sz);
+ pmap_update(pmap_kernel());
+ uvm_km_free(kernel_map, va, sz, UVM_KMF_VAONLY);
+}
+
+
+int
+vexpress_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset,
+ bus_size_t size, bus_space_handle_t * nbshp)
+{
+
+ *nbshp = bsh + offset;
+ return (0);
+}
+
+void
+vexpress_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset,
+ bus_size_t len, int flags)
+{
+
+ /* Nothing to do. */
+}
+
+void *
+vexpress_bs_vaddr(void *t, bus_space_handle_t bsh)
+{
+
+ return ((void *) bsh);
+}
+
+
+int
+vexpress_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend,
+ bus_size_t size, bus_size_t alignment, bus_size_t boundary, int flags,
+ bus_addr_t * bpap, bus_space_handle_t * bshp)
+{
+
+ panic("vexpress_io_bs_alloc(): not implemented\n");
+}
+
+void
+vexpress_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size)
+{
+
+ panic("vexpress_io_bs_free(): not implemented\n");
+}
Index: src/sys/arch/evbarm/vexpress/vexpress_start.S
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_start.S:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_start.S Mon Feb 9 07:47:15 2015
@@ -0,0 +1,274 @@
+/* $NetBSD: vexpress_start.S,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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 "opt_cpuoptions.h"
+#include "opt_cputypes.h"
+#include "opt_multiprocessor.h"
+#include "opt_arm_debug.h"
+
+#include <arm/asm.h>
+#include <arm/armreg.h>
+#include "assym.h"
+#include "platform.h"
+
+RCSID("$NetBSD: vexpress_start.S,v 1.1 2015/02/09 07:47:15 slp Exp $")
+
+#define XPUTC(n) mov r0, n; bl xputc
+#define XPUTC2(n) mov r0, n; blx r11
+
+#define INIT_MEMSIZE 128
+#define TEMP_L1_TABLE (KERNEL_BASE - KERNEL_BASE_VOFFSET + INIT_MEMSIZE * 0x100000 - L1_TABLE_SIZE)
+
+/*
+ * Kernel start routine for ODROID boards running on uboot firmware
+ * At this point, this code has been loaded into SDRAM
+ * and the MMU is off
+ */
+ .section .start,"ax",%progbits
+
+ .global _C_LABEL(vexpress_start)
+_C_LABEL(vexpress_start):
+#ifdef __ARMEB__
+ setend be /* force big endian */
+#endif
+ /* Move into supervisor mode and disable IRQs/FIQs. */
+ cpsid if, #PSR_SVC32_MODE
+
+ XPUTC('a')
+
+ bl cortex_init
+
+ XPUTC('b')
+
+ /*
+ * Set up a preliminary mapping in the MMU to allow us to run
+ * at KERNEL_BASE with caches on.
+ */
+ adr r1, .Lmmu_init_table
+ movw r0, #:lower16:TEMP_L1_TABLE
+ movt r0, #:upper16:TEMP_L1_TABLE
+ bl arm_boot_l1pt_init
+
+ XPUTC('c')
+
+ adr r11, xputc
+ movw lr, #:lower16:1f
+ movt lr, #:upper16:1f
+ movw r0, #:lower16:TEMP_L1_TABLE
+ movt r0, #:upper16:TEMP_L1_TABLE
+ b arm_cpuinit
+
+ .pushsection .text, "ax", %progbits
+ .align 0
+
+1:
+ XPUTC2('d')
+
+ b start
+
+ .popsection
+
+ .align 0
+ .global xputc
+ .type xputc,%function
+xputc:
+ movw r2, #0x0000
+ movt r2, #0x1c09
+ str r0, [r2]
+ bx lr
+
+#include <arm/cortex/a9_mpsubr.S>
+
+ .align 0
+.Lmmu_init_table:
+ /* Map KERNEL_BASE VA to SDRAM PA, write-back cacheable, shareable */
+ MMU_INIT(KERNEL_BASE, KERNEL_BASE - KERNEL_BASE_VOFFSET, INIT_MEMSIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_CACHEABLE)
+
+#if KERNEL_BASE_VOFFSET
+ /* Map physical addresses of kernel 1:1 PA:VA write-back cacheable, shareable */
+ MMU_INIT(KERNEL_BASE - KERNEL_BASE_VOFFSET,
+ KERNEL_BASE - KERNEL_BASE_VOFFSET, INIT_MEMSIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_CACHEABLE)
+#endif
+
+ /* Map VEXPRESS CORE (so console will work) */
+ MMU_INIT(VEXPRESS_CORE_VBASE, VEXPRESS_CORE_PBASE,
+ VEXPRESS_CORE_SIZE / L1_S_SIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_V6_XN)
+
+ /* Map VEXPRESS CORE (so console will work) */
+ MMU_INIT(VEXPRESS_CORE_PBASE, VEXPRESS_CORE_PBASE,
+ VEXPRESS_CORE_SIZE / L1_S_SIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_V6_XN)
+
+ /* end of table */
+ MMU_INIT(0, 0, 0, 0)
+
+
+END(vexpress_start)
+/* $NetBSD: vexpress_start.S,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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 "opt_cpuoptions.h"
+#include "opt_cputypes.h"
+#include "opt_multiprocessor.h"
+#include "opt_arm_debug.h"
+
+#include <arm/asm.h>
+#include <arm/armreg.h>
+#include "assym.h"
+#include "platform.h"
+
+RCSID("$NetBSD: vexpress_start.S,v 1.1 2015/02/09 07:47:15 slp Exp $")
+
+#define XPUTC(n) mov r0, n; bl xputc
+#define XPUTC2(n) mov r0, n; blx r11
+
+#define INIT_MEMSIZE 128
+#define TEMP_L1_TABLE (KERNEL_BASE - KERNEL_BASE_VOFFSET + INIT_MEMSIZE * 0x100000 - L1_TABLE_SIZE)
+
+/*
+ * Kernel start routine for ODROID boards running on uboot firmware
+ * At this point, this code has been loaded into SDRAM
+ * and the MMU is off
+ */
+ .section .start,"ax",%progbits
+
+ .global _C_LABEL(vexpress_start)
+_C_LABEL(vexpress_start):
+#ifdef __ARMEB__
+ setend be /* force big endian */
+#endif
+ /* Move into supervisor mode and disable IRQs/FIQs. */
+ cpsid if, #PSR_SVC32_MODE
+
+ XPUTC('a')
+
+ bl cortex_init
+
+ XPUTC('b')
+
+ /*
+ * Set up a preliminary mapping in the MMU to allow us to run
+ * at KERNEL_BASE with caches on.
+ */
+ adr r1, .Lmmu_init_table
+ movw r0, #:lower16:TEMP_L1_TABLE
+ movt r0, #:upper16:TEMP_L1_TABLE
+ bl arm_boot_l1pt_init
+
+ XPUTC('c')
+
+ adr r11, xputc
+ movw lr, #:lower16:1f
+ movt lr, #:upper16:1f
+ movw r0, #:lower16:TEMP_L1_TABLE
+ movt r0, #:upper16:TEMP_L1_TABLE
+ b arm_cpuinit
+
+ .pushsection .text, "ax", %progbits
+ .align 0
+
+1:
+ XPUTC2('d')
+
+ b start
+
+ .popsection
+
+ .align 0
+ .global xputc
+ .type xputc,%function
+xputc:
+ movw r2, #0x0000
+ movt r2, #0x1c09
+ str r0, [r2]
+ bx lr
+
+#include <arm/cortex/a9_mpsubr.S>
+
+ .align 0
+.Lmmu_init_table:
+ /* Map KERNEL_BASE VA to SDRAM PA, write-back cacheable, shareable */
+ MMU_INIT(KERNEL_BASE, KERNEL_BASE - KERNEL_BASE_VOFFSET, INIT_MEMSIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_CACHEABLE)
+
+#if KERNEL_BASE_VOFFSET
+ /* Map physical addresses of kernel 1:1 PA:VA write-back cacheable, shareable */
+ MMU_INIT(KERNEL_BASE - KERNEL_BASE_VOFFSET,
+ KERNEL_BASE - KERNEL_BASE_VOFFSET, INIT_MEMSIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_CACHEABLE)
+#endif
+
+ /* Map VEXPRESS CORE (so console will work) */
+ MMU_INIT(VEXPRESS_CORE_VBASE, VEXPRESS_CORE_PBASE,
+ VEXPRESS_CORE_SIZE / L1_S_SIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_V6_XN)
+
+ /* Map VEXPRESS CORE (so console will work) */
+ MMU_INIT(VEXPRESS_CORE_PBASE, VEXPRESS_CORE_PBASE,
+ VEXPRESS_CORE_SIZE / L1_S_SIZE,
+ L1_S_PROTO_armv7 | L1_S_APv7_KRW | L1_S_V6_XN)
+
+ /* end of table */
+ MMU_INIT(0, 0, 0, 0)
+
+
+END(vexpress_start)
Index: src/sys/arch/evbarm/vexpress/vexpress_var.h
diff -u /dev/null src/sys/arch/evbarm/vexpress/vexpress_var.h:1.1
--- /dev/null Mon Feb 9 07:47:15 2015
+++ src/sys/arch/evbarm/vexpress/vexpress_var.h Mon Feb 9 07:47:15 2015
@@ -0,0 +1,96 @@
+/* $NetBSD: vexpress_var.h,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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/types.h>
+#include <sys/bus.h>
+
+struct axi_attach_args {
+ const char *aa_name;
+ bus_space_tag_t aa_iot;
+ bus_dma_tag_t aa_dmat;
+ bus_addr_t aa_addr;
+ bus_size_t aa_size;
+ int aa_irq;
+ int aa_irqbase;
+};
+
+extern struct bus_space vexpress_bs_tag;
+extern struct arm32_bus_dma_tag vexpress_bus_dma_tag;
+extern bus_space_tag_t vexpress_armcore_bst;
+extern bus_space_handle_t vexpress_armcore_bsh;
+/* $NetBSD: vexpress_var.h,v 1.1 2015/02/09 07:47:15 slp Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Sergio L. Pascual.
+ *
+ * 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/types.h>
+#include <sys/bus.h>
+
+struct axi_attach_args {
+ const char *aa_name;
+ bus_space_tag_t aa_iot;
+ bus_dma_tag_t aa_dmat;
+ bus_addr_t aa_addr;
+ bus_size_t aa_size;
+ int aa_irq;
+ int aa_irqbase;
+};
+
+extern struct bus_space vexpress_bs_tag;
+extern struct arm32_bus_dma_tag vexpress_bus_dma_tag;
+extern bus_space_tag_t vexpress_armcore_bst;
+extern bus_space_handle_t vexpress_armcore_bsh;