runtime: demonstrate basic inter-CPU communication

This commit is contained in:
Sebastien Bourdeauducq 2015-04-02 16:54:08 +08:00
parent 5fd7f68f48
commit 4b66e3108a
1 changed files with 24 additions and 0 deletions

View File

@ -305,6 +305,28 @@ static char *get_token(char **str)
return d; return d;
} }
static const unsigned int test_program[] = {
0x1860dead, // l.movhi r3,0xdead
0x1880d000, // l.movhi r4,0xd000
0xa863beef, // l.ori r3,r3,0xbeef
0xd4041800, // l.sw 0(r4),r3
0x00000000, // l.j +0
0x15000000, // l.nop
};
static void cputest(void)
{
int i;
kernel_cpu_reset_write(1);
MMPTR(0xd0000000) = 0;
memcpy((void *)0x41000000, test_program, sizeof(test_program));
flush_l2_cache();
kernel_cpu_reset_write(0);
for(i=0;i<10;i++)
printf("%08x\n", MMPTR(0xd0000000));
}
static void do_command(char *c) static void do_command(char *c)
{ {
char *token; char *token;
@ -327,6 +349,8 @@ static void do_command(char *c)
else if(strcmp(token, "ddsftw") == 0) ddsftw(get_token(&c), get_token(&c)); else if(strcmp(token, "ddsftw") == 0) ddsftw(get_token(&c), get_token(&c));
else if(strcmp(token, "ddstest") == 0) ddstest(get_token(&c)); else if(strcmp(token, "ddstest") == 0) ddstest(get_token(&c));
else if(strcmp(token, "cputest") == 0) cputest();
else if(strcmp(token, "") != 0) else if(strcmp(token, "") != 0)
printf("Command not found\n"); printf("Command not found\n");
} }