From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Crosthwaite <crosthwaitepeter@gmail.com>, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, rth@twiddle.net,
edgar.iglesias@gmail.com, afaerber@suse.de,
Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [RFC v2 22/34] microblaze: enable multi-arch
Date: Mon, 01 Jun 2015 10:16:46 +0200 [thread overview]
Message-ID: <556C14EE.2080608@redhat.com> (raw)
In-Reply-To: <b6fa26ef3fa40b5c1d841c67e00217b9dec74b2c.1433052533.git.crosthwaite.peter@gmail.com>
On 31/05/2015 08:11, Peter Crosthwaite wrote:
> Multi-arch conversion consisting of:
> * configury
> - defining CONFIG_ARCH_MULTI
> - adding to MULTI_TARGETS
> - enabling disas for MULTI_ARCH
> * Converting target-microblaze to arch-obj-y
> * cpu.h
> - Compiling out all target-microblaze private contents
> when doing multi-arch build
> - Redefining target_ulong and cpu-def typenames with arch prefix
> - Undeffing possibly previously defined macros
> * Defining the QOM cpu hooks
>
> Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> ---
> I guess I could split to multi patches but it will bloat this series!
> ---
> configure | 6 ++++++
> target-microblaze/Makefile.objs | 6 +++---
> target-microblaze/cpu-qom.h | 2 ++
> target-microblaze/cpu.c | 1 +
> target-microblaze/cpu.h | 40 ++++++++++++++++++++++++++++++++++++----
> 5 files changed, 48 insertions(+), 7 deletions(-)
>
> diff --git a/configure b/configure
> index 1acafcd..3dbfd3e 100755
> --- a/configure
> +++ b/configure
> @@ -5440,6 +5440,9 @@ for i in $ARCH $TARGET_BASE_ARCH ; do
> microblaze*)
> echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
> echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
> + if [ -e $config_target_multi_mak ]; then
> + echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_multi_mak
> + fi
-e looks dangerous if you have a previous build around. Use a variable
that you can also print at the end of configure?
> ;;
> mips*)
> echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
> @@ -5481,6 +5484,9 @@ if test "$tcg_interpreter" = "yes" ; then
> fi
>
> case "$TARGET_BASE_ARCH" in
> +microblaze)
> + echo "CONFIG_ARCH_MULTI=y" >> $config_target_mak
> +;;
> *)
> echo "CONFIG_ARCH_SINGLE=y" >> $config_target_mak
> ;;
How is CONFIG_ARCH_SINGLE different from $(call lnot,
$(CONFIG_ARCH_MULTI))? And can CONFIG_ARCH_MULTI be defined in
default-configs/ rather than here?
> diff --git a/target-microblaze/Makefile.objs b/target-microblaze/Makefile.objs
> index f3d7b44..f70163d 100644
> --- a/target-microblaze/Makefile.objs
> +++ b/target-microblaze/Makefile.objs
> @@ -1,3 +1,3 @@
> -obj-y += translate.o op_helper.o helper.o cpu.o
> -obj-y += gdbstub.o
> -obj-$(CONFIG_SOFTMMU) += mmu.o
> +arch-obj-y += translate.o op_helper.o helper.o cpu.o
> +arch-obj-y += gdbstub.o
> +arch-obj-$(CONFIG_SOFTMMU) += mmu.o
> diff --git a/target-microblaze/cpu-qom.h b/target-microblaze/cpu-qom.h
> index e3e0701..88526fa 100644
> --- a/target-microblaze/cpu-qom.h
> +++ b/target-microblaze/cpu-qom.h
> @@ -67,9 +67,11 @@ static inline MicroBlazeCPU *mb_env_get_cpu(CPUMBState *env)
> return container_of(env, MicroBlazeCPU, env);
> }
>
> +#ifndef TARGET_MULTI
> #define ENV_GET_CPU(e) CPU(mb_env_get_cpu(e))
>
> #define ENV_OFFSET offsetof(MicroBlazeCPU, env)
> +#endif /* !TARGET_MULTI */
>
> void mb_cpu_do_interrupt(CPUState *cs);
> bool mb_cpu_exec_interrupt(CPUState *cs, int int_req);
> diff --git a/target-microblaze/cpu.c b/target-microblaze/cpu.c
> index 563ad46..135233a 100644
> --- a/target-microblaze/cpu.c
> +++ b/target-microblaze/cpu.c
> @@ -135,6 +135,7 @@ static void mb_cpu_initfn(Object *obj)
> CPUMBState *env = &cpu->env;
> static bool tcg_initialized;
>
> + CPU_SET_QOM_HOOKS(cs);
Why are the hooks in the instance rather in the class? Performance?
Also, why a macro and not a function?
> cs->env_ptr = env;
> cpu_exec_init(cs);
>
> diff --git a/target-microblaze/cpu.h b/target-microblaze/cpu.h
> index 9068272..4ccbac5 100644
> --- a/target-microblaze/cpu.h
> +++ b/target-microblaze/cpu.h
> @@ -22,10 +22,21 @@
> #include "config.h"
> #include "qemu-common.h"
>
> +#undef TARGET_LONG_BITS
> #define TARGET_LONG_BITS 32
>
> +#undef CPUArchState
> #define CPUArchState struct CPUMBState
>
> +#undef CPUTLBEntry
> +#undef CPUIOTLBEntry
> +#undef target_long
> +#undef target_ulong
> +#define CPUTLBEntry MBCPUTLBEntry
> +#define CPUIOTLBEntry MBCPUIOTLBEntry
> +#define target_long mb_target_long
> +#define target_ulong mb_target_ulong
Oh, this answers my previous question. Please document it in the header.
Could the #undefs be moved to exec/cpu-defs.h and exec/target_long.h
(see softmmu_template.h for a precedent)?
Paolo
> #include "exec/cpu-defs.h"
> #include "fpu/softfloat.h"
> struct CPUMBState;
> @@ -34,6 +45,7 @@ typedef struct CPUMBState CPUMBState;
> #include "mmu.h"
> #endif
>
> +#ifndef TARGET_MULTI
> #define ELF_MACHINE EM_MICROBLAZE
>
> #define EXCP_MMU 1
> @@ -45,13 +57,19 @@ typedef struct CPUMBState CPUMBState;
> /* MicroBlaze-specific interrupt pending bits. */
> #define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_3
>
> +#endif /* TARGET_MULTI */
> +
> /* Meanings of the MBCPU object's two inbound GPIO lines */
> #define MB_CPU_IRQ 0
> #define MB_CPU_FIR 1
>
> -/* Register aliases. R0 - R15 */
> -#define R_SP 1
> +/* FIXME: Implement cpu::set_pc fn for microblaze and privatise this */
> #define SR_PC 0
> +
> +#ifndef TARGET_MULTI
> +
> +/* Register aliases. R1 - R15 */
> +#define R_SP 1
> #define SR_MSR 1
> #define SR_EAR 3
> #define SR_ESR 5
> @@ -112,6 +130,13 @@ typedef struct CPUMBState CPUMBState;
> #define FSR_UF (1<<1) /* Underflow */
> #define FSR_DO (1<<0) /* Denormalized operand error */
>
> +#endif /* TARGET_MULTI */
> +
> +/* The Microblaze bootloader configures some of the PVRs in a board specific
> + * way as a reset process. This should go away with PVR property QOMification
> + * and then the PVRs can be made private to CPUs.
> + */
> +
> /* Version reg. */
> /* Basic PVR mask */
> #define PVR0_PVR_FULL_MASK 0x80000000
> @@ -212,6 +237,7 @@ typedef struct CPUMBState CPUMBState;
> #define PVR11_MSR_RESET_VALUE_MASK 0x000007FF
>
>
> +#ifndef TARGET_MULTI
>
> /* CPU flags. */
>
> @@ -223,14 +249,17 @@ typedef struct CPUMBState CPUMBState;
> #define CC_NE 1
> #define CC_EQ 0
>
> -#define NB_MMU_MODES 3
> -
> #define STREAM_EXCEPTION (1 << 0)
> #define STREAM_ATOMIC (1 << 1)
> #define STREAM_TEST (1 << 2)
> #define STREAM_CONTROL (1 << 3)
> #define STREAM_NONBLOCK (1 << 4)
>
> +#endif /* TARGET_MULTI */
> +
> +#undef NB_MMU_MODES
> +#define NB_MMU_MODES 3
> +
> struct CPUMBState {
> uint32_t debug;
> uint32_t btaken;
> @@ -274,6 +303,8 @@ struct CPUMBState {
>
> #include "cpu-qom.h"
>
> +#ifndef TARGET_MULTI
> +
> void mb_tcg_init(void);
> MicroBlazeCPU *cpu_mb_init(const char *cpu_model);
> int cpu_mb_exec(CPUState *cpu);
> @@ -337,4 +368,5 @@ void mb_cpu_unassigned_access(CPUState *cpu, hwaddr addr,
>
> #include "exec/exec-all.h"
>
> +#endif /* !TARGET_MULTI */
> #endif
>
next prev parent reply other threads:[~2015-06-01 8:17 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-31 6:11 [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 01/34] cpu-defs: Move CPU_TEMP_BUF_NLONGS to tcg Peter Crosthwaite
2015-06-01 18:57 ` Richard Henderson
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 02/34] cpu-exec: Purge all uses of CPU_GET_ENV Peter Crosthwaite
2015-06-01 19:03 ` Richard Henderson
2015-06-07 22:57 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 03/34] Makefile.target: Introduce arch-obj Peter Crosthwaite
2015-06-01 19:10 ` Richard Henderson
2015-06-02 9:40 ` Peter Crosthwaite
2015-06-02 10:34 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 04/34] cpu-exec: Migrate some generic fns to cpus.c Peter Crosthwaite
2015-06-01 7:45 ` Paolo Bonzini
2015-07-10 6:37 ` Peter Crosthwaite
2015-06-01 19:12 ` Richard Henderson
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init Peter Crosthwaite
2015-06-01 19:17 ` Richard Henderson
2015-07-10 10:15 ` Peter Crosthwaite
2015-07-11 9:16 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 06/34] cpu-common: Define tb_page_addr_t for everyone Peter Crosthwaite
2015-06-01 7:51 ` Paolo Bonzini
2015-06-07 23:06 ` Peter Crosthwaite
2015-06-24 9:48 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 07/34] exec-all: Move cpu_can_do_io to qom/cpu.h Peter Crosthwaite
2015-06-01 19:18 ` Richard Henderson
2015-06-24 9:11 ` Paolo Bonzini
2015-06-24 11:40 ` Pavel Dovgaluk
2015-06-24 11:41 ` Paolo Bonzini
2015-06-24 11:59 ` Pavel Dovgaluk
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 08/34] translate-all: Move tcg_handle_interrupt to -common Peter Crosthwaite
2015-06-01 19:20 ` Richard Henderson
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 09/34] include/exec: Move standard exceptions to cpu-all.h Peter Crosthwaite
2015-06-01 19:20 ` Richard Henderson
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 10/34] include/exec: Split target_long def to new header Peter Crosthwaite
2015-06-01 19:24 ` Richard Henderson
2015-06-01 19:51 ` Paolo Bonzini
2015-06-01 20:25 ` Peter Maydell
2015-06-01 20:27 ` Paolo Bonzini
2015-06-01 20:32 ` Richard Henderson
2015-06-01 20:39 ` Paolo Bonzini
2015-06-02 10:14 ` Peter Crosthwaite
2015-06-03 10:01 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 11/34] include/exec: Move cputlb exec.c defs out Peter Crosthwaite
2015-06-01 7:56 ` Paolo Bonzini
2015-06-02 9:44 ` Peter Crosthwaite
2015-06-02 10:38 ` Paolo Bonzini
2015-06-01 19:25 ` Richard Henderson
2015-06-24 9:25 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 12/34] include/exec: Move tb hash functions out Peter Crosthwaite
2015-06-01 7:56 ` Paolo Bonzini
2015-06-01 19:25 ` Richard Henderson
2015-06-24 9:05 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 13/34] cpu-defs: Move out TB_JMP defines Peter Crosthwaite
2015-06-01 19:25 ` Richard Henderson
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 14/34] cpu-defs: Allow multiple inclusions Peter Crosthwaite
2015-06-01 7:59 ` Paolo Bonzini
2015-06-01 19:29 ` Richard Henderson
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 15/34] HACK: monitor: Comment out TCG profile ops Peter Crosthwaite
2015-06-01 8:03 ` Paolo Bonzini
2015-06-01 18:49 ` Richard Henderson
2015-07-11 20:26 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 16/34] HACK: Disable list_cpus Peter Crosthwaite
2015-06-01 8:04 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 17/34] HACK: globalise TCG page size variables Peter Crosthwaite
2015-06-01 18:52 ` Richard Henderson
2015-06-01 18:58 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 18/34] HACK: monitor: uninclude cpu_ldst Peter Crosthwaite
2015-07-09 3:08 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 19/34] HACK: disas: Defeature print_target_address Peter Crosthwaite
2015-06-01 8:08 ` Paolo Bonzini
2015-06-01 18:55 ` Richard Henderson
2015-06-08 0:21 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 20/34] HACK: exec: comment out use of cpu_get_tb_cpu_from_state Peter Crosthwaite
2015-06-01 8:09 ` Paolo Bonzini
2015-06-08 0:22 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 21/34] core: virtualise CPU interfaces completely Peter Crosthwaite
2015-06-01 8:11 ` Paolo Bonzini
2015-06-02 9:52 ` Peter Crosthwaite
2015-06-02 10:38 ` Paolo Bonzini
2015-06-01 19:53 ` Richard Henderson
2015-06-02 9:56 ` Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 22/34] microblaze: enable multi-arch Peter Crosthwaite
2015-06-01 8:16 ` Paolo Bonzini [this message]
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 23/34] arm: cpu: static inline cpu_arm_init Peter Crosthwaite
2015-06-01 8:18 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 24/34] target-arm: Split cp helper API to new C file Peter Crosthwaite
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 25/34] arm: enable multi-arch Peter Crosthwaite
2015-06-01 8:22 ` Paolo Bonzini
2015-05-31 6:11 ` [Qemu-devel] [RFC v2 26/34] core: Introduce multi-arch build Peter Crosthwaite
2015-06-01 8:26 ` Paolo Bonzini
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 27/34] hw: arm: Explicitly include cpu.h for consumers Peter Crosthwaite
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 28/34] arm: Remove ELF_MACHINE from cpu.h Peter Crosthwaite
2015-06-01 8:39 ` Paolo Bonzini
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 29/34] hw: mb: Explicitly include cpu.h for consumers Peter Crosthwaite
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 30/34] mb: Remove ELF_MACHINE from cpu.h Peter Crosthwaite
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 31/34] arm: boot: Don't assume all CPUs are ARM Peter Crosthwaite
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 32/34] arm: xilinx_zynq: Add a Microblaze Peter Crosthwaite
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 33/34] HACK: mb: boot: Assume using -firmware for mb software Peter Crosthwaite
2015-05-31 6:12 ` [Qemu-devel] [RFC v2 34/34] HACK: mb: boot: Disable dtb load in multi-arch Peter Crosthwaite
2015-06-01 8:44 ` [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation Paolo Bonzini
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=556C14EE.2080608@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=crosthwaite.peter@gmail.com \
--cc=crosthwaitepeter@gmail.com \
--cc=edgar.iglesias@gmail.com \
--cc=peter.maydell@linaro.org \
--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.