xref: /qemu/tests/tcg/xtensa/test_cache.S (revision abff1abf)
1#include "macros.inc"
2
3.purgem test_init
4.macro test_init
5    call0   cache_unlock_invalidate
6.endm
7
8test_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
18test 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
40test_end
41
42.macro cache_fault op, addr, exc_code
43    set_vector kernel, 2f
44
45    movi    a4, \addr
461:
47    \op     a4, 0
48    test_fail
492:
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
63test dpfl_tlb_miss
64    cache_fault dpfl, 0x00002345, 24
65test_end
66#endif
67
68#if XCHAL_DCACHE_SIZE
69#if XCHAL_DCACHE_IS_WRITEBACK
70test dhwb_tlb_miss
71    cache_fault dhwb, 0x00002345, 24
72test_end
73
74test dhwbi_tlb_miss
75    cache_fault dhwbi, 0x00002345, 24
76test_end
77#endif
78
79test dhi_tlb_miss
80    cache_fault dhi, 0x00002345, 24
81test_end
82
83#if XCHAL_DCACHE_LINE_LOCKABLE
84test dhu_tlb_miss
85    cache_fault dhu, 0x00002345, 24
86test_end
87#endif
88#endif
89
90#if XCHAL_ICACHE_SIZE
91#if XCHAL_ICACHE_LINE_LOCKABLE
92test ipfl_tlb_miss
93    cache_fault ipfl, 0x00002345, 16
94test_end
95
96test ihu_tlb_miss
97    cache_fault ihu, 0x00002345, 16
98test_end
99#endif
100
101test ihi_tlb_miss
102    cache_fault ihi, 0x00002345, 16
103test_end
104#endif
105
106#endif
107
108#endif
109
110test_suite_end
111
112cache_unlock_invalidate:
113#if XCHAL_DCACHE_SIZE
114    movi    a2, 0
115    movi    a3, XCHAL_DCACHE_SIZE
1161:
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
1271:
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