PMP passes test with GenZephyr, but pipeline flushes have been disabled

This commit is contained in:
Samuel Lindemer 2020-12-03 17:29:31 +01:00
parent 987de8fb6a
commit 5cb5061d9b
9 changed files with 197 additions and 204 deletions

View File

@ -10,6 +10,7 @@ object GenZephyr extends App{
config = VexRiscvConfig( config = VexRiscvConfig(
plugins = List( plugins = List(
new IBusCachedPlugin( new IBusCachedPlugin(
resetVector = 0x80000000l,
prediction = STATIC, prediction = STATIC,
config = InstructionCacheConfig( config = InstructionCacheConfig(
cacheSize = 4096, cacheSize = 4096,

View File

@ -153,8 +153,8 @@ class PmpPlugin(regions : Int, ioRange : UInt => Bool) extends Plugin[VexRiscv]
pmps += PmpRegister() pmps += PmpRegister()
csrService.rw(0x3b0 + i, pmps(i).csr.addr) csrService.rw(0x3b0 + i, pmps(i).csr.addr)
csrService.onWrite(0x3b0 + i) { csrService.onWrite(0x3b0 + i) {
execute.arbitration.flushNext := True //execute.arbitration.flushNext := True
redoInterface.valid := True //redoInterface.valid := True
} }
} }
@ -173,8 +173,8 @@ class PmpPlugin(regions : Int, ioRange : UInt => Bool) extends Plugin[VexRiscv]
1 -> pmps((i * 4) ).csr.w, 0 -> pmps((i * 4) ).csr.r 1 -> pmps((i * 4) ).csr.w, 0 -> pmps((i * 4) ).csr.r
) )
csrService.onWrite(0x3a0 + i) { csrService.onWrite(0x3a0 + i) {
execute.arbitration.flushNext := True //execute.arbitration.flushNext := True
redoInterface.valid := True //redoInterface.valid := True
} }
} }

View File

@ -0,0 +1,3 @@
target remote localhost:3333
monitor reset halt
load

View File

@ -8,163 +8,159 @@ Disassembly of section .crt_section:
80000000: 00000097 auipc ra,0x0 80000000: 00000097 auipc ra,0x0
80000004: 01008093 addi ra,ra,16 # 80000010 <trap> 80000004: 01008093 addi ra,ra,16 # 80000010 <trap>
80000008: 30509073 csrw mtvec,ra 80000008: 30509073 csrw mtvec,ra
8000000c: 0240006f j 80000030 <test0> 8000000c: 00c0006f j 80000018 <test0>
80000010 <trap>: 80000010 <trap>:
80000010: 341f1073 csrw mepc,t5 80000010: 341f1073 csrw mepc,t5
80000014: 30200073 mret 80000014: 30200073 mret
80000018 <to_user>: 80000018 <test0>:
80000018: 00014137 lui sp,0x14 80000018: 00000e13 li t3,0
8000001c: 30013073 csrc mstatus,sp 8000001c: 00000f17 auipc t5,0x0
80000020: 20000113 li sp,512 80000020: 1f4f0f13 addi t5,t5,500 # 80000210 <fail>
80000024: 30012073 csrs mstatus,sp 80000024: 800000b7 lui ra,0x80000
80000028: 341e9073 csrw mepc,t4 80000028: 80008237 lui tp,0x80008
8000002c: 30200073 mret 8000002c: deadc137 lui sp,0xdeadc
80000030: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcd3>
80000030 <test0>: 80000034: 0020a023 sw sp,0(ra) # 80000000 <pass+0xfffffde4>
80000030: 00000e13 li t3,0 80000038: 00222023 sw sp,0(tp) # 80008000 <pass+0x7de4>
80000034: 00000f17 auipc t5,0x0 8000003c: 0000a183 lw gp,0(ra)
80000038: 1f0f0f13 addi t5,t5,496 # 80000224 <fail> 80000040: 1c311863 bne sp,gp,80000210 <fail>
8000003c: 800000b7 lui ra,0x80000 80000044: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
80000040: 80008237 lui tp,0x80008 80000048: 1c311463 bne sp,gp,80000210 <fail>
80000044: deadc137 lui sp,0xdeadc 8000004c: 071212b7 lui t0,0x7121
80000048: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbf> 80000050: 80828293 addi t0,t0,-2040 # 7120808 <_start-0x78edf7f8>
8000004c: 0020a023 sw sp,0(ra) # 80000000 <pass+0xfffffdd0> 80000054: 3a029073 csrw pmpcfg0,t0
80000050: 00222023 sw sp,0(tp) # 80008000 <pass+0x7dd0> 80000058: 191f02b7 lui t0,0x191f0
80000054: 0000a183 lw gp,0(ra) 8000005c: 30428293 addi t0,t0,772 # 191f0304 <_start-0x66e0fcfc>
80000058: 1c311663 bne sp,gp,80000224 <fail> 80000060: 3a129073 csrw pmpcfg1,t0
8000005c: 00022183 lw gp,0(tp) # 0 <_start-0x80000000> 80000064: 01800293 li t0,24
80000060: 1c311263 bne sp,gp,80000224 <fail> 80000068: 3a229073 csrw pmpcfg2,t0
80000064: 071a12b7 lui t0,0x71a1 8000006c: 0f1e22b7 lui t0,0xf1e2
80000068: 80828293 addi t0,t0,-2040 # 71a0808 <_start-0x78e5f7f8> 80000070: 90028293 addi t0,t0,-1792 # f1e1900 <_start-0x70e1e700>
8000006c: 3a029073 csrw pmpcfg0,t0 80000074: 3a329073 csrw pmpcfg3,t0
80000070: 191c02b7 lui t0,0x191c0 80000078: 200002b7 lui t0,0x20000
80000074: 50428293 addi t0,t0,1284 # 191c0504 <_start-0x66e3fafc> 8000007c: 3b029073 csrw pmpaddr0,t0
80000078: 3a129073 csrw pmpcfg1,t0 80000080: fff00293 li t0,-1
8000007c: 01800293 li t0,24 80000084: 3b129073 csrw pmpaddr1,t0
80000080: 3a229073 csrw pmpcfg2,t0 80000088: 200022b7 lui t0,0x20002
80000084: 0f1e22b7 lui t0,0xf1e2 8000008c: 3b229073 csrw pmpaddr2,t0
80000088: 90028293 addi t0,t0,-1792 # f1e1900 <_start-0x70e1e700> 80000090: 200042b7 lui t0,0x20004
8000008c: 3a329073 csrw pmpcfg3,t0 80000094: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
80000090: 200002b7 lui t0,0x20000 80000098: 3b329073 csrw pmpaddr3,t0
80000094: 3b029073 csrw pmpaddr0,t0 8000009c: 200042b7 lui t0,0x20004
80000098: fff00293 li t0,-1 800000a0: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
8000009c: 3b129073 csrw pmpaddr1,t0 800000a4: 3b429073 csrw pmpaddr4,t0
800000a0: 200022b7 lui t0,0x20002
800000a4: 3b229073 csrw pmpaddr2,t0
800000a8: 200042b7 lui t0,0x20004 800000a8: 200042b7 lui t0,0x20004
800000ac: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001> 800000ac: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
800000b0: 3b329073 csrw pmpaddr3,t0 800000b0: 3b529073 csrw pmpaddr5,t0
800000b4: 200042b7 lui t0,0x20004 800000b4: 200022b7 lui t0,0x20002
800000b8: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001> 800000b8: fff28293 addi t0,t0,-1 # 20001fff <_start-0x5fffe001>
800000bc: 3b429073 csrw pmpaddr4,t0 800000bc: 3b629073 csrw pmpaddr6,t0
800000c0: 200042b7 lui t0,0x20004 800000c0: 200042b7 lui t0,0x20004
800000c4: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001> 800000c4: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
800000c8: 3b529073 csrw pmpaddr5,t0 800000c8: 3b729073 csrw pmpaddr7,t0
800000cc: 200022b7 lui t0,0x20002 800000cc: 200042b7 lui t0,0x20004
800000d0: fff28293 addi t0,t0,-1 # 20001fff <_start-0x5fffe001> 800000d0: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
800000d4: 3b629073 csrw pmpaddr6,t0 800000d4: 3b829073 csrw pmpaddr8,t0
800000d8: 200042b7 lui t0,0x20004 800000d8: 00000293 li t0,0
800000dc: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001> 800000dc: 3b929073 csrw pmpaddr9,t0
800000e0: 3b729073 csrw pmpaddr7,t0 800000e0: 00000293 li t0,0
800000e4: 200042b7 lui t0,0x20004 800000e4: 3ba29073 csrw pmpaddr10,t0
800000e8: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001> 800000e8: 00000293 li t0,0
800000ec: 3b829073 csrw pmpaddr8,t0 800000ec: 3bb29073 csrw pmpaddr11,t0
800000f0: 00000293 li t0,0 800000f0: 00000293 li t0,0
800000f4: 3b929073 csrw pmpaddr9,t0 800000f4: 3bc29073 csrw pmpaddr12,t0
800000f8: 00000293 li t0,0 800000f8: 00000293 li t0,0
800000fc: 3ba29073 csrw pmpaddr10,t0 800000fc: 3bd29073 csrw pmpaddr13,t0
80000100: 00000293 li t0,0 80000100: 00000293 li t0,0
80000104: 3bb29073 csrw pmpaddr11,t0 80000104: 3be29073 csrw pmpaddr14,t0
80000108: 00000293 li t0,0 80000108: 00000293 li t0,0
8000010c: 3bc29073 csrw pmpaddr12,t0 8000010c: 3bf29073 csrw pmpaddr15,t0
80000110: 00000293 li t0,0 80000110: 00c10137 lui sp,0xc10
80000114: 3bd29073 csrw pmpaddr13,t0 80000114: fee10113 addi sp,sp,-18 # c0ffee <_start-0x7f3f0012>
80000118: 00000293 li t0,0 80000118: 0020a023 sw sp,0(ra)
8000011c: 3be29073 csrw pmpaddr14,t0 8000011c: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
80000120: 00000293 li t0,0 80000120: 0000a183 lw gp,0(ra)
80000124: 3bf29073 csrw pmpaddr15,t0 80000124: 0e311663 bne sp,gp,80000210 <fail>
80000128: 00c10137 lui sp,0xc10 80000128: 00000193 li gp,0
8000012c: fee10113 addi sp,sp,-18 # c0ffee <_start-0x7f3f0012> 8000012c: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
80000130: 0020a023 sw sp,0(ra) 80000130: 0e311063 bne sp,gp,80000210 <fail>
80000134: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
80000138: 0000a183 lw gp,0(ra)
8000013c: 0e311463 bne sp,gp,80000224 <fail>
80000140: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
80000144: 0e311063 bne sp,gp,80000224 <fail>
80000148 <test1>: 80000134 <test1>:
80000148: 00100e13 li t3,1 80000134: 00100e13 li t3,1
8000014c: 00000f17 auipc t5,0x0 80000138: 00000f17 auipc t5,0x0
80000150: 0d8f0f13 addi t5,t5,216 # 80000224 <fail> 8000013c: 0d8f0f13 addi t5,t5,216 # 80000210 <fail>
80000154: 079a12b7 lui t0,0x79a1 80000140: 079212b7 lui t0,0x7921
80000158: 80828293 addi t0,t0,-2040 # 79a0808 <_start-0x7865f7f8> 80000144: 80828293 addi t0,t0,-2040 # 7920808 <_start-0x786df7f8>
8000015c: 3a029073 csrw pmpcfg0,t0 80000148: 3a029073 csrw pmpcfg0,t0
80000160: deadc137 lui sp,0xdeadc 8000014c: deadc137 lui sp,0xdeadc
80000164: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbf> 80000150: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcd3>
80000168: 00222023 sw sp,0(tp) # 0 <_start-0x80000000> 80000154: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
80000158: 00000f17 auipc t5,0x0
8000015c: 010f0f13 addi t5,t5,16 # 80000168 <test2>
80000160: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
80000164: 0ac0006f j 80000210 <fail>
80000168 <test2>:
80000168: 00200e13 li t3,2
8000016c: 00000f17 auipc t5,0x0 8000016c: 00000f17 auipc t5,0x0
80000170: 010f0f13 addi t5,t5,16 # 8000017c <test2> 80000170: 0a4f0f13 addi t5,t5,164 # 80000210 <fail>
80000174: 00022183 lw gp,0(tp) # 0 <_start-0x80000000> 80000174: 071212b7 lui t0,0x7121
80000178: 0ac0006f j 80000224 <fail> 80000178: 80828293 addi t0,t0,-2040 # 7120808 <_start-0x78edf7f8>
8000017c: 3a029073 csrw pmpcfg0,t0
80000180: deadc137 lui sp,0xdeadc
80000184: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcd3>
80000188: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
8000018c: 00000f17 auipc t5,0x0
80000190: 010f0f13 addi t5,t5,16 # 8000019c <test3>
80000194: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
80000198: 0780006f j 80000210 <fail>
8000017c <test2>: 8000019c <test3>:
8000017c: 00200e13 li t3,2 8000019c: 00300e13 li t3,3
80000180: 00000f17 auipc t5,0x0
80000184: 0a4f0f13 addi t5,t5,164 # 80000224 <fail>
80000188: 071a12b7 lui t0,0x71a1
8000018c: 80828293 addi t0,t0,-2040 # 71a0808 <_start-0x78e5f7f8>
80000190: 3a029073 csrw pmpcfg0,t0
80000194: deadc137 lui sp,0xdeadc
80000198: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbf>
8000019c: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
800001a0: 00000f17 auipc t5,0x0 800001a0: 00000f17 auipc t5,0x0
800001a4: 010f0f13 addi t5,t5,16 # 800001b0 <test3> 800001a4: 070f0f13 addi t5,t5,112 # 80000210 <fail>
800001a8: 00022183 lw gp,0(tp) # 0 <_start-0x80000000> 800001a8: 00000117 auipc sp,0x0
800001ac: 0780006f j 80000224 <fail> 800001ac: 01010113 addi sp,sp,16 # 800001b8 <test4>
800001b0: 34111073 csrw mepc,sp
800001b4: 30200073 mret
800001b0 <test3>: 800001b8 <test4>:
800001b0: 00300e13 li t3,3 800001b8: 00400e13 li t3,4
800001b4: 00000f17 auipc t5,0x0 800001bc: 00000f17 auipc t5,0x0
800001b8: 070f0f13 addi t5,t5,112 # 80000224 <fail> 800001c0: 054f0f13 addi t5,t5,84 # 80000210 <fail>
800001bc: 00000e97 auipc t4,0x0 800001c4: deadc137 lui sp,0xdeadc
800001c0: 00ce8e93 addi t4,t4,12 # 800001c8 <test4> 800001c8: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcd3>
800001c4: e55ff06f j 80000018 <to_user> 800001cc: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
800001d0: 00000f17 auipc t5,0x0
800001d4: 010f0f13 addi t5,t5,16 # 800001e0 <test5>
800001d8: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
800001dc: 0340006f j 80000210 <fail>
800001c8 <test4>: 800001e0 <test5>:
800001c8: 00400e13 li t3,4 800001e0: 00500e13 li t3,5
800001cc: 00000f17 auipc t5,0x0 800001e4: deadc137 lui sp,0xdeadc
800001d0: 058f0f13 addi t5,t5,88 # 80000224 <fail> 800001e8: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcd3>
800001d4: deadc137 lui sp,0xdeadc 800001ec: 0020a023 sw sp,0(ra)
800001d8: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbf> 800001f0: 0000a183 lw gp,0(ra)
800001dc: 00222023 sw sp,0(tp) # 0 <_start-0x80000000> 800001f4: 00311e63 bne sp,gp,80000210 <fail>
800001e0: 00000f17 auipc t5,0x0
800001e4: 010f0f13 addi t5,t5,16 # 800001f0 <test5>
800001e8: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
800001ec: 0380006f j 80000224 <fail>
800001f0 <test5>: 800001f8 <test6>:
800001f0: 00500e13 li t3,5 800001f8: 00600e13 li t3,6
800001f4: 00000f17 auipc t5,0x0
800001f8: 03cf0f13 addi t5,t5,60 # 80000230 <pass>
800001fc: 80010237 lui tp,0x80010 800001fc: 80010237 lui tp,0x80010
80000200: deadc137 lui sp,0xdeadc 80000200: 00022183 lw gp,0(tp) # 80010000 <pass+0xfde4>
80000204: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbf> 80000204: 00000f17 auipc t5,0x0
80000208: 0020a023 sw sp,0(ra) 80000208: 018f0f13 addi t5,t5,24 # 8000021c <pass>
8000020c: 0000a183 lw gp,0(ra) 8000020c: 00322023 sw gp,0(tp) # 0 <_start-0x80000000>
80000210: 00311a63 bne sp,gp,80000224 <fail>
80000214: 00022183 lw gp,0(tp) # 80010000 <pass+0xfdd0>
80000218: 00000f17 auipc t5,0x0
8000021c: 018f0f13 addi t5,t5,24 # 80000230 <pass>
80000220: 00322023 sw gp,0(tp) # 0 <_start-0x80000000>
80000224 <fail>: 80000210 <fail>:
80000224: f0100137 lui sp,0xf0100 80000210: f0100137 lui sp,0xf0100
80000228: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffcf4> 80000214: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffd08>
8000022c: 01c12023 sw t3,0(sp) 80000218: 01c12023 sw t3,0(sp)
80000230 <pass>: 8000021c <pass>:
80000230: f0100137 lui sp,0xf0100 8000021c: 29a00e13 li t3,666
80000234: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffcf0> 80000220: f0100137 lui sp,0xf0100
80000238: 00012023 sw zero,0(sp) 80000224: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffd04>
80000228: 00012023 sw zero,0(sp)

Binary file not shown.

View File

@ -1,39 +1,38 @@
:0200000480007A :0200000480007A
:100000009700000093800001739050306F00400211 :100000009700000093800001739050306F00C00093
:1000100073101F34730020303741010073300130FA :1000100073101F3473002030130E0000170F000000
:10002000130100207320013073901E3473002030C0 :10002000130F4F1FB70000803782008037C1ADDE4D
:10003000130E0000170F0000130F0F1FB7000080F2 :100030001301F1EE23A020002320220083A1000061
:100040003782008037C1ADDE1301F1EE23A020001E :100040006318311C832102006314311CB71212079C
:100050002320220083A100006316311C83210200AB :10005000938282807390023AB7021F1993824230D2
:100060006312311CB7121A07938282807390023A8E :100060007390123A930280017390223AB7221E0FC6
:10007000B7021C19938242507390123A9302800186 :10007000938202907390323AB70200207390023B51
:100080007390223AB7221E0F938202907390323AF5 :100080009302F0FF7390123BB72200207390223B43
:10009000B70200207390023B9302F0FF7390123B73 :10009000B74200209382F2FF7390323BB7420020B8
:1000A000B72200207390223BB74200209382F2FFD8 :1000A0009382F2FF7390423BB74200209382F2FFAB
:1000B0007390323BB74200209382F2FF7390423B31 :1000B0007390523BB72200209382F2FF7390623B11
:1000C000B74200209382F2FF7390523BB722002088 :1000C000B74200209382F2FF7390723BB742002048
:1000D0009382F2FF7390623BB74200209382F2FF5B :1000D0009382F2FF7390823B930200007390923BF5
:1000E0007390723BB74200209382F2FF7390823B81 :1000E000930200007390A23B930200007390B23B16
:1000F000930200007390923B930200007390A23B26 :1000F000930200007390C23B930200007390D23BC6
:10010000930200007390B23B930200007390C23BD5 :10010000930200007390E23B930200007390F23B75
:10011000930200007390D23B930200007390E23B85 :100110003701C1001301E1FE23A0200023202200AB
:10012000930200007390F23B3701C1001301E1FE1E :1001200083A100006316310E9301000083210200B9
:1001300023A020002320220083A100006314310E9D :100130006310310E130E1000170F0000130F8F0DF8
:10014000832102006310310E130E1000170F000000 :10014000B7129207938282807390023A37C1ADDE74
:10015000130F8F0DB7129A07938282807390023A21 :100150001301F1EE23202200170F0000130F0F01EF
:1001600037C1ADDE1301F1EE23202200170F00008E :10016000832102006F00C00A130E2000170F000049
:10017000130F0F01832102006F00C00A130E20002D :10017000130F4F0AB7121207938282807390023ACC
:10018000170F0000130F4F0AB7121A0793828280CD :1001800037C1ADDE1301F1EE23202200170F00006E
:100190007390023A37C1ADDE1301F1EE2320220045 :10019000130F0F01832102006F008007130E300040
:1001A000170F0000130F0F01832102006F0080075B :1001A000170F0000130F0F071701000013010101C3
:1001B000130E3000170F0000130F0F07970E0000EB :1001B0007310113473002030130E4000170F00002D
:1001C000938ECE006FF05FE5130E4000170F000016 :1001C000130F4F0537C1ADDE1301F1EE23202200DE
:1001D000130F8F0537C1ADDE1301F1EE232022008E :1001D000170F0000130F0F01832102006F0040036F
:1001E000170F0000130F0F01832102006F0080031F :1001E000130E500037C1ADDE1301F1EE23A0200045
:1001F000130E5000170F0000130FCF0337020180BA :1001F00083A10000631E3100130E600037020180EE
:1002000037C1ADDE1301F1EE23A0200083A1000071 :1002000083210200170F0000130F8F0123203200FB
:10021000631A310083210200170F0000130F8F01B2 :10021000370110F0130141F22320C101130EA02970
:1002200023203200370110F0130141F22320C101D5 :0C022000370110F0130101F2232001004F
:0C023000370110F0130101F2232001003F
:040000058000000077 :040000058000000077
:00000001FF :00000001FF

View File

@ -15,20 +15,19 @@ LOAD /opt/riscv/lib/gcc/riscv64-unknown-elf/10.2.0/../../../../riscv64-unknown-e
END GROUP END GROUP
LOAD /opt/riscv/lib/gcc/riscv64-unknown-elf/10.2.0/libgcc.a LOAD /opt/riscv/lib/gcc/riscv64-unknown-elf/10.2.0/libgcc.a
.crt_section 0x0000000080000000 0x23c .crt_section 0x0000000080000000 0x22c
0x0000000080000000 . = ALIGN (0x4) 0x0000000080000000 . = ALIGN (0x4)
*crt.o(.text) *crt.o(.text)
.text 0x0000000080000000 0x23c build/src/crt.o .text 0x0000000080000000 0x22c build/src/crt.o
0x0000000080000000 _start 0x0000000080000000 _start
0x0000000080000010 trap 0x0000000080000010 trap
0x0000000080000018 to_user
OUTPUT(build/pmp.elf elf32-littleriscv) OUTPUT(build/pmp.elf elf32-littleriscv)
.data 0x000000008000023c 0x0 .data 0x000000008000022c 0x0
.data 0x000000008000023c 0x0 build/src/crt.o .data 0x000000008000022c 0x0 build/src/crt.o
.bss 0x000000008000023c 0x0 .bss 0x000000008000022c 0x0
.bss 0x000000008000023c 0x0 build/src/crt.o .bss 0x000000008000022c 0x0 build/src/crt.o
.riscv.attributes .riscv.attributes
0x0000000000000000 0x1e 0x0000000000000000 0x1e

View File

@ -5,12 +5,11 @@
*/ */
#define TEST_ID x28 #define TEST_ID x28
#define USER_RA x29
#define TRAP_RA x30 #define TRAP_RA x30
#define PMPCFG0 0x071a0808 #define PMPCFG0 0x07120808
#define PMPCFG0_ 0x079a0808 // lock region 2 #define PMPCFG0_ 0x07920808 // lock region 2
#define PMPCFG1 0x191c0504 #define PMPCFG1 0x191f0304
#define PMPCFG2 0x00000018 #define PMPCFG2 0x00000018
#define PMPCFG3 0x0f1e1900 #define PMPCFG3 0x0f1e1900
@ -42,15 +41,6 @@ trap:
csrw mepc, TRAP_RA csrw mepc, TRAP_RA
mret mret
.global to_user
to_user:
li x2, 0x14000
csrc mstatus, x2
li x2, 0x200
csrs mstatus, x2
csrw mepc, USER_RA
mret
// configure PMP, attempt read/write from machine mode // configure PMP, attempt read/write from machine mode
test0: test0:
li TEST_ID, 0 li TEST_ID, 0
@ -112,6 +102,7 @@ test0:
sw x2, 0x0(x4) sw x2, 0x0(x4)
lw x3, 0x0(x1) lw x3, 0x0(x1)
bne x2, x3, fail bne x2, x3, fail
li x3, 0x0
lw x3, 0x0(x4) lw x3, 0x0(x4)
bne x2, x3, fail bne x2, x3, fail
@ -143,8 +134,9 @@ test2:
test3: test3:
li TEST_ID, 3 li TEST_ID, 3
la TRAP_RA, fail la TRAP_RA, fail
la USER_RA, test4 la x2, test4
j to_user csrw mepc, x2
mret
// attempt to read/write region 2 from user mode // attempt to read/write region 2 from user mode
test4: test4:
@ -159,12 +151,14 @@ test4:
// attempt to read/write other regions from user mode // attempt to read/write other regions from user mode
test5: test5:
li TEST_ID, 5 li TEST_ID, 5
la TRAP_RA, pass
li x4, 0x80010000
li x2, 0xdeadbeef li x2, 0xdeadbeef
sw x2, 0x0(x1) sw x2, 0x0(x1)
lw x3, 0x0(x1) lw x3, 0x0(x1)
bne x2, x3, fail // should be OK bne x2, x3, fail // should be OK (read/write 0x80000000)
test6:
li TEST_ID, 6
li x4, 0x80010000
lw x3, 0x0(x4) // should be OK (read 0x80010000) lw x3, 0x0(x4) // should be OK (read 0x80010000)
la TRAP_RA, pass la TRAP_RA, pass
sw x3, 0x0(x4) // should fault (write 0x80010000) sw x3, 0x0(x4) // should fault (write 0x80010000)
@ -174,5 +168,6 @@ fail:
sw TEST_ID, 0(x2) sw TEST_ID, 0(x2)
pass: pass:
li TEST_ID, 666
li x2, 0xf00fff20 li x2, 0xf00fff20
sw x0, 0(x2) sw x0, 0(x2)

View File

@ -4054,7 +4054,7 @@ int main(int argc, char **argv, char **env) {
#endif #endif
#ifdef PMP #ifdef PMP
redo(REDO,WorkspaceRegression("pmp").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../raw/pmp/build/pmp.hex")->bootAt(0x00000000u)->run(10e3);); redo(REDO,WorkspaceRegression("pmp").loadHex(string(REGRESSION_PATH) + "../raw/pmp/build/pmp.hex")->bootAt(0x00000000u)->run(10e3););
#endif #endif
#ifdef AMO #ifdef AMO