Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
3f50425c
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
3f50425c
编写于
5月 26, 2009
作者:
M
Michal Simek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
microblaze_mmu_v2: TLB low level code
Signed-off-by:
N
Michal Simek
<
monstr@monstr.eu
>
上级
a43acfbb
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
120 addition
and
0 deletion
+120
-0
arch/microblaze/kernel/misc.S
arch/microblaze/kernel/misc.S
+120
-0
未找到文件。
arch/microblaze/kernel/misc.S
0 → 100644
浏览文件 @
3f50425c
/*
*
Miscellaneous
low
-
level
MMU
functions
.
*
*
Copyright
(
C
)
2008
-
2009
Michal
Simek
<
monstr
@
monstr
.
eu
>
*
Copyright
(
C
)
2008
-
2009
PetaLogix
*
Copyright
(
C
)
2007
Xilinx
,
Inc
.
All
rights
reserved
.
*
*
Derived
from
arch
/
ppc
/
kernel
/
misc
.
S
*
*
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
.
*/
#include <linux/linkage.h>
#include <linux/sys.h>
#include <asm/unistd.h>
#include <linux/errno.h>
#include <asm/mmu.h>
#include <asm/page.h>
.
text
/*
*
Flush
MMU
TLB
*
*
We
avoid
flushing
the
pinned
0
,
1
and
possibly
2
entries
.
*/
.
globl
_tlbia
;
.
align
4
;
_tlbia
:
addik
r12
,
r0
,
63
/*
flush
all
entries
(
63
-
3
)
*/
/
*
isync
*/
_tlbia_1
:
mts
rtlbx
,
r12
nop
mts
rtlbhi
,
r0
/*
flush
:
ensure
V
is
clear
*/
nop
addik
r11
,
r12
,
-
2
bneid
r11
,
_tlbia_1
/*
loop
for
all
entries
*/
addik
r12
,
r12
,
-
1
/
*
sync
*/
rtsd
r15
,
8
nop
/*
*
Flush
MMU
TLB
for
a
particular
address
(
in
r5
)
*/
.
globl
_tlbie
;
.
align
4
;
_tlbie
:
mts
rtlbsx
,
r5
/*
look
up
the
address
in
TLB
*/
nop
mfs
r12
,
rtlbx
/*
Retrieve
index
*/
nop
blti
r12
,
_tlbie_1
/*
Check
if
found
*/
mts
rtlbhi
,
r0
/*
flush
:
ensure
V
is
clear
*/
nop
_tlbie_1
:
rtsd
r15
,
8
nop
/*
*
Allocate
TLB
entry
for
early
console
*/
.
globl
early_console_reg_tlb_alloc
;
.
align
4
;
early_console_reg_tlb_alloc
:
/
*
*
Load
a
TLB
entry
for
the
UART
,
so
that
microblaze_progress
()
can
use
*
the
UARTs
nice
and
early
.
We
use
a
4
k
real
==
virtual
mapping
.
*/
ori
r4
,
r0
,
2
mts
rtlbx
,
r4
/*
TLB
slot
2
*/
or
r4
,
r5
,
r0
andi
r4
,
r4
,
0xfffff000
ori
r4
,
r4
,(
TLB_WR|TLB_I|TLB_M
|
TLB_G
)
andi
r5
,
r5
,
0xfffff000
ori
r5
,
r5
,(
TLB_VALID
|
TLB_PAGESZ
(
PAGESZ_4K
))
mts
rtlblo
,
r4
/*
Load
the
data
portion
of
the
entry
*/
nop
mts
rtlbhi
,
r5
/*
Load
the
tag
portion
of
the
entry
*/
nop
rtsd
r15
,
8
nop
/*
*
Copy
a
whole
page
(
4096
bytes
)
.
*/
#define COPY_16_BYTES \
lwi
r7
,
r6
,
0
; \
lwi
r8
,
r6
,
4
; \
lwi
r9
,
r6
,
8
; \
lwi
r10
,
r6
,
12
; \
swi
r7
,
r5
,
0
; \
swi
r8
,
r5
,
4
; \
swi
r9
,
r5
,
8
; \
swi
r10
,
r5
,
12
/*
FIXME
DCACHE_LINE_BYTES
(
CONFIG_XILINX_MICROBLAZE0_DCACHE_LINE_LEN
*
4
)*/
#define DCACHE_LINE_BYTES (4 * 4)
.
globl
copy_page
;
.
align
4
;
copy_page
:
ori
r11
,
r0
,
(
PAGE_SIZE
/
DCACHE_LINE_BYTES
)
-
1
_copy_page_loop
:
COPY_16_BYTES
#if DCACHE_LINE_BYTES >= 32
COPY_16_BYTES
#endif
addik
r6
,
r6
,
DCACHE_LINE_BYTES
addik
r5
,
r5
,
DCACHE_LINE_BYTES
bneid
r11
,
_copy_page_loop
addik
r11
,
r11
,
-
1
rtsd
r15
,
8
nop
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录