Message ID | 20231010092901.99189-6-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | target: Make 'cpu-qom.h' really target agnostic | expand |
On 10/10/23 02:28, Philippe Mathieu-Daudé wrote: > "target/foo/cpu.h" contains the target specific declarations. > > A heterogeneous setup need to access target agnostic declarations > (at least the QOM ones, to instantiate the objects). > > Our convention is to add such target agnostic QOM declarations in > the "target/foo/cpu-qom.h" header. > > Extract QOM definitions from "cpu.h" to "cpu-qom.h". > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > target/hexagon/cpu-qom.h | 35 +++++++++++++++++++++++++++++++++++ > target/hexagon/cpu.h | 23 +---------------------- > 2 files changed, 36 insertions(+), 22 deletions(-) > create mode 100644 target/hexagon/cpu-qom.h > > diff --git a/target/hexagon/cpu-qom.h b/target/hexagon/cpu-qom.h > new file mode 100644 > index 0000000000..cd45850c64 > --- /dev/null > +++ b/target/hexagon/cpu-qom.h > @@ -0,0 +1,35 @@ > +/* > + * QEMU Hexagon CPU QOM header (target agnostic) > + * > + * Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved. > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#ifndef QEMU_HEXAGON_CPU_QOM_H > +#define QEMU_HEXAGON_CPU_QOM_H > + > +#include "hw/core/cpu.h" > +#include "qom/object.h" > + > +#define TYPE_HEXAGON_CPU "hexagon-cpu" > + > +#define HEXAGON_CPU_TYPE_SUFFIX "-" TYPE_HEXAGON_CPU > +#define HEXAGON_CPU_TYPE_NAME(name) (name HEXAGON_CPU_TYPE_SUFFIX) > + > +#define TYPE_HEXAGON_CPU_V67 HEXAGON_CPU_TYPE_NAME("v67") > +#define TYPE_HEXAGON_CPU_V68 HEXAGON_CPU_TYPE_NAME("v68") > +#define TYPE_HEXAGON_CPU_V69 HEXAGON_CPU_TYPE_NAME("v69") > +#define TYPE_HEXAGON_CPU_V71 HEXAGON_CPU_TYPE_NAME("v71") > +#define TYPE_HEXAGON_CPU_V73 HEXAGON_CPU_TYPE_NAME("v73") > + > +OBJECT_DECLARE_CPU_TYPE(HexagonCPU, HexagonCPUClass, HEXAGON_CPU) > + > +typedef struct HexagonCPUClass { > + CPUClass parent_class; > + > + DeviceRealize parent_realize; > + ResettablePhases parent_phases; > +} HexagonCPUClass; I can't imagine the class structure being any more useful generically than the object structure. All we need at this point is the typedef, provided by OBJECT_DECLARE_TYPE. I know this makes hexagon match others, but I think its the wrong direction of cleanup. r~
On 13/10/23 06:06, Richard Henderson wrote: > On 10/10/23 02:28, Philippe Mathieu-Daudé wrote: >> "target/foo/cpu.h" contains the target specific declarations. >> >> A heterogeneous setup need to access target agnostic declarations >> (at least the QOM ones, to instantiate the objects). >> >> Our convention is to add such target agnostic QOM declarations in >> the "target/foo/cpu-qom.h" header. >> >> Extract QOM definitions from "cpu.h" to "cpu-qom.h". >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> target/hexagon/cpu-qom.h | 35 +++++++++++++++++++++++++++++++++++ >> target/hexagon/cpu.h | 23 +---------------------- >> 2 files changed, 36 insertions(+), 22 deletions(-) >> create mode 100644 target/hexagon/cpu-qom.h >> +OBJECT_DECLARE_CPU_TYPE(HexagonCPU, HexagonCPUClass, HEXAGON_CPU) >> + >> +typedef struct HexagonCPUClass { >> + CPUClass parent_class; >> + >> + DeviceRealize parent_realize; >> + ResettablePhases parent_phases; >> +} HexagonCPUClass; > > I can't imagine the class structure being any more useful generically > than the object structure. All we need at this point is the typedef, > provided by OBJECT_DECLARE_TYPE. Right. > I know this makes hexagon match others, but I think its the wrong > direction of cleanup. I agree.
diff --git a/target/hexagon/cpu-qom.h b/target/hexagon/cpu-qom.h new file mode 100644 index 0000000000..cd45850c64 --- /dev/null +++ b/target/hexagon/cpu-qom.h @@ -0,0 +1,35 @@ +/* + * QEMU Hexagon CPU QOM header (target agnostic) + * + * Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef QEMU_HEXAGON_CPU_QOM_H +#define QEMU_HEXAGON_CPU_QOM_H + +#include "hw/core/cpu.h" +#include "qom/object.h" + +#define TYPE_HEXAGON_CPU "hexagon-cpu" + +#define HEXAGON_CPU_TYPE_SUFFIX "-" TYPE_HEXAGON_CPU +#define HEXAGON_CPU_TYPE_NAME(name) (name HEXAGON_CPU_TYPE_SUFFIX) + +#define TYPE_HEXAGON_CPU_V67 HEXAGON_CPU_TYPE_NAME("v67") +#define TYPE_HEXAGON_CPU_V68 HEXAGON_CPU_TYPE_NAME("v68") +#define TYPE_HEXAGON_CPU_V69 HEXAGON_CPU_TYPE_NAME("v69") +#define TYPE_HEXAGON_CPU_V71 HEXAGON_CPU_TYPE_NAME("v71") +#define TYPE_HEXAGON_CPU_V73 HEXAGON_CPU_TYPE_NAME("v73") + +OBJECT_DECLARE_CPU_TYPE(HexagonCPU, HexagonCPUClass, HEXAGON_CPU) + +typedef struct HexagonCPUClass { + CPUClass parent_class; + + DeviceRealize parent_realize; + ResettablePhases parent_phases; +} HexagonCPUClass; + +#endif diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index 10cd1efd57..7c3b993035 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -20,11 +20,10 @@ #include "fpu/softfloat-types.h" +#include "cpu-qom.h" #include "exec/cpu-defs.h" #include "hex_regs.h" #include "mmvec/mmvec.h" -#include "qom/object.h" -#include "hw/core/cpu.h" #include "hw/registerfields.h" #define NUM_PREGS 4 @@ -36,18 +35,8 @@ #define PRED_WRITES_MAX 5 /* 4 insns + endloop */ #define VSTORES_MAX 2 -#define TYPE_HEXAGON_CPU "hexagon-cpu" - -#define HEXAGON_CPU_TYPE_SUFFIX "-" TYPE_HEXAGON_CPU -#define HEXAGON_CPU_TYPE_NAME(name) (name HEXAGON_CPU_TYPE_SUFFIX) #define CPU_RESOLVING_TYPE TYPE_HEXAGON_CPU -#define TYPE_HEXAGON_CPU_V67 HEXAGON_CPU_TYPE_NAME("v67") -#define TYPE_HEXAGON_CPU_V68 HEXAGON_CPU_TYPE_NAME("v68") -#define TYPE_HEXAGON_CPU_V69 HEXAGON_CPU_TYPE_NAME("v69") -#define TYPE_HEXAGON_CPU_V71 HEXAGON_CPU_TYPE_NAME("v71") -#define TYPE_HEXAGON_CPU_V73 HEXAGON_CPU_TYPE_NAME("v73") - void hexagon_cpu_list(void); #define cpu_list hexagon_cpu_list @@ -127,16 +116,6 @@ typedef struct CPUArchState { VTCMStoreLog vtcm_log; } CPUHexagonState; -OBJECT_DECLARE_CPU_TYPE(HexagonCPU, HexagonCPUClass, HEXAGON_CPU) - -typedef struct HexagonCPUClass { - /*< private >*/ - CPUClass parent_class; - /*< public >*/ - DeviceRealize parent_realize; - ResettablePhases parent_phases; -} HexagonCPUClass; - struct ArchCPU { /*< private >*/ CPUState parent_obj;
"target/foo/cpu.h" contains the target specific declarations. A heterogeneous setup need to access target agnostic declarations (at least the QOM ones, to instantiate the objects). Our convention is to add such target agnostic QOM declarations in the "target/foo/cpu-qom.h" header. Extract QOM definitions from "cpu.h" to "cpu-qom.h". Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- target/hexagon/cpu-qom.h | 35 +++++++++++++++++++++++++++++++++++ target/hexagon/cpu.h | 23 +---------------------- 2 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 target/hexagon/cpu-qom.h