From: Jerone Y. <jy...@us...> - 2007-11-29 20:18:03
|
# HG changeset patch # User Jerone Young <jy...@us...> # Date 1196367231 21600 # Node ID 6f34b3cd608868c4cc8280ab333aac78a7ba9a6d # Parent be65ecf21443ddb74f9adbf6aa9778f798b5761b Add powerpc tests This patch adds a set of simple powerpc tests Signed-off-by: Jerone Young <jy...@us...> diff --git a/user/config-powerpc.mak b/user/config-powerpc.mak new file mode 100644 --- /dev/null +++ b/user/config-powerpc.mak @@ -0,0 +1,14 @@ +TEST_DIR=test/powerpc +CFLAGS += -m32 +CFLAGS += -D__powerpc__ +CFLAGS += -I $(KERNELDIR)/include + +tests= $(TEST_DIR)/io.S \ + $(TEST_DIR)/spin.S \ + $(TEST_DIR)/sprg.S \ + $(TEST_DIR)/44x/tlbsx.S \ + $(TEST_DIR)/44x/tlbwe_16KB.S \ + $(TEST_DIR)/44x/tlbwe_hole.S \ + $(TEST_DIR)/44x/tlbwe.S + +kvmctl_objs = main.o ../libkvm/libkvm.a diff --git a/user/test/powerpc/44x/tlbsx.S b/user/test/powerpc/44x/tlbsx.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/44x/tlbsx.S @@ -0,0 +1,33 @@ +#define SPRN_MMUCR 0x3b2 + +#define TLBWORD0 0x10000210 +#define TLBWORD1 0x10000000 +#define TLBWORD2 0x00000003 + +.global _start +_start: + li r4, 0 + mtspr SPRN_MMUCR, r4 + + li r3, 23 + + lis r4, TLBWORD0@h + ori r4, r4, TLBWORD0@l + tlbwe r4, r3, 0 + + lis r4, TLBWORD1@h + ori r4, r4, TLBWORD1@l + tlbwe r4, r3, 1 + + lis r4, TLBWORD2@h + ori r4, r4, TLBWORD2@l + tlbwe r4, r3, 2 + + lis r4, 0x1000 + tlbsx r5, r4, r0 + cmpwi r5, 23 + beq good + trap + +good: + b . diff --git a/user/test/powerpc/44x/tlbwe.S b/user/test/powerpc/44x/tlbwe.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/44x/tlbwe.S @@ -0,0 +1,27 @@ +#define SPRN_MMUCR 0x3b2 + +/* Create a mapping at 4MB */ +#define TLBWORD0 0x00400210 +#define TLBWORD1 0x00400000 +#define TLBWORD2 0x00000003 + +.global _start +_start: + li r4, 0 + mtspr SPRN_MMUCR, r4 + + li r3, 23 + + lis r4, TLBWORD0@h + ori r4, r4, TLBWORD0@l + tlbwe r4, r3, 0 + + lis r4, TLBWORD1@h + ori r4, r4, TLBWORD1@l + tlbwe r4, r3, 1 + + lis r4, TLBWORD2@h + ori r4, r4, TLBWORD2@l + tlbwe r4, r3, 2 + + b . diff --git a/user/test/powerpc/44x/tlbwe_16KB.S b/user/test/powerpc/44x/tlbwe_16KB.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/44x/tlbwe_16KB.S @@ -0,0 +1,35 @@ +#define SPRN_MMUCR 0x3b2 + +/* 16KB mapping at 4MB */ +#define TLBWORD0 0x00400220 +#define TLBWORD1 0x00400000 +#define TLBWORD2 0x00000003 + +.global _start +_start: + li r4, 0 + mtspr SPRN_MMUCR, r4 + + li r3, 5 + + lis r4, TLBWORD0@h + ori r4, r4, TLBWORD0@l + tlbwe r4, r3, 0 + + lis r4, TLBWORD1@h + ori r4, r4, TLBWORD1@l + tlbwe r4, r3, 1 + + lis r4, TLBWORD2@h + ori r4, r4, TLBWORD2@l + tlbwe r4, r3, 2 + + /* load from 4MB */ + lis r3, 0x0040 + lwz r4, 0(r3) + + /* load from 4MB+8KB */ + ori r3, r3, 0x2000 + lwz r4, 0(r3) + + b . diff --git a/user/test/powerpc/44x/tlbwe_hole.S b/user/test/powerpc/44x/tlbwe_hole.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/44x/tlbwe_hole.S @@ -0,0 +1,27 @@ +#define SPRN_MMUCR 0x3b2 + +/* Try to map real address 1GB. */ +#define TLBWORD0 0x40000210 +#define TLBWORD1 0x40000000 +#define TLBWORD2 0x00000003 + +.global _start +_start: + li r4, 0 + mtspr SPRN_MMUCR, r4 + + li r3, 23 + + lis r4, TLBWORD0@h + ori r4, r4, TLBWORD0@l + tlbwe r4, r3, 0 + + lis r4, TLBWORD1@h + ori r4, r4, TLBWORD1@l + tlbwe r4, r3, 1 + + lis r4, TLBWORD2@h + ori r4, r4, TLBWORD2@l + tlbwe r4, r3, 2 + + b . diff --git a/user/test/powerpc/io.S b/user/test/powerpc/io.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/io.S @@ -0,0 +1,32 @@ +#define SPRN_MMUCR 0x3b2 + +#define TLBWORD0 0xf0000210 +#define TLBWORD1 0xf0000000 +#define TLBWORD2 0x00000003 + +.global _start +_start: + li r4, 0 + mtspr SPRN_MMUCR, r4 + + li r3, 2 + + lis r4, TLBWORD0@h + ori r4, r4, TLBWORD0@l + tlbwe r4, r3, 0 + + lis r4, TLBWORD1@h + ori r4, r4, TLBWORD1@l + tlbwe r4, r3, 1 + + lis r4, TLBWORD2@h + ori r4, r4, TLBWORD2@l + tlbwe r4, r3, 2 + + lis r3, 0xf000 + lis r4, 0x1234 + ori r4, r4, 0x5678 + stb r4, 0(r3) + lbz r5, 0(r3) + + b . diff --git a/user/test/powerpc/spin.S b/user/test/powerpc/spin.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/spin.S @@ -0,0 +1,4 @@ + +.global _start +_start: + b . diff --git a/user/test/powerpc/sprg.S b/user/test/powerpc/sprg.S new file mode 100644 --- /dev/null +++ b/user/test/powerpc/sprg.S @@ -0,0 +1,7 @@ + +.global _start +_start: + li r3, 42 + mtsprg 0, r3 + mfsprg r4, 0 + b . |