OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_processor/] [mor1kx-5.0/] [sw/] [mor1kx/] [cache.S] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
#include "spr-defs.h"
2
#include 
3
 
4
        /* Cache init. To be called during init ONLY */
5
 
6
        .global _cache_init
7
        .type   _cache_init,@function
8
 
9
_cache_init:
10
        /* Instruction cache enable */
11
        /* Check if IC present and skip enabling otherwise */
12
        l.mfspr r3,r0,SPR_UPR
13
        l.andi  r4,r3,SPR_UPR_ICP
14
        l.sfeq  r4,r0
15
        OR1K_DELAYED_NOP(OR1K_INST(l.bf    .L8))
16
 
17
 
18
        /* Disable IC */
19
        l.mfspr r6,r0,SPR_SR
20
        l.addi  r5,r0,-1
21
        l.xori  r5,r5,SPR_SR_ICE
22
        l.and   r5,r6,r5
23
        l.mtspr r0,r5,SPR_SR
24
 
25
        /* Establish cache block size
26
        If BS=0, 16;
27
        If BS=1, 32;
28
        r14 contain block size
29
        */
30
        l.mfspr r3,r0,SPR_ICCFGR
31
        l.andi  r4,r3,SPR_ICCFGR_CBS
32
        l.srli  r5,r4,7
33
        l.ori   r6,r0,16
34
        l.sll   r14,r6,r5
35
 
36
        /* Establish number of cache sets
37
        r7 contains number of cache sets
38
        r5 contains log(# of cache sets)
39
        */
40
        l.andi  r4,r3,SPR_ICCFGR_NCS
41
        l.srli  r5,r4,3
42
        l.ori   r6,r0,1
43
        l.sll   r7,r6,r5
44
 
45
        /* Invalidate IC */
46
        l.addi  r6,r0,0
47
        l.sll   r5,r14,r5
48
 
49
.L7:
50
        l.mtspr r0,r6,SPR_ICBIR
51
        l.sfne  r6,r5
52
        OR1K_DELAYED(
53
        OR1K_INST(l.add   r6,r6,r14),
54
        OR1K_INST(l.bf    .L7)
55
        )
56
 
57
        /* Enable IC */
58
        l.mfspr r6,r0,SPR_SR
59
        l.ori   r6,r6,SPR_SR_ICE
60
        l.mtspr r0,r6,SPR_SR
61
        l.nop
62
        l.nop
63
        l.nop
64
        l.nop
65
        l.nop
66
        l.nop
67
        l.nop
68
        l.nop
69
 
70
.L8:
71
        /* Data cache enable */
72
        /* Check if DC present and skip enabling otherwise */
73
        l.mfspr r3,r0,SPR_UPR
74
        l.andi  r4,r3,SPR_UPR_DCP
75
        l.sfeq  r4,r0
76
        OR1K_DELAYED_NOP(l.bf    .L10)
77
        /* Disable DC */
78
        l.mfspr r6,r0,SPR_SR
79
        l.addi  r5,r0,-1
80
        l.xori  r5,r5,SPR_SR_DCE
81
        l.and   r5,r6,r5
82
        l.mtspr r0,r5,SPR_SR
83
        /* Establish cache block size
84
           If BS=0, 16;
85
           If BS=1, 32;
86
           r14 contain block size
87
        */
88
        l.mfspr r3,r0,SPR_DCCFGR
89
        l.andi  r4,r3,SPR_DCCFGR_CBS
90
        l.srli  r5,r4,7
91
        l.ori   r6,r0,16
92
        l.sll   r14,r6,r5
93
        /* Establish number of cache sets
94
           r7 contains number of cache sets
95
           r5 contains log(# of cache sets)
96
        */
97
        l.andi  r4,r3,SPR_DCCFGR_NCS
98
        l.srli  r5,r4,3
99
        l.ori   r6,r0,1
100
        l.sll   r7,r6,r5
101
        /* Invalidate DC */
102
        l.addi  r6,r0,0
103
        l.sll   r5,r14,r5
104
.L9:
105
        l.mtspr r0,r6,SPR_DCBIR
106
        l.sfne  r6,r5
107
        OR1K_DELAYED(
108
        OR1K_INST(l.add   r6,r6,r14),
109
        OR1K_INST(l.bf    .L9)
110
        )
111
        /* Enable DC */
112
        l.mfspr r6,r0,SPR_SR
113
        l.ori   r6,r6,SPR_SR_DCE
114
        l.mtspr r0,r6,SPR_SR
115
 
116
.L10:
117
        /* Return */
118
        OR1K_DELAYED_NOP(OR1K_INST(l.jr r9))

powered by: WebSVN 2.1.0

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