xref: /qemu/tests/tcg/xtensa/test_cache.S (revision f64766976d39fbf2b81a25b5c5f043180383d408)
1 #include "macros.inc"
2 
3 .purgem test_init
4 .macro test_init
5     call0   cache_unlock_invalidate
6 .endm
7 
8 test_suite cache
9 
10 #if XCHAL_HAVE_PTP_MMU
11 
12 .macro      pf_op op
13     \op     a2, 0
14     \op     a3, 0
15     \op     a4, 0
16 .endm
17 
18 test prefetch
19     movi    a2, 0xd0000000 /* cacheable */
20     movi    a3, 0xd8000000 /* non-cacheable */
21     movi    a4, 0x00001235 /* unmapped */
22 
23 #if XCHAL_DCACHE_SIZE
24     pf_op   dpfr
25     pf_op   dpfro
26     pf_op   dpfw
27     pf_op   dpfwo
28 #endif
29 #ifdef XCHAL_ICACHE_SIZE
30     pf_op   ipf
31 #endif
32 #if XCHAL_HAVE_PTP_MMU && !XCHAL_HAVE_SPANNING_WAY
33 #if XCHAL_DCACHE_LINE_LOCKABLE
34     dpfl    a2, 0
35 #endif
36 #if XCHAL_ICACHE_LINE_LOCKABLE
37     ipfl    a2, 0
38 #endif
39 #endif
40 test_end
41 
42 .macro cache_fault op, addr, exc_code
43     set_vector kernel, 2f
44 
45     movi    a4, \addr
46 1:
47     \op     a4, 0
48     test_fail
49 2:
50     rsr     a2, epc1
51     movi    a3, 1b
52     assert  eq, a2, a3
53     rsr     a2, excvaddr
54     assert  eq, a2, a4
55     rsr     a2, exccause
56     movi    a3, \exc_code
57     assert  eq, a2, a3
58 .endm
59 
60 #if XCHAL_HAVE_PTP_MMU && !XCHAL_HAVE_SPANNING_WAY
61 
62 #if XCHAL_DCACHE_LINE_LOCKABLE
63 test dpfl_tlb_miss
64     cache_fault dpfl, 0x00002345, 24
65 test_end
66 #endif
67 
68 #if XCHAL_DCACHE_SIZE
69 #if XCHAL_DCACHE_IS_WRITEBACK
70 test dhwb_tlb_miss
71     cache_fault dhwb, 0x00002345, 24
72 test_end
73 
74 test dhwbi_tlb_miss
75     cache_fault dhwbi, 0x00002345, 24
76 test_end
77 #endif
78 
79 test dhi_tlb_miss
80     cache_fault dhi, 0x00002345, 24
81 test_end
82 
83 #if XCHAL_DCACHE_LINE_LOCKABLE
84 test dhu_tlb_miss
85     cache_fault dhu, 0x00002345, 24
86 test_end
87 #endif
88 #endif
89 
90 #if XCHAL_ICACHE_SIZE
91 #if XCHAL_ICACHE_LINE_LOCKABLE
92 test ipfl_tlb_miss
93     cache_fault ipfl, 0x00002345, 16
94 test_end
95 
96 test ihu_tlb_miss
97     cache_fault ihu, 0x00002345, 16
98 test_end
99 #endif
100 
101 test ihi_tlb_miss
102     cache_fault ihi, 0x00002345, 16
103 test_end
104 #endif
105 
106 #endif
107 
108 #endif
109 
110 test_suite_end
111 
112 cache_unlock_invalidate:
113 #if XCHAL_DCACHE_SIZE
114     movi    a2, 0
115     movi    a3, XCHAL_DCACHE_SIZE
116 1:
117 #if XCHAL_DCACHE_LINE_LOCKABLE
118     diu     a2, 0
119 #endif
120     dii     a2, 0
121     addi    a2, a2, XCHAL_DCACHE_LINESIZE
122     bltu    a2, a3, 1b
123 #endif
124 #if XCHAL_ICACHE_SIZE
125     movi    a2, 0
126     movi    a3, XCHAL_ICACHE_SIZE
127 1:
128 #if XCHAL_ICACHE_LINE_LOCKABLE
129     iiu     a2, 0
130 #endif
131     iii     a2, 0
132     addi    a2, a2, XCHAL_ICACHE_LINESIZE
133     bltu    a2, a3, 1b
134 #endif
135     ret
136