summaryrefslogtreecommitdiff
path: root/sys/arch/armv7/vexpress/vexpress_a15.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/armv7/vexpress/vexpress_a15.c')
-rw-r--r--sys/arch/armv7/vexpress/vexpress_a15.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/sys/arch/armv7/vexpress/vexpress_a15.c b/sys/arch/armv7/vexpress/vexpress_a15.c
new file mode 100644
index 00000000000..b6025cb3484
--- /dev/null
+++ b/sys/arch/armv7/vexpress/vexpress_a15.c
@@ -0,0 +1,103 @@
+/* $OpenBSD: vexpress_a15.c,v 1.1 2015/06/08 06:33:16 jsg Exp $ */
+
+/*
+ * Copyright (c) 2015 Jonathan Gray <jsg@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+#include <machine/bus.h>
+#include <arch/arm/armv7/armv7var.h>
+
+#include <armv7/armv7/armv7var.h>
+
+#define SYSREG_ADDR 0x1c010000
+#define SYSREG_SIZE 0x1000
+
+#define UARTx_SIZE 0x1000
+#define UART0_ADDR 0x1c090000
+#define UART1_ADDR 0x1c0a0000
+#define UART2_ADDR 0x1c0b0000
+#define UART3_ADDR 0x1c0c0000
+
+#define UART0_IRQ 5
+#define UART1_IRQ 6
+#define UART2_IRQ 7
+#define UART3_IRQ 8
+
+#define VIRTIO0_ADDR 0x1c130000
+#define VIRTIO1_ADDR 0x1c130200
+#define VIRTIO2_ADDR 0x1c130400
+#define VIRTIO3_ADDR 0x1c130600
+#define VIRTIO_SIZE 0x200
+
+#define VIRTIO0_IRQ 40
+#define VIRTIO1_IRQ 41
+#define VIRTIO2_IRQ 42
+#define VIRTIO3_IRQ 43
+
+struct armv7_dev vexpress_a15_devs[] = {
+ { .name = "sysreg",
+ .unit = 0,
+ .mem = { { SYSREG_ADDR, SYSREG_SIZE } },
+ },
+ { .name = "pluart",
+ .unit = 0,
+ .mem = { { UART0_ADDR, UARTx_SIZE } },
+ .irq = { UART0_IRQ }
+ },
+ { .name = "pluart",
+ .unit = 1,
+ .mem = { { UART1_ADDR, UARTx_SIZE } },
+ .irq = { UART1_IRQ }
+ },
+ { .name = "pluart",
+ .unit = 2,
+ .mem = { { UART1_ADDR, UARTx_SIZE } },
+ .irq = { UART2_IRQ }
+ },
+ { .name = "pluart",
+ .unit = 3,
+ .mem = { { UART1_ADDR, UARTx_SIZE } },
+ .irq = { UART3_IRQ }
+ },
+ { .name = "virtio",
+ .unit = 0,
+ .mem = { { VIRTIO0_ADDR, VIRTIO_SIZE } },
+ .irq = { VIRTIO0_IRQ }
+ },
+ { .name = "virtio",
+ .unit = 1,
+ .mem = { { VIRTIO1_ADDR, VIRTIO_SIZE } },
+ .irq = { VIRTIO1_IRQ }
+ },
+ { .name = "virtio",
+ .unit = 2,
+ .mem = { { VIRTIO2_ADDR, VIRTIO_SIZE } },
+ .irq = { VIRTIO2_IRQ }
+ },
+ { .name = "virtio",
+ .unit = 3,
+ .mem = { { VIRTIO3_ADDR, VIRTIO_SIZE } },
+ .irq = { VIRTIO3_IRQ }
+ },
+};
+
+void
+vexpress_a15_init(void)
+{
+ armv7_set_devs(vexpress_a15_devs);
+}