Files
Toooba/Tests/isa/cheriTest.S

49 lines
1.2 KiB
ArmAsm

.section .data
.align 12
# Root Table (L2)
# Since we map 1GiB, this is the ONLY table we need.
l2_table:
.quad 0
.quad 0
# Entry 2 maps 0x80000000 - 0xBFFFFFFF
# PPN 0x80000, Flags: D A G U R W X V (0xCF)
.quad (0x80000 << 10) | 0xCF
.fill 509, 8, 0
.section .text
.globl _start
.align 4
_start:
# 1. Get the address of our table
cllc ca0, l2_table
cgetaddr t0, ca0
# 2. Convert address to PPN
srli t0, t0, 12
# 3. Construct SATP with Mode 8 (Sv39)
# The FIXME suggests bit 63 must be 1.
li t1, 8
slli t1, t1, 60
or t0, t0, t1 # t0 = (8 << 60) | PPN
# 4. Critical Write Sequence
sfence.vma # Flush before enabling
csrw sptbr, t0 # Write to SATP
sfence.vma # Flush after enabling
# 5. Transition to Virtual Space
# We load an address from the .data section (0x80002000)
# If paging is ON, the DTLB trace should now show (sv39)
li t1, 0x80002000
cspecialr ca1, pcc
csetaddr ca1, ca1, t1
ld t2, 0(ca1) # Trigger a DTLB lookup
# 6. Exit / Finish
# (Assuming your tohost logic)
li t1, 1
csd t1, 0(c1)
loop: j loop