Add PMP to golden model
This commit is contained in:
parent
d5b1a8f565
commit
872aa19d83
|
@ -15,156 +15,157 @@ Disassembly of section .crt_section:
|
||||||
80000014: 30200073 mret
|
80000014: 30200073 mret
|
||||||
|
|
||||||
80000018 <to_user>:
|
80000018 <to_user>:
|
||||||
80000018: 00014337 lui t1,0x14
|
80000018: 00014137 lui sp,0x14
|
||||||
8000001c: 30033073 csrc mstatus,t1
|
8000001c: 30013073 csrc mstatus,sp
|
||||||
80000020: 20000313 li t1,512
|
80000020: 20000113 li sp,512
|
||||||
80000024: 30032073 csrs mstatus,t1
|
80000024: 30012073 csrs mstatus,sp
|
||||||
80000028: 34109073 csrw mepc,ra
|
80000028: 341e9073 csrw mepc,t4
|
||||||
8000002c: 30200073 mret
|
8000002c: 30200073 mret
|
||||||
|
|
||||||
80000030 <test0>:
|
80000030 <test0>:
|
||||||
80000030: 00000e13 li t3,0
|
80000030: 00000e13 li t3,0
|
||||||
80000034: 00000f17 auipc t5,0x0
|
80000034: 00000f17 auipc t5,0x0
|
||||||
80000038: 1f0f0f13 addi t5,t5,496 # 80000224 <fail>
|
80000038: 1f4f0f13 addi t5,t5,500 # 80000228 <fail>
|
||||||
8000003c: 800002b7 lui t0,0x80000
|
8000003c: 800000b7 lui ra,0x80000
|
||||||
80000040: 80008e37 lui t3,0x80008
|
80000040: 80008237 lui tp,0x80008
|
||||||
80000044: deadc337 lui t1,0xdeadc
|
80000044: deadc137 lui sp,0xdeadc
|
||||||
80000048: eef30313 addi t1,t1,-273 # deadbeef <pass+0x5eadbcbf>
|
80000048: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbb>
|
||||||
8000004c: 0062a023 sw t1,0(t0) # 80000000 <pass+0xfffffdd0>
|
8000004c: 0020a023 sw sp,0(ra) # 80000000 <pass+0xfffffdcc>
|
||||||
80000050: 006e2023 sw t1,0(t3) # 80008000 <pass+0x7dd0>
|
80000050: 00222023 sw sp,0(tp) # 80008000 <pass+0x7dcc>
|
||||||
80000054: 0002a383 lw t2,0(t0)
|
80000054: 0000a183 lw gp,0(ra)
|
||||||
80000058: 1c731663 bne t1,t2,80000224 <fail>
|
80000058: 1c311863 bne sp,gp,80000228 <fail>
|
||||||
8000005c: 000e2383 lw t2,0(t3)
|
8000005c: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
|
||||||
80000060: 1c731263 bne t1,t2,80000224 <fail>
|
80000060: 1c311463 bne sp,gp,80000228 <fail>
|
||||||
80000064: 071a1f37 lui t5,0x71a1
|
80000064: 071a12b7 lui t0,0x71a1
|
||||||
80000068: 808f0f13 addi t5,t5,-2040 # 71a0808 <_start-0x78e5f7f8>
|
80000068: 80828293 addi t0,t0,-2040 # 71a0808 <_start-0x78e5f7f8>
|
||||||
8000006c: 3a0f1073 csrw pmpcfg0,t5
|
8000006c: 3a029073 csrw pmpcfg0,t0
|
||||||
80000070: 191c0f37 lui t5,0x191c0
|
80000070: 191c02b7 lui t0,0x191c0
|
||||||
80000074: 504f0f13 addi t5,t5,1284 # 191c0504 <_start-0x66e3fafc>
|
80000074: 50428293 addi t0,t0,1284 # 191c0504 <_start-0x66e3fafc>
|
||||||
80000078: 3a1f1073 csrw pmpcfg1,t5
|
80000078: 3a129073 csrw pmpcfg1,t0
|
||||||
8000007c: 01800f13 li t5,24
|
8000007c: 01800293 li t0,24
|
||||||
80000080: 3a2f1073 csrw pmpcfg2,t5
|
80000080: 3a229073 csrw pmpcfg2,t0
|
||||||
80000084: 0f1e2f37 lui t5,0xf1e2
|
80000084: 0f1e22b7 lui t0,0xf1e2
|
||||||
80000088: 900f0f13 addi t5,t5,-1792 # f1e1900 <_start-0x70e1e700>
|
80000088: 90028293 addi t0,t0,-1792 # f1e1900 <_start-0x70e1e700>
|
||||||
8000008c: 3a3f1073 csrw pmpcfg3,t5
|
8000008c: 3a329073 csrw pmpcfg3,t0
|
||||||
80000090: 20000f37 lui t5,0x20000
|
80000090: 200002b7 lui t0,0x20000
|
||||||
80000094: 3b0f1073 csrw pmpaddr0,t5
|
80000094: 3b029073 csrw pmpaddr0,t0
|
||||||
80000098: fff00f13 li t5,-1
|
80000098: fff00293 li t0,-1
|
||||||
8000009c: 3b1f1073 csrw pmpaddr1,t5
|
8000009c: 3b129073 csrw pmpaddr1,t0
|
||||||
800000a0: 20002f37 lui t5,0x20002
|
800000a0: 200022b7 lui t0,0x20002
|
||||||
800000a4: 3b2f1073 csrw pmpaddr2,t5
|
800000a4: 3b229073 csrw pmpaddr2,t0
|
||||||
800000a8: 20004f37 lui t5,0x20004
|
800000a8: 200042b7 lui t0,0x20004
|
||||||
800000ac: ffff0f13 addi t5,t5,-1 # 20003fff <_start-0x5fffc001>
|
800000ac: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
|
||||||
800000b0: 3b3f1073 csrw pmpaddr3,t5
|
800000b0: 3b329073 csrw pmpaddr3,t0
|
||||||
800000b4: 20004f37 lui t5,0x20004
|
800000b4: 200042b7 lui t0,0x20004
|
||||||
800000b8: ffff0f13 addi t5,t5,-1 # 20003fff <_start-0x5fffc001>
|
800000b8: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
|
||||||
800000bc: 3b4f1073 csrw pmpaddr4,t5
|
800000bc: 3b429073 csrw pmpaddr4,t0
|
||||||
800000c0: 20004f37 lui t5,0x20004
|
800000c0: 200042b7 lui t0,0x20004
|
||||||
800000c4: ffff0f13 addi t5,t5,-1 # 20003fff <_start-0x5fffc001>
|
800000c4: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
|
||||||
800000c8: 3b5f1073 csrw pmpaddr5,t5
|
800000c8: 3b529073 csrw pmpaddr5,t0
|
||||||
800000cc: 20002f37 lui t5,0x20002
|
800000cc: 200022b7 lui t0,0x20002
|
||||||
800000d0: ffff0f13 addi t5,t5,-1 # 20001fff <_start-0x5fffe001>
|
800000d0: fff28293 addi t0,t0,-1 # 20001fff <_start-0x5fffe001>
|
||||||
800000d4: 3b6f1073 csrw pmpaddr6,t5
|
800000d4: 3b629073 csrw pmpaddr6,t0
|
||||||
800000d8: 20004f37 lui t5,0x20004
|
800000d8: 200042b7 lui t0,0x20004
|
||||||
800000dc: ffff0f13 addi t5,t5,-1 # 20003fff <_start-0x5fffc001>
|
800000dc: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
|
||||||
800000e0: 3b7f1073 csrw pmpaddr7,t5
|
800000e0: 3b729073 csrw pmpaddr7,t0
|
||||||
800000e4: 20004f37 lui t5,0x20004
|
800000e4: 200042b7 lui t0,0x20004
|
||||||
800000e8: ffff0f13 addi t5,t5,-1 # 20003fff <_start-0x5fffc001>
|
800000e8: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
|
||||||
800000ec: 3b8f1073 csrw pmpaddr8,t5
|
800000ec: 3b829073 csrw pmpaddr8,t0
|
||||||
800000f0: 00000f13 li t5,0
|
800000f0: 00000293 li t0,0
|
||||||
800000f4: 3b9f1073 csrw pmpaddr9,t5
|
800000f4: 3b929073 csrw pmpaddr9,t0
|
||||||
800000f8: 00000f13 li t5,0
|
800000f8: 00000293 li t0,0
|
||||||
800000fc: 3baf1073 csrw pmpaddr10,t5
|
800000fc: 3ba29073 csrw pmpaddr10,t0
|
||||||
80000100: 00000f13 li t5,0
|
80000100: 00000293 li t0,0
|
||||||
80000104: 3bbf1073 csrw pmpaddr11,t5
|
80000104: 3bb29073 csrw pmpaddr11,t0
|
||||||
80000108: 00000f13 li t5,0
|
80000108: 00000293 li t0,0
|
||||||
8000010c: 3bcf1073 csrw pmpaddr12,t5
|
8000010c: 3bc29073 csrw pmpaddr12,t0
|
||||||
80000110: 00000f13 li t5,0
|
80000110: 00000293 li t0,0
|
||||||
80000114: 3bdf1073 csrw pmpaddr13,t5
|
80000114: 3bd29073 csrw pmpaddr13,t0
|
||||||
80000118: 00000f13 li t5,0
|
80000118: 00000293 li t0,0
|
||||||
8000011c: 3bef1073 csrw pmpaddr14,t5
|
8000011c: 3be29073 csrw pmpaddr14,t0
|
||||||
80000120: 00000f13 li t5,0
|
80000120: 00000293 li t0,0
|
||||||
80000124: 3bff1073 csrw pmpaddr15,t5
|
80000124: 3bf29073 csrw pmpaddr15,t0
|
||||||
80000128: 00c10337 lui t1,0xc10
|
80000128: 00c10137 lui sp,0xc10
|
||||||
8000012c: fee30313 addi t1,t1,-18 # c0ffee <_start-0x7f3f0012>
|
8000012c: fee10113 addi sp,sp,-18 # c0ffee <_start-0x7f3f0012>
|
||||||
80000130: 0062a023 sw t1,0(t0)
|
80000130: 0020a023 sw sp,0(ra)
|
||||||
80000134: 006e2023 sw t1,0(t3)
|
80000134: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
|
||||||
80000138: 0002a383 lw t2,0(t0)
|
80000138: 0000a183 lw gp,0(ra)
|
||||||
8000013c: 0e731463 bne t1,t2,80000224 <fail>
|
8000013c: 0e311663 bne sp,gp,80000228 <fail>
|
||||||
80000140: 000e2383 lw t2,0(t3)
|
80000140: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
|
||||||
80000144: 0e731063 bne t1,t2,80000224 <fail>
|
80000144: 0e311263 bne sp,gp,80000228 <fail>
|
||||||
|
80000148: 06c0006f j 800001b4 <test3>
|
||||||
|
|
||||||
80000148 <test1>:
|
8000014c <test1>:
|
||||||
80000148: 00100e13 li t3,1
|
8000014c: 00100e13 li t3,1
|
||||||
8000014c: 00000f17 auipc t5,0x0
|
80000150: 00000f17 auipc t5,0x0
|
||||||
80000150: 0d8f0f13 addi t5,t5,216 # 80000224 <fail>
|
80000154: 0d8f0f13 addi t5,t5,216 # 80000228 <fail>
|
||||||
80000154: 079a1f37 lui t5,0x79a1
|
80000158: 079a12b7 lui t0,0x79a1
|
||||||
80000158: 808f0f13 addi t5,t5,-2040 # 79a0808 <_start-0x7865f7f8>
|
8000015c: 80828293 addi t0,t0,-2040 # 79a0808 <_start-0x7865f7f8>
|
||||||
8000015c: 3a0f1073 csrw pmpcfg0,t5
|
80000160: 3a029073 csrw pmpcfg0,t0
|
||||||
80000160: deadc337 lui t1,0xdeadc
|
80000164: deadc137 lui sp,0xdeadc
|
||||||
80000164: eef30313 addi t1,t1,-273 # deadbeef <pass+0x5eadbcbf>
|
80000168: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbb>
|
||||||
80000168: 006e2023 sw t1,0(t3)
|
8000016c: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
|
||||||
8000016c: 00000f17 auipc t5,0x0
|
80000170: 00000f17 auipc t5,0x0
|
||||||
80000170: 010f0f13 addi t5,t5,16 # 8000017c <test2>
|
80000174: 010f0f13 addi t5,t5,16 # 80000180 <test2>
|
||||||
80000174: 000e2383 lw t2,0(t3)
|
80000178: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
|
||||||
80000178: 0ac0006f j 80000224 <fail>
|
8000017c: 0ac0006f j 80000228 <fail>
|
||||||
|
|
||||||
8000017c <test2>:
|
80000180 <test2>:
|
||||||
8000017c: 00200e13 li t3,2
|
80000180: 00200e13 li t3,2
|
||||||
80000180: 00000f17 auipc t5,0x0
|
80000184: 00000f17 auipc t5,0x0
|
||||||
80000184: 0a4f0f13 addi t5,t5,164 # 80000224 <fail>
|
80000188: 0a4f0f13 addi t5,t5,164 # 80000228 <fail>
|
||||||
80000188: 071a1f37 lui t5,0x71a1
|
8000018c: 071a12b7 lui t0,0x71a1
|
||||||
8000018c: 808f0f13 addi t5,t5,-2040 # 71a0808 <_start-0x78e5f7f8>
|
80000190: 80828293 addi t0,t0,-2040 # 71a0808 <_start-0x78e5f7f8>
|
||||||
80000190: 3a0f1073 csrw pmpcfg0,t5
|
80000194: 3a029073 csrw pmpcfg0,t0
|
||||||
80000194: deadc337 lui t1,0xdeadc
|
80000198: deadc137 lui sp,0xdeadc
|
||||||
80000198: eef30313 addi t1,t1,-273 # deadbeef <pass+0x5eadbcbf>
|
8000019c: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbb>
|
||||||
8000019c: 006e2023 sw t1,0(t3)
|
800001a0: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
|
||||||
800001a0: 00000f17 auipc t5,0x0
|
800001a4: 00000f17 auipc t5,0x0
|
||||||
800001a4: 010f0f13 addi t5,t5,16 # 800001b0 <test3>
|
800001a8: 010f0f13 addi t5,t5,16 # 800001b4 <test3>
|
||||||
800001a8: 000e2383 lw t2,0(t3)
|
800001ac: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
|
||||||
800001ac: 0780006f j 80000224 <fail>
|
800001b0: 0780006f j 80000228 <fail>
|
||||||
|
|
||||||
800001b0 <test3>:
|
800001b4 <test3>:
|
||||||
800001b0: 00300e13 li t3,3
|
800001b4: 00300e13 li t3,3
|
||||||
800001b4: 00000f17 auipc t5,0x0
|
800001b8: 00000f17 auipc t5,0x0
|
||||||
800001b8: 070f0f13 addi t5,t5,112 # 80000224 <fail>
|
800001bc: 070f0f13 addi t5,t5,112 # 80000228 <fail>
|
||||||
800001bc: 00000097 auipc ra,0x0
|
800001c0: 00000e97 auipc t4,0x0
|
||||||
800001c0: 00c08093 addi ra,ra,12 # 800001c8 <test4>
|
800001c4: 00ce8e93 addi t4,t4,12 # 800001cc <test4>
|
||||||
800001c4: e55ff06f j 80000018 <to_user>
|
800001c8: e51ff06f j 80000018 <to_user>
|
||||||
|
|
||||||
800001c8 <test4>:
|
800001cc <test4>:
|
||||||
800001c8: 00400e13 li t3,4
|
800001cc: 00400e13 li t3,4
|
||||||
800001cc: 00000f17 auipc t5,0x0
|
800001d0: 00000f17 auipc t5,0x0
|
||||||
800001d0: 058f0f13 addi t5,t5,88 # 80000224 <fail>
|
800001d4: 058f0f13 addi t5,t5,88 # 80000228 <fail>
|
||||||
800001d4: deadc337 lui t1,0xdeadc
|
800001d8: deadc137 lui sp,0xdeadc
|
||||||
800001d8: eef30313 addi t1,t1,-273 # deadbeef <pass+0x5eadbcbf>
|
800001dc: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbb>
|
||||||
800001dc: 006e2023 sw t1,0(t3)
|
800001e0: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
|
||||||
800001e0: 00000f17 auipc t5,0x0
|
800001e4: 00000f17 auipc t5,0x0
|
||||||
800001e4: 010f0f13 addi t5,t5,16 # 800001f0 <test5>
|
800001e8: 010f0f13 addi t5,t5,16 # 800001f4 <test5>
|
||||||
800001e8: 000e2383 lw t2,0(t3)
|
800001ec: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
|
||||||
800001ec: 0380006f j 80000224 <fail>
|
800001f0: 0380006f j 80000228 <fail>
|
||||||
|
|
||||||
800001f0 <test5>:
|
800001f4 <test5>:
|
||||||
800001f0: 00500e13 li t3,5
|
800001f4: 00500e13 li t3,5
|
||||||
800001f4: 00000f17 auipc t5,0x0
|
800001f8: 00000f17 auipc t5,0x0
|
||||||
800001f8: 03cf0f13 addi t5,t5,60 # 80000230 <pass>
|
800001fc: 03cf0f13 addi t5,t5,60 # 80000234 <pass>
|
||||||
800001fc: 80010e37 lui t3,0x80010
|
80000200: 80010237 lui tp,0x80010
|
||||||
80000200: deadc337 lui t1,0xdeadc
|
80000204: deadc137 lui sp,0xdeadc
|
||||||
80000204: eef30313 addi t1,t1,-273 # deadbeef <pass+0x5eadbcbf>
|
80000208: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbcbb>
|
||||||
80000208: 0062a023 sw t1,0(t0)
|
8000020c: 0020a023 sw sp,0(ra)
|
||||||
8000020c: 0002a383 lw t2,0(t0)
|
80000210: 0000a183 lw gp,0(ra)
|
||||||
80000210: 00731a63 bne t1,t2,80000224 <fail>
|
80000214: 00311a63 bne sp,gp,80000228 <fail>
|
||||||
80000214: 000e2383 lw t2,0(t3) # 80010000 <pass+0xfdd0>
|
80000218: 00022183 lw gp,0(tp) # 80010000 <pass+0xfdcc>
|
||||||
80000218: 00000f17 auipc t5,0x0
|
8000021c: 00000f17 auipc t5,0x0
|
||||||
8000021c: 018f0f13 addi t5,t5,24 # 80000230 <pass>
|
80000220: 018f0f13 addi t5,t5,24 # 80000234 <pass>
|
||||||
80000220: 007e2023 sw t2,0(t3)
|
80000224: 00322023 sw gp,0(tp) # 0 <_start-0x80000000>
|
||||||
|
|
||||||
80000224 <fail>:
|
80000228 <fail>:
|
||||||
80000224: f0100137 lui sp,0xf0100
|
80000228: f0100137 lui sp,0xf0100
|
||||||
80000228: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffcf4>
|
8000022c: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffcf0>
|
||||||
8000022c: 01c12023 sw t3,0(sp)
|
80000230: 01c12023 sw t3,0(sp)
|
||||||
|
|
||||||
80000230 <pass>:
|
80000234 <pass>:
|
||||||
80000230: f0100137 lui sp,0xf0100
|
80000234: f0100137 lui sp,0xf0100
|
||||||
80000234: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffcf0>
|
80000238: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffcec>
|
||||||
80000238: 00012023 sw zero,0(sp)
|
8000023c: 00012023 sw zero,0(sp)
|
||||||
|
|
Binary file not shown.
|
@ -1,39 +1,39 @@
|
||||||
:0200000480007A
|
:0200000480007A
|
||||||
:100000009700000093800001739050306F00400211
|
:100000009700000093800001739050306F00400211
|
||||||
:1000100073101F34730020303743010073300330F6
|
:1000100073101F34730020303741010073300130FA
|
||||||
:1000200013030020732003307390103473002030CA
|
:10002000130100207320013073901E3473002030C0
|
||||||
:10003000130E0000170F0000130F0F1FB7020080F0
|
:10003000130E0000170F0000130F4F1FB7000080B2
|
||||||
:10004000378E008037C3ADDE1303F3EE23A06200CA
|
:100040003782008037C1ADDE1301F1EE23A020001E
|
||||||
:1000500023206E0083A302006316731C83230E000B
|
:100050002320220083A100006318311C83210200A9
|
||||||
:100060006312731C371F1A07130F8F8073100F3A18
|
:100060006314311CB7121A07938282807390023A8C
|
||||||
:10007000370F1C19130F4F5073101F3A130F8001C5
|
:10007000B7021C19938242507390123A9302800186
|
||||||
:1000800073102F3A372F1E0F130F0F9073103F3A34
|
:100080007390223AB7221E0F938202907390323AF5
|
||||||
:10009000370F002073100F3B130FF0FF73101F3B3F
|
:10009000B70200207390023B9302F0FF7390123B73
|
||||||
:1000A000372F002073102F3B374F0020130FFFFF17
|
:1000A000B72200207390223BB74200209382F2FFD8
|
||||||
:1000B00073103F3B374F0020130FFFFF73104F3B70
|
:1000B0007390323BB74200209382F2FF7390423B31
|
||||||
:1000C000374F0020130FFFFF73105F3B372F0020C7
|
:1000C000B74200209382F2FF7390523BB722002088
|
||||||
:1000D000130FFFFF73106F3B374F0020130FFFFF0D
|
:1000D0009382F2FF7390623BB74200209382F2FF5B
|
||||||
:1000E00073107F3B374F0020130FFFFF73108F3BC0
|
:1000E0007390723BB74200209382F2FF7390823B81
|
||||||
:1000F000130F000073109F3B130F00007310AF3BF2
|
:1000F000930200007390923B930200007390A23B26
|
||||||
:10010000130F00007310BF3B130F00007310CF3BA1
|
:10010000930200007390B23B930200007390C23BD5
|
||||||
:10011000130F00007310DF3B130F00007310EF3B51
|
:10011000930200007390D23B930200007390E23B85
|
||||||
:10012000130F00007310FF3B3703C1001303E3FEFE
|
:10012000930200007390F23B3701C1001301E1FE1E
|
||||||
:1001300023A0620023206E0083A302006314730EC9
|
:1001300023A020002320220083A100006316310E9B
|
||||||
:1001400083230E006310730E130E1000170F0000B0
|
:10014000832102006312310E6F00C006130E1000EF
|
||||||
:10015000130F8F0D371F9A07130F8F8073100F3AED
|
:10015000170F0000130F8F0DB7129A07938282803A
|
||||||
:1001600037C3ADDE1303F3EE23206E00170F00003C
|
:100160007390023A37C1ADDE1301F1EE2320220075
|
||||||
:10017000130F0F0183230E006F00C00A130E20001F
|
:10017000170F0000130F0F01832102006F00C00A48
|
||||||
:10018000170F0000130F4F0A371F1A07130F8F8026
|
:10018000130E2000170F0000130F4F0AB7121A07A3
|
||||||
:1001900073100F3A37C3ADDE1303F3EE23206E0066
|
:10019000938282807390023A37C1ADDE1301F1EE93
|
||||||
:1001A000170F0000130F0F0183230E006F0080074D
|
:1001A00023202200170F0000130F0F0183210200EC
|
||||||
:1001B000130E3000170F0000130F0F0797000000F9
|
:1001B0006F008007130E3000170F0000130F0F079A
|
||||||
:1001C0009380C0006FF05FE5130E4000170F000032
|
:1001C000970E0000938ECE006FF01FE5130E4000D7
|
||||||
:1001D000130F8F0537C3ADDE1303F3EE23206E003C
|
:1001D000170F0000130F8F0537C1ADDE1301F1EECD
|
||||||
:1001E000170F0000130F0F0183230E006F00800311
|
:1001E00023202200170F0000130F0F0183210200AC
|
||||||
:1001F000130E5000170F0000130FCF03370E0180AE
|
:1001F0006F008003130E5000170F0000130FCF0382
|
||||||
:1002000037C3ADDE1303F3EE23A0620083A3020025
|
:100200003702018037C1ADDE1301F1EE23A02000DB
|
||||||
:10021000631A730083230E00170F0000130F8F0162
|
:1002100083A10000631A310083210200170F000040
|
||||||
:1002200023207E00370110F0130141F22320C10189
|
:10022000130F8F0123203200370110F0130141F228
|
||||||
:0C023000370110F0130101F2232001003F
|
:100230002320C101370110F0130101F22320010036
|
||||||
:040000058000000077
|
:040000058000000077
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|
|
@ -15,20 +15,20 @@ 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 0x240
|
||||||
0x0000000080000000 . = ALIGN (0x4)
|
0x0000000080000000 . = ALIGN (0x4)
|
||||||
*crt.o(.text)
|
*crt.o(.text)
|
||||||
.text 0x0000000080000000 0x23c build/src/crt.o
|
.text 0x0000000080000000 0x240 build/src/crt.o
|
||||||
0x0000000080000000 _start
|
0x0000000080000000 _start
|
||||||
0x0000000080000010 trap
|
0x0000000080000010 trap
|
||||||
0x0000000080000018 to_user
|
0x0000000080000018 to_user
|
||||||
OUTPUT(build/pmp.elf elf32-littleriscv)
|
OUTPUT(build/pmp.elf elf32-littleriscv)
|
||||||
|
|
||||||
.data 0x000000008000023c 0x0
|
.data 0x0000000080000240 0x0
|
||||||
.data 0x000000008000023c 0x0 build/src/crt.o
|
.data 0x0000000080000240 0x0 build/src/crt.o
|
||||||
|
|
||||||
.bss 0x000000008000023c 0x0
|
.bss 0x0000000080000240 0x0
|
||||||
.bss 0x000000008000023c 0x0 build/src/crt.o
|
.bss 0x0000000080000240 0x0 build/src/crt.o
|
||||||
|
|
||||||
.riscv.attributes
|
.riscv.attributes
|
||||||
0x0000000000000000 0x1e
|
0x0000000000000000 0x1e
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#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 0x071a0808
|
||||||
|
@ -43,11 +44,11 @@ trap:
|
||||||
|
|
||||||
.global to_user
|
.global to_user
|
||||||
to_user:
|
to_user:
|
||||||
li t1, 0x14000
|
li x2, 0x14000
|
||||||
csrc mstatus, t1
|
csrc mstatus, x2
|
||||||
li t1, 0x200
|
li x2, 0x200
|
||||||
csrs mstatus, t1
|
csrs mstatus, x2
|
||||||
csrw mepc, ra
|
csrw mepc, USER_RA
|
||||||
mret
|
mret
|
||||||
|
|
||||||
// configure PMP, attempt read/write from machine mode
|
// configure PMP, attempt read/write from machine mode
|
||||||
|
@ -55,118 +56,118 @@ test0:
|
||||||
li TEST_ID, 0
|
li TEST_ID, 0
|
||||||
la TRAP_RA, fail
|
la TRAP_RA, fail
|
||||||
|
|
||||||
li t0, 0x80000000
|
li x1, 0x80000000
|
||||||
li t3, 0x80008000
|
li x4, 0x80008000
|
||||||
li t1, 0xdeadbeef
|
li x2, 0xdeadbeef
|
||||||
sw t1, 0x0(t0)
|
sw x2, 0x0(x1)
|
||||||
sw t1, 0x0(t3)
|
sw x2, 0x0(x4)
|
||||||
lw t2, 0x0(t0)
|
lw x3, 0x0(x1)
|
||||||
bne t1, t2, fail
|
bne x2, x3, fail
|
||||||
lw t2, 0x0(t3)
|
lw x3, 0x0(x4)
|
||||||
bne t1, t2, fail
|
bne x2, x3, fail
|
||||||
|
|
||||||
li t5, PMPCFG0
|
li x5, PMPCFG0
|
||||||
csrw pmpcfg0, t5
|
csrw pmpcfg0, x5
|
||||||
li t5, PMPCFG1
|
li x5, PMPCFG1
|
||||||
csrw pmpcfg1, t5
|
csrw pmpcfg1, x5
|
||||||
li t5, PMPCFG2
|
li x5, PMPCFG2
|
||||||
csrw pmpcfg2, t5
|
csrw pmpcfg2, x5
|
||||||
li t5, PMPCFG3
|
li x5, PMPCFG3
|
||||||
csrw pmpcfg3, t5
|
csrw pmpcfg3, x5
|
||||||
li t5, PMPADDR0
|
li x5, PMPADDR0
|
||||||
csrw pmpaddr0, t5
|
csrw pmpaddr0, x5
|
||||||
li t5, PMPADDR1
|
li x5, PMPADDR1
|
||||||
csrw pmpaddr1, t5
|
csrw pmpaddr1, x5
|
||||||
li t5, PMPADDR2
|
li x5, PMPADDR2
|
||||||
csrw pmpaddr2, t5
|
csrw pmpaddr2, x5
|
||||||
li t5, PMPADDR3
|
li x5, PMPADDR3
|
||||||
csrw pmpaddr3, t5
|
csrw pmpaddr3, x5
|
||||||
li t5, PMPADDR4
|
li x5, PMPADDR4
|
||||||
csrw pmpaddr4, t5
|
csrw pmpaddr4, x5
|
||||||
li t5, PMPADDR5
|
li x5, PMPADDR5
|
||||||
csrw pmpaddr5, t5
|
csrw pmpaddr5, x5
|
||||||
li t5, PMPADDR6
|
li x5, PMPADDR6
|
||||||
csrw pmpaddr6, t5
|
csrw pmpaddr6, x5
|
||||||
li t5, PMPADDR7
|
li x5, PMPADDR7
|
||||||
csrw pmpaddr7, t5
|
csrw pmpaddr7, x5
|
||||||
li t5, PMPADDR8
|
li x5, PMPADDR8
|
||||||
csrw pmpaddr8, t5
|
csrw pmpaddr8, x5
|
||||||
li t5, PMPADDR9
|
li x5, PMPADDR9
|
||||||
csrw pmpaddr9, t5
|
csrw pmpaddr9, x5
|
||||||
li t5, PMPADDR10
|
li x5, PMPADDR10
|
||||||
csrw pmpaddr10, t5
|
csrw pmpaddr10, x5
|
||||||
li t5, PMPADDR11
|
li x5, PMPADDR11
|
||||||
csrw pmpaddr11, t5
|
csrw pmpaddr11, x5
|
||||||
li t5, PMPADDR12
|
li x5, PMPADDR12
|
||||||
csrw pmpaddr12, t5
|
csrw pmpaddr12, x5
|
||||||
li t5, PMPADDR13
|
li x5, PMPADDR13
|
||||||
csrw pmpaddr13, t5
|
csrw pmpaddr13, x5
|
||||||
li t5, PMPADDR14
|
li x5, PMPADDR14
|
||||||
csrw pmpaddr14, t5
|
csrw pmpaddr14, x5
|
||||||
li t5, PMPADDR15
|
li x5, PMPADDR15
|
||||||
csrw pmpaddr15, t5
|
csrw pmpaddr15, x5
|
||||||
|
|
||||||
li t1, 0x00c0ffee
|
li x2, 0x00c0ffee
|
||||||
sw t1, 0x0(t0)
|
sw x2, 0x0(x1)
|
||||||
sw t1, 0x0(t3)
|
sw x2, 0x0(x4)
|
||||||
lw t2, 0x0(t0)
|
lw x3, 0x0(x1)
|
||||||
bne t1, t2, fail
|
bne x2, x3, fail
|
||||||
lw t2, 0x0(t3)
|
lw x3, 0x0(x4)
|
||||||
bne t1, t2, fail
|
bne x2, x3, fail
|
||||||
|
|
||||||
// lock region 2, attempt read/write from machine mode
|
// lock region 2, attempt read/write from machine mode
|
||||||
test1:
|
test1:
|
||||||
li TEST_ID, 1
|
li TEST_ID, 1
|
||||||
la TRAP_RA, fail
|
la TRAP_RA, fail
|
||||||
li t5, PMPCFG0_
|
li x5, PMPCFG0_
|
||||||
csrw pmpcfg0, t5 // lock region 2
|
csrw pmpcfg0, x5 // lock region 2
|
||||||
li t1, 0xdeadbeef
|
li x2, 0xdeadbeef
|
||||||
sw t1, 0x0(t3) // should be OK (write 0x80008000)
|
sw x2, 0x0(x4) // should be OK (write 0x80008000)
|
||||||
la TRAP_RA, test2
|
la TRAP_RA, test2
|
||||||
lw t2, 0x0(t3) // should fault (read 0x80008000)
|
lw x3, 0x0(x4) // should fault (read 0x80008000)
|
||||||
j fail
|
j fail
|
||||||
|
|
||||||
// "unlock" region 2, attempt read/write from machine mode
|
// "unlock" region 2, attempt read/write from machine mode
|
||||||
test2:
|
test2:
|
||||||
li TEST_ID, 2
|
li TEST_ID, 2
|
||||||
la TRAP_RA, fail
|
la TRAP_RA, fail
|
||||||
li t5, PMPCFG0
|
li x5, PMPCFG0
|
||||||
csrw pmpcfg0, t5 // "unlock" region 2
|
csrw pmpcfg0, x5 // "unlock" region 2
|
||||||
li t1, 0xdeadbeef
|
li x2, 0xdeadbeef
|
||||||
sw t1, 0x0(t3) // should still be OK (write 0x80008000)
|
sw x2, 0x0(x4) // should still be OK (write 0x80008000)
|
||||||
la TRAP_RA, test3
|
la TRAP_RA, test3
|
||||||
lw t2, 0x0(t3) // should still fault (read 0x80008000)
|
lw x3, 0x0(x4) // should still fault (read 0x80008000)
|
||||||
j fail
|
j fail
|
||||||
|
|
||||||
// jump into user mode
|
// jump into user mode
|
||||||
test3:
|
test3:
|
||||||
li TEST_ID, 3
|
li TEST_ID, 3
|
||||||
la TRAP_RA, fail
|
la TRAP_RA, fail
|
||||||
la ra, test4
|
la USER_RA, test4
|
||||||
j to_user
|
j to_user
|
||||||
|
|
||||||
// attempt to read/write region 2 from user mode
|
// attempt to read/write region 2 from user mode
|
||||||
test4:
|
test4:
|
||||||
li TEST_ID, 4
|
li TEST_ID, 4
|
||||||
la TRAP_RA, fail
|
la TRAP_RA, fail
|
||||||
li t1, 0xdeadbeef
|
li x2, 0xdeadbeef
|
||||||
sw t1, 0x0(t3) // should be OK (write 0x80008000)
|
sw x2, 0x0(x4) // should be OK (write 0x80008000)
|
||||||
la TRAP_RA, test5
|
la TRAP_RA, test5
|
||||||
lw t2, 0x0(t3) // should fault (read 0x80008000)
|
lw x3, 0x0(x4) // should fault (read 0x80008000)
|
||||||
j fail
|
j fail
|
||||||
|
|
||||||
// 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
|
la TRAP_RA, pass
|
||||||
li t3, 0x80010000
|
li x4, 0x80010000
|
||||||
li t1, 0xdeadbeef
|
li x2, 0xdeadbeef
|
||||||
sw t1, 0x0(t0)
|
sw x2, 0x0(x1)
|
||||||
lw t2, 0x0(t0)
|
lw x3, 0x0(x1)
|
||||||
bne t1, t2, fail // should be OK
|
bne x2, x3, fail // should be OK
|
||||||
lw t2, 0x0(t3) // should be OK (read 0x80010000)
|
lw x3, 0x0(x4) // should be OK (read 0x80010000)
|
||||||
la TRAP_RA, pass
|
la TRAP_RA, pass
|
||||||
sw t2, 0x0(t3) // should fault (write 0x80010000)
|
sw x3, 0x0(x4) // should fault (write 0x80010000)
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
li x2, 0xf00fff24
|
li x2, 0xf00fff24
|
||||||
|
|
|
@ -211,6 +211,26 @@ class success : public std::exception { };
|
||||||
#define MCYCLEH 0xB80 // MRW Upper 32 bits of mcycle, RV32I only.
|
#define MCYCLEH 0xB80 // MRW Upper 32 bits of mcycle, RV32I only.
|
||||||
#define MINSTRETH 0xB82 // MRW Upper 32 bits of minstret, RV32I only.
|
#define MINSTRETH 0xB82 // MRW Upper 32 bits of minstret, RV32I only.
|
||||||
|
|
||||||
|
#define PMPCFG0 0x3a0
|
||||||
|
#define PMPCFG1 0x3a1
|
||||||
|
#define PMPCFG2 0x3a2
|
||||||
|
#define PMPCFG3 0x3a3
|
||||||
|
#define PMPADDR0 0x3b0
|
||||||
|
#define PMPADDR1 0x3b1
|
||||||
|
#define PMPADDR2 0x3b2
|
||||||
|
#define PMPADDR3 0x3b3
|
||||||
|
#define PMPADDR4 0x3b4
|
||||||
|
#define PMPADDR5 0x3b5
|
||||||
|
#define PMPADDR6 0x3b6
|
||||||
|
#define PMPADDR7 0x3b7
|
||||||
|
#define PMPADDR8 0x3b8
|
||||||
|
#define PMPADDR9 0x3b9
|
||||||
|
#define PMPADDR10 0x3ba
|
||||||
|
#define PMPADDR11 0x3bb
|
||||||
|
#define PMPADDR12 0x3bc
|
||||||
|
#define PMPADDR13 0x3bd
|
||||||
|
#define PMPADDR14 0x3be
|
||||||
|
#define PMPADDR15 0x3bf
|
||||||
|
|
||||||
#define SSTATUS 0x100
|
#define SSTATUS 0x100
|
||||||
#define SIE 0x104
|
#define SIE 0x104
|
||||||
|
@ -374,9 +394,25 @@ public:
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
bool lrscReserved;
|
bool lrscReserved;
|
||||||
|
|
||||||
|
struct pmpcfg_s {
|
||||||
|
uint32_t r : 1;
|
||||||
|
uint32_t w : 1;
|
||||||
|
uint32_t x : 1;
|
||||||
|
uint32_t a : 2;
|
||||||
|
uint32_t _dummy : 2;
|
||||||
|
uint32_t l : 1;
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
union pmpcfg_u {
|
||||||
|
uint32_t raw;
|
||||||
|
pmpcfg_s reg[4];
|
||||||
|
};
|
||||||
|
|
||||||
|
pmpcfg_u pmpcfg[4];
|
||||||
|
uint32_t pmpaddr[16];
|
||||||
|
|
||||||
RiscvGolden() {
|
RiscvGolden() {
|
||||||
pc = 0x80000000;
|
pc = 0x80000000;
|
||||||
regs[0] = 0;
|
regs[0] = 0;
|
||||||
|
@ -401,6 +437,10 @@ public:
|
||||||
ipInput = 0;
|
ipInput = 0;
|
||||||
stepCounter = 0;
|
stepCounter = 0;
|
||||||
lrscReserved = false;
|
lrscReserved = false;
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
pmpcfg[i].raw = 0;
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
pmpaddr[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void rfWrite(int32_t address, int32_t data) {
|
virtual void rfWrite(int32_t address, int32_t data) {
|
||||||
|
@ -425,7 +465,54 @@ public:
|
||||||
|
|
||||||
enum AccessKind {READ,WRITE,EXECUTE,READ_WRITE};
|
enum AccessKind {READ,WRITE,EXECUTE,READ_WRITE};
|
||||||
virtual bool isMmuRegion(uint32_t v) = 0;
|
virtual bool isMmuRegion(uint32_t v) = 0;
|
||||||
|
|
||||||
|
bool pmpCheck(uint32_t p, AccessKind kind) {
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
if (privilege != 3 || pmpcfg[i].reg[3-j].l) {
|
||||||
|
uint32_t start, end;
|
||||||
|
bool valid = false;
|
||||||
|
|
||||||
|
switch (pmpcfg[i].reg[3-j].a) {
|
||||||
|
case 0: // OFF
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // TOR
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: // NA4
|
||||||
|
valid = true;
|
||||||
|
start = pmpaddr[i*4+j] << 2;
|
||||||
|
end = start + 4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // NAPOT
|
||||||
|
valid = true;
|
||||||
|
uint32_t mask = pmpaddr[i*4+j] & ~(pmpaddr[i*4+j] + 1);
|
||||||
|
start = (pmpaddr[i*4+j] & ~mask) << 2;
|
||||||
|
end = start + ((mask + 1) << 3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (valid && start <= p && end > p) {
|
||||||
|
if (kind == READ) return (bool)(!pmpcfg[i].reg[3-j].r);
|
||||||
|
if (kind == WRITE) return (bool)(!pmpcfg[i].reg[3-j].w);
|
||||||
|
if (kind == EXECUTE) return (bool)(!pmpcfg[i].reg[3-j].x);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool v2p(uint32_t v, uint32_t *p, AccessKind kind) {
|
bool v2p(uint32_t v, uint32_t *p, AccessKind kind) {
|
||||||
|
#ifdef PMP
|
||||||
|
*p = v;
|
||||||
|
return pmpCheck(v, kind);
|
||||||
|
#else
|
||||||
uint32_t effectivePrivilege = status.mprv && kind != EXECUTE ? status.mpp : privilege;
|
uint32_t effectivePrivilege = status.mprv && kind != EXECUTE ? status.mpp : privilege;
|
||||||
if(effectivePrivilege == 3 || satp.mode == 0 || !isMmuRegion(v)){
|
if(effectivePrivilege == 3 || satp.mode == 0 || !isMmuRegion(v)){
|
||||||
*p = v;
|
*p = v;
|
||||||
|
@ -449,6 +536,7 @@ public:
|
||||||
*p = (tlb.ppn1 << 22) | (superPage ? v & 0x3FF000 : tlb.ppn0 << 12) | (v & 0xFFF);
|
*p = (tlb.ppn1 << 22) | (superPage ? v & 0x3FF000 : tlb.ppn0 << 12) | (v & 0xFFF);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void trap(bool interrupt,int32_t cause) {
|
void trap(bool interrupt,int32_t cause) {
|
||||||
|
@ -550,6 +638,28 @@ public:
|
||||||
case SEPC: *value = sepc; break;
|
case SEPC: *value = sepc; break;
|
||||||
case SSCRATCH: *value = sscratch; break;
|
case SSCRATCH: *value = sscratch; break;
|
||||||
case SATP: *value = satp.raw; break;
|
case SATP: *value = satp.raw; break;
|
||||||
|
|
||||||
|
case PMPCFG0: *value = pmpcfg[0].raw; break;
|
||||||
|
case PMPCFG1: *value = pmpcfg[1].raw; break;
|
||||||
|
case PMPCFG2: *value = pmpcfg[2].raw; break;
|
||||||
|
case PMPCFG3: *value = pmpcfg[3].raw; break;
|
||||||
|
case PMPADDR0: *value = pmpaddr[0]; break;
|
||||||
|
case PMPADDR1: *value = pmpaddr[1]; break;
|
||||||
|
case PMPADDR2: *value = pmpaddr[2]; break;
|
||||||
|
case PMPADDR3: *value = pmpaddr[3]; break;
|
||||||
|
case PMPADDR4: *value = pmpaddr[4]; break;
|
||||||
|
case PMPADDR5: *value = pmpaddr[5]; break;
|
||||||
|
case PMPADDR6: *value = pmpaddr[6]; break;
|
||||||
|
case PMPADDR7: *value = pmpaddr[7]; break;
|
||||||
|
case PMPADDR8: *value = pmpaddr[8]; break;
|
||||||
|
case PMPADDR9: *value = pmpaddr[9]; break;
|
||||||
|
case PMPADDR10: *value = pmpaddr[10]; break;
|
||||||
|
case PMPADDR11: *value = pmpaddr[11]; break;
|
||||||
|
case PMPADDR12: *value = pmpaddr[12]; break;
|
||||||
|
case PMPADDR13: *value = pmpaddr[13]; break;
|
||||||
|
case PMPADDR14: *value = pmpaddr[14]; break;
|
||||||
|
case PMPADDR15: *value = pmpaddr[15]; break;
|
||||||
|
|
||||||
default: return true; break;
|
default: return true; break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -591,6 +701,48 @@ public:
|
||||||
case SSCRATCH: sscratch = value; break;
|
case SSCRATCH: sscratch = value; break;
|
||||||
case SATP: satp.raw = value; break;
|
case SATP: satp.raw = value; break;
|
||||||
|
|
||||||
|
case PMPCFG0:
|
||||||
|
if (!pmpcfg[0].reg[3].l) maskedWrite(pmpcfg[0].raw, value, 0xff);
|
||||||
|
if (!pmpcfg[0].reg[2].l) maskedWrite(pmpcfg[0].raw, value, 0xff00);
|
||||||
|
if (!pmpcfg[0].reg[1].l) maskedWrite(pmpcfg[0].raw, value, 0xff0000);
|
||||||
|
if (!pmpcfg[0].reg[0].l) maskedWrite(pmpcfg[0].raw, value, 0xff000000);
|
||||||
|
break;
|
||||||
|
case PMPCFG1:
|
||||||
|
if (!pmpcfg[1].reg[3].l) maskedWrite(pmpcfg[1].raw, value, 0xff);
|
||||||
|
if (!pmpcfg[1].reg[2].l) maskedWrite(pmpcfg[1].raw, value, 0xff00);
|
||||||
|
if (!pmpcfg[1].reg[1].l) maskedWrite(pmpcfg[1].raw, value, 0xff0000);
|
||||||
|
if (!pmpcfg[1].reg[0].l) maskedWrite(pmpcfg[1].raw, value, 0xff000000);
|
||||||
|
break;
|
||||||
|
case PMPCFG2:
|
||||||
|
if (!pmpcfg[2].reg[3].l) maskedWrite(pmpcfg[2].raw, value, 0xff);
|
||||||
|
if (!pmpcfg[2].reg[2].l) maskedWrite(pmpcfg[2].raw, value, 0xff00);
|
||||||
|
if (!pmpcfg[2].reg[1].l) maskedWrite(pmpcfg[2].raw, value, 0xff0000);
|
||||||
|
if (!pmpcfg[2].reg[0].l) maskedWrite(pmpcfg[2].raw, value, 0xff000000);
|
||||||
|
break;
|
||||||
|
case PMPCFG3:
|
||||||
|
if (!pmpcfg[3].reg[3].l) maskedWrite(pmpcfg[3].raw, value, 0xff);
|
||||||
|
if (!pmpcfg[3].reg[2].l) maskedWrite(pmpcfg[3].raw, value, 0xff00);
|
||||||
|
if (!pmpcfg[3].reg[1].l) maskedWrite(pmpcfg[3].raw, value, 0xff0000);
|
||||||
|
if (!pmpcfg[3].reg[0].l) maskedWrite(pmpcfg[3].raw, value, 0xff000000);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PMPADDR0: pmpaddr[0] = value; break;
|
||||||
|
case PMPADDR1: pmpaddr[1] = value; break;
|
||||||
|
case PMPADDR2: pmpaddr[2] = value; break;
|
||||||
|
case PMPADDR3: pmpaddr[3] = value; break;
|
||||||
|
case PMPADDR4: pmpaddr[4] = value; break;
|
||||||
|
case PMPADDR5: pmpaddr[5] = value; break;
|
||||||
|
case PMPADDR6: pmpaddr[6] = value; break;
|
||||||
|
case PMPADDR7: pmpaddr[7] = value; break;
|
||||||
|
case PMPADDR8: pmpaddr[8] = value; break;
|
||||||
|
case PMPADDR9: pmpaddr[9] = value; break;
|
||||||
|
case PMPADDR10: pmpaddr[10] = value; break;
|
||||||
|
case PMPADDR11: pmpaddr[11] = value; break;
|
||||||
|
case PMPADDR12: pmpaddr[12] = value; break;
|
||||||
|
case PMPADDR13: pmpaddr[13] = value; break;
|
||||||
|
case PMPADDR14: pmpaddr[14] = value; break;
|
||||||
|
case PMPADDR15: pmpaddr[15] = value; break;
|
||||||
|
|
||||||
default: ilegalInstruction(); return true; break;
|
default: ilegalInstruction(); return true; break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue