mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
ppc: Use a helper to filter writes to LPCR
This handles filtering bits based on what is implemented by a given architecture version. We also use it to copy to LPCR some of the relevant 970 HID4 bits. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> [clg: fixed checkpatch.pl errors ] Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
88536935c0
commit
4b3fc37788
3 changed files with 95 additions and 19 deletions
|
@ -7525,16 +7525,6 @@ static void gen_spr_970_hior(CPUPPCState *env)
|
|||
0x00000000);
|
||||
}
|
||||
|
||||
static void gen_spr_970_lpar(CPUPPCState *env)
|
||||
{
|
||||
/* Logical partitionning */
|
||||
/* PPC970: HID4 is effectively the LPCR */
|
||||
spr_register(env, SPR_970_HID4, "HID4",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
}
|
||||
|
||||
static void gen_spr_book3s_common(CPUPPCState *env)
|
||||
{
|
||||
spr_register(env, SPR_CTRL, "SPR_CTRL",
|
||||
|
@ -7787,15 +7777,6 @@ static void gen_spr_power5p_ear(CPUPPCState *env)
|
|||
0x00000000);
|
||||
}
|
||||
|
||||
static void gen_spr_power5p_lpar(CPUPPCState *env)
|
||||
{
|
||||
/* Logical partitionning */
|
||||
spr_register_kvm(env, SPR_LPCR, "LPCR",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
KVM_REG_PPC_LPCR, LPCR_LPES0 | LPCR_LPES1);
|
||||
}
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
static void spr_write_hmer(DisasContext *ctx, int sprn, int gprn)
|
||||
{
|
||||
|
@ -7807,7 +7788,44 @@ static void spr_write_hmer(DisasContext *ctx, int sprn, int gprn)
|
|||
spr_store_dump_spr(sprn);
|
||||
tcg_temp_free(hmer);
|
||||
}
|
||||
|
||||
static void spr_write_lpcr(DisasContext *ctx, int sprn, int gprn)
|
||||
{
|
||||
gen_helper_store_lpcr(cpu_env, cpu_gpr[gprn]);
|
||||
}
|
||||
|
||||
static void spr_write_970_hid4(DisasContext *ctx, int sprn, int gprn)
|
||||
{
|
||||
#if defined(TARGET_PPC64)
|
||||
spr_write_generic(ctx, sprn, gprn);
|
||||
gen_helper_store_lpcr(cpu_env, cpu_gpr[gprn]);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* !defined(CONFIG_USER_ONLY) */
|
||||
|
||||
static void gen_spr_970_lpar(CPUPPCState *env)
|
||||
{
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
/* Logical partitionning */
|
||||
/* PPC970: HID4 is effectively the LPCR */
|
||||
spr_register(env, SPR_970_HID4, "HID4",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_970_hid4,
|
||||
0x00000000);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void gen_spr_power5p_lpar(CPUPPCState *env)
|
||||
{
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
/* Logical partitionning */
|
||||
spr_register_kvm(env, SPR_LPCR, "LPCR",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_lpcr,
|
||||
KVM_REG_PPC_LPCR, LPCR_LPES0 | LPCR_LPES1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void gen_spr_book3s_ids(CPUPPCState *env)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue