From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
To: Alistair Francis <alistair.francis@xilinx.com>
Cc: peter.crosthwaite@xilinx.com, qemu-devel@nongnu.org,
afaerber@suse.de, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH v2 2/5] target-microblaze: Preserve the pvr registers during reset
Date: Thu, 28 May 2015 16:42:20 +1000 [thread overview]
Message-ID: <20150528064220.GT30952@toto> (raw)
In-Reply-To: <dfdc9cf2105749970e468d8e924049a2d36bfd97.1432790821.git.alistair.francis@xilinx.com>
On Thu, May 28, 2015 at 03:37:03PM +1000, Alistair Francis wrote:
> Move the Microblaze PVR registers to the end of the CPUMBState
> and preserve them during reset. This is similar to what the
> QEMU ARM model does with some of it's registers.
>
> This allows the Microblaze PVR registers to only be set once
> at realise instead of constantly at reset.
>
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
> ---
> V2:
> - Remove the memset and cpu_reset functions as they aren't
> required in the realize and I'm touching them anyway.
>
> NOTE: The individual machine resets still write to the PVR
> registers on each reset. This is no longer required as it only
> needs to be done once. Instead of moving them now, they are
> being left there and will be removed when they are all
> converted to the standard CPU properties.
>
> target-microblaze/cpu.c | 40 ++++++++++++++++++++++------------------
> target-microblaze/cpu.h | 10 ++++++----
> 2 files changed, 28 insertions(+), 22 deletions(-)
>
> diff --git a/target-microblaze/cpu.c b/target-microblaze/cpu.c
> index 67e3182..95be540 100644
> --- a/target-microblaze/cpu.c
> +++ b/target-microblaze/cpu.c
> @@ -63,13 +63,34 @@ static void mb_cpu_reset(CPUState *s)
>
> mcc->parent_reset(s);
>
> - memset(env, 0, sizeof(CPUMBState));
> + memset(env, 0, offsetof(CPUMBState, pvr));
> env->res_addr = RES_ADDR_NONE;
> tlb_flush(s, 1);
>
> /* Disable stack protector. */
> env->shr = ~0;
>
> +#if defined(CONFIG_USER_ONLY)
> + /* start in user mode with interrupts enabled. */
> + env->sregs[SR_MSR] = MSR_EE | MSR_IE | MSR_VM | MSR_UM;
> +#else
> + env->sregs[SR_MSR] = 0;
> + mmu_init(&env->mmu);
> + env->mmu.c_mmu = 3;
> + env->mmu.c_mmu_tlb_access = 3;
> + env->mmu.c_mmu_zones = 16;
> +#endif
> +}
> +
> +static void mb_cpu_realizefn(DeviceState *dev, Error **errp)
> +{
> + CPUState *cs = CPU(dev);
> + MicroBlazeCPUClass *mcc = MICROBLAZE_CPU_GET_CLASS(dev);
> + MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
> + CPUMBState *env = &cpu->env;
> +
> + qemu_init_vcpu(cs);
> +
> env->pvr.regs[0] = PVR0_PVR_FULL_MASK \
> | PVR0_USE_BARREL_MASK \
> | PVR0_USE_DIV_MASK \
> @@ -99,25 +120,8 @@ static void mb_cpu_reset(CPUState *s)
> env->sregs[SR_PC] = cpu->base_vectors;
>
> #if defined(CONFIG_USER_ONLY)
> - /* start in user mode with interrupts enabled. */
> - env->sregs[SR_MSR] = MSR_EE | MSR_IE | MSR_VM | MSR_UM;
> env->pvr.regs[10] = 0x0c000000; /* Spartan 3a dsp. */
> -#else
> - env->sregs[SR_MSR] = 0;
> - mmu_init(&env->mmu);
> - env->mmu.c_mmu = 3;
> - env->mmu.c_mmu_tlb_access = 3;
> - env->mmu.c_mmu_zones = 16;
> #endif
> -}
> -
> -static void mb_cpu_realizefn(DeviceState *dev, Error **errp)
> -{
> - CPUState *cs = CPU(dev);
> - MicroBlazeCPUClass *mcc = MICROBLAZE_CPU_GET_CLASS(dev);
> -
> - cpu_reset(cs);
> - qemu_init_vcpu(cs);
>
> mcc->parent_realize(dev, errp);
> }
> diff --git a/target-microblaze/cpu.h b/target-microblaze/cpu.h
> index 4ea04ac..e4c1cde 100644
> --- a/target-microblaze/cpu.h
> +++ b/target-microblaze/cpu.h
> @@ -260,16 +260,18 @@ struct CPUMBState {
> #define IFLAGS_TB_MASK (D_FLAG | IMM_FLAG | DRTI_FLAG | DRTE_FLAG | DRTB_FLAG)
> uint32_t iflags;
>
> - struct {
> - uint32_t regs[16];
> - } pvr;
> -
> #if !defined(CONFIG_USER_ONLY)
> /* Unified MMU. */
> struct microblaze_mmu mmu;
> #endif
>
> CPU_COMMON
> +
> + /* These fields are preserved on reset. */
> +
> + struct {
> + uint32_t regs[16];
> + } pvr;
> };
>
> #include "cpu-qom.h"
> --
> 1.7.1
>
next prev parent reply other threads:[~2015-05-28 6:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-28 5:35 [Qemu-devel] [PATCH v2 0/5] Add Microblaze configuration options Alistair Francis
2015-05-28 5:36 ` [Qemu-devel] [PATCH v2 1/5] target-microblaze: Fix up indentation Alistair Francis
2015-05-28 6:33 ` Edgar E. Iglesias
2015-05-28 5:37 ` [Qemu-devel] [PATCH v2 2/5] target-microblaze: Preserve the pvr registers during reset Alistair Francis
2015-05-28 6:42 ` Edgar E. Iglesias [this message]
2015-05-28 5:37 ` [Qemu-devel] [PATCH v2 3/5] target-microblaze: Allow the stack protection to be disabled/enabled Alistair Francis
2015-05-28 6:17 ` Edgar E. Iglesias
2015-05-29 5:35 ` Alistair Francis
2015-05-29 5:39 ` Alistair Francis
2015-05-29 5:42 ` Edgar E. Iglesias
2015-05-29 5:51 ` Alistair Francis
2015-05-28 5:38 ` [Qemu-devel] [PATCH v2 4/5] target-microblaze: Tidy up the base-vectors property Alistair Francis
2015-05-28 5:38 ` [Qemu-devel] [PATCH v2 5/5] target-microblaze: Convert use-fpu to a CPU property Alistair Francis
2015-05-28 6:25 ` Edgar E. Iglesias
2015-05-29 5:50 ` Alistair Francis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150528064220.GT30952@toto \
--to=edgar.iglesias@xilinx.com \
--cc=afaerber@suse.de \
--cc=alistair.francis@xilinx.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.