1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - OS
3 File: os_tcm.c
4
5 Copyright 2003-2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: 2008-09-18#$
14 $Rev: 8573 $
15 $Author: okubata_ryoma $
16 *---------------------------------------------------------------------------*/
17 #include <nitro/os.h>
18 #include <nitro/code32.h>
19
20 //=======================================================================
21 // ITCM
22 //=======================================================================
23 /*---------------------------------------------------------------------------*
24 Name: OS_EnableITCM
25
26 Description: enable ITCM
27
28 Arguments: None.
29
30 Returns: None.
31 *---------------------------------------------------------------------------*/
OS_EnableITCM(void)32 asm void OS_EnableITCM( void )
33 {
34 mrc p15, 0, r0, c1, c0, 0
35 orr r0, r0, #HW_C1_ITCM_ENABLE
36 mcr p15, 0, r0, c1, c0, 0
37 bx lr
38 }
39
40 /*---------------------------------------------------------------------------*
41 Name: OS_DisableITCM
42
43 Description: disable ITCM
44
45 Arguments: None.
46
47 Returns: None.
48 *---------------------------------------------------------------------------*/
OS_DisableITCM(void)49 asm void OS_DisableITCM( void )
50 {
51 mrc p15, 0, r0, c1, c0, 0
52 bic r0, r0, #HW_C1_ITCM_ENABLE
53 mcr p15, 0, r0, c1, c0, 0
54 bx lr
55 }
56
57 /*---------------------------------------------------------------------------*
58 Name: OS_SetITCMParam
59
60 Description: set parameter to ITCM
61
62 Arguments: param : parameter to be set to ITCM
63
64 Returns: None.
65 *---------------------------------------------------------------------------*/
OS_SetITCMParam(register u32 param)66 asm void OS_SetITCMParam( register u32 param )
67 {
68 and r0, r0, #HW_C9_TCMR_SIZE_MASK
69 mcr p15, 0, r0, c9, c1, 1
70 bx lr
71 }
72
73 /*---------------------------------------------------------------------------*
74 Name: OS_GetITCMParam
75
76 Description: get parameter to ITCM
77
78 Arguments: None
79
80 Returns: parameter about ITCM
81 *---------------------------------------------------------------------------*/
OS_GetITCMParam(void)82 asm u32 OS_GetITCMParam( void )
83 {
84 mrc p15, 0, r0, c9, c1, 1
85 and r0, r0, #HW_C9_TCMR_SIZE_MASK
86 bx lr
87 }
88
89 //=======================================================================
90 // DTCM
91 //=======================================================================
92 /*---------------------------------------------------------------------------*
93 Name: OS_EnableDTCM
94
95 Description: enable DTCM
96
97 Arguments: None.
98
99 Returns: None.
100 *---------------------------------------------------------------------------*/
OS_EnableDTCM(void)101 asm void OS_EnableDTCM( void )
102 {
103 mrc p15, 0, r0, c1, c0, 0
104 orr r0, r0, #HW_C1_DTCM_ENABLE
105 mcr p15, 0, r0, c1, c0, 0
106 bx lr
107 }
108
109 /*---------------------------------------------------------------------------*
110 Name: OS_DisableDTCM
111
112 Description: disable DTCM
113
114 Arguments: None.
115
116 Returns: None.
117 *---------------------------------------------------------------------------*/
OS_DisableDTCM(void)118 asm void OS_DisableDTCM( void )
119 {
120 mrc p15, 0, r0, c1, c0, 0
121 bic r0, r0, #HW_C1_DTCM_ENABLE
122 mcr p15, 0, r0, c1, c0, 0
123 bx lr
124 }
125
126 /*---------------------------------------------------------------------------*
127 Name: OS_SetDTCMParam
128
129 Description: set parameter to DTCM
130
131 Arguments: param : parameter to be set to DTCM
132
133 Returns: None.
134 *---------------------------------------------------------------------------*/
OS_SetDTCMParam(register u32 param)135 asm void OS_SetDTCMParam( register u32 param )
136 {
137 ldr r1, =HW_C9_TCMR_BASE_MASK | HW_C9_TCMR_SIZE_MASK
138 and r0, r0, r1
139 mcr p15, 0, r0, c9, c1, 0
140 bx lr
141 }
142
143 /*---------------------------------------------------------------------------*
144 Name: OS_GetDTCMParam
145
146 Description: get parameter to DTCM
147
148 Arguments: None
149
150 Returns: parameter about DTCM
151 *---------------------------------------------------------------------------*/
OS_GetDTCMParam(void)152 asm u32 OS_GetDTCMParam( void )
153 {
154 mrc p15, 0, r0, c9, c1, 0
155 ldr r1, =HW_C9_TCMR_BASE_MASK | HW_C9_TCMR_SIZE_MASK
156 and r0, r0, r1
157 bx lr
158 }
159
160 //================================================================================
161 // SET TCM ADDRESS
162 //================================================================================
163 #define OSi_TCM_REGION_SIZE_MASK HW_C9_TCMR_SIZE_MASK // 0x0000003e
164 #define OSi_TCM_REGION_BASE_MASK HW_C9_TCMR_BASE_MASK // 0xfffff000
165
166 /*---------------------------------------------------------------------------*
167 Name: OS_SetDTCMAddress
168
169 Description: Set start address of DTCM
170
171 Arguments: start address of DTCM
172
173 Returns: None.
174 *---------------------------------------------------------------------------*/
OS_SetDTCMAddress(register u32 address)175 asm void OS_SetDTCMAddress( register u32 address )
176 {
177 mrc p15, 0, r2, c9, c1, 0
178 and r2, r2, #OSi_TCM_REGION_SIZE_MASK
179
180 ldr r1, =OSi_TCM_REGION_BASE_MASK
181 and r0, r0, r1
182 orr r0, r0, r2
183 mcr p15, 0, r0, c9, c1, 0
184
185 bx lr
186 }
187
188 //================================================================================
189 // GET TCM ADDRESS
190 //================================================================================
191 /*---------------------------------------------------------------------------*
192 Name: OS_GetDTCMAddress
193
194 Description: Get start address of DTCM
195
196 Arguments: None.
197
198 Returns: start address of DTCM
199 *---------------------------------------------------------------------------*/
OS_GetDTCMAddress(void)200 asm u32 OS_GetDTCMAddress( void )
201 {
202 mrc p15, 0, r0, c9, c1, 0
203 ldr r1, =OSi_TCM_REGION_BASE_MASK
204 and r0, r0, r1
205
206 bx lr
207 }
208
209 #include <nitro/codereset.h>
210