From: notaz Date: Mon, 29 Jul 2013 01:47:07 +0000 (+0300) Subject: drc: do a test on startup X-Git-Tag: v1.85~20 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=570dde615d960c9f9ba8e15d95634816ad544c77;p=picodrive.git drc: do a test on startup saves time for porting help --- diff --git a/cpu/drc/cmn.c b/cpu/drc/cmn.c index 91bd7ed..cfb0219 100644 --- a/cpu/drc/cmn.c +++ b/cpu/drc/cmn.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include "cmn.h" u8 __attribute__((aligned(4096))) tcache[DRC_TCACHE_SIZE]; @@ -15,9 +15,35 @@ u8 __attribute__((aligned(4096))) tcache[DRC_TCACHE_SIZE]; void drc_cmn_init(void) { - plat_mem_set_exec(tcache, sizeof(tcache)); + int ret = plat_mem_set_exec(tcache, sizeof(tcache)); + elprintf(EL_STATUS, "drc_cmn_init: %p, %zd bytes: %d", + tcache, sizeof(tcache), ret); + +#ifdef __arm__ + { + static int test_done; + if (!test_done) + { + int *test_out = (void *)tcache; + int (*testfunc)(void) = (void *)tcache; + + elprintf(EL_STATUS, "testing if we can run recompiled code.."); + *test_out++ = 0xe3a000dd; // mov r0, 0xdd + *test_out++ = 0xe12fff1e; // bx lr + cache_flush_d_inval_i(tcache, test_out); + + // we'll usually crash on broken platforms or bad ports, + // but do a value check too just in case + ret = testfunc(); + elprintf(EL_STATUS, "test %s.", ret == 0xdd ? "passed" : "failed"); + test_done = 1; + } + } +#endif } void drc_cmn_cleanup(void) { } + +// vim:shiftwidth=2:expandtab