integratorcp: adding vmstate for save/restore
VMState added by this patch preserves correct loading of the integratorcp device state. Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru> Message-id: 20170131114310.6768.79416.stgit@PASHA-ISP [PMM: removed unnecessary minimum_version_id_old lines] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
d0dff238a8
commit
26d3202207
@ -53,6 +53,26 @@ static uint8_t integrator_spd[128] = {
|
|||||||
0xe, 4, 0x1c, 1, 2, 0x20, 0xc0, 0, 0, 0, 0, 0x30, 0x28, 0x30, 0x28, 0x40
|
0xe, 4, 0x1c, 1, 2, 0x20, 0xc0, 0, 0, 0, 0, 0x30, 0x28, 0x30, 0x28, 0x40
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const VMStateDescription vmstate_integratorcm = {
|
||||||
|
.name = "integratorcm",
|
||||||
|
.version_id = 1,
|
||||||
|
.minimum_version_id = 1,
|
||||||
|
.fields = (VMStateField[]) {
|
||||||
|
VMSTATE_UINT32(cm_osc, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_ctrl, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_lock, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_auxosc, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_sdram, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_init, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_flags, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(cm_nvflags, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(int_level, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(irq_enabled, IntegratorCMState),
|
||||||
|
VMSTATE_UINT32(fiq_enabled, IntegratorCMState),
|
||||||
|
VMSTATE_END_OF_LIST()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static uint64_t integratorcm_read(void *opaque, hwaddr offset,
|
static uint64_t integratorcm_read(void *opaque, hwaddr offset,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
@ -309,6 +329,18 @@ typedef struct icp_pic_state {
|
|||||||
qemu_irq parent_fiq;
|
qemu_irq parent_fiq;
|
||||||
} icp_pic_state;
|
} icp_pic_state;
|
||||||
|
|
||||||
|
static const VMStateDescription vmstate_icp_pic = {
|
||||||
|
.name = "icp_pic",
|
||||||
|
.version_id = 1,
|
||||||
|
.minimum_version_id = 1,
|
||||||
|
.fields = (VMStateField[]) {
|
||||||
|
VMSTATE_UINT32(level, icp_pic_state),
|
||||||
|
VMSTATE_UINT32(irq_enabled, icp_pic_state),
|
||||||
|
VMSTATE_UINT32(fiq_enabled, icp_pic_state),
|
||||||
|
VMSTATE_END_OF_LIST()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static void icp_pic_update(icp_pic_state *s)
|
static void icp_pic_update(icp_pic_state *s)
|
||||||
{
|
{
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
@ -438,6 +470,16 @@ typedef struct ICPCtrlRegsState {
|
|||||||
#define ICP_INTREG_WPROT (1 << 0)
|
#define ICP_INTREG_WPROT (1 << 0)
|
||||||
#define ICP_INTREG_CARDIN (1 << 3)
|
#define ICP_INTREG_CARDIN (1 << 3)
|
||||||
|
|
||||||
|
static const VMStateDescription vmstate_icp_control = {
|
||||||
|
.name = "icp_control",
|
||||||
|
.version_id = 1,
|
||||||
|
.minimum_version_id = 1,
|
||||||
|
.fields = (VMStateField[]) {
|
||||||
|
VMSTATE_UINT32(intreg_state, ICPCtrlRegsState),
|
||||||
|
VMSTATE_END_OF_LIST()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static uint64_t icp_control_read(void *opaque, hwaddr offset,
|
static uint64_t icp_control_read(void *opaque, hwaddr offset,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
@ -640,6 +682,21 @@ static void core_class_init(ObjectClass *klass, void *data)
|
|||||||
|
|
||||||
dc->props = core_properties;
|
dc->props = core_properties;
|
||||||
dc->realize = integratorcm_realize;
|
dc->realize = integratorcm_realize;
|
||||||
|
dc->vmsd = &vmstate_integratorcm;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void icp_pic_class_init(ObjectClass *klass, void *data)
|
||||||
|
{
|
||||||
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
|
||||||
|
dc->vmsd = &vmstate_icp_pic;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void icp_control_class_init(ObjectClass *klass, void *data)
|
||||||
|
{
|
||||||
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
|
||||||
|
dc->vmsd = &vmstate_icp_control;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo core_info = {
|
static const TypeInfo core_info = {
|
||||||
@ -655,6 +712,7 @@ static const TypeInfo icp_pic_info = {
|
|||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(icp_pic_state),
|
.instance_size = sizeof(icp_pic_state),
|
||||||
.instance_init = icp_pic_init,
|
.instance_init = icp_pic_init,
|
||||||
|
.class_init = icp_pic_class_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const TypeInfo icp_ctrl_regs_info = {
|
static const TypeInfo icp_ctrl_regs_info = {
|
||||||
@ -662,6 +720,7 @@ static const TypeInfo icp_ctrl_regs_info = {
|
|||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(ICPCtrlRegsState),
|
.instance_size = sizeof(ICPCtrlRegsState),
|
||||||
.instance_init = icp_control_init,
|
.instance_init = icp_control_init,
|
||||||
|
.class_init = icp_control_class_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void integratorcp_register_types(void)
|
static void integratorcp_register_types(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user