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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [arm/] [mm/] [proc-arm1026.S] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 *  linux/arch/arm/mm/arm1026.S: MMU functions for ARM1026EJ-S
3
 *
4
 *  Copyright (C) 2002 ARM Limited
5
 *  Copyright (C) 2002 Deep Blue Solutions Ltd.
6
 *
7
 * This program is free software; you can redistribute it and/or modify
8
 * it under the terms of the GNU General Public License as published by
9
 * the Free Software Foundation; either version 2 of the License, or
10
 * (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program; if not, write to the Free Software
19
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20
 *
21
 *
22
 * These are the low level assembler for performing cache and TLB
23
 * functions on the arm1026.
24
 */
25
#include 
26
#include 
27
#include 
28
#include 
29
#include 
30
#include 
31
 
32
/*
33
 * This is the maximum size of an area which will be invalidated
34
 * using the single invalidate entry instructions.  Anything larger
35
 * than this, and we go for the whole cache.
36
 *
37
 * This value should be chosen such that we choose the cheapest
38
 * alternative.
39
 */
40
#define MAX_AREA_SIZE   16384
41
 
42
/*
43
 * the cache line size of the I and D cache
44
 */
45
#define DCACHELINESIZE  32
46
#define ICACHELINESIZE  32
47
 
48
/*
49
 * and the page size
50
 */
51
#define PAGESIZE        4096
52
 
53
        .text
54
 
55
/*
56
 * cpu_arm1026_data_abort()
57
 *
58
 * obtain information about current aborted instruction
59
 * Note: we read user space.  This means we might cause a data
60
 * abort here if the I-TLB and D-TLB aren't seeing the same
61
 * picture.  Unfortunately, this does happen.  We live with it.
62
 *
63
 * Inputs:
64
 *  r2 = address of abort
65
 *  r3 = cpsr of abort
66
 *
67
 * Returns:
68
 *  r0 = address of abort
69
 *  r1 != 0 if writing
70
 *  r3 = FSR
71
 *  r4 = corrupted
72
 */
73
        .align  5
74
ENTRY(cpu_arm1026_data_abort)
75
        mrc     p15, 0, r3, c5, c0, 0           @ get FSR
76
        and     r2, r3, #0b1101                 @ Check for translation error
77
        sub     r1, r2, #0b0101
78
 
79
        and     r3, r3, #255
80
        mrc     p15, 0, r0, c6, c0, 0           @ get FAR
81
 
82
        mov     pc, lr
83
 
84
/*
85
 * cpu_arm1026_check_bugs()
86
 */
87
ENTRY(cpu_arm1026_check_bugs)
88
        mrs     ip, cpsr
89
        bic     ip, ip, #F_BIT
90
        msr     cpsr, ip
91
        mov     pc, lr
92
 
93
/*
94
 * cpu_arm1026_proc_init()
95
 */
96
ENTRY(cpu_arm1026_proc_init)
97
        mov     pc, lr
98
 
99
/*
100
 * cpu_arm1026_proc_fin()
101
 */
102
ENTRY(cpu_arm1026_proc_fin)
103
        stmfd   sp!, {lr}
104
        mov     ip, #F_BIT | I_BIT | SVC_MODE
105
        msr     cpsr_c, ip
106
        bl      cpu_arm1026_cache_clean_invalidate_all
107
        mrc     p15, 0, r0, c1, c0, 0           @ ctrl register
108
        bic     r0, r0, #0x1000                 @ ...i............
109
        bic     r0, r0, #0x000e                 @ ............wca.
110
        mcr     p15, 0, r0, c1, c0, 0           @ disable caches
111
        ldmfd   sp!, {pc}
112
 
113
/*
114
 * cpu_arm1026_reset(loc)
115
 *
116
 * Perform a soft reset of the system.  Put the CPU into the
117
 * same state as it would be if it had been reset, and branch
118
 * to what would be the reset vector.
119
 *
120
 * loc: location to jump to for soft reset
121
 */
122
        .align  5
123
ENTRY(cpu_arm1026_reset)
124
        mov     ip, #0
125
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
126
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
127
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
128
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
129
        bic     ip, ip, #0x000f                 @ ............wcam
130
        bic     ip, ip, #0x1100                 @ ...i...s........
131
        mcr     p15, 0, ip, c1, c0, 0           @ ctrl register
132
        mov     pc, r0
133
 
134
/*
135
 * cpu_arm1026_do_idle()
136
 */
137
        .align  5
138
ENTRY(cpu_arm1026_do_idle)
139
        mcr     p15, 0, r0, c7, c0, 4           @ Wait for interrupt
140
        mov     pc, lr
141
 
142
/* ================================= CACHE ================================ */
143
 
144
 
145
/*
146
 * cpu_arm1026_cache_clean_invalidate_all()
147
 *
148
 * clean and invalidate all cache lines
149
 *
150
 * Note:
151
 *  1. we should preserve r0 at all times
152
 */
153
        .align  5
154
ENTRY(cpu_arm1026_cache_clean_invalidate_all)
155
        mov     r2, #1
156
cpu_arm1026_cache_clean_invalidate_all_r2:
157
        mov     ip, #0
158
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
159
        mcr     p15, 0, ip, c7, c6, 0           @ invalidate D cache
160
#else
161
1:      mrc     p15, 0, r15, c7, c14, 3         @ test,clean,invalidate
162
        bne     1b
163
#endif
164
        teq     r2, #0
165
        mcrne   p15, 0, ip, c7, c5, 0           @ invalidate I cache
166
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
167
        mov     pc, lr
168
 
169
/*
170
 * cpu_arm1026_cache_clean_invalidate_range(start, end, flags)
171
 *
172
 * clean and invalidate all cache lines associated with this area of memory
173
 *
174
 * This is a little misleading, it is not intended to clean out
175
 * the i-cache but to make sure that any data written to the
176
 * range is made consistant.  This means that when we execute code
177
 * in that region, everything works as we expect.
178
 *
179
 * This generally means writing back data in the Dcache and
180
 * write buffer and flushing the Icache over that region
181
 * start: Area start address
182
 * end:   Area end address
183
 * flags: nonzero for I cache as well
184
 */
185
        .align  5
186
ENTRY(cpu_arm1026_cache_clean_invalidate_range)
187
        bic     r0, r0, #DCACHELINESIZE - 1     @ && added by PGM
188
        sub     r3, r1, r0
189
        cmp     r3, #MAX_AREA_SIZE
190
        bhi     cpu_arm1026_cache_clean_invalidate_all_r2
191
 
192
1:      teq     r2, #0
193
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
194
        mcr     p15, 0, r0, c7, c6, 1           @ invalidate D entry
195
        mcrne   p15, 0, r0, c7, c5, 1           @ invalidate I entry
196
        add     r0, r0, #DCACHELINESIZE
197
        mcr     p15, 0, r0, c7, c6, 1           @ invalidate D entry
198
        mcrne   p15, 0, r0, c7, c5, 1           @ invalidate I entry
199
        add     r0, r0, #DCACHELINESIZE
200
#else
201
        mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D entry
202
        mcrne   p15, 0, r0, c7, c5, 1           @ invalidate I entry
203
        add     r0, r0, #DCACHELINESIZE
204
        mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D entry
205
        mcrne   p15, 0, r0, c7, c5, 1           @ invalidate I entry
206
        add     r0, r0, #DCACHELINESIZE
207
#endif
208
 
209
        cmp     r0, r1
210
        blo     1b
211
 
212
        mcr     p15, 0, r1, c7, c10, 4          @ drain WB
213
 
214
        mov     pc, lr
215
 
216
/*
217
 * cpu_arm1026_flush_ram_page(page)
218
 *
219
 * clean and invalidate all cache lines associated with this area of memory
220
 *
221
 * page: page to clean and invalidate
222
 */
223
        .align  5
224
ENTRY(cpu_arm1026_flush_ram_page)
225
        mov     r1, #PAGESIZE
226
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
227
1:      mcr     p15, 0, r0, c7, c6, 1           @ invalidate D entry
228
        add     r0, r0, #DCACHELINESIZE
229
        mcr     p15, 0, r0, c7, c6, 1           @ invalidate D entry
230
        add     r0, r0, #DCACHELINESIZE
231
#else
232
1:      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D entry
233
        add     r0, r0, #DCACHELINESIZE
234
        mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D entry
235
        add     r0, r0, #DCACHELINESIZE
236
#endif
237
        subs    r1, r1, #2 * DCACHELINESIZE
238
        bne     1b
239
        mcr     p15, 0, r1, c7, c10, 4          @ drain WB
240
        mov     pc, lr
241
 
242
/* ================================ D-CACHE =============================== */
243
 
244
/*
245
 * cpu_arm1026_dcache_invalidate_range(start, end)
246
 *
247
 * throw away all D-cached data in specified region without an obligation
248
 * to write them back.  Note however that we must clean the D-cached entries
249
 * around the boundaries if the start and/or end address are not cache
250
 * aligned.
251
 *
252
 * start: virtual start address
253
 * end:   virtual end address
254
 */
255
        .align  5
256
ENTRY(cpu_arm1026_dcache_invalidate_range)
257
#ifndef CONFIG_CPU_ARM1026_WRITETHROUGH
258
        tst     r0, #DCACHELINESIZE - 1
259
        mcrne   p15, 0, r0, c7, c10, 1          @ clean D entry
260
        tst     r1, #DCACHELINESIZE - 1
261
        mcrne   p15, 0, r1, c7, c10, 1          @ clean D entry
262
#endif
263
        bic     r0, r0, #DCACHELINESIZE - 1
264
1:      mcr     p15, 0, r0, c7, c6, 1           @ invalidate D entry
265
        add     r0, r0, #DCACHELINESIZE
266
        cmp     r0, r1
267
        blo     1b
268
        mov     pc, lr
269
 
270
/*
271
 * cpu_arm1026_dcache_clean_range(start, end)
272
 *
273
 * For the specified virtual address range, ensure that all caches contain
274
 * clean data, such that peripheral accesses to the physical RAM fetch
275
 * correct data.
276
 *
277
 * start: virtual start address
278
 * end:   virtual end address
279
 */
280
        .align  5
281
ENTRY(cpu_arm1026_dcache_clean_range)
282
#ifndef CONFIG_CPU_ARM1026_WRITETHROUGH
283
        bic     r0, r0, #DCACHELINESIZE - 1
284
        sub     r3, r1, r0
285
        cmp     r3, #MAX_AREA_SIZE
286
        mov     r2, #0
287
        bhi     cpu_arm1026_cache_clean_invalidate_all_r2
288
 
289
1:      mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
290
        add     r0, r0, #DCACHELINESIZE
291
        cmp     r0, r1
292
        blo     1b
293
#endif
294
        mcr     p15, 0, r2, c7, c10, 4          @ drain WB
295
        mov     pc, lr
296
 
297
/*
298
 * cpu_arm1026_dcache_clean_page(page)
299
 *
300
 * Cleans a single page of dcache so that if we have any future aliased
301
 * mappings, they will be consistent at the time that they are created.
302
 *
303
 * page: virtual address of page to clean from dcache
304
 *
305
 * Note:
306
 *  1. we don't need to flush the write buffer in this case.
307
 *  2. we don't invalidate the entries since when we write the page
308
 *     out to disk, the entries may get reloaded into the cache.
309
 */
310
        .align  5
311
ENTRY(cpu_arm1026_dcache_clean_page)
312
#ifndef CONFIG_CPU_ARM1026_WRITETHROUGH
313
        mov     r1, #PAGESIZE
314
1:      mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
315
        add     r0, r0, #DCACHELINESIZE
316
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
317
        add     r0, r0, #DCACHELINESIZE
318
        subs    r1, r1, #2 * DCACHELINESIZE
319
        bne     1b
320
#endif
321
        mov     pc, lr
322
 
323
/*
324
 * cpu_arm1026_dcache_clean_entry(addr)
325
 *
326
 * Clean the specified entry of any caches such that the MMU
327
 * translation fetches will obtain correct data.
328
 *
329
 * addr: cache-unaligned virtual address
330
 */
331
        .align  5
332
ENTRY(cpu_arm1026_dcache_clean_entry)
333
#ifndef CONFIG_CPU_ARM1026_WRITETHROUGH
334
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
335
#endif
336
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
337
        mov     pc, lr
338
 
339
/* ================================ I-CACHE =============================== */
340
 
341
/*
342
 * cpu_arm1026_icache_invalidate_range(start, end)
343
 *
344
 * This *is not* just icache.  It is to make data written to memory
345
 * consistent such that instructions fetched from the region are what
346
 * we expect.
347
 *
348
 * This is typically used after we have copied a module into kernel space,
349
 * and we're about to start executing code from that module.
350
 *
351
 * start: virtual start address
352
 * end:   virtual end address
353
 */
354
        .align  5
355
ENTRY(cpu_arm1026_icache_invalidate_range)
356
        bic     r0, r0, #DCACHELINESIZE - 1     @ Safety check
357
        sub     r3, r1, r0
358
        cmp     r3, #MAX_AREA_SIZE
359
        bhi     cpu_arm1026_cache_clean_invalidate_all_r2
360
 
361
1:      mcr     p15, 0, r0, c7, c5, 1           @ clean I entries
362
        add     r0, r0, #DCACHELINESIZE
363
        cmp     r0, r1
364
        blo     1b
365
 
366
        mov     r0, #0
367
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
368
        mov     pc, lr
369
 
370
ENTRY(cpu_arm1026_icache_invalidate_page)
371
        mcr     p15, 0, r0, c7, c5, 0           @ invalidate I cache
372
        mov     pc, lr
373
 
374
 
375
/* ================================== TLB ================================= */
376
 
377
/*
378
 * cpu_arm1026_tlb_invalidate_all()
379
 *
380
 * Invalidate all TLB entries
381
 */
382
        .align  5
383
ENTRY(cpu_arm1026_tlb_invalidate_all)
384
        mov     r0, #0
385
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
386
        mcr     p15, 0, r0, c8, c7, 0           @ invalidate I & D TLBs
387
        mov     pc, lr
388
 
389
/*
390
 * cpu_arm1026_tlb_invalidate_range(start, end)
391
 *
392
 * invalidate TLB entries covering the specified range
393
 *
394
 * start: range start address
395
 * end:   range end address
396
 */
397
        .align  5
398
ENTRY(cpu_arm1026_tlb_invalidate_range)
399
        sub     r3, r1, r0
400
        cmp     r3, #256 * PAGESIZE             @ arbitary, should be tuned
401
        bhi     cpu_arm1026_tlb_invalidate_all
402
 
403
        mov     r3, #0
404
        mcr     p15, 0, r3, c7, c10, 4          @ drain WB
405
 
406
        bic     r0, r0, #(PAGESIZE - 1) & 0x00ff
407
        bic     r0, r0, #(PAGESIZE - 1) & 0xff00
408
 
409
1:      mcr     p15, 0, r0, c8, c6, 1           @ invalidate D TLB entry
410
        mcr     p15, 0, r0, c8, c5, 1           @ invalidate I TLB entry
411
        add     r0, r0, #PAGESIZE
412
        cmp     r0, r1
413
        blo     1b
414
        mov     pc, lr
415
 
416
/*
417
 * cpu_arm1026_tlb_invalidate_page(page, flags)
418
 *
419
 * invalidate the TLB entries for the specified page.
420
 *
421
 * page:  page to invalidate
422
 * flags: non-zero if we include the I TLB
423
 */
424
        .align  5
425
ENTRY(cpu_arm1026_tlb_invalidate_page)
426
        mov     r3, #0
427
        mcr     p15, 0, r3, c7, c10, 4          @ drain WB
428
        teq     r1, #0
429
        mcr     p15, 0, r0, c8, c6, 1           @ invalidate D TLB entry
430
        mcrne   p15, 0, r0, c8, c5, 1           @ invalidate I TLB entry
431
        mov     pc, lr
432
 
433
/* =============================== PageTable ============================== */
434
 
435
/*
436
 * cpu_arm1026_set_pgd(pgd)
437
 *
438
 * Set the translation base pointer to be as described by pgd.
439
 *
440
 * pgd: new page tables
441
 */
442
        .align  5
443
ENTRY(cpu_arm1026_set_pgd)
444
        mov     ip, #0
445
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
446
        /* Any reason why we don't use mcr p15, 0, r0, c7, c7, 0 here? --rmk */
447
        mcr     p15, 0, ip, c7, c6, 0           @ invalidate D cache
448
#else
449
@ && 'Clean & Invalidate whole DCache'
450
1:      mrc     p15, 0, r15, c7, c14, 3         @ test,clean,invalidate
451
        bne     1b
452
#endif
453
        mcr     p15, 0, ip, c7, c5, 0           @ invalidate I cache
454
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
455
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
456
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
457
        mov     pc, lr
458
 
459
/*
460
 * cpu_arm1026_set_pmd(pmdp, pmd)
461
 *
462
 * Set a level 1 translation table entry, and clean it out of
463
 * any caches such that the MMUs can load it correctly.
464
 *
465
 * pmdp: pointer to PMD entry
466
 * pmd:  PMD value to store
467
 */
468
        .align  5
469
ENTRY(cpu_arm1026_set_pmd)
470
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
471
        eor     r2, r1, #0x0a                   @ C & Section
472
        tst     r2, #0x0b
473
        biceq   r1, r1, #4                      @ clear bufferable bit
474
#endif
475
        str     r1, [r0]
476
#ifndef CONFIG_CPU_ARM1026_WRITETHROUGH
477
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
478
#endif
479
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
480
        mov     pc, lr
481
 
482
/*
483
 * cpu_arm1026_set_pte(ptep, pte)
484
 *
485
 * Set a PTE and flush it out
486
 */
487
        .align  5
488
ENTRY(cpu_arm1026_set_pte)
489
        str     r1, [r0], #-1024                @ linux version
490
 
491
        eor     r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
492
 
493
        bic     r2, r1, #0xff0
494
        bic     r2, r2, #3
495
        orr     r2, r2, #HPTE_TYPE_SMALL
496
 
497
        tst     r1, #LPTE_USER | LPTE_EXEC      @ User or Exec?
498
        orrne   r2, r2, #HPTE_AP_READ
499
 
500
        tst     r1, #LPTE_WRITE | LPTE_DIRTY    @ Write and Dirty?
501
        orreq   r2, r2, #HPTE_AP_WRITE
502
 
503
        tst     r1, #LPTE_PRESENT | LPTE_YOUNG  @ Present and Young?
504
        movne   r2, #0
505
 
506
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
507
        eor     r3, r2, #0x0a                   @ C & small page?
508
        tst     r3, #0x0b
509
        biceq   r2, r2, #4
510
#endif
511
        str     r2, [r0]                        @ hardware version
512
        mov     r0, r0
513
#ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
514
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
515
#endif
516
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
517
        mov     pc, lr
518
 
519
 
520
ENTRY(cpu_arm1026_name)
521
        .ascii  "ARM1026EJ-S"
522
#ifndef CONFIG_CPU_ICACHE_DISABLE
523
        .ascii  "i"
524
#endif
525
#ifndef CONFIG_CPU_DCACHE_DISABLE
526
        .ascii  "d"
527
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
528
        .ascii  "(wt)"
529
#else
530
        .ascii  "(wb)"
531
#endif
532
#ifndef CONFIG_CPU_BPREDICT_DISABLE
533
        .ascii  "B"
534
#endif
535
#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN
536
        .ascii  "RR"
537
#endif
538
#endif
539
        .ascii  "\0"
540
        .align
541
 
542
        .section ".text.init", #alloc, #execinstr
543
 
544
__arm1026_setup:
545
        mov     r0, #0
546
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
547
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
548
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
549
        mcr     p15, 0, r4, c2, c0              @ load page table pointer
550
 
551
 
552
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
553
        mov     r0, #4                          @ disable write-back on caches explicitly
554
        mcr     p15, 7, r0, c15, c0, 0
555
#endif
556
 
557
        mov     r0, #0x1f                       @ Domains 0, 1 = client
558
        mcr     p15, 0, r0, c3, c0              @ load domain access register
559
        mrc     p15, 0, r0, c1, c0              @ get control register v4
560
/*
561
 * Clear out 'unwanted' bits (then put them in if we need them)
562
 */
563
                                                @   VI ZFRS BLDP WCAM
564
        bic     r0, r0, #0x0e00
565
        bic     r0, r0, #0x0002
566
        bic     r0, r0, #0x000c
567
        bic     r0, r0, #0x1000                 @ ...0 000. .... 000.
568
/*
569
 * Turn on what we want
570
 */
571
        orr     r0, r0, #0x0031
572
        orr     r0, r0, #0x2100                 @ ..1. ...1 ..11 ...1
573
 
574
#ifdef CONFIG_CPU_CACHE_ROUND_ROBIN
575
        orr     r0, r0, #0x4000                 @ .1.. .... .... ....
576
#endif
577
#ifndef CONFIG_CPU_BPREDICT_DISABLE
578
        orr     r0, r0, #0x0800                 @ ....Z...........
579
#endif
580
#ifndef CONFIG_CPU_DCACHE_DISABLE
581
        orr     r0, r0, #0x0004                 @ .... .... .... .1..
582
#endif
583
#ifndef CONFIG_CPU_ICACHE_DISABLE
584
        orr     r0, r0, #0x1000                 @ ...1 .... .... ....
585
#endif
586
        mov     pc, lr
587
 
588
        .text
589
 
590
/*
591
 * Purpose : Function pointers used to access above functions - all calls
592
 *           come through these
593
 */
594
        .type   arm1026_processor_functions, #object
595
arm1026_processor_functions:
596
        .word   cpu_arm1026_data_abort
597
        .word   cpu_arm1026_check_bugs
598
        .word   cpu_arm1026_proc_init
599
        .word   cpu_arm1026_proc_fin
600
        .word   cpu_arm1026_reset
601
        .word   cpu_arm1026_do_idle
602
 
603
        /* cache */
604
        .word   cpu_arm1026_cache_clean_invalidate_all
605
        .word   cpu_arm1026_cache_clean_invalidate_range
606
        .word   cpu_arm1026_flush_ram_page
607
 
608
        /* dcache */
609
        .word   cpu_arm1026_dcache_invalidate_range
610
        .word   cpu_arm1026_dcache_clean_range
611
        .word   cpu_arm1026_dcache_clean_page
612
        .word   cpu_arm1026_dcache_clean_entry
613
 
614
        /* icache */
615
        .word   cpu_arm1026_icache_invalidate_range
616
        .word   cpu_arm1026_icache_invalidate_page
617
 
618
        /* tlb */
619
        .word   cpu_arm1026_tlb_invalidate_all
620
        .word   cpu_arm1026_tlb_invalidate_range
621
        .word   cpu_arm1026_tlb_invalidate_page
622
 
623
        /* pgtable */
624
        .word   cpu_arm1026_set_pgd
625
        .word   cpu_arm1026_set_pmd
626
        .word   cpu_arm1026_set_pte
627
        .size   arm1026_processor_functions, . - arm1026_processor_functions
628
 
629
        .type   cpu_arm1026_info, #object
630
cpu_arm1026_info:
631
        .long   0
632
        .long   cpu_arm1026_name
633
        .size   cpu_arm1026_info, . - cpu_arm1026_info
634
 
635
        .type   cpu_arch_name, #object
636
cpu_arch_name:
637
        .asciz  "armv5EJ"
638
        .size   cpu_arch_name, . - cpu_arch_name
639
 
640
        .type   cpu_elf_name, #object
641
cpu_elf_name:
642
        .asciz  "v5EJ"
643
        .size   cpu_elf_name, . - cpu_elf_name
644
        .align
645
 
646
        .section ".proc.info", #alloc, #execinstr
647
 
648
        .type   __arm1026_proc_info,#object
649
__arm1026_proc_info:
650
        .long   0x4100a260
651
        .long   0xff00fff0
652
        .long   0x00000c1e                      @ mmuflags
653
        b       __arm1026_setup
654
        .long   cpu_arch_name
655
        .long   cpu_elf_name
656
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | \
657
                HWCAP_FAST_MULT
658
        .long   cpu_arm1026_info
659
        .long   arm1026_processor_functions
660
        .size   __arm1026_proc_info, . - __arm1026_proc_info

powered by: WebSVN 2.1.0

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