@samitouri / QOSamiQemu / commits / 9c93f9e5ed

target/loongarch: Use sys_state in csr_helper.c when accessing CSR registers

When accessing CSR registers in file csr_helper.c, use sys_state rather than env. There is no function change. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Philippe Mathieu-Daudé <philmd@mailo.com> Tested-by: Song Gao <gaosong@loongson.cn> Message-ID: <20260605082552.175336-9-maobibo@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>

Bibo Mao committed Jun 5, 2026 at 16:25 UTC 9c93f9e5ed9e8001d1e65b0d7ce75e82a6ff7bab
1 file changed +32 -23
target/loongarch/tcg/csr_helper.c
+32 -23
@@ -20,7 +20,8 @@
20
21 target_ulong helper_csrwr_stlbps(CPULoongArchState *env, target_ulong val)
22 {
23 - int64_t old_v = env->CSR_STLBPS;
23 + CPUSysState *sys = env_sys(env);
24 + int64_t old_v = sys->CSR_STLBPS;
25
26 /*
27 * The real hardware only supports the min tlb_ps is 12
@@ -33,7 +34,7 @@ target_ulong helper_csrwr_stlbps(CPULoongArchState *env, target_ulong val)
34 } else {
35 /* Only update PS field, reserved bit keeps zero */
36 val = FIELD_DP64(val, CSR_STLBPS, RESERVE, 0);
36 - env->CSR_STLBPS = val;
37 + sys->CSR_STLBPS = val;
38 }
39
40 return old_v;
@@ -42,17 +43,18 @@ target_ulong helper_csrwr_stlbps(CPULoongArchState *env, target_ulong val)
43 target_ulong helper_csrrd_pgd(CPULoongArchState *env)
44 {
45 int64_t v;
46 + CPUSysState *sys = env_sys(env);
47
46 - if (env->CSR_TLBRERA & 0x1) {
47 - v = env->CSR_TLBRBADV;
48 + if (sys->CSR_TLBRERA & 0x1) {
49 + v = sys->CSR_TLBRBADV;
50 } else {
49 - v = env->CSR_BADV;
51 + v = sys->CSR_BADV;
52 }
53
54 if ((v >> 63) & 0x1) {
53 - v = env->CSR_PGDH;
55 + v = sys->CSR_PGDH;
56 } else {
55 - v = env->CSR_PGDL;
57 + v = sys->CSR_PGDL;
58 }
59
60 return v;
@@ -61,10 +63,11 @@ target_ulong helper_csrrd_pgd(CPULoongArchState *env)
63 target_ulong helper_csrrd_cpuid(CPULoongArchState *env)
64 {
65 LoongArchCPU *lac = env_archcpu(env);
66 + CPUSysState *sys = env_sys(env);
67
65 - env->CSR_CPUID = CPU(lac)->cpu_index;
68 + sys->CSR_CPUID = CPU(lac)->cpu_index;
69
67 - return env->CSR_CPUID;
70 + return sys->CSR_CPUID;
71 }
72
73 target_ulong helper_csrrd_tval(CPULoongArchState *env)
@@ -77,16 +80,17 @@ target_ulong helper_csrrd_tval(CPULoongArchState *env)
80 target_ulong helper_csrrd_msgir(CPULoongArchState *env)
81 {
82 int irq, new;
83 + CPUSysState *sys = env_sys(env);
84
81 - irq = find_first_bit((unsigned long *)env->CSR_MSGIS, 256);
85 + irq = find_first_bit((unsigned long *)sys->CSR_MSGIS, 256);
86 if (irq < 256) {
83 - clear_bit(irq, (unsigned long *)env->CSR_MSGIS);
84 - new = find_first_bit((unsigned long *)env->CSR_MSGIS, 256);
87 + clear_bit(irq, (unsigned long *)sys->CSR_MSGIS);
88 + new = find_first_bit((unsigned long *)sys->CSR_MSGIS, 256);
89 if (new < 256) {
90 return irq;
91 }
92
89 - env->CSR_ESTAT = FIELD_DP64(env->CSR_ESTAT, CSR_ESTAT, MSGINT, 0);
93 + sys->CSR_ESTAT = FIELD_DP64(sys->CSR_ESTAT, CSR_ESTAT, MSGINT, 0);
94 } else {
95 /* bit 31 set 1 for no invalid irq */
96 irq = BIT(31);
@@ -97,21 +101,23 @@ target_ulong helper_csrrd_msgir(CPULoongArchState *env)
101
102 target_ulong helper_csrwr_estat(CPULoongArchState *env, target_ulong val)
103 {
100 - int64_t old_v = env->CSR_ESTAT;
104 + CPUSysState *sys = env_sys(env);
105 + int64_t old_v = sys->CSR_ESTAT;
106
107 /* Only IS[1:0] can be written */
103 - env->CSR_ESTAT = deposit64(env->CSR_ESTAT, 0, 2, val);
108 + sys->CSR_ESTAT = deposit64(sys->CSR_ESTAT, 0, 2, val);
109
110 return old_v;
111 }
112
113 target_ulong helper_csrwr_asid(CPULoongArchState *env, target_ulong val)
114 {
110 - int64_t old_v = env->CSR_ASID;
115 + CPUSysState *sys = env_sys(env);
116 + int64_t old_v = sys->CSR_ASID;
117
118 /* Only ASID filed of CSR_ASID can be written */
113 - env->CSR_ASID = deposit64(env->CSR_ASID, 0, 10, val);
114 - if (old_v != env->CSR_ASID) {
119 + sys->CSR_ASID = deposit64(sys->CSR_ASID, 0, 10, val);
120 + if (old_v != sys->CSR_ASID) {
121 tlb_flush(env_cpu(env));
122 }
123 return old_v;
@@ -120,7 +126,8 @@ target_ulong helper_csrwr_asid(CPULoongArchState *env, target_ulong val)
126 target_ulong helper_csrwr_tcfg(CPULoongArchState *env, target_ulong val)
127 {
128 LoongArchCPU *cpu = env_archcpu(env);
123 - int64_t old_v = env->CSR_TCFG;
129 + CPUSysState *sys = env_sys(env);
130 + int64_t old_v = sys->CSR_TCFG;
131
132 cpu_loongarch_store_constant_timer_config(cpu, val);
133
@@ -143,7 +150,8 @@ target_ulong helper_csrwr_ticlr(CPULoongArchState *env, target_ulong val)
150 target_ulong helper_csrwr_pwcl(CPULoongArchState *env, target_ulong val)
151 {
152 uint8_t shift, ptbase;
146 - int64_t old_v = env->CSR_PWCL;
153 + CPUSysState *sys = env_sys(env);
154 + int64_t old_v = sys->CSR_PWCL;
155
156 /*
157 * The real hardware only supports 64bit PTE width now, 128bit or others
@@ -160,14 +168,15 @@ target_ulong helper_csrwr_pwcl(CPULoongArchState *env, target_ulong val)
168 qemu_log_mask(LOG_GUEST_ERROR,
169 "Attempted set ptbase 2^%d\n", ptbase);
170 }
163 - env->CSR_PWCL = val;
171 + sys->CSR_PWCL = val;
172 return old_v;
173 }
174
175 target_ulong helper_csrwr_pwch(CPULoongArchState *env, target_ulong val)
176 {
177 uint8_t has_ptw;
170 - int64_t old_v = env->CSR_PWCH;
178 + CPUSysState *sys = env_sys(env);
179 + int64_t old_v = sys->CSR_PWCH;
180
181 val = FIELD_DP64(val, CSR_PWCH, RESERVE, 0);
182 has_ptw = FIELD_EX32(env->cpucfg[2], CPUCFG2, HPTW);
@@ -175,6 +184,6 @@ target_ulong helper_csrwr_pwch(CPULoongArchState *env, target_ulong val)
184 val = FIELD_DP64(val, CSR_PWCH, HPTW_EN, 0);
185 }
186
178 - env->CSR_PWCH = val;
187 + sys->CSR_PWCH = val;
188 return old_v;
189 }