xref: /qemu/target/loongarch/machine.c (revision 7e1c521e2a108a4ffceecd8bec846625c956c8f8)
167ebd42aSXiaojuan Yang /* SPDX-License-Identifier: GPL-2.0-or-later */
267ebd42aSXiaojuan Yang /*
367ebd42aSXiaojuan Yang  * QEMU LoongArch Machine State
467ebd42aSXiaojuan Yang  *
567ebd42aSXiaojuan Yang  * Copyright (c) 2021 Loongson Technology Corporation Limited
667ebd42aSXiaojuan Yang  */
767ebd42aSXiaojuan Yang 
867ebd42aSXiaojuan Yang #include "qemu/osdep.h"
967ebd42aSXiaojuan Yang #include "cpu.h"
1067ebd42aSXiaojuan Yang #include "migration/cpu.h"
11*7e1c521eSXiaojuan Yang #include "internals.h"
12*7e1c521eSXiaojuan Yang 
13*7e1c521eSXiaojuan Yang /* TLB state */
14*7e1c521eSXiaojuan Yang const VMStateDescription vmstate_tlb = {
15*7e1c521eSXiaojuan Yang     .name = "cpu/tlb",
16*7e1c521eSXiaojuan Yang     .version_id = 0,
17*7e1c521eSXiaojuan Yang     .minimum_version_id = 0,
18*7e1c521eSXiaojuan Yang     .fields = (VMStateField[]) {
19*7e1c521eSXiaojuan Yang         VMSTATE_UINT64(tlb_misc, LoongArchTLB),
20*7e1c521eSXiaojuan Yang         VMSTATE_UINT64(tlb_entry0, LoongArchTLB),
21*7e1c521eSXiaojuan Yang         VMSTATE_UINT64(tlb_entry1, LoongArchTLB),
22*7e1c521eSXiaojuan Yang         VMSTATE_END_OF_LIST()
23*7e1c521eSXiaojuan Yang     }
24*7e1c521eSXiaojuan Yang };
2567ebd42aSXiaojuan Yang 
2667ebd42aSXiaojuan Yang /* LoongArch CPU state */
2767ebd42aSXiaojuan Yang 
2867ebd42aSXiaojuan Yang const VMStateDescription vmstate_loongarch_cpu = {
2967ebd42aSXiaojuan Yang     .name = "cpu",
3067ebd42aSXiaojuan Yang     .version_id = 0,
3167ebd42aSXiaojuan Yang     .minimum_version_id = 0,
3267ebd42aSXiaojuan Yang     .fields = (VMStateField[]) {
3367ebd42aSXiaojuan Yang 
3467ebd42aSXiaojuan Yang         VMSTATE_UINTTL_ARRAY(env.gpr, LoongArchCPU, 32),
3567ebd42aSXiaojuan Yang         VMSTATE_UINTTL(env.pc, LoongArchCPU),
3667ebd42aSXiaojuan Yang         VMSTATE_UINT64_ARRAY(env.fpr, LoongArchCPU, 32),
3767ebd42aSXiaojuan Yang         VMSTATE_UINT32(env.fcsr0, LoongArchCPU),
3867ebd42aSXiaojuan Yang         VMSTATE_BOOL_ARRAY(env.cf, LoongArchCPU, 8),
3967ebd42aSXiaojuan Yang 
4067ebd42aSXiaojuan Yang         /* Remaining CSRs */
4167ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_CRMD, LoongArchCPU),
4267ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PRMD, LoongArchCPU),
4367ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_EUEN, LoongArchCPU),
4467ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MISC, LoongArchCPU),
4567ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_ECFG, LoongArchCPU),
4667ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_ESTAT, LoongArchCPU),
4767ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_ERA, LoongArchCPU),
4867ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_BADV, LoongArchCPU),
4967ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_BADI, LoongArchCPU),
5067ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_EENTRY, LoongArchCPU),
5167ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBIDX, LoongArchCPU),
5267ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBEHI, LoongArchCPU),
5367ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBELO0, LoongArchCPU),
5467ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBELO1, LoongArchCPU),
5567ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_ASID, LoongArchCPU),
5667ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PGDL, LoongArchCPU),
5767ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PGDH, LoongArchCPU),
5867ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PGD, LoongArchCPU),
5967ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PWCL, LoongArchCPU),
6067ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PWCH, LoongArchCPU),
6167ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_STLBPS, LoongArchCPU),
6267ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_RVACFG, LoongArchCPU),
6367ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PRCFG1, LoongArchCPU),
6467ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PRCFG2, LoongArchCPU),
6567ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_PRCFG3, LoongArchCPU),
6667ebd42aSXiaojuan Yang         VMSTATE_UINT64_ARRAY(env.CSR_SAVE, LoongArchCPU, 16),
6767ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TID, LoongArchCPU),
6867ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TCFG, LoongArchCPU),
6967ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TVAL, LoongArchCPU),
7067ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_CNTC, LoongArchCPU),
7167ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TICLR, LoongArchCPU),
7267ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_LLBCTL, LoongArchCPU),
7367ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_IMPCTL1, LoongArchCPU),
7467ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_IMPCTL2, LoongArchCPU),
7567ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRENTRY, LoongArchCPU),
7667ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRBADV, LoongArchCPU),
7767ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRERA, LoongArchCPU),
7867ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRSAVE, LoongArchCPU),
7967ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRELO0, LoongArchCPU),
8067ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRELO1, LoongArchCPU),
8167ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBREHI, LoongArchCPU),
8267ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_TLBRPRMD, LoongArchCPU),
8367ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MERRCTL, LoongArchCPU),
8467ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MERRINFO1, LoongArchCPU),
8567ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MERRINFO2, LoongArchCPU),
8667ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MERRENTRY, LoongArchCPU),
8767ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MERRERA, LoongArchCPU),
8867ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_MERRSAVE, LoongArchCPU),
8967ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_CTAG, LoongArchCPU),
9067ebd42aSXiaojuan Yang         VMSTATE_UINT64_ARRAY(env.CSR_DMW, LoongArchCPU, 4),
9167ebd42aSXiaojuan Yang 
9267ebd42aSXiaojuan Yang         /* Debug CSRs */
9367ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_DBG, LoongArchCPU),
9467ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_DERA, LoongArchCPU),
9567ebd42aSXiaojuan Yang         VMSTATE_UINT64(env.CSR_DSAVE, LoongArchCPU),
96*7e1c521eSXiaojuan Yang         /* TLB */
97*7e1c521eSXiaojuan Yang         VMSTATE_STRUCT_ARRAY(env.tlb, LoongArchCPU, LOONGARCH_TLB_MAX,
98*7e1c521eSXiaojuan Yang                              0, vmstate_tlb, LoongArchTLB),
9967ebd42aSXiaojuan Yang 
10067ebd42aSXiaojuan Yang         VMSTATE_END_OF_LIST()
10167ebd42aSXiaojuan Yang     },
10267ebd42aSXiaojuan Yang };
103