xref: /nrf52832-nimble/rt-thread/libcpu/arm/s3c44b0/cpu.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2006-09-06     XuXinming    first version
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #include <rtthread.h>
12*10465441SEvalZero #include "s3c44b0.h"
13*10465441SEvalZero 
14*10465441SEvalZero /**
15*10465441SEvalZero  * @addtogroup S3C44B0
16*10465441SEvalZero  */
17*10465441SEvalZero /*@{*/
18*10465441SEvalZero 
19*10465441SEvalZero /**
20*10465441SEvalZero  * This function will enable I-Cache of CPU
21*10465441SEvalZero  *
22*10465441SEvalZero  */
rt_hw_cpu_icache_enable()23*10465441SEvalZero void rt_hw_cpu_icache_enable()
24*10465441SEvalZero {
25*10465441SEvalZero 	rt_base_t reg;
26*10465441SEvalZero 
27*10465441SEvalZero 	volatile int i;
28*10465441SEvalZero 	/* flush cycle */
29*10465441SEvalZero 	for(i = 0x10002000; i < 0x10004800; i+=16)
30*10465441SEvalZero 	{
31*10465441SEvalZero 		*((int *)i)=0x0;
32*10465441SEvalZero 	}
33*10465441SEvalZero 
34*10465441SEvalZero 	/*
35*10465441SEvalZero 	 *	Init cache
36*10465441SEvalZero 	 *	Non-cacheable area (everything outside RAM)
37*10465441SEvalZero 	 *	0x0000:0000 - 0x0C00:0000
38*10465441SEvalZero 	 */
39*10465441SEvalZero 	NCACHBE0 = 0xC0000000;
40*10465441SEvalZero 	NCACHBE1 = 0x00000000;
41*10465441SEvalZero 
42*10465441SEvalZero 	/*
43*10465441SEvalZero 		Enable chache
44*10465441SEvalZero 	*/
45*10465441SEvalZero 	reg = SYSCFG;
46*10465441SEvalZero 	reg |= 0x00000006; /* 8kB */
47*10465441SEvalZero 	SYSCFG = reg;
48*10465441SEvalZero }
49*10465441SEvalZero 
50*10465441SEvalZero /**
51*10465441SEvalZero  * This function will disable I-Cache of CPU
52*10465441SEvalZero  *
53*10465441SEvalZero  */
rt_hw_cpu_icache_disable()54*10465441SEvalZero void rt_hw_cpu_icache_disable()
55*10465441SEvalZero {
56*10465441SEvalZero 	rt_base_t reg;
57*10465441SEvalZero 
58*10465441SEvalZero 	reg = SYSCFG;
59*10465441SEvalZero 	reg &= ~0x00000006; /* 8kB */
60*10465441SEvalZero 	SYSCFG = reg;
61*10465441SEvalZero }
62*10465441SEvalZero 
63*10465441SEvalZero /**
64*10465441SEvalZero  * this function will get the status of I-Cache
65*10465441SEvalZero  *
66*10465441SEvalZero  */
rt_hw_cpu_icache_status()67*10465441SEvalZero rt_base_t rt_hw_cpu_icache_status()
68*10465441SEvalZero {
69*10465441SEvalZero 	return 0;
70*10465441SEvalZero }
71*10465441SEvalZero 
72*10465441SEvalZero /**
73*10465441SEvalZero  * this function will enable D-Cache of CPU
74*10465441SEvalZero  *
75*10465441SEvalZero  */
rt_hw_cpu_dcache_enable()76*10465441SEvalZero void rt_hw_cpu_dcache_enable()
77*10465441SEvalZero {
78*10465441SEvalZero 	rt_hw_cpu_icache_enable();
79*10465441SEvalZero }
80*10465441SEvalZero 
81*10465441SEvalZero /**
82*10465441SEvalZero  * this function will disable D-Cache of CPU
83*10465441SEvalZero  *
84*10465441SEvalZero  */
rt_hw_cpu_dcache_disable()85*10465441SEvalZero void rt_hw_cpu_dcache_disable()
86*10465441SEvalZero {
87*10465441SEvalZero 	rt_hw_cpu_icache_disable();
88*10465441SEvalZero }
89*10465441SEvalZero 
90*10465441SEvalZero /**
91*10465441SEvalZero  * this function will get the status of D-Cache
92*10465441SEvalZero  *
93*10465441SEvalZero  */
rt_hw_cpu_dcache_status()94*10465441SEvalZero rt_base_t rt_hw_cpu_dcache_status()
95*10465441SEvalZero {
96*10465441SEvalZero 	return rt_hw_cpu_icache_status();
97*10465441SEvalZero }
98*10465441SEvalZero 
99*10465441SEvalZero /**
100*10465441SEvalZero  * this function will reset CPU
101*10465441SEvalZero  *
102*10465441SEvalZero  */
rt_hw_cpu_reset()103*10465441SEvalZero void rt_hw_cpu_reset()
104*10465441SEvalZero {
105*10465441SEvalZero }
106*10465441SEvalZero 
107*10465441SEvalZero /**
108*10465441SEvalZero  * this function will shutdown CPU
109*10465441SEvalZero  *
110*10465441SEvalZero  */
rt_hw_cpu_shutdown()111*10465441SEvalZero void rt_hw_cpu_shutdown()
112*10465441SEvalZero {
113*10465441SEvalZero 	rt_kprintf("shutdown...\n");
114*10465441SEvalZero 
115*10465441SEvalZero 	while (1);
116*10465441SEvalZero }
117*10465441SEvalZero 
118*10465441SEvalZero /*@}*/
119