mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-03-31 03:11:41 +00:00
tests/spr_read: Test that mfspr/mtspr to SPRs 0,4,5,6 generate HEAI
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
This commit is contained in:
@@ -44,3 +44,91 @@ boot_entry:
|
||||
bctrl
|
||||
attn // terminate on exit
|
||||
b .
|
||||
|
||||
.globl read_sprn
|
||||
read_sprn:
|
||||
nop
|
||||
nop
|
||||
mr %r0,%r3
|
||||
mr %r3,%r4
|
||||
cmpdi %r0,0
|
||||
beq 0f
|
||||
cmpdi %r0,1
|
||||
beq 1f
|
||||
cmpdi %r0,4
|
||||
beq 4f
|
||||
cmpdi %r0,5
|
||||
beq 5f
|
||||
cmpdi %r0,6
|
||||
beq 6f
|
||||
mfspr %r3,179
|
||||
blr
|
||||
0: mfspr %r3,0
|
||||
blr
|
||||
1: mfspr %r3,1
|
||||
blr
|
||||
4: mfspr %r3,4
|
||||
blr
|
||||
5: mfspr %r3,5
|
||||
blr
|
||||
6: mfspr %r3,6
|
||||
blr
|
||||
|
||||
.globl write_sprn
|
||||
write_sprn:
|
||||
nop
|
||||
nop
|
||||
mr %r0,%r3
|
||||
li %r3,0
|
||||
cmpdi %r0,0
|
||||
beq 0f
|
||||
cmpdi %r0,1
|
||||
beq 1f
|
||||
cmpdi %r0,4
|
||||
beq 4f
|
||||
cmpdi %r0,5
|
||||
beq 5f
|
||||
cmpdi %r0,6
|
||||
beq 6f
|
||||
mtspr 179,%r3
|
||||
blr
|
||||
0: mtspr 0,%r3
|
||||
blr
|
||||
1: mtspr 1,%r3
|
||||
blr
|
||||
4: mtspr 4,%r3
|
||||
blr
|
||||
5: mtspr 5,%r3
|
||||
blr
|
||||
6: mtspr 6,%r3
|
||||
blr
|
||||
|
||||
#define EXCEPTION(nr) \
|
||||
.= nr ;\
|
||||
li %r3,nr ;\
|
||||
blr
|
||||
|
||||
EXCEPTION(0x300)
|
||||
EXCEPTION(0x380)
|
||||
EXCEPTION(0x400)
|
||||
EXCEPTION(0x480)
|
||||
EXCEPTION(0x500)
|
||||
EXCEPTION(0x600)
|
||||
EXCEPTION(0x700)
|
||||
EXCEPTION(0x800)
|
||||
EXCEPTION(0x900)
|
||||
EXCEPTION(0x980)
|
||||
EXCEPTION(0xa00)
|
||||
EXCEPTION(0xb00)
|
||||
EXCEPTION(0xc00)
|
||||
EXCEPTION(0xd00)
|
||||
EXCEPTION(0xe00)
|
||||
EXCEPTION(0xe20)
|
||||
EXCEPTION(0xe40)
|
||||
EXCEPTION(0xe60)
|
||||
EXCEPTION(0xe80)
|
||||
EXCEPTION(0xf00)
|
||||
EXCEPTION(0xf20)
|
||||
EXCEPTION(0xf40)
|
||||
EXCEPTION(0xf60)
|
||||
EXCEPTION(0xf80)
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
#define PASS "PASS\n"
|
||||
#define FAIL "FAIL\n"
|
||||
|
||||
extern long read_sprn(long, long);
|
||||
extern long write_sprn(long);
|
||||
|
||||
// i < 100
|
||||
void print_test(char *str)
|
||||
{
|
||||
@@ -44,9 +47,23 @@ void print_test(char *str)
|
||||
#define __stringify_1(x...) #x
|
||||
#define __stringify(x...) __stringify_1(x)
|
||||
|
||||
void print_hex(unsigned long val, int ndigits, const char *str)
|
||||
{
|
||||
int i, x;
|
||||
|
||||
for (i = (ndigits - 1) * 4; i >= 0; i -= 4) {
|
||||
x = (val >> i) & 0xf;
|
||||
if (x >= 10)
|
||||
putchar(x + 'a' - 10);
|
||||
else
|
||||
putchar(x + '0');
|
||||
}
|
||||
puts(str);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned long tmp;
|
||||
unsigned long tmp, r;
|
||||
int fail = 0;
|
||||
|
||||
console_init();
|
||||
@@ -102,9 +119,22 @@ int main(void)
|
||||
}
|
||||
|
||||
print_test("undefined SPR");
|
||||
__asm__ __volatile__("mtspr 179,%0" : : "r" (7738));
|
||||
__asm__ __volatile__("li %0,%1; mfspr %0,179" : "=r" (tmp) : "i" (2498));
|
||||
if (tmp == 2498) {
|
||||
r = write_sprn(179);
|
||||
tmp = read_sprn(179, 2498);
|
||||
if (r == 0 && tmp == 2498) {
|
||||
puts(PASS);
|
||||
} else {
|
||||
puts(FAIL);
|
||||
fail = 1;
|
||||
}
|
||||
|
||||
print_test("read SPR 0/4/5/6");
|
||||
if (read_sprn(0, 1234) == 0xe40 && read_sprn(2, 1234) == 1234 &&
|
||||
read_sprn(4, 1234) == 0xe40 && read_sprn(5, 1234) == 0xe40 &&
|
||||
read_sprn(6, 1234) == 0xe40 &&
|
||||
write_sprn(0) == 0xe40 && write_sprn(2) == 0 &&
|
||||
write_sprn(4) == 0xe40 && write_sprn(5) == 0xe40 &&
|
||||
write_sprn(6) == 0xe40) {
|
||||
puts(PASS);
|
||||
} else {
|
||||
puts(FAIL);
|
||||
|
||||
Binary file not shown.
@@ -24,4 +24,5 @@ Test SPR_PTCR:PASS
|
||||
Test SPR_PVR:PASS
|
||||
Test reserved no-op:PASS
|
||||
Test undefined SPR:PASS
|
||||
Test read SPR 0/4/5/6:PASS
|
||||
PASS
|
||||
|
||||
Reference in New Issue
Block a user