This platform contains nearly nothing specific except the reset function.
Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
*/
#include <asm/platforms/vexpress.h>
+#include <asm/platform.h>
#include <xen/mm.h>
+#include <xen/vmap.h>
#define DCC_SHIFT 26
#define FUNCTION_SHIFT 20
return ret;
}
+/*
+ * TODO: Get base address from the device tree
+ * See arm,vexpress-reset node
+ */
+static void vexpress_reset(void)
+{
+ void __iomem *sp810;
+
+ /* Use the SP810 system controller to force a reset */
+ sp810 = ioremap_nocache(SP810_ADDRESS, PAGE_SIZE);
+
+ if ( !sp810 )
+ {
+ dprintk(XENLOG_ERR, "Unable to map SP810\n");
+ return;
+ }
+
+ /* switch to slow mode */
+ iowritel(sp810, 0x3);
+ dsb(); isb();
+ /* writing any value to SCSYSSTAT reg will reset the system */
+ iowritel(sp810 + 4, 0x1);
+ dsb(); isb();
+
+ iounmap(sp810);
+}
+
+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
#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();
}
#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__ */
/*
#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>