Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
3a3c6c51
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3a3c6c51
编写于
1月 07, 2019
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[libcpu] remove cache.h from mips/common folder.
上级
4c0aafb5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
0 addition
and
232 deletion
+0
-232
libcpu/mips/common/cache.h
libcpu/mips/common/cache.h
+0
-232
未找到文件。
libcpu/mips/common/cache.h
已删除
100644 → 0
浏览文件 @
4c0aafb5
/*
* Cache operations for the cache instruction.
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* (C) Copyright 1996, 97, 99, 2002, 03 Ralf Baechle
* (C) Copyright 1999 Silicon Graphics, Inc.
*/
#ifndef __CACHE_H__
#define __CACHE_H__
#define KUSEG 0x00000000
#define KSEG0 0x80000000
#define KSEG1 0xa0000000
#define KSEG2 0xc0000000
#define KSEG3 0xe0000000
/*
* Cache Operations available on all MIPS processors with R4000-style caches
*/
#define Index_Invalidate_I 0x00
#define Index_Writeback_Inv_D 0x01
#define Index_Load_Tag_I 0x04
#define Index_Load_Tag_D 0x05
#define Index_Store_Tag_I 0x08
#define Index_Store_Tag_D 0x09
#define Hit_Invalidate_I 0x10
#define Hit_Invalidate_D 0x11
#define Hit_Writeback_Inv_D 0x15
#define Hit_Writeback_I 0x18
#define Hit_Writeback_D 0x19
/*
*The lock state is cleared by executing an Index
Invalidate, Index Writeback Invalidate, Hit
Invalidate, or Hit Writeback Invalidate
operation to the locked line, or via an Index
Store Tag operation with the lock bit reset in
the TagLo register.
*/
#define Fetch_And_Lock_I 0x1c
#define Fetch_And_Lock_D 0x1d
/*
* R4000-specific cacheops
*/
#define Create_Dirty_Excl_D 0x0d
#define Fill 0x14
/*
* R4000SC and R4400SC-specific cacheops
*/
#define Index_Invalidate_SI 0x02
#define Index_Writeback_Inv_SD 0x03
#define Index_Load_Tag_SI 0x06
#define Index_Load_Tag_SD 0x07
#define Index_Store_Tag_SI 0x0A
#define Index_Store_Tag_SD 0x0B
#define Create_Dirty_Excl_SD 0x0f
#define Hit_Invalidate_SI 0x12
#define Hit_Invalidate_SD 0x13
#define Hit_Writeback_Inv_SD 0x17
#define Hit_Writeback_SD 0x1b
#define Hit_Set_Virtual_SI 0x1e
#define Hit_Set_Virtual_SD 0x1f
/*
* R5000-specific cacheops
*/
#define R5K_Page_Invalidate_S 0x17
/*
* RM7000-specific cacheops
*/
#define Page_Invalidate_T 0x16
/*
* R1000-specific cacheops
*
* Cacheops 0x02, 0x06, 0x0a, 0x0c-0x0e, 0x16, 0x1a and 0x1e are unused.
* Most of the _S cacheops are identical to the R4000SC _SD cacheops.
*/
#define Index_Writeback_Inv_S 0x03
#define Index_Load_Tag_S 0x07
#define Index_Store_Tag_S 0x0B
#define Hit_Invalidate_S 0x13
#define Cache_Barrier 0x14
#define Hit_Writeback_Inv_S 0x17
#define Index_Load_Data_I 0x18
#define Index_Load_Data_D 0x19
#define Index_Load_Data_S 0x1b
#define Index_Store_Data_I 0x1c
#define Index_Store_Data_D 0x1d
#define Index_Store_Data_S 0x1f
#ifndef __ASSEMBLER__
#ifndef dcache_size
#define dcache_size (g_mips_core.dcache_ways * g_mips_core.dcache_lines_per_way * g_mips_core.dcache_line_size)
#endif
#ifndef icache_size
#define icache_size (g_mips_core.dcache_ways * g_mips_core.dcache_lines_per_way * g_mips_core.dcache_line_size)
#endif
#ifndef cpu_dcache_line_size
#define cpu_dcache_line_size() g_mips_core.icache_line_size
#endif
#ifndef cpu_icache_line_size
#define cpu_icache_line_size() g_mips_core.icache_line_size
#endif
#define cache_op(op, addr) \
__asm__ __volatile__( \
" .set noreorder \n" \
" .set mips3\n\t \n" \
" cache %0, %1 \n" \
" .set mips0 \n" \
" .set reorder" \
: \
: "i" (op), "m" (*(unsigned char *)(addr)))
#define cache16_unroll32(base, op) \
__asm__ __volatile__( \
" .set noreorder \n" \
" .set mips3 \n" \
" cache %1, 0x000(%0); cache %1, 0x010(%0) \n" \
" cache %1, 0x020(%0); cache %1, 0x030(%0) \n" \
" cache %1, 0x040(%0); cache %1, 0x050(%0) \n" \
" cache %1, 0x060(%0); cache %1, 0x070(%0) \n" \
" cache %1, 0x080(%0); cache %1, 0x090(%0) \n" \
" cache %1, 0x0a0(%0); cache %1, 0x0b0(%0) \n" \
" cache %1, 0x0c0(%0); cache %1, 0x0d0(%0) \n" \
" cache %1, 0x0e0(%0); cache %1, 0x0f0(%0) \n" \
" cache %1, 0x100(%0); cache %1, 0x110(%0) \n" \
" cache %1, 0x120(%0); cache %1, 0x130(%0) \n" \
" cache %1, 0x140(%0); cache %1, 0x150(%0) \n" \
" cache %1, 0x160(%0); cache %1, 0x170(%0) \n" \
" cache %1, 0x180(%0); cache %1, 0x190(%0) \n" \
" cache %1, 0x1a0(%0); cache %1, 0x1b0(%0) \n" \
" cache %1, 0x1c0(%0); cache %1, 0x1d0(%0) \n" \
" cache %1, 0x1e0(%0); cache %1, 0x1f0(%0) \n" \
" .set mips0 \n" \
" .set reorder \n" \
: \
: "r" (base), \
"i" (op));
static
inline
void
flush_icache_line_indexed
(
rt_ubase_t
addr
)
{
cache_op
(
Index_Invalidate_I
,
addr
);
}
static
inline
void
flush_dcache_line_indexed
(
rt_ubase_t
addr
)
{
cache_op
(
Index_Writeback_Inv_D
,
addr
);
}
static
inline
void
flush_icache_line
(
rt_ubase_t
addr
)
{
cache_op
(
Hit_Invalidate_I
,
addr
);
}
static
inline
void
lock_icache_line
(
rt_ubase_t
addr
)
{
cache_op
(
Fetch_And_Lock_I
,
addr
);
}
static
inline
void
lock_dcache_line
(
rt_ubase_t
addr
)
{
cache_op
(
Fetch_And_Lock_D
,
addr
);
}
static
inline
void
flush_dcache_line
(
rt_ubase_t
addr
)
{
cache_op
(
Hit_Writeback_Inv_D
,
addr
);
}
static
inline
void
invalidate_dcache_line
(
rt_ubase_t
addr
)
{
cache_op
(
Hit_Invalidate_D
,
addr
);
}
static
inline
void
blast_dcache16
(
void
)
{
rt_ubase_t
start
=
KSEG0
;
rt_ubase_t
end
=
start
+
dcache_size
;
rt_ubase_t
addr
;
for
(
addr
=
start
;
addr
<
end
;
addr
+=
0x200
)
cache16_unroll32
(
addr
,
Index_Writeback_Inv_D
);
}
static
inline
void
inv_dcache16
(
void
)
{
rt_ubase_t
start
=
KSEG0
;
rt_ubase_t
end
=
start
+
dcache_size
;
rt_ubase_t
addr
;
for
(
addr
=
start
;
addr
<
end
;
addr
+=
0x200
)
cache16_unroll32
(
addr
,
Hit_Invalidate_D
);
}
static
inline
void
blast_icache16
(
void
)
{
rt_ubase_t
start
=
KSEG0
;
rt_ubase_t
end
=
start
+
icache_size
;
rt_ubase_t
addr
;
for
(
addr
=
start
;
addr
<
end
;
addr
+=
0x200
)
cache16_unroll32
(
addr
,
Index_Invalidate_I
);
}
void
r4k_cache_init
(
void
);
void
r4k_cache_flush_all
(
void
);
void
r4k_icache_flush_all
(
void
);
void
r4k_icache_flush_range
(
rt_ubase_t
addr
,
rt_ubase_t
size
);
void
r4k_icache_lock_range
(
rt_ubase_t
addr
,
rt_ubase_t
size
);
void
r4k_dcache_inv
(
rt_ubase_t
addr
,
rt_ubase_t
size
);
void
r4k_dcache_wback_inv
(
rt_ubase_t
addr
,
rt_ubase_t
size
);
#endif
/*end of __ASSEMBLER__ */
#endif
/* end of __CACHE_H__ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录