aboutsummaryrefslogtreecommitdiff
path: root/tests/tcg/xtensa/test_cache.S
blob: 7e6ba4c18a2b19188b0a04750baa674adea4562f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#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