Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
fc1c67bc
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fc1c67bc
编写于
4月 28, 2009
作者:
B
Blue Swirl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix PPC reset
上级
efcfd0c5
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
28 addition
and
21 deletion
+28
-21
target-ppc/cpu.h
target-ppc/cpu.h
+2
-1
target-ppc/helper.c
target-ppc/helper.c
+1
-0
target-ppc/machine.c
target-ppc/machine.c
+2
-0
target-ppc/translate_init.c
target-ppc/translate_init.c
+23
-20
未找到文件。
target-ppc/cpu.h
浏览文件 @
fc1c67bc
...
...
@@ -654,6 +654,7 @@ struct CPUPPCState {
/* Exception vectors */
target_ulong
excp_vectors
[
POWERPC_EXCP_NB
];
target_ulong
excp_prefix
;
target_ulong
hreset_excp_prefix
;
target_ulong
ivor_mask
;
target_ulong
ivpr_mask
;
target_ulong
hreset_vector
;
...
...
@@ -802,7 +803,7 @@ int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val);
#define cpu_signal_handler cpu_ppc_signal_handler
#define cpu_list ppc_cpu_list
#define CPU_SAVE_VERSION
3
#define CPU_SAVE_VERSION
4
/* MMU modes definitions */
#define MMU_MODE0_SUFFIX _user
...
...
target-ppc/helper.c
浏览文件 @
fc1c67bc
...
...
@@ -2796,6 +2796,7 @@ void cpu_ppc_reset (void *opaque)
msr
|=
(
target_ulong
)
1
<<
MSR_SPE
;
/* Allow SPE usage */
msr
|=
(
target_ulong
)
1
<<
MSR_PR
;
#else
env
->
excp_prefix
=
env
->
hreset_excp_prefix
;
env
->
nip
=
env
->
hreset_vector
|
env
->
excp_prefix
;
if
(
env
->
mmu_model
!=
POWERPC_MMU_REAL
)
ppc_tlb_invalidate_all
(
env
);
...
...
target-ppc/machine.c
浏览文件 @
fc1c67bc
...
...
@@ -87,6 +87,7 @@ void cpu_save(QEMUFile *f, void *opaque)
for
(
i
=
0
;
i
<
POWERPC_EXCP_NB
;
i
++
)
qemu_put_betls
(
f
,
&
env
->
excp_vectors
[
i
]);
qemu_put_betls
(
f
,
&
env
->
excp_prefix
);
qemu_put_betls
(
f
,
&
env
->
hreset_excp_prefix
);
qemu_put_betls
(
f
,
&
env
->
ivor_mask
);
qemu_put_betls
(
f
,
&
env
->
ivpr_mask
);
qemu_put_betls
(
f
,
&
env
->
hreset_vector
);
...
...
@@ -173,6 +174,7 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id)
for
(
i
=
0
;
i
<
POWERPC_EXCP_NB
;
i
++
)
qemu_get_betls
(
f
,
&
env
->
excp_vectors
[
i
]);
qemu_get_betls
(
f
,
&
env
->
excp_prefix
);
qemu_get_betls
(
f
,
&
env
->
hreset_excp_prefix
);
qemu_get_betls
(
f
,
&
env
->
ivor_mask
);
qemu_get_betls
(
f
,
&
env
->
ivpr_mask
);
qemu_get_betls
(
f
,
&
env
->
hreset_vector
);
...
...
target-ppc/translate_init.c
浏览文件 @
fc1c67bc
...
...
@@ -2609,7 +2609,7 @@ static void init_excp_4xx_real (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_FIT
]
=
0x00001010
;
env
->
excp_vectors
[
POWERPC_EXCP_WDT
]
=
0x00001020
;
env
->
excp_vectors
[
POWERPC_EXCP_DEBUG
]
=
0x00002000
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
env
->
ivor_mask
=
0x0000FFF0UL
;
env
->
ivpr_mask
=
0xFFFF0000UL
;
/* Hardware reset vector */
...
...
@@ -2634,7 +2634,7 @@ static void init_excp_4xx_softmmu (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_DTLB
]
=
0x00001100
;
env
->
excp_vectors
[
POWERPC_EXCP_ITLB
]
=
0x00001200
;
env
->
excp_vectors
[
POWERPC_EXCP_DEBUG
]
=
0x00002000
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
env
->
ivor_mask
=
0x0000FFF0UL
;
env
->
ivpr_mask
=
0xFFFF0000UL
;
/* Hardware reset vector */
...
...
@@ -2660,7 +2660,7 @@ static void init_excp_MPC5xx (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001C00
;
env
->
excp_vectors
[
POWERPC_EXCP_MEXTBR
]
=
0x00001E00
;
env
->
excp_vectors
[
POWERPC_EXCP_NMEXTBR
]
=
0x00001F00
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
env
->
ivor_mask
=
0x0000FFF0UL
;
env
->
ivpr_mask
=
0xFFFF0000UL
;
/* Hardware reset vector */
...
...
@@ -2692,7 +2692,7 @@ static void init_excp_MPC8xx (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001C00
;
env
->
excp_vectors
[
POWERPC_EXCP_MEXTBR
]
=
0x00001E00
;
env
->
excp_vectors
[
POWERPC_EXCP_NMEXTBR
]
=
0x00001F00
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
env
->
ivor_mask
=
0x0000FFF0UL
;
env
->
ivpr_mask
=
0xFFFF0000UL
;
/* Hardware reset vector */
...
...
@@ -2720,7 +2720,7 @@ static void init_excp_G2 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_DSTLB
]
=
0x00001200
;
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2749,7 +2749,7 @@ static void init_excp_e200 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_SPEU
]
=
0x00000000
;
env
->
excp_vectors
[
POWERPC_EXCP_EFPDI
]
=
0x00000000
;
env
->
excp_vectors
[
POWERPC_EXCP_EFPRI
]
=
0x00000000
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
env
->
ivor_mask
=
0x0000FFF7UL
;
env
->
ivpr_mask
=
0xFFFF0000UL
;
/* Hardware reset vector */
...
...
@@ -2776,7 +2776,7 @@ static void init_excp_BookE (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_DTLB
]
=
0x00000000
;
env
->
excp_vectors
[
POWERPC_EXCP_ITLB
]
=
0x00000000
;
env
->
excp_vectors
[
POWERPC_EXCP_DEBUG
]
=
0x00000000
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
env
->
ivor_mask
=
0x0000FFE0UL
;
env
->
ivpr_mask
=
0xFFFF0000UL
;
/* Hardware reset vector */
...
...
@@ -2799,7 +2799,7 @@ static void init_excp_601 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_IO
]
=
0x00000A00
;
env
->
excp_vectors
[
POWERPC_EXCP_SYSCALL
]
=
0x00000C00
;
env
->
excp_vectors
[
POWERPC_EXCP_RUNM
]
=
0x00002000
;
env
->
excp_prefix
=
0xFFF00000UL
;
env
->
hreset_
excp_prefix
=
0xFFF00000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0x00000100UL
;
#endif
...
...
@@ -2827,7 +2827,7 @@ static void init_excp_602 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_vectors
[
POWERPC_EXCP_WDT
]
=
0x00001500
;
env
->
excp_vectors
[
POWERPC_EXCP_EMUL
]
=
0x00001600
;
env
->
excp_prefix
=
0xFFF00000UL
;
env
->
hreset_
excp_prefix
=
0xFFF00000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2852,7 +2852,7 @@ static void init_excp_603 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_DSTLB
]
=
0x00001200
;
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2875,7 +2875,7 @@ static void init_excp_604 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_PERFM
]
=
0x00000F00
;
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2899,7 +2899,7 @@ static void init_excp_620 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_PERFM
]
=
0x00000F00
;
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_prefix
=
0xFFF00000UL
;
env
->
hreset_
excp_prefix
=
0xFFF00000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0x0000000000000100ULL
;
#endif
...
...
@@ -2924,7 +2924,7 @@ static void init_excp_7x0 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_vectors
[
POWERPC_EXCP_THERM
]
=
0x00001700
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2947,7 +2947,7 @@ static void init_excp_750cl (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_PERFM
]
=
0x00000F00
;
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2970,7 +2970,7 @@ static void init_excp_750cx (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_PERFM
]
=
0x00000F00
;
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_THERM
]
=
0x00001700
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -2998,7 +2998,7 @@ static void init_excp_7x5 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_vectors
[
POWERPC_EXCP_THERM
]
=
0x00001700
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -3024,7 +3024,7 @@ static void init_excp_7400 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_vectors
[
POWERPC_EXCP_VPUA
]
=
0x00001600
;
env
->
excp_vectors
[
POWERPC_EXCP_THERM
]
=
0x00001700
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -3052,7 +3052,7 @@ static void init_excp_7450 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_IABR
]
=
0x00001300
;
env
->
excp_vectors
[
POWERPC_EXCP_SMI
]
=
0x00001400
;
env
->
excp_vectors
[
POWERPC_EXCP_VPUA
]
=
0x00001600
;
env
->
excp_prefix
=
0x00000000UL
;
env
->
hreset_
excp_prefix
=
0x00000000UL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0xFFFFFFFCUL
;
#endif
...
...
@@ -3082,7 +3082,7 @@ static void init_excp_970 (CPUPPCState *env)
env
->
excp_vectors
[
POWERPC_EXCP_MAINT
]
=
0x00001600
;
env
->
excp_vectors
[
POWERPC_EXCP_VPUA
]
=
0x00001700
;
env
->
excp_vectors
[
POWERPC_EXCP_THERM
]
=
0x00001800
;
env
->
excp_prefix
=
0x00000000FFF00000ULL
;
env
->
hreset_excp_prefix
=
0x00000000FFF00000ULL
;
/* Hardware reset vector */
env
->
hreset_vector
=
0x0000000000000100ULL
;
#endif
...
...
@@ -8892,7 +8892,7 @@ static void init_ppc_proc (CPUPPCState *env, const ppc_def_t *def)
/* Set all exception vectors to an invalid address */
for
(
i
=
0
;
i
<
POWERPC_EXCP_NB
;
i
++
)
env
->
excp_vectors
[
i
]
=
(
target_ulong
)(
-
1ULL
);
env
->
excp_prefix
=
0x00000000
;
env
->
hreset_
excp_prefix
=
0x00000000
;
env
->
ivor_mask
=
0x00000000
;
env
->
ivpr_mask
=
0x00000000
;
/* Default MMU definitions */
...
...
@@ -8922,6 +8922,9 @@ static void init_ppc_proc (CPUPPCState *env, const ppc_def_t *def)
}
/* PowerPC implementation specific initialisations (SPRs, timers, ...) */
(
*
def
->
init_proc
)(
env
);
#if !defined(CONFIG_USER_ONLY)
env
->
excp_prefix
=
env
->
hreset_excp_prefix
;
#endif
/* MSR bits & flags consistency checks */
if
(
env
->
msr_mask
&
(
1
<<
25
))
{
switch
(
env
->
flags
&
(
POWERPC_FLAG_SPE
|
POWERPC_FLAG_VRE
))
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录