From 6585fabbcca24bf1c1df0582d048d93b3caf7ce7 Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Fri, 24 Apr 2020 12:26:23 +0530 Subject: lib: utils: Add SiFive test device This patch factor-out SiFive test device related stuff into it's own source file from qemu/virt platform. In future, we can find SiFive test device address from device tree as well. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- platform/qemu/virt/platform.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'platform') diff --git a/platform/qemu/virt/platform.c b/platform/qemu/virt/platform.c index fd4571d..7836bee 100644 --- a/platform/qemu/virt/platform.c +++ b/platform/qemu/virt/platform.c @@ -18,14 +18,13 @@ #include #include #include +#include /* clang-format off */ #define VIRT_HART_COUNT 8 #define VIRT_TEST_ADDR 0x100000 -#define VIRT_TEST_FINISHER_FAIL 0x3333 -#define VIRT_TEST_FINISHER_PASS 0x5555 #define VIRT_CLINT_ADDR 0x2000000 @@ -39,6 +38,14 @@ /* clang-format on */ +static int virt_early_init(bool cold_boot) +{ + if (!cold_boot) + return 0; + + return sifive_test_init(VIRT_TEST_ADDR); +} + static int virt_final_init(bool cold_boot) { void *fdt; @@ -100,17 +107,8 @@ static int virt_timer_init(bool cold_boot) return clint_warm_timer_init(); } -static int virt_system_reset(u32 type) -{ - /* Tell the "finisher" that the simulation - * was successful so that QEMU exits - */ - writew(VIRT_TEST_FINISHER_PASS, (void *)VIRT_TEST_ADDR); - - return 0; -} - const struct sbi_platform_operations platform_ops = { + .early_init = virt_early_init, .final_init = virt_final_init, .console_putc = uart8250_putc, .console_getc = uart8250_getc, @@ -123,7 +121,7 @@ const struct sbi_platform_operations platform_ops = { .timer_event_stop = clint_timer_event_stop, .timer_event_start = clint_timer_event_start, .timer_init = virt_timer_init, - .system_reset = virt_system_reset, + .system_reset = sifive_test_system_reset, }; const struct sbi_platform platform = { -- cgit v1.2.3