OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [src/] [arch/] [arm/] [v6/] [mmu_ops.S.ARM] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * low-level mmu operations
3
 *
4
 * Copyright (C) 2007 Bahadir Balban
5
 */
6
 
7
#include INC_ARCH(asm.h)
8
 
9
#define C15_id                  c0
10
#define C15_control             c1
11
#define C15_ttb                 c2
12
#define C15_dom                 c3
13
#define C15_fsr                 c5
14
#define C15_far                 c6
15
#define C15_tlb                 c8
16
 
17
#define C15_C0_M                0x0001  /* MMU */
18
#define C15_C0_A                0x0002  /* Alignment */
19
#define C15_C0_C                0x0004  /* (D) Cache */
20
#define C15_C0_W                0x0008  /* Write buffer */
21
#define C15_C0_B                0x0080  /* Endianness */
22
#define C15_C0_S                0x0100  /* System */
23
#define C15_C0_R                0x0200  /* ROM */
24
#define C15_C0_Z                0x0800  /* Branch Prediction */
25
#define C15_C0_I                0x1000  /* I cache */
26
#define C15_C0_V                0x2000  /* High vectors */
27
 
28
/* FIXME: Make sure the ops that need r0 dont trash r0, or if they do,
29
 * save it on stack before these operations.
30
 */
31
 
32
/*
33
 * In ARM terminology, flushing the cache means invalidating its contents.
34
 * Cleaning the cache means, writing the contents of the cache back to
35
 * main memory. In write-back caches the cache must be cleaned before
36
 * flushing otherwise in-cache data is lost.
37
 */
38
 
39
BEGIN_PROC(arm_set_ttb)
40
        mcr     p15, 0, r0, C15_ttb, c0, 0
41
        mov     pc, lr
42
END_PROC(arm_set_ttb)
43
 
44
BEGIN_PROC(arm_get_domain)
45
        mrc     p15, 0, r0, C15_dom, c0, 0
46
        mov     pc, lr
47
END_PROC(arm_get_domain)
48
 
49
BEGIN_PROC(arm_set_domain)
50
        mcr     p15, 0, r0, C15_dom, c0, 0
51
        mov     pc, lr
52
END_PROC(arm_set_domain)
53
 
54
BEGIN_PROC(arm_enable_mmu)
55
        mrc     p15, 0, r0, C15_control, c0, 0
56
        orr     r0, r0, #C15_C0_M
57
        mcr     p15, 0, r0, C15_control, c0, 0
58
        mov     pc, lr
59
END_PROC(arm_enable_mmu)
60
 
61
BEGIN_PROC(arm_enable_icache)
62
        mrc     p15, 0, r0, C15_control, c0, 0
63
        orr     r0, r0, #C15_C0_I
64
        mcr     p15, 0, r0, C15_control, c0, 0
65
        mov     pc, lr
66
END_PROC(arm_enable_icache)
67
 
68
BEGIN_PROC(arm_enable_dcache)
69
        mrc     p15, 0, r0, C15_control, c0, 0
70
        orr     r0, r0, #C15_C0_C
71
        mcr     p15, 0, r0, C15_control, c0, 0
72
        mov     pc, lr
73
END_PROC(arm_enable_dcache)
74
 
75
BEGIN_PROC(arm_enable_wbuffer)
76
        mrc     p15, 0, r0, C15_control, c0, 0
77
        orr     r0, r0, #C15_C0_W
78
        mcr     p15, 0, r0, C15_control, c0, 0
79
        mov     pc, lr
80
END_PROC(arm_enable_wbuffer)
81
 
82
BEGIN_PROC(arm_enable_high_vectors)
83
        mrc     p15, 0, r0, C15_control, c0, 0
84
        orr     r0, r0, #C15_C0_V
85
        mcr     p15, 0, r0, C15_control, c0, 0
86
        mov     pc, lr
87
END_PROC(arm_enable_high_vectors)
88
 
89
BEGIN_PROC(arm_invalidate_cache)
90
        mov     r0, #0                  @ FIX THIS
91
        mcr     p15, 0, r0, c7, c7      @ Flush I cache and D cache
92
        mov     pc, lr
93
END_PROC(arm_invalidate_cache)
94
 
95
BEGIN_PROC(arm_invalidate_icache)
96
        mov     r0, #0                  @ FIX THIS
97
        mcr     p15, 0, r0, c7, c5, 0   @ Flush I cache
98
        mov     pc, lr
99
END_PROC(arm_invalidate_icache)
100
 
101
BEGIN_PROC(arm_invalidate_dcache)
102
        mov     r0, #0                  @ FIX THIS
103
        mcr     p15, 0, r0, c7, c6, 0   @ Flush D cache
104
        mov     pc, lr
105
END_PROC(arm_invalidate_dcache)
106
 
107
BEGIN_PROC(arm_clean_dcache)
108
        mrc     p15, 0 , pc, c7, c10, 3 @ Test/clean dcache line
109
        bne     arm_clean_dcache
110
        mcr     p15, 0, ip, c7, c10, 4  @ Drain WB
111
        mov     pc, lr
112
END_PROC(arm_clean_dcache)
113
 
114
BEGIN_PROC(arm_clean_invalidate_dcache)
115
1:
116
        mrc     p15, 0, pc, c7, c14, 3  @ Test/clean/flush dcache line
117
                                        @ COMMENT: Why use PC?
118
        bne     1b
119
        mcr     p15, 0, ip, c7, c10, 4  @ Drain WB
120
        mov     pc, lr
121
END_PROC(arm_clean_invalidate_dcache)
122
 
123
BEGIN_PROC(arm_clean_invalidate_cache)
124
1:
125
        mrc     p15, 0, r15, c7, c14, 3 @ Test/clean/flush dcache line
126
                                        @ COMMENT: Why use PC?
127
        bne     1b
128
        mcr     p15, 0, ip, c7, c5, 0   @ Flush icache
129
        mcr     p15, 0, ip, c7, c10, 4  @ Drain WB
130
        mov     pc, lr
131
END_PROC(arm_clean_invalidate_cache)
132
 
133
BEGIN_PROC(arm_drain_writebuffer)
134
        mov     r0, #0          @ FIX THIS
135
        mcr     p15, 0, r0, c7, c10, 4
136
        mov     pc, lr
137
END_PROC(arm_drain_writebuffer)
138
 
139
BEGIN_PROC(arm_invalidate_tlb)
140
        mcr     p15, 0, ip, c8, c7
141
        mov     pc, lr
142
END_PROC(arm_invalidate_tlb)
143
 
144
BEGIN_PROC(arm_invalidate_itlb)
145
        mov     r0, #0          @ FIX THIS
146
        mcr     p15, 0, r0, c8, c5, 0
147
        mov     pc, lr
148
END_PROC(arm_invalidate_itlb)
149
 
150
BEGIN_PROC(arm_invalidate_dtlb)
151
        mov     r0, #0          @ FIX THIS
152
        mcr     p15, 0, r0, c8, c6, 0
153
        mov     pc, lr
154
END_PROC(arm_invalidate_dtlb)
155
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.