[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 25/29] target-ppc: Add POWER8's Event Based B
From: |
Tom Musta |
Subject: |
Re: [Qemu-devel] [PATCH v4 25/29] target-ppc: Add POWER8's Event Based Branch (EBB) control SPRs |
Date: |
Tue, 03 Jun 2014 13:01:35 -0500 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 |
On 6/3/2014 4:28 AM, Alexey Kardashevskiy wrote:
> POWER8 supports Event-Based Branch Facility (EBB). It is controlled via
> set of SPRs access to which should generate an "Facility Unavailable"
> interrupt if the facilities are not enabled in FSCR for problem state.
>
> This adds EBB SPRs.
>
> Signed-off-by: Alexey Kardashevskiy <address@hidden>
> ---
> target-ppc/cpu.h | 7 ++++++
> target-ppc/translate_init.c | 57
> +++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 64 insertions(+)
>
> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
> index 318b32a..e33828a 100644
> --- a/target-ppc/cpu.h
> +++ b/target-ppc/cpu.h
> @@ -1582,11 +1582,18 @@ static inline int cpu_mmu_index (CPUPPCState *env)
> #define SPR_UPERFF (0x31F)
> #define SPR_RCPU_MI_RA0 (0x320)
> #define SPR_MPC_MI_DBCAM (0x320)
> +#define SPR_BESCRS (0x320)
> #define SPR_RCPU_MI_RA1 (0x321)
> #define SPR_MPC_MI_DBRAM0 (0x321)
> +#define SPR_BESCRSU (0x321)
> #define SPR_RCPU_MI_RA2 (0x322)
> #define SPR_MPC_MI_DBRAM1 (0x322)
> +#define SPR_BESCRR (0x322)
> #define SPR_RCPU_MI_RA3 (0x323)
> +#define SPR_BESCRRU (0x323)
> +#define SPR_EBBHR (0x324)
> +#define SPR_EBBRR (0x325)
> +#define SPR_BESCR (0x326)
> #define SPR_RCPU_L2U_RA0 (0x328)
> #define SPR_MPC_MD_DBCAM (0x328)
> #define SPR_RCPU_L2U_RA1 (0x329)
> diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
> index bb4201c..ab40f9e 100644
> --- a/target-ppc/translate_init.c
> +++ b/target-ppc/translate_init.c
> @@ -7713,6 +7713,62 @@ static void gen_spr_power8_tm(CPUPPCState *env)
> 0x00000000);
> }
>
> +static void spr_read_ebb(void *opaque, int gprn, int sprn)
> +{
> + gen_fscr_facility_check(opaque, SPR_FSCR, FSCR_EBB, sprn, FSCR_IC_EBB);
> + spr_read_generic(opaque, gprn, sprn);
> +}
> +
> +static void spr_write_ebb(void *opaque, int sprn, int gprn)
> +{
> + gen_fscr_facility_check(opaque, SPR_FSCR, FSCR_EBB, sprn, FSCR_IC_EBB);
> + spr_write_generic(opaque, sprn, gprn);
> +}
> +
> +static void spr_read_ebb_upper32(void *opaque, int gprn, int sprn)
> +{
> + gen_fscr_facility_check(opaque, SPR_FSCR, FSCR_EBB, sprn, FSCR_IC_EBB);
> + spr_read_prev_upper32(opaque, gprn, sprn);
> +}
> +
> +static void spr_write_ebb_upper32(void *opaque, int sprn, int gprn)
> +{
> + gen_fscr_facility_check(opaque, SPR_FSCR, FSCR_EBB, sprn, FSCR_IC_EBB);
> + spr_write_prev_upper32(opaque, sprn, gprn);
> +}
> +
> +static void gen_spr_power8_ebb(CPUPPCState *env)
> +{
> + spr_register(env, SPR_BESCRS, "BESCRS",
> + &spr_read_ebb, &spr_write_ebb,
> + &spr_read_generic, &spr_write_generic,
> + 0x00000000);
> + spr_register(env, SPR_BESCRSU, "BESCRSU",
> + &spr_read_ebb_upper32, &spr_write_ebb_upper32,
> + &spr_read_prev_upper32, &spr_write_prev_upper32,
> + 0x00000000);
> + spr_register(env, SPR_BESCRR, "BESCRR",
> + &spr_read_ebb, &spr_write_ebb,
> + &spr_read_generic, &spr_write_generic,
> + 0x00000000);
> + spr_register(env, SPR_BESCRRU, "BESCRRU",
> + &spr_read_ebb_upper32, &spr_write_ebb_upper32,
> + &spr_read_prev_upper32, &spr_write_prev_upper32,
> + 0x00000000);
> + spr_register_kvm(env, SPR_EBBHR, "EBBHR",
> + &spr_read_ebb, &spr_write_ebb,
> + &spr_read_generic, &spr_write_generic,
> + KVM_REG_PPC_EBBHR, 0x00000000);
> + spr_register_kvm(env, SPR_EBBRR, "EBBRR",
> + &spr_read_ebb, &spr_write_ebb,
> + &spr_read_generic, &spr_write_generic,
> + KVM_REG_PPC_EBBRR, 0x00000000);
> + spr_register_kvm(env, SPR_BESCR, "BESCR",
> + &spr_read_ebb, &spr_write_ebb,
> + &spr_read_generic, &spr_write_generic,
> + KVM_REG_PPC_BESCR, 0x00000000);
> +}
> +
> static void gen_spr_power8_fscr(CPUPPCState *env)
> {
> spr_register_kvm(env, SPR_FSCR, "FSCR",
> @@ -7765,6 +7821,7 @@ static void init_proc_book3s_64(CPUPPCState *env, int
> version)
> }
> if (version >= BOOK3S_CPU_POWER8) {
> gen_spr_power8_tce_address_control(env);
> + gen_spr_power8_ebb(env);
> gen_spr_power8_fscr(env);
> gen_spr_power8_pmu_hypv(env);
> gen_spr_power8_pmu_user(env);
>
Reviewed-by: Tom Musta <address@hidden>
[Qemu-devel] [PATCH v4 26/29] target-ppc: Enable PPR and VRSAVE SPRs migration, Alexey Kardashevskiy, 2014/06/03
[Qemu-devel] [PATCH v4 28/29] spapr_hcall: Split h_set_mode(), Alexey Kardashevskiy, 2014/06/03