On Mon, Sep 18, 2017 at 06:57:19PM -0300, Philippe Mathieu-Daudé wrote: > add a property to restrict the CPU for SoCs once on machine creation and avoid > duplicate code in each board. > > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org>
The valid_cpu_types approach implemented by Alistair is more generic: Subject: [Qemu-devel] [RFC v1 0/2] Add a valid_cpu_types property Message-ID: <cover.1504656490.git.alistair.fran...@xilinx.com> With it, boards that don't support other CPUs just need to set valid_cpu_types = { default_cpu_type }. > --- > Based-on: 1505318697-77161-6-git-send-email-imamm...@redhat.com > > include/hw/boards.h | 3 +++ > vl.c | 11 +++++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/include/hw/boards.h b/include/hw/boards.h > index 6b67adaef6..20dc0a0ab9 100644 > --- a/include/hw/boards.h > +++ b/include/hw/boards.h > @@ -129,6 +129,8 @@ typedef struct { > * specifies default CPU_TYPE, which will be used for parsing target > * specific features and for creating CPUs if CPU name wasn't provided > * explicitly at CLI > + * @is_system_on_chip: > + * If true, board does not support other CPUs than default_cpu_type. > * @minimum_page_bits: > * If non-zero, the board promises never to create a CPU with a page size > * smaller than this, so QEMU can use a more efficient larger page > @@ -182,6 +184,7 @@ struct MachineClass { > const char *hw_version; > ram_addr_t default_ram_size; > const char *default_cpu_type; > + bool is_system_on_chip; > bool option_rom_has_mr; > bool rom_file_has_mr; > int minimum_page_bits; > diff --git a/vl.c b/vl.c > index fb6a700e55..6e59ffa856 100644 > --- a/vl.c > +++ b/vl.c > @@ -4717,10 +4717,21 @@ int main(int argc, char **argv, char **envp) > current_machine->cpu_model = cpu_model; > > > + if (machine_class->is_system_on_chip && > !machine_class->default_cpu_type) { > + error_report("System-on-Chip must have a default CPU type"); > + exit(1); > + } > /* parse features once if machine provides default cpu_type */ > if (machine_class->default_cpu_type) { > current_machine->cpu_type = machine_class->default_cpu_type; > if (cpu_model) { > + if (machine_class->is_system_on_chip) { > + if (strcmp(cpu_model, machine_class->default_cpu_type) != 0) > { > + error_report("This board can only be used with CPU %s", > + machine_class->default_cpu_type); > + exit(1); > + } > + } > current_machine->cpu_type = > cpu_parse_cpu_model(machine_class->default_cpu_type, > cpu_model); > } > -- > 2.14.1 > -- Eduardo