2c09eee112
Test that non-locking prefetch operations don't cause exceptions on missing TLB and that other 'hit' cache operations do. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
98 lines
1.6 KiB
ArmAsm
98 lines
1.6 KiB
ArmAsm
#include "macros.inc"
|
|
|
|
.purgem test_init
|
|
.macro test_init
|
|
call0 cache_unlock_invalidate
|
|
.endm
|
|
|
|
test_suite cache
|
|
|
|
.macro pf_op op
|
|
\op a2, 0
|
|
\op a3, 0
|
|
\op a4, 0
|
|
.endm
|
|
|
|
test prefetch
|
|
movi a2, 0xd0000000 /* cacheable */
|
|
movi a3, 0xd8000000 /* non-cacheable */
|
|
movi a4, 0x00001235 /* unmapped */
|
|
|
|
pf_op dpfr
|
|
pf_op dpfro
|
|
pf_op dpfw
|
|
pf_op dpfwo
|
|
pf_op ipf
|
|
|
|
dpfl a2, 0
|
|
ipfl a2, 0
|
|
test_end
|
|
|
|
.macro cache_fault op, addr, exc_code
|
|
set_vector kernel, 2f
|
|
|
|
movi a4, \addr
|
|
1:
|
|
\op a4, 0
|
|
test_fail
|
|
2:
|
|
rsr a2, epc1
|
|
movi a3, 1b
|
|
assert eq, a2, a3
|
|
rsr a2, excvaddr
|
|
assert eq, a2, a4
|
|
rsr a2, exccause
|
|
movi a3, \exc_code
|
|
assert eq, a2, a3
|
|
.endm
|
|
|
|
test dpfl_tlb_miss
|
|
cache_fault dpfl, 0x00002345, 24
|
|
test_end
|
|
|
|
test dhwb_tlb_miss
|
|
cache_fault dhwb, 0x00002345, 24
|
|
test_end
|
|
|
|
test dhwbi_tlb_miss
|
|
cache_fault dhwbi, 0x00002345, 24
|
|
test_end
|
|
|
|
test dhi_tlb_miss
|
|
cache_fault dhi, 0x00002345, 24
|
|
test_end
|
|
|
|
test dhu_tlb_miss
|
|
cache_fault dhu, 0x00002345, 24
|
|
test_end
|
|
|
|
|
|
test ipfl_tlb_miss
|
|
cache_fault ipfl, 0x00002345, 16
|
|
test_end
|
|
|
|
test ihu_tlb_miss
|
|
cache_fault ihu, 0x00002345, 16
|
|
test_end
|
|
|
|
test ihi_tlb_miss
|
|
cache_fault ihi, 0x00002345, 16
|
|
test_end
|
|
|
|
test_suite_end
|
|
|
|
.macro cache_all op1, op2, size, linesize
|
|
movi a2, 0
|
|
movi a3, \size
|
|
1:
|
|
\op1 a2, 0
|
|
\op2 a2, 0
|
|
addi a2, a2, \linesize
|
|
bltu a2, a3, 1b
|
|
.endm
|
|
|
|
cache_unlock_invalidate:
|
|
cache_all diu, dii, XCHAL_DCACHE_SIZE, XCHAL_DCACHE_LINESIZE
|
|
cache_all iiu, iii, XCHAL_ICACHE_SIZE, XCHAL_ICACHE_LINESIZE
|
|
ret
|