diff options
author | Julien Grall <julien.grall@linaro.org> | 2013-04-28 19:48:29 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2013-05-13 12:00:00 +0100 |
commit | af99b3476642b67918c959c68f879201582de001 (patch) | |
tree | b007784e40a28a77bcdfb1bca1e30a2741e58bdf | |
parent | 3c186690bb6c8e7da7a24f83c8d8c884b1ba46a2 (diff) | |
download | xen-af99b3476642b67918c959c68f879201582de001.tar.gz xen-af99b3476642b67918c959c68f879201582de001.tar.bz2 xen-af99b3476642b67918c959c68f879201582de001.zip |
xen/arm: Add versatile express platform
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>
-rw-r--r-- | xen/arch/arm/platforms/vexpress.c | 40 | ||||
-rw-r--r-- | xen/arch/arm/shutdown.c | 14 | ||||
-rw-r--r-- | xen/include/asm-arm/config.h | 3 | ||||
-rw-r--r-- | xen/include/asm-arm/platforms/vexpress.h | 3 |
4 files changed, 43 insertions, 17 deletions
diff --git a/xen/arch/arm/platforms/vexpress.c b/xen/arch/arm/platforms/vexpress.c index fd4ce740da..8fc30c4d48 100644 --- a/xen/arch/arm/platforms/vexpress.c +++ b/xen/arch/arm/platforms/vexpress.c @@ -18,7 +18,9 @@ */ #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 @@ -91,6 +93,44 @@ out: } /* + * 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 * c-file-style: "BSD" diff --git a/xen/arch/arm/shutdown.c b/xen/arch/arm/shutdown.c index 0903842f77..767cc12ad4 100644 --- a/xen/arch/arm/shutdown.c +++ b/xen/arch/arm/shutdown.c @@ -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(); } diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h index 8ed72f5188..75992027ff 100644 --- a/xen/include/asm-arm/config.h +++ b/xen/include/asm-arm/config.h @@ -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__ */ /* diff --git a/xen/include/asm-arm/platforms/vexpress.h b/xen/include/asm-arm/platforms/vexpress.h index 67f8fef8db..5cf3aba6f2 100644 --- a/xen/include/asm-arm/platforms/vexpress.h +++ b/xen/include/asm-arm/platforms/vexpress.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> |