#include "macros.inc" .purgem test_init .macro test_init call0 cache_unlock_invalidate .endm test_suite cache #if XCHAL_HAVE_PTP_MMU .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 */ #if XCHAL_DCACHE_SIZE pf_op dpfr pf_op dpfro pf_op dpfw pf_op dpfwo #endif #ifdef XCHAL_ICACHE_SIZE pf_op ipf #endif #if XCHAL_HAVE_PTP_MMU && !XCHAL_HAVE_SPANNING_WAY #if XCHAL_DCACHE_LINE_LOCKABLE dpfl a2, 0 #endif #if XCHAL_ICACHE_LINE_LOCKABLE ipfl a2, 0 #endif #endif 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 #if XCHAL_HAVE_PTP_MMU && !XCHAL_HAVE_SPANNING_WAY #if XCHAL_DCACHE_LINE_LOCKABLE test dpfl_tlb_miss cache_fault dpfl, 0x00002345, 24 test_end #endif #if XCHAL_DCACHE_SIZE #if XCHAL_DCACHE_IS_WRITEBACK test dhwb_tlb_miss cache_fault dhwb, 0x00002345, 24 test_end test dhwbi_tlb_miss cache_fault dhwbi, 0x00002345, 24 test_end #endif test dhi_tlb_miss cache_fault dhi, 0x00002345, 24 test_end #if XCHAL_DCACHE_LINE_LOCKABLE test dhu_tlb_miss cache_fault dhu, 0x00002345, 24 test_end #endif #endif #if XCHAL_ICACHE_SIZE #if XCHAL_ICACHE_LINE_LOCKABLE test ipfl_tlb_miss cache_fault ipfl, 0x00002345, 16 test_end test ihu_tlb_miss cache_fault ihu, 0x00002345, 16 test_end #endif test ihi_tlb_miss cache_fault ihi, 0x00002345, 16 test_end #endif #endif #endif test_suite_end cache_unlock_invalidate: #if XCHAL_DCACHE_SIZE movi a2, 0 movi a3, XCHAL_DCACHE_SIZE 1: #if XCHAL_DCACHE_LINE_LOCKABLE diu a2, 0 #endif dii a2, 0 addi a2, a2, XCHAL_DCACHE_LINESIZE bltu a2, a3, 1b #endif #if XCHAL_ICACHE_SIZE movi a2, 0 movi a3, XCHAL_ICACHE_SIZE 1: #if XCHAL_ICACHE_LINE_LOCKABLE iiu a2, 0 #endif iii a2, 0 addi a2, a2, XCHAL_ICACHE_LINESIZE bltu a2, a3, 1b #endif ret