Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
b0a37dca
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
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看板
提交
b0a37dca
编写于
9月 22, 2011
作者:
R
Russell King
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pm' into devel-stable
上级
f70cac8d
8e6f83bb
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
197 addition
and
201 deletion
+197
-201
arch/arm/include/asm/proc-fns.h
arch/arm/include/asm/proc-fns.h
+8
-0
arch/arm/include/asm/suspend.h
arch/arm/include/asm/suspend.h
+1
-16
arch/arm/kernel/Makefile
arch/arm/kernel/Makefile
+1
-1
arch/arm/kernel/sleep.S
arch/arm/kernel/sleep.S
+27
-58
arch/arm/kernel/suspend.c
arch/arm/kernel/suspend.c
+72
-0
arch/arm/mm/proc-arm920.S
arch/arm/mm/proc-arm920.S
+8
-13
arch/arm/mm/proc-arm926.S
arch/arm/mm/proc-arm926.S
+8
-13
arch/arm/mm/proc-sa1100.S
arch/arm/mm/proc-sa1100.S
+10
-15
arch/arm/mm/proc-v6.S
arch/arm/mm/proc-v6.S
+19
-25
arch/arm/mm/proc-v7.S
arch/arm/mm/proc-v7.S
+22
-28
arch/arm/mm/proc-xsc3.S
arch/arm/mm/proc-xsc3.S
+11
-17
arch/arm/mm/proc-xscale.S
arch/arm/mm/proc-xscale.S
+10
-15
未找到文件。
arch/arm/include/asm/proc-fns.h
浏览文件 @
b0a37dca
...
...
@@ -81,6 +81,10 @@ extern void cpu_dcache_clean_area(void *, int);
extern
void
cpu_do_switch_mm
(
unsigned
long
pgd_phys
,
struct
mm_struct
*
mm
);
extern
void
cpu_set_pte_ext
(
pte_t
*
ptep
,
pte_t
pte
,
unsigned
int
ext
);
extern
void
cpu_reset
(
unsigned
long
addr
)
__attribute__
((
noreturn
));
/* These three are private to arch/arm/kernel/suspend.c */
extern
void
cpu_do_suspend
(
void
*
);
extern
void
cpu_do_resume
(
void
*
);
#else
#define cpu_proc_init processor._proc_init
#define cpu_proc_fin processor._proc_fin
...
...
@@ -89,6 +93,10 @@ extern void cpu_reset(unsigned long addr) __attribute__((noreturn));
#define cpu_dcache_clean_area processor.dcache_clean_area
#define cpu_set_pte_ext processor.set_pte_ext
#define cpu_do_switch_mm processor.switch_mm
/* These three are private to arch/arm/kernel/suspend.c */
#define cpu_do_suspend processor.do_suspend
#define cpu_do_resume processor.do_resume
#endif
extern
void
cpu_resume
(
void
);
...
...
arch/arm/include/asm/suspend.h
浏览文件 @
b0a37dca
#ifndef __ASM_ARM_SUSPEND_H
#define __ASM_ARM_SUSPEND_H
#include <asm/memory.h>
#include <asm/tlbflush.h>
extern
void
cpu_resume
(
void
);
/*
* Hide the first two arguments to __cpu_suspend - these are an implementation
* detail which platform code shouldn't have to know about.
*/
static
inline
int
cpu_suspend
(
unsigned
long
arg
,
int
(
*
fn
)(
unsigned
long
))
{
extern
int
__cpu_suspend
(
int
,
long
,
unsigned
long
,
int
(
*
)(
unsigned
long
));
int
ret
=
__cpu_suspend
(
0
,
PHYS_OFFSET
-
PAGE_OFFSET
,
arg
,
fn
);
flush_tlb_all
();
return
ret
;
}
extern
int
cpu_suspend
(
unsigned
long
,
int
(
*
)(
unsigned
long
));
#endif
arch/arm/kernel/Makefile
浏览文件 @
b0a37dca
...
...
@@ -29,7 +29,7 @@ obj-$(CONFIG_MODULES) += armksyms.o module.o
obj-$(CONFIG_ARTHUR)
+=
arthur.o
obj-$(CONFIG_ISA_DMA)
+=
dma-isa.o
obj-$(CONFIG_PCI)
+=
bios32.o isa.o
obj-$(CONFIG_PM_SLEEP)
+=
sleep.o
obj-$(CONFIG_PM_SLEEP)
+=
sleep.o
suspend.o
obj-$(CONFIG_HAVE_SCHED_CLOCK)
+=
sched_clock.o
obj-$(CONFIG_SMP)
+=
smp.o smp_tlb.o
obj-$(CONFIG_HAVE_ARM_SCU)
+=
smp_scu.o
...
...
arch/arm/kernel/sleep.S
浏览文件 @
b0a37dca
...
...
@@ -8,92 +8,61 @@
.
text
/*
*
Save
CPU
state
for
a
suspend
*
r1
=
v
:
p
offset
*
r2
=
suspend
function
arg0
*
r3
=
suspend
function
*
Save
CPU
state
for
a
suspend
.
This
saves
the
CPU
general
purpose
*
registers
,
and
allocates
space
on
the
kernel
stack
to
save
the
CPU
*
specific
registers
and
some
other
data
for
resume
.
*
r0
=
suspend
function
arg0
*
r1
=
suspend
function
*/
ENTRY
(
__cpu_suspend
)
stmfd
sp
!,
{
r4
-
r11
,
lr
}
#ifdef MULTI_CPU
ldr
r10
,
=
processor
ldr
r5
,
[
r10
,
#
CPU_SLEEP_SIZE
]
@
size
of
CPU
sleep
state
ldr
ip
,
[
r10
,
#
CPU_DO_RESUME
]
@
virtual
resume
function
ldr
r4
,
[
r10
,
#
CPU_SLEEP_SIZE
]
@
size
of
CPU
sleep
state
#else
ldr
r5
,
=
cpu_suspend_size
ldr
ip
,
=
cpu_do_resume
ldr
r4
,
=
cpu_suspend_size
#endif
mov
r
6
,
sp
@
current
virtual
SP
sub
sp
,
sp
,
r5
@
allocate
CPU
state
on
stack
mov
r0
,
sp
@
save
pointer
to
CPU
save
blo
ck
add
ip
,
ip
,
r1
@
convert
resume
fn
to
phys
stmfd
sp
!,
{
r1
,
r6
,
ip
}
@
save
v
:
p
,
virt
SP
,
phys
resume
fn
ldr
r5
,
=
sleep_save_sp
add
r6
,
sp
,
r1
@
convert
SP
to
phys
stmfd
sp
!,
{
r2
,
r3
}
@
save
suspend
func
arg
and
pointer
mov
r
5
,
sp
@
current
virtual
SP
add
r4
,
r4
,
#
12
@
Space
for
pgd
,
virt
sp
,
phys
resume
fn
sub
sp
,
sp
,
r4
@
allocate
CPU
state
on
sta
ck
stmfd
sp
!,
{
r0
,
r1
}
@
save
suspend
func
arg
and
pointer
add
r0
,
sp
,
#
8
@
save
pointer
to
save
block
mov
r1
,
r4
@
size
of
save
block
mov
r2
,
r5
@
virtual
SP
ldr
r3
,
=
sleep_save_sp
#ifdef CONFIG_SMP
ALT_SMP
(
mrc
p15
,
0
,
lr
,
c0
,
c0
,
5
)
ALT_UP
(
mov
lr
,
#
0
)
and
lr
,
lr
,
#
15
str
r6
,
[
r5
,
lr
,
lsl
#
2
]
@
save
phys
SP
#else
str
r6
,
[
r5
]
@
save
phys
SP
#endif
#ifdef MULTI_CPU
mov
lr
,
pc
ldr
pc
,
[
r10
,
#
CPU_DO_SUSPEND
]
@
save
CPU
state
#else
bl
cpu_do_suspend
#endif
@
flush
data
cache
#ifdef MULTI_CACHE
ldr
r10
,
=
cpu_cache
mov
lr
,
pc
ldr
pc
,
[
r10
,
#
CACHE_FLUSH_KERN_ALL
]
#else
bl
__cpuc_flush_kern_all
add
r3
,
r3
,
lr
,
lsl
#
2
#endif
bl
__cpu_suspend_save
adr
lr
,
BSYM
(
cpu_suspend_abort
)
ldmfd
sp
!,
{
r0
,
pc
}
@
call
suspend
fn
ENDPROC
(
__cpu_suspend
)
.
ltorg
cpu_suspend_abort
:
ldmia
sp
!,
{
r1
-
r3
}
@
pop
v
:
p
,
virt
SP
,
phys
resume
fn
ldmia
sp
!,
{
r1
-
r3
}
@
pop
phys
pgd
,
virt
SP
,
phys
resume
fn
teq
r0
,
#
0
moveq
r0
,
#
1
@
force
non
-
zero
value
mov
sp
,
r2
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
ENDPROC
(
cpu_suspend_abort
)
/*
*
r0
=
control
register
value
*
r1
=
v
:
p
offset
(
preserved
by
cpu_do_resume
)
*
r2
=
phys
page
table
base
*
r3
=
L1
section
flags
*/
.
align
5
ENTRY
(
cpu_resume_mmu
)
adr
r4
,
cpu_resume_turn_mmu_on
mov
r4
,
r4
,
lsr
#
20
orr
r3
,
r3
,
r4
,
lsl
#
20
ldr
r5
,
[
r2
,
r4
,
lsl
#
2
]
@
save
old
mapping
str
r3
,
[
r2
,
r4
,
lsl
#
2
]
@
setup
1
:
1
mapping
for
mmu
code
sub
r2
,
r2
,
r1
ldr
r3
,
=
cpu_resume_after_mmu
bic
r1
,
r0
,
#
CR_C
@
ensure
D
-
cache
is
disabled
b
cpu_resume_turn_mmu_on
ENDPROC
(
cpu_resume_mmu
)
.
ltorg
.
align
5
cpu_resume_turn_mmu_on
:
mcr
p15
,
0
,
r1
,
c1
,
c0
,
0
@
turn
on
MMU
,
I
-
cache
,
etc
mrc
p15
,
0
,
r1
,
c0
,
c0
,
0
@
read
id
reg
mov
r1
,
r1
mov
r1
,
r1
mcr
p15
,
0
,
r0
,
c1
,
c0
,
0
@
turn
on
MMU
,
I
-
cache
,
etc
mrc
p15
,
0
,
r0
,
c0
,
c0
,
0
@
read
id
reg
mov
r0
,
r0
mov
r0
,
r0
mov
pc
,
r3
@
jump
to
virtual
address
ENDPROC
(
cpu_resume_
turn_mmu_on
)
ENDPROC
(
cpu_resume_
mmu
)
cpu_resume_after_mmu
:
str
r5
,
[
r2
,
r4
,
lsl
#
2
]
@
restore
old
mapping
mcr
p15
,
0
,
r0
,
c1
,
c0
,
0
@
turn
on
D
-
cache
bl
cpu_init
@
restore
the
und
/
abt
/
irq
banked
regs
mov
r0
,
#
0
@
return
zero
on
success
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
...
...
@@ -119,7 +88,7 @@ ENTRY(cpu_resume)
ldr
r0
,
sleep_save_sp
@
stack
phys
addr
#endif
setmode
PSR_I_BIT
| PSR_F_BIT |
SVC_MODE
,
r1
@
set
SVC
,
irqs
off
@
load
v
:
p
,
stack
,
resume
fn
@
load
phys
pgd
,
stack
,
resume
fn
ARM
(
ldmia
r0
!,
{
r1
,
sp
,
pc
}
)
THUMB
(
ldmia
r0
!,
{
r1
,
r2
,
r3
}
)
THUMB
(
mov
sp
,
r2
)
...
...
arch/arm/kernel/suspend.c
0 → 100644
浏览文件 @
b0a37dca
#include <linux/init.h>
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
#include <asm/memory.h>
#include <asm/suspend.h>
#include <asm/tlbflush.h>
static
pgd_t
*
suspend_pgd
;
extern
int
__cpu_suspend
(
unsigned
long
,
int
(
*
)(
unsigned
long
));
extern
void
cpu_resume_mmu
(
void
);
/*
* This is called by __cpu_suspend() to save the state, and do whatever
* flushing is required to ensure that when the CPU goes to sleep we have
* the necessary data available when the caches are not searched.
*/
void
__cpu_suspend_save
(
u32
*
ptr
,
u32
ptrsz
,
u32
sp
,
u32
*
save_ptr
)
{
*
save_ptr
=
virt_to_phys
(
ptr
);
/* This must correspond to the LDM in cpu_resume() assembly */
*
ptr
++
=
virt_to_phys
(
suspend_pgd
);
*
ptr
++
=
sp
;
*
ptr
++
=
virt_to_phys
(
cpu_do_resume
);
cpu_do_suspend
(
ptr
);
flush_cache_all
();
outer_clean_range
(
*
save_ptr
,
*
save_ptr
+
ptrsz
);
outer_clean_range
(
virt_to_phys
(
save_ptr
),
virt_to_phys
(
save_ptr
)
+
sizeof
(
*
save_ptr
));
}
/*
* Hide the first two arguments to __cpu_suspend - these are an implementation
* detail which platform code shouldn't have to know about.
*/
int
cpu_suspend
(
unsigned
long
arg
,
int
(
*
fn
)(
unsigned
long
))
{
struct
mm_struct
*
mm
=
current
->
active_mm
;
int
ret
;
if
(
!
suspend_pgd
)
return
-
EINVAL
;
/*
* Provide a temporary page table with an identity mapping for
* the MMU-enable code, required for resuming. On successful
* resume (indicated by a zero return code), we need to switch
* back to the correct page tables.
*/
ret
=
__cpu_suspend
(
arg
,
fn
);
if
(
ret
==
0
)
{
cpu_switch_mm
(
mm
->
pgd
,
mm
);
local_flush_tlb_all
();
}
return
ret
;
}
static
int
__init
cpu_suspend_init
(
void
)
{
suspend_pgd
=
pgd_alloc
(
&
init_mm
);
if
(
suspend_pgd
)
{
unsigned
long
addr
=
virt_to_phys
(
cpu_resume_mmu
);
identity_mapping_add
(
suspend_pgd
,
addr
,
addr
+
SECTION_SIZE
);
}
return
suspend_pgd
?
0
:
-
ENOMEM
;
}
core_initcall
(
cpu_suspend_init
);
arch/arm/mm/proc-arm920.S
浏览文件 @
b0a37dca
...
...
@@ -379,31 +379,26 @@ ENTRY(cpu_arm920_set_pte_ext)
/*
Suspend
/
resume
support
:
taken
from
arch
/
arm
/
plat
-
s3c24xx
/
sleep
.
S
*/
.
globl
cpu_arm920_suspend_size
.
equ
cpu_arm920_suspend_size
,
4
*
4
.
equ
cpu_arm920_suspend_size
,
4
*
3
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_arm920_do_suspend
)
stmfd
sp
!,
{
r4
-
r
7
,
lr
}
stmfd
sp
!,
{
r4
-
r
6
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mrc
p15
,
0
,
r7
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r7
}
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
mrc
p15
,
0
,
r6
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r6
}
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
cpu_arm920_do_suspend
)
ENTRY
(
cpu_arm920_do_resume
)
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
I
+
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
+
D
caches
ldmia
r0
,
{
r4
-
r
7
}
ldmia
r0
,
{
r4
-
r
6
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r7
@
control
register
mov
r2
,
r6
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
| PMD_BIT4 |
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r6
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_arm920_do_resume
)
#endif
...
...
arch/arm/mm/proc-arm926.S
浏览文件 @
b0a37dca
...
...
@@ -394,31 +394,26 @@ ENTRY(cpu_arm926_set_pte_ext)
/*
Suspend
/
resume
support
:
taken
from
arch
/
arm
/
plat
-
s3c24xx
/
sleep
.
S
*/
.
globl
cpu_arm926_suspend_size
.
equ
cpu_arm926_suspend_size
,
4
*
4
.
equ
cpu_arm926_suspend_size
,
4
*
3
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_arm926_do_suspend
)
stmfd
sp
!,
{
r4
-
r
7
,
lr
}
stmfd
sp
!,
{
r4
-
r
6
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mrc
p15
,
0
,
r7
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r7
}
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
mrc
p15
,
0
,
r6
,
c1
,
c0
,
0
@
Control
register
stmia
r0
,
{
r4
-
r6
}
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
cpu_arm926_do_suspend
)
ENTRY
(
cpu_arm926_do_resume
)
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
I
+
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
+
D
caches
ldmia
r0
,
{
r4
-
r
7
}
ldmia
r0
,
{
r4
-
r
6
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r6
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r7
@
control
register
mov
r2
,
r6
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
| PMD_BIT4 |
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
TTB
address
mov
r0
,
r6
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_arm926_do_resume
)
#endif
...
...
arch/arm/mm/proc-sa1100.S
浏览文件 @
b0a37dca
...
...
@@ -168,20 +168,19 @@ ENTRY(cpu_sa1100_set_pte_ext)
mov
pc
,
lr
.
globl
cpu_sa1100_suspend_size
.
equ
cpu_sa1100_suspend_size
,
4
*
4
.
equ
cpu_sa1100_suspend_size
,
4
*
3
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_sa1100_do_suspend
)
stmfd
sp
!,
{
r4
-
r
7
,
lr
}
stmfd
sp
!,
{
r4
-
r
6
,
lr
}
mrc
p15
,
0
,
r4
,
c3
,
c0
,
0
@
domain
ID
mrc
p15
,
0
,
r5
,
c2
,
c0
,
0
@
translation
table
base
addr
mrc
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r7
,
c1
,
c0
,
0
@
control
reg
stmia
r0
,
{
r4
-
r7
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
mrc
p15
,
0
,
r5
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r6
,
c1
,
c0
,
0
@
control
reg
stmia
r0
,
{
r4
-
r6
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
cpu_sa1100_do_suspend
)
ENTRY
(
cpu_sa1100_do_resume
)
ldmia
r0
,
{
r4
-
r
7
}
@
load
cp
regs
ldmia
r0
,
{
r4
-
r
6
}
@
load
cp
regs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
flush
I
+
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
flush
I
&D
cache
...
...
@@ -189,13 +188,9 @@ ENTRY(cpu_sa1100_do_resume)
mcr
p15
,
0
,
ip
,
c9
,
c0
,
5
@
allow
user
space
to
use
RB
mcr
p15
,
0
,
r4
,
c3
,
c0
,
0
@
domain
ID
mcr
p15
,
0
,
r5
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mov
r0
,
r7
@
control
register
mov
r2
,
r5
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
|
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r5
,
c13
,
c0
,
0
@
PID
mov
r0
,
r6
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_sa1100_do_resume
)
#endif
...
...
arch/arm/mm/proc-v6.S
浏览文件 @
b0a37dca
...
...
@@ -128,20 +128,18 @@ ENTRY(cpu_v6_set_pte_ext)
/*
Suspend
/
resume
support
:
taken
from
arch
/
arm
/
mach
-
s3c64xx
/
sleep
.
S
*/
.
globl
cpu_v6_suspend_size
.
equ
cpu_v6_suspend_size
,
4
*
8
.
equ
cpu_v6_suspend_size
,
4
*
6
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_v6_do_suspend
)
stmfd
sp
!,
{
r4
-
r
11
,
lr
}
stmfd
sp
!,
{
r4
-
r
9
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mrc
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mrc
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r7
,
c2
,
c0
,
0
@
Translation
table
base
0
mrc
p15
,
0
,
r8
,
c2
,
c0
,
1
@
Translation
table
base
1
mrc
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
register
mrc
p15
,
0
,
r10
,
c1
,
c0
,
2
@
co
-
processor
access
control
mrc
p15
,
0
,
r11
,
c1
,
c0
,
0
@
control
register
stmia
r0
,
{
r4
-
r11
}
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
mrc
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r6
,
c2
,
c0
,
1
@
Translation
table
base
1
mrc
p15
,
0
,
r7
,
c1
,
c0
,
1
@
auxiliary
control
register
mrc
p15
,
0
,
r8
,
c1
,
c0
,
2
@
co
-
processor
access
control
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
control
register
stmia
r0
,
{
r4
-
r9
}
ldmfd
sp
!,
{
r4
-
r9
,
pc
}
ENDPROC
(
cpu_v6_do_suspend
)
ENTRY
(
cpu_v6_do_resume
)
...
...
@@ -150,25 +148,21 @@ ENTRY(cpu_v6_do_resume)
mcr
p15
,
0
,
ip
,
c7
,
c5
,
0
@
invalidate
I
cache
mcr
p15
,
0
,
ip
,
c7
,
c15
,
0
@
clean
+
invalidate
cache
mcr
p15
,
0
,
ip
,
c7
,
c10
,
4
@
drain
write
buffer
ldmia
r0
,
{
r4
-
r11
}
mcr
p15
,
0
,
ip
,
c13
,
c0
,
1
@
set
reserved
context
ID
ldmia
r0
,
{
r4
-
r9
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mcr
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mcr
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r7
,
c2
,
c0
,
0
@
Translation
table
base
0
mcr
p15
,
0
,
r8
,
c2
,
c0
,
1
@
Translation
table
base
1
mcr
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
register
mcr
p15
,
0
,
r10
,
c1
,
c0
,
2
@
co
-
processor
access
control
mcr
p15
,
0
,
r5
,
c3
,
c0
,
0
@
Domain
ID
ALT_SMP
(
orr
r1
,
r1
,
#
TTB_FLAGS_SMP
)
ALT_UP
(
orr
r1
,
r1
,
#
TTB_FLAGS_UP
)
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
Translation
table
base
0
mcr
p15
,
0
,
r6
,
c2
,
c0
,
1
@
Translation
table
base
1
mcr
p15
,
0
,
r7
,
c1
,
c0
,
1
@
auxiliary
control
register
mcr
p15
,
0
,
r8
,
c1
,
c0
,
2
@
co
-
processor
access
control
mcr
p15
,
0
,
ip
,
c2
,
c0
,
2
@
TTB
control
register
mcr
p15
,
0
,
ip
,
c7
,
c5
,
4
@
ISB
mov
r0
,
r11
@
control
register
mov
r2
,
r7
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
cpu_resume_l1_flags
mov
r0
,
r9
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_v6_do_resume
)
cpu_resume_l1_flags
:
ALT_SMP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_SMP
)
ALT_UP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_UP
)
#endif
string
cpu_v6_name
,
"ARMv6-compatible processor"
...
...
arch/arm/mm/proc-v7.S
浏览文件 @
b0a37dca
...
...
@@ -217,56 +217,50 @@ ENDPROC(cpu_v7_set_pte_ext)
/*
Suspend
/
resume
support
:
derived
from
arch
/
arm
/
mach
-
s5pv210
/
sleep
.
S
*/
.
globl
cpu_v7_suspend_size
.
equ
cpu_v7_suspend_size
,
4
*
9
.
equ
cpu_v7_suspend_size
,
4
*
7
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_v7_do_suspend
)
stmfd
sp
!,
{
r4
-
r1
1
,
lr
}
stmfd
sp
!,
{
r4
-
r1
0
,
lr
}
mrc
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mrc
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mrc
p15
,
0
,
r6
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
stmia
r0
!,
{
r4
-
r6
}
mrc
p15
,
0
,
r5
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
stmia
r0
!,
{
r4
-
r5
}
mrc
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mrc
p15
,
0
,
r7
,
c2
,
c0
,
0
@
TTB
0
mrc
p15
,
0
,
r8
,
c2
,
c0
,
1
@
TTB
1
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
Control
register
mrc
p15
,
0
,
r10
,
c1
,
c0
,
1
@
Auxiliary
control
register
mrc
p15
,
0
,
r11
,
c1
,
c0
,
2
@
Co
-
processor
access
control
stmia
r0
,
{
r6
-
r11
}
ldmfd
sp
!,
{
r4
-
r11
,
pc
}
mrc
p15
,
0
,
r7
,
c2
,
c0
,
1
@
TTB
1
mrc
p15
,
0
,
r8
,
c1
,
c0
,
0
@
Control
register
mrc
p15
,
0
,
r9
,
c1
,
c0
,
1
@
Auxiliary
control
register
mrc
p15
,
0
,
r10
,
c1
,
c0
,
2
@
Co
-
processor
access
control
stmia
r0
,
{
r6
-
r10
}
ldmfd
sp
!,
{
r4
-
r10
,
pc
}
ENDPROC
(
cpu_v7_do_suspend
)
ENTRY
(
cpu_v7_do_resume
)
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c5
,
0
@
invalidate
I
cache
ldmia
r0
!,
{
r4
-
r6
}
mcr
p15
,
0
,
ip
,
c13
,
c0
,
1
@
set
reserved
context
ID
ldmia
r0
!,
{
r4
-
r5
}
mcr
p15
,
0
,
r4
,
c13
,
c0
,
0
@
FCSE
/
PID
mcr
p15
,
0
,
r5
,
c13
,
c0
,
1
@
Context
ID
mcr
p15
,
0
,
r6
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
ldmia
r0
,
{
r6
-
r11
}
mcr
p15
,
0
,
r5
,
c13
,
c0
,
3
@
User
r
/
o
thread
ID
ldmia
r0
,
{
r6
-
r10
}
mcr
p15
,
0
,
r6
,
c3
,
c0
,
0
@
Domain
ID
mcr
p15
,
0
,
r7
,
c2
,
c0
,
0
@
TTB
0
mcr
p15
,
0
,
r8
,
c2
,
c0
,
1
@
TTB
1
ALT_SMP
(
orr
r1
,
r1
,
#
TTB_FLAGS_SMP
)
ALT_UP
(
orr
r1
,
r1
,
#
TTB_FLAGS_UP
)
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
TTB
0
mcr
p15
,
0
,
r7
,
c2
,
c0
,
1
@
TTB
1
mcr
p15
,
0
,
ip
,
c2
,
c0
,
2
@
TTB
control
register
mrc
p15
,
0
,
r4
,
c1
,
c0
,
1
@
Read
Auxiliary
control
register
teq
r4
,
r
10
@
Is
it
already
set
?
mcrne
p15
,
0
,
r
10
,
c1
,
c0
,
1
@
No
,
so
write
it
mcr
p15
,
0
,
r1
1
,
c1
,
c0
,
2
@
Co
-
processor
access
control
teq
r4
,
r
9
@
Is
it
already
set
?
mcrne
p15
,
0
,
r
9
,
c1
,
c0
,
1
@
No
,
so
write
it
mcr
p15
,
0
,
r1
0
,
c1
,
c0
,
2
@
Co
-
processor
access
control
ldr
r4
,
=
PRRR
@
PRRR
ldr
r5
,
=
NMRR
@
NMRR
mcr
p15
,
0
,
r4
,
c10
,
c2
,
0
@
write
PRRR
mcr
p15
,
0
,
r5
,
c10
,
c2
,
1
@
write
NMRR
isb
dsb
mov
r0
,
r9
@
control
register
mov
r2
,
r7
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
cpu_resume_l1_flags
mov
r0
,
r8
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_v7_do_resume
)
cpu_resume_l1_flags
:
ALT_SMP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_SMP
)
ALT_UP
(.
long
PMD_TYPE_SECT
| PMD_SECT_AP_WRITE |
PMD_FLAGS_UP
)
#endif
__CPUINIT
...
...
arch/arm/mm/proc-xsc3.S
浏览文件 @
b0a37dca
...
...
@@ -406,24 +406,23 @@ ENTRY(cpu_xsc3_set_pte_ext)
.
align
.
globl
cpu_xsc3_suspend_size
.
equ
cpu_xsc3_suspend_size
,
4
*
7
.
equ
cpu_xsc3_suspend_size
,
4
*
6
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_xsc3_do_suspend
)
stmfd
sp
!,
{
r4
-
r
10
,
lr
}
stmfd
sp
!,
{
r4
-
r
9
,
lr
}
mrc
p14
,
0
,
r4
,
c6
,
c0
,
0
@
clock
configuration
,
for
turbo
mode
mrc
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mrc
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mrc
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mrc
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
reg
mrc
p15
,
0
,
r10
,
c1
,
c0
,
0
@
control
reg
mrc
p15
,
0
,
r8
,
c1
,
c0
,
1
@
auxiliary
control
reg
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
control
reg
bic
r4
,
r4
,
#
2
@
clear
frequency
change
bit
stmia
r0
,
{
r4
-
r
10
}
@
store
cp
regs
ldmia
sp
!,
{
r4
-
r
10
,
pc
}
stmia
r0
,
{
r4
-
r
9
}
@
store
cp
regs
ldmia
sp
!,
{
r4
-
r
9
,
pc
}
ENDPROC
(
cpu_xsc3_do_suspend
)
ENTRY
(
cpu_xsc3_do_resume
)
ldmia
r0
,
{
r4
-
r
10
}
@
load
cp
regs
ldmia
r0
,
{
r4
-
r
9
}
@
load
cp
regs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
&
D
caches
,
BTB
mcr
p15
,
0
,
ip
,
c7
,
c10
,
4
@
drain
write
(
&f
ill
)
buffer
...
...
@@ -433,15 +432,10 @@ ENTRY(cpu_xsc3_do_resume)
mcr
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mcr
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mcr
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r9
,
c1
,
c0
,
1
@
auxiliary
control
reg
@
temporarily
map
resume_turn_on_mmu
into
the
page
table
,
@
otherwise
prefetch
abort
occurs
after
MMU
is
turned
on
mov
r0
,
r10
@
control
register
mov
r2
,
r8
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
0x542e
@
section
flags
orr
r1
,
r1
,
#
0x18
@
cache
the
page
table
in
L2
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r8
,
c1
,
c0
,
1
@
auxiliary
control
reg
mov
r0
,
r9
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_xsc3_do_resume
)
#endif
...
...
arch/arm/mm/proc-xscale.S
浏览文件 @
b0a37dca
...
...
@@ -520,24 +520,23 @@ ENTRY(cpu_xscale_set_pte_ext)
.
align
.
globl
cpu_xscale_suspend_size
.
equ
cpu_xscale_suspend_size
,
4
*
7
.
equ
cpu_xscale_suspend_size
,
4
*
6
#ifdef CONFIG_PM_SLEEP
ENTRY
(
cpu_xscale_do_suspend
)
stmfd
sp
!,
{
r4
-
r
10
,
lr
}
stmfd
sp
!,
{
r4
-
r
9
,
lr
}
mrc
p14
,
0
,
r4
,
c6
,
c0
,
0
@
clock
configuration
,
for
turbo
mode
mrc
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mrc
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mrc
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mrc
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mrc
p15
,
0
,
r9
,
c1
,
c1
,
0
@
auxiliary
control
reg
mrc
p15
,
0
,
r10
,
c1
,
c0
,
0
@
control
reg
mrc
p15
,
0
,
r8
,
c1
,
c1
,
0
@
auxiliary
control
reg
mrc
p15
,
0
,
r9
,
c1
,
c0
,
0
@
control
reg
bic
r4
,
r4
,
#
2
@
clear
frequency
change
bit
stmia
r0
,
{
r4
-
r
10
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r
10
,
pc
}
stmia
r0
,
{
r4
-
r
9
}
@
store
cp
regs
ldmfd
sp
!,
{
r4
-
r
9
,
pc
}
ENDPROC
(
cpu_xscale_do_suspend
)
ENTRY
(
cpu_xscale_do_resume
)
ldmia
r0
,
{
r4
-
r
10
}
@
load
cp
regs
ldmia
r0
,
{
r4
-
r
9
}
@
load
cp
regs
mov
ip
,
#
0
mcr
p15
,
0
,
ip
,
c8
,
c7
,
0
@
invalidate
I
&
D
TLBs
mcr
p15
,
0
,
ip
,
c7
,
c7
,
0
@
invalidate
I
&
D
caches
,
BTB
...
...
@@ -545,13 +544,9 @@ ENTRY(cpu_xscale_do_resume)
mcr
p15
,
0
,
r5
,
c15
,
c1
,
0
@
CP
access
reg
mcr
p15
,
0
,
r6
,
c13
,
c0
,
0
@
PID
mcr
p15
,
0
,
r7
,
c3
,
c0
,
0
@
domain
ID
mcr
p15
,
0
,
r8
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r9
,
c1
,
c1
,
0
@
auxiliary
control
reg
mov
r0
,
r10
@
control
register
mov
r2
,
r8
,
lsr
#
14
@
get
TTB0
base
mov
r2
,
r2
,
lsl
#
14
ldr
r3
,
=
PMD_TYPE_SECT
| PMD_SECT_BUFFERABLE |
\
PMD_SECT_CACHEABLE
|
PMD_SECT_AP_WRITE
mcr
p15
,
0
,
r1
,
c2
,
c0
,
0
@
translation
table
base
addr
mcr
p15
,
0
,
r8
,
c1
,
c1
,
0
@
auxiliary
control
reg
mov
r0
,
r9
@
control
register
b
cpu_resume_mmu
ENDPROC
(
cpu_xscale_do_resume
)
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录