mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
hw/misc/xlnx-versal-crl: split into base/concrete classes
Split the TYPE_XLNX_VERSAL_CRL type into base and concrete classes. This is in preparation for the versal2 version of the CRL. Signed-off-by: Luc Michel <luc.michel@amd.com> Reviewed-by: Francisco Iglesias <francisco.iglesias@amd.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-id: 20250926070806.292065-32-luc.michel@amd.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
committed by
Peter Maydell
parent
3074e35115
commit
c27ca57288
+29
-19
@@ -298,7 +298,7 @@ static const RegisterAccessInfo crl_regs_info[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static void crl_reset_enter(Object *obj, ResetType type)
|
||||
static void versal_crl_reset_enter(Object *obj, ResetType type)
|
||||
{
|
||||
XlnxVersalCRL *s = XLNX_VERSAL_CRL(obj);
|
||||
unsigned int i;
|
||||
@@ -308,7 +308,7 @@ static void crl_reset_enter(Object *obj, ResetType type)
|
||||
}
|
||||
}
|
||||
|
||||
static void crl_reset_hold(Object *obj, ResetType type)
|
||||
static void versal_crl_reset_hold(Object *obj, ResetType type)
|
||||
{
|
||||
XlnxVersalCRL *s = XLNX_VERSAL_CRL(obj);
|
||||
|
||||
@@ -325,20 +325,22 @@ static const MemoryRegionOps crl_ops = {
|
||||
},
|
||||
};
|
||||
|
||||
static void crl_init(Object *obj)
|
||||
static void versal_crl_init(Object *obj)
|
||||
{
|
||||
XlnxVersalCRL *s = XLNX_VERSAL_CRL(obj);
|
||||
XlnxVersalCRLBase *xvcb = XLNX_VERSAL_CRL_BASE(obj);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||
int i;
|
||||
|
||||
s->reg_array =
|
||||
xvcb->reg_array =
|
||||
register_init_block32(DEVICE(obj), crl_regs_info,
|
||||
ARRAY_SIZE(crl_regs_info),
|
||||
s->regs_info, s->regs,
|
||||
&crl_ops,
|
||||
XLNX_VERSAL_CRL_ERR_DEBUG,
|
||||
CRL_R_MAX * 4);
|
||||
sysbus_init_mmio(sbd, &s->reg_array->mem);
|
||||
xvcb->regs = s->regs;
|
||||
sysbus_init_mmio(sbd, &xvcb->reg_array->mem);
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s->cfg.cpu_r5); ++i) {
|
||||
@@ -377,11 +379,11 @@ static void crl_init(Object *obj)
|
||||
|
||||
static void crl_finalize(Object *obj)
|
||||
{
|
||||
XlnxVersalCRL *s = XLNX_VERSAL_CRL(obj);
|
||||
XlnxVersalCRLBase *s = XLNX_VERSAL_CRL_BASE(obj);
|
||||
register_finalize_block(s->reg_array);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_crl = {
|
||||
static const VMStateDescription vmstate_versal_crl = {
|
||||
.name = TYPE_XLNX_VERSAL_CRL,
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
@@ -391,29 +393,37 @@ static const VMStateDescription vmstate_crl = {
|
||||
}
|
||||
};
|
||||
|
||||
static void crl_class_init(ObjectClass *klass, const void *data)
|
||||
static void versal_crl_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
ResettableClass *rc = RESETTABLE_CLASS(klass);
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
ResettableClass *rc = RESETTABLE_CLASS(klass);
|
||||
|
||||
dc->vmsd = &vmstate_crl;
|
||||
|
||||
rc->phases.enter = crl_reset_enter;
|
||||
rc->phases.hold = crl_reset_hold;
|
||||
dc->vmsd = &vmstate_versal_crl;
|
||||
rc->phases.enter = versal_crl_reset_enter;
|
||||
rc->phases.hold = versal_crl_reset_hold;
|
||||
}
|
||||
|
||||
static const TypeInfo crl_info = {
|
||||
.name = TYPE_XLNX_VERSAL_CRL,
|
||||
static const TypeInfo crl_base_info = {
|
||||
.name = TYPE_XLNX_VERSAL_CRL_BASE,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(XlnxVersalCRL),
|
||||
.class_init = crl_class_init,
|
||||
.instance_init = crl_init,
|
||||
.instance_size = sizeof(XlnxVersalCRLBase),
|
||||
.class_size = sizeof(XlnxVersalCRLBaseClass),
|
||||
.instance_finalize = crl_finalize,
|
||||
.abstract = true,
|
||||
};
|
||||
|
||||
static const TypeInfo versal_crl_info = {
|
||||
.name = TYPE_XLNX_VERSAL_CRL,
|
||||
.parent = TYPE_XLNX_VERSAL_CRL_BASE,
|
||||
.instance_size = sizeof(XlnxVersalCRL),
|
||||
.instance_init = versal_crl_init,
|
||||
.class_init = versal_crl_class_init,
|
||||
};
|
||||
|
||||
static void crl_register_types(void)
|
||||
{
|
||||
type_register_static(&crl_info);
|
||||
type_register_static(&crl_base_info);
|
||||
type_register_static(&versal_crl_info);
|
||||
}
|
||||
|
||||
type_init(crl_register_types)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
* QEMU model of the Clock-Reset-LPD (CRL).
|
||||
*
|
||||
* Copyright (c) 2022 Xilinx Inc.
|
||||
* Copyright (c) 2025 Advanced Micro Devices, Inc.
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*
|
||||
* Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>
|
||||
@@ -12,8 +13,13 @@
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/register.h"
|
||||
#include "target/arm/cpu-qom.h"
|
||||
#include "hw/arm/xlnx-versal-version.h"
|
||||
|
||||
#define TYPE_XLNX_VERSAL_CRL_BASE "xlnx-versal-crl-base"
|
||||
#define TYPE_XLNX_VERSAL_CRL "xlnx-versal-crl"
|
||||
|
||||
OBJECT_DECLARE_TYPE(XlnxVersalCRLBase, XlnxVersalCRLBaseClass,
|
||||
XLNX_VERSAL_CRL_BASE)
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(XlnxVersalCRL, XLNX_VERSAL_CRL)
|
||||
|
||||
REG32(ERR_CTRL, 0x0)
|
||||
@@ -216,8 +222,19 @@ REG32(PSM_RST_MODE, 0x370)
|
||||
|
||||
#define RPU_MAX_CPU 2
|
||||
|
||||
struct XlnxVersalCRL {
|
||||
struct XlnxVersalCRLBase {
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
RegisterInfoArray *reg_array;
|
||||
uint32_t *regs;
|
||||
};
|
||||
|
||||
struct XlnxVersalCRLBaseClass {
|
||||
SysBusDeviceClass parent_class;
|
||||
};
|
||||
|
||||
struct XlnxVersalCRL {
|
||||
XlnxVersalCRLBase parent_obj;
|
||||
qemu_irq irq;
|
||||
|
||||
struct {
|
||||
@@ -228,8 +245,18 @@ struct XlnxVersalCRL {
|
||||
DeviceState *usb;
|
||||
} cfg;
|
||||
|
||||
RegisterInfoArray *reg_array;
|
||||
uint32_t regs[CRL_R_MAX];
|
||||
RegisterInfo regs_info[CRL_R_MAX];
|
||||
};
|
||||
|
||||
static inline const char *xlnx_versal_crl_class_name(VersalVersion ver)
|
||||
{
|
||||
switch (ver) {
|
||||
case VERSAL_VER_VERSAL:
|
||||
return TYPE_XLNX_VERSAL_CRL;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user