@@ -18,6 +18,7 @@
*/
#include <asm/platforms/vexpress.h>
+#include <asm/platform.h>
#include <xen/mm.h>
#define DCC_SHIFT 26
@@ -91,6 +92,35 @@ out:
}
/*
+ * TODO: Get base address from the device tree
+ * See arm,vexpress-reset node
+ */
+static void vexpress_reset(void)
+{
+ /* Use the SP810 system controller to force a reset */
+ volatile uint32_t *sp810;
+ set_fixmap(FIXMAP_MISC, SP810_ADDRESS >> PAGE_SHIFT, DEV_SHARED);
+ sp810 = ((uint32_t *)
+ (FIXMAP_ADDR(FIXMAP_MISC) + (SP810_ADDRESS & ~PAGE_MASK)));
+ sp810[0] = 0x3; /* switch to slow mode */
+ dsb(); isb();
+ sp810[1] = 0x1; /* writing any value to SCSYSSTAT reg will reset system */
+ dsb(); isb();
+ clear_fixmap(FIXMAP_MISC);
+}
+
+static const char const *vexpress_dt_compat[] __initdata =
+{
+ "arm,vexpress",
+ NULL
+};
+
+PLATFORM_START(vexpress, "VERSATILE EXPRESS")
+ .compatible = vexpress_dt_compat,
+ .reset = vexpress_reset,
+PLATFORM_END
+
+/*
* Local variables:
* mode: C
* c-file-style: "BSD"
@@ -3,25 +3,11 @@
#include <xen/cpu.h>
#include <xen/delay.h>
#include <xen/lib.h>
-#include <xen/mm.h>
#include <xen/smp.h>
#include <asm/platform.h>
static void raw_machine_reset(void)
{
- /* XXX get this from device tree */
-#ifdef SP810_ADDRESS
- /* Use the SP810 system controller to force a reset */
- volatile uint32_t *sp810;
- set_fixmap(FIXMAP_MISC, SP810_ADDRESS >> PAGE_SHIFT, DEV_SHARED);
- sp810 = ((uint32_t *)
- (FIXMAP_ADDR(FIXMAP_MISC) + (SP810_ADDRESS & ~PAGE_MASK)));
- sp810[0] = 0x3; /* switch to slow mode */
- dsb(); isb();
- sp810[1] = 0x1; /* writing any value to SCSYSSTAT reg will reset system */
- dsb(); isb();
- clear_fixmap(FIXMAP_MISC);
-#endif
platform_reset();
}
@@ -149,9 +149,6 @@ extern unsigned long frametable_virt_end;
#define GIC_CR_OFFSET 0x2000
#define GIC_HR_OFFSET 0x4000 /* Guess work http://lists.infradead.org/pipermail/linux-arm-kernel/2011-September/064219.html */
#define GIC_VR_OFFSET 0x6000 /* Virtual Machine CPU interface) */
-/* Board-specific: base address of system controller */
-#define SP810_ADDRESS 0x1C020000
-
#endif /* __ARM_CONFIG_H__ */
/*
@@ -23,6 +23,9 @@
#define V2M_SYS_CFG_OSC4 4
#define V2M_SYS_CFG_OSC5 5
+/* Board-specific: base address of system controller */
+#define SP810_ADDRESS 0x1C020000
+
#ifndef __ASSEMBLY__
#include <xen/inttypes.h>