On Mon, 20 Feb 2017 19:11:00 +0000 Peter Maydell <peter.mayd...@linaro.org> wrote:
> On 20 February 2017 at 18:55, Igor Mammedov <imamm...@redhat.com> wrote: > > Peter Maydell <peter.mayd...@linaro.org> wrote: [...] > > > its sole user netduino2 board has cpu_model hardcodded > > at board level which could be left alone or converted > > to this API. > > I think this may be for the benefit of the not-yet-in-tree > netduinoplus2 board, which is a very similar SoC but > with a cortex-m4. There are likely other ways we could > model that, though. > > > Using API would make code more consistent > > at the cost of more code for default/valid callbacks. > > Mmm, we could have the board code just forward the > default/valid callbacks through to the SoC (which > would then either implement them or forward them again). > But I think we should definitely see if we can make > the code for handling "the CPU is actually inside some > other object" as clean as we can, because I think > that's by far the most common case. Machines like > the x86 pc and the ARM virt board where the CPU is > instantiated directly in the board code are the > non-standard cases I think. We have a lot of boards > where we do instantiate the CPU in the board code > just for legacy reasons where we don't properly > model the SoC the CPU is inside. But hardware that > really has the CPU as a top level pluggable object > is rare. If we are to ditch legacy approach, It would be cleaner for SoC to have fixed/unconfigurable CPU type and each SoC being modeled as a separate QOM object/type that would instantiate CPU directly with QOM style, using type name, like: cpu = object_new(TYPE_FOO_CPU) set props if necessary object_property_set_bool(cpu, true, "realized", &err) object_unref(cpu) or similar with extra check/logic on top of plain object_new() prepare cpu_opts for cpu type TYPE_FOO_CPU cpu = qdev_device_add(cpu_opts) object_unref(cpu) instead of using cpu_init/cpu_foo_init/cpu_generic_init() with cpu_model parsing logic which is not really needed there as concrete SoC model knows exact CPU type. It should work for CPUs that are converted to QOM types, i.e. a cpu_model maps to a distinct QOM type but we still have legacy cpu_model handling where we have not completely QOMifed single base CPU types, ex. cpu_mips_init(const char *cpu_model) cpudef = get_feature_set_by_name(cpu+model) cpu = object_new(TYPE_MIPS_CPU) cpu->cpudef = cdef which rely on cpu_model parsing like x86 used to be before conversion from a single CPU type to a set of concrete classes. QOMification of remaining CPUs that rely on legacy cpu_model could be idea for gsoc/outreachy project so students could learn about QEMU internals (CCing Stefan). > > thanks > -- PMM >