Skip to content

Commit 32a9b8a

Browse files
committed
Merge branch 'bugfix/esp_idf_esp32h4_dualcore_crash' into 'master'
fix(esp_hw_support): resolved setting mie to disable interrupts failed in sleep flow Closes IDF-14279 See merge request espressif/esp-idf!42605
2 parents b768059 + 128e1e7 commit 32a9b8a

File tree

20 files changed

+131
-26
lines changed

20 files changed

+131
-26
lines changed

components/esp_hw_support/lowpower/port/esp32c5/rvsleep-frames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ STRUCT_BEGIN
8383
STRUCT_FIELD (long, 4, RV_SLP_CTX_MTVAL, mtval) /* Machine Trap Value */
8484
STRUCT_FIELD (long, 4, RV_SLP_CTX_MIE, mie) /* Machine intr enable */
8585
STRUCT_FIELD (long, 4, RV_SLP_CTX_MIP, mip) /* Machine intr pending */
86+
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTTHRESH, mintthresh) /* Machine intr threshold */
8687

8788
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMUFUNC, pmufunc) /* A field is used to identify whether it is going
8889
* to sleep or has just been awakened. We use the
@@ -173,7 +174,6 @@ STRUCT_BEGIN
173174
STRUCT_FIELD (long, 4, RV_SLP_CTX_MCYCLE, mcycle)
174175

175176
STRUCT_FIELD (long, 4, RV_SLP_CTX_MTVT, mtvt)
176-
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTTHRESH, mintthresh)
177177
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTSTATUS, mintstatus)
178178
STRUCT_FIELD (long, 4, RV_SLP_CTX_MXSTATUS, mxstatus)
179179
STRUCT_FIELD (long, 4, RV_SLP_CTX_MHCR, mhcr)

components/esp_hw_support/lowpower/port/esp32c5/sleep_cpu.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ FORCE_INLINE_ATTR void restore_mstatus(uint32_t mstatus_val)
6060
RV_WRITE_CSR(mstatus, mstatus_val);
6161
}
6262

63+
#if __riscv_zcmp && SOC_CPU_ZCMP_WORKAROUND
64+
FORCE_INLINE_ATTR uint32_t save_mintthresh_and_disable_global_int(void)
65+
{
66+
/* Due to the reason described in IDF-14279, when mie is set to 0, mintthresh needs to be set to 0xff. */
67+
// TODO: IDF-14279 DIG-661
68+
return RV_READ_MINTTHRESH_AND_DISABLE_INTR();
69+
}
70+
71+
FORCE_INLINE_ATTR void restore_mintthresh(uint32_t mintthresh_val)
72+
{
73+
RV_RESTORE_MINTTHRESH(mintthresh_val);
74+
}
75+
#endif
76+
6377
static IRAM_ATTR RvCoreNonCriticalSleepFrame * rv_core_noncritical_regs_save(void)
6478
{
6579
assert(s_cpu_retention.retent.non_critical_frame);
@@ -128,7 +142,6 @@ static IRAM_ATTR RvCoreNonCriticalSleepFrame * rv_core_noncritical_regs_save(voi
128142
frame->mcycle = RV_READ_CSR(mcycle);
129143

130144
frame->mtvt = RV_READ_CSR(CUSTOM_CSR_MTVT);
131-
frame->mintthresh = RV_READ_CSR(CUSTOM_CSR_MINTTHRESH);
132145
frame->mxstatus = RV_READ_CSR(CUSTOM_CSR_MXSTATUS);
133146
frame->mhcr = RV_READ_CSR(CUSTOM_CSR_MHCR);
134147
frame->mhint = RV_READ_CSR(CUSTOM_CSR_MHINT);
@@ -203,7 +216,6 @@ static IRAM_ATTR void rv_core_noncritical_regs_restore(RvCoreNonCriticalSleepFra
203216
RV_WRITE_CSR(mcycle, frame->mcycle);
204217

205218
RV_WRITE_CSR(CUSTOM_CSR_MTVT, frame->mtvt);
206-
RV_WRITE_CSR(CUSTOM_CSR_MINTTHRESH, frame->mintthresh);
207219
RV_WRITE_CSR(CUSTOM_CSR_MXSTATUS, frame->mxstatus);
208220
RV_WRITE_CSR(CUSTOM_CSR_MHCR, frame->mhcr);
209221
RV_WRITE_CSR(CUSTOM_CSR_MHINT, frame->mhint);
@@ -275,14 +287,14 @@ static IRAM_ATTR esp_err_t do_cpu_retention(sleep_cpu_entry_cb_t goto_sleep,
275287
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_END, (void *)0);
276288
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
277289
/* Minus 2 * sizeof(long) is for bypass `pmufunc` and `frame_crc` field */
278-
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
290+
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
279291
#endif
280292
REG_WRITE(RTC_SLEEP_WAKE_STUB_ADDR_REG, (uint32_t)rv_core_critical_regs_restore);
281293
return (*goto_sleep)(wakeup_opt, reject_opt, lslp_mem_inf_fpu, dslp);
282294
}
283295
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
284296
else {
285-
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
297+
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
286298
}
287299
#endif
288300

@@ -294,6 +306,9 @@ esp_err_t IRAM_ATTR esp_sleep_cpu_retention(uint32_t (*goto_sleep)(uint32_t, uin
294306
{
295307
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_START, (void *)0);
296308
uint32_t mstatus = save_mstatus_and_disable_global_int();
309+
#if __riscv_zcmp && SOC_CPU_ZCMP_WORKAROUND
310+
uint32_t mintthresh = save_mintthresh_and_disable_global_int();
311+
#endif
297312

298313
cpu_domain_dev_regs_save(s_cpu_retention.retent.clic_frame);
299314
cpu_domain_dev_regs_save(s_cpu_retention.retent.clint_frame);
@@ -314,6 +329,9 @@ esp_err_t IRAM_ATTR esp_sleep_cpu_retention(uint32_t (*goto_sleep)(uint32_t, uin
314329
cpu_domain_dev_regs_restore(s_cpu_retention.retent.cache_config_frame);
315330
cpu_domain_dev_regs_restore(s_cpu_retention.retent.clint_frame);
316331
cpu_domain_dev_regs_restore(s_cpu_retention.retent.clic_frame);
332+
#if __riscv_zcmp && SOC_CPU_ZCMP_WORKAROUND
333+
restore_mintthresh(mintthresh);
334+
#endif
317335
restore_mstatus(mstatus);
318336
return err;
319337
}

components/esp_hw_support/lowpower/port/esp32c5/sleep_cpu_asm.S

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -8,6 +8,7 @@
88
#include "rvsleep-frames.h"
99
#include "soc/soc_caps.h"
1010
#include "sdkconfig.h"
11+
#include "riscv/csr_clic.h"
1112

1213
.section .data1,"aw"
1314
.global rv_core_critical_regs_frame
@@ -91,6 +92,8 @@ rv_core_critical_regs_save:
9192
sw t3, RV_SLP_CTX_MIP(t0)
9293
csrr t1, mepc
9394
sw t1, RV_SLP_CTX_MEPC(t0)
95+
csrr t2, MINTTHRESH_CSR
96+
sw t2, RV_SLP_CTX_MINTTHRESH(t0)
9497

9598
/*
9699
!!! Let idf knows it's going to sleep !!!
@@ -162,6 +165,8 @@ rv_core_critical_regs_restore:
162165
ori t1, t1, 0x3
163166
sw t1, RV_SLP_CTX_PMUFUNC(t0)
164167

168+
lw t2, RV_SLP_CTX_MINTTHRESH(t0)
169+
csrw MINTTHRESH_CSR, t2
165170
lw t2, RV_SLP_CTX_MEPC(t0)
166171
csrw mepc, t2
167172
lw t3, RV_SLP_CTX_MIP(t0)

components/esp_hw_support/lowpower/port/esp32c6/sleep_cpu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,14 @@ static IRAM_ATTR esp_err_t do_cpu_retention(sleep_cpu_entry_cb_t goto_sleep,
295295
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_END, (void *)0);
296296
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
297297
/* Minus 2 * sizeof(long) is for bypass `pmufunc` and `frame_crc` field */
298-
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
298+
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
299299
#endif
300300
REG_WRITE(RTC_SLEEP_WAKE_STUB_ADDR_REG, (uint32_t)rv_core_critical_regs_restore);
301301
return (*goto_sleep)(wakeup_opt, reject_opt, lslp_mem_inf_fpu, dslp);
302302
}
303303
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
304304
else {
305-
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
305+
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
306306
}
307307
#endif
308308

components/esp_hw_support/lowpower/port/esp32c61/rvsleep-frames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ STRUCT_BEGIN
8383
STRUCT_FIELD (long, 4, RV_SLP_CTX_MTVAL, mtval) /* Machine Trap Value */
8484
STRUCT_FIELD (long, 4, RV_SLP_CTX_MIE, mie) /* Machine intr enable */
8585
STRUCT_FIELD (long, 4, RV_SLP_CTX_MIP, mip) /* Machine intr pending */
86+
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTTHRESH, mintthresh) /* Machine intr threshold */
8687

8788
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMUFUNC, pmufunc) /* A field is used to identify whether it is going
8889
* to sleep or has just been awakened. We use the
@@ -173,7 +174,6 @@ STRUCT_BEGIN
173174
STRUCT_FIELD (long, 4, RV_SLP_CTX_MCYCLE, mcycle)
174175

175176
STRUCT_FIELD (long, 4, RV_SLP_CTX_MTVT, mtvt)
176-
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTTHRESH, mintthresh)
177177
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTSTATUS, mintstatus)
178178
STRUCT_FIELD (long, 4, RV_SLP_CTX_MXSTATUS, mxstatus)
179179
STRUCT_FIELD (long, 4, RV_SLP_CTX_MHCR, mhcr)

components/esp_hw_support/lowpower/port/esp32c61/sleep_cpu.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ FORCE_INLINE_ATTR void restore_mstatus(uint32_t mstatus_val)
6060
RV_WRITE_CSR(mstatus, mstatus_val);
6161
}
6262

63+
#if __riscv_zcmp && SOC_CPU_ZCMP_WORKAROUND
64+
FORCE_INLINE_ATTR uint32_t save_mintthresh_and_disable_global_int(void)
65+
{
66+
/* Due to the reason described in IDF-14279, when mie is set to 0, mintthresh needs to be set to 0xff. */
67+
// TODO: IDF-14279 DIG-661
68+
return RV_READ_MINTTHRESH_AND_DISABLE_INTR();
69+
}
70+
71+
FORCE_INLINE_ATTR void restore_mintthresh(uint32_t mintthresh_val)
72+
{
73+
RV_RESTORE_MINTTHRESH(mintthresh_val);
74+
}
75+
#endif
76+
6377
static IRAM_ATTR RvCoreNonCriticalSleepFrame * rv_core_noncritical_regs_save(void)
6478
{
6579
assert(s_cpu_retention.retent.non_critical_frame);
@@ -128,7 +142,6 @@ static IRAM_ATTR RvCoreNonCriticalSleepFrame * rv_core_noncritical_regs_save(voi
128142
frame->mcycle = RV_READ_CSR(mcycle);
129143

130144
frame->mtvt = RV_READ_CSR(CUSTOM_CSR_MTVT);
131-
frame->mintthresh = RV_READ_CSR(CUSTOM_CSR_MINTTHRESH);
132145
frame->mxstatus = RV_READ_CSR(CUSTOM_CSR_MXSTATUS);
133146
frame->mhcr = RV_READ_CSR(CUSTOM_CSR_MHCR);
134147
frame->mhint = RV_READ_CSR(CUSTOM_CSR_MHINT);
@@ -203,7 +216,6 @@ static IRAM_ATTR void rv_core_noncritical_regs_restore(RvCoreNonCriticalSleepFra
203216
RV_WRITE_CSR(mcycle, frame->mcycle);
204217

205218
RV_WRITE_CSR(CUSTOM_CSR_MTVT, frame->mtvt);
206-
RV_WRITE_CSR(CUSTOM_CSR_MINTTHRESH, frame->mintthresh);
207219
RV_WRITE_CSR(CUSTOM_CSR_MXSTATUS, frame->mxstatus);
208220
RV_WRITE_CSR(CUSTOM_CSR_MHCR, frame->mhcr);
209221
RV_WRITE_CSR(CUSTOM_CSR_MHINT, frame->mhint);
@@ -275,14 +287,14 @@ static IRAM_ATTR esp_err_t do_cpu_retention(sleep_cpu_entry_cb_t goto_sleep,
275287
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_END, (void *)0);
276288
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
277289
/* Minus 2 * sizeof(long) is for bypass `pmufunc` and `frame_crc` field */
278-
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
290+
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
279291
#endif
280292
REG_WRITE(RTC_SLEEP_WAKE_STUB_ADDR_REG, (uint32_t)rv_core_critical_regs_restore);
281293
return (*goto_sleep)(wakeup_opt, reject_opt, lslp_mem_inf_fpu, dslp);
282294
}
283295
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
284296
else {
285-
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
297+
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
286298
}
287299
#endif
288300

@@ -294,6 +306,9 @@ esp_err_t IRAM_ATTR esp_sleep_cpu_retention(uint32_t (*goto_sleep)(uint32_t, uin
294306
{
295307
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_START, (void *)0);
296308
uint32_t mstatus = save_mstatus_and_disable_global_int();
309+
#if __riscv_zcmp && SOC_CPU_ZCMP_WORKAROUND
310+
uint32_t mintthresh = save_mintthresh_and_disable_global_int();
311+
#endif
297312

298313
cpu_domain_dev_regs_save(s_cpu_retention.retent.clic_frame);
299314
cpu_domain_dev_regs_save(s_cpu_retention.retent.clint_frame);
@@ -314,6 +329,9 @@ esp_err_t IRAM_ATTR esp_sleep_cpu_retention(uint32_t (*goto_sleep)(uint32_t, uin
314329
cpu_domain_dev_regs_restore(s_cpu_retention.retent.cache_config_frame);
315330
cpu_domain_dev_regs_restore(s_cpu_retention.retent.clint_frame);
316331
cpu_domain_dev_regs_restore(s_cpu_retention.retent.clic_frame);
332+
#if __riscv_zcmp && SOC_CPU_ZCMP_WORKAROUND
333+
restore_mintthresh(mintthresh);
334+
#endif
317335
restore_mstatus(mstatus);
318336
return err;
319337
}

components/esp_hw_support/lowpower/port/esp32c61/sleep_cpu_asm.S

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -8,6 +8,7 @@
88
#include "rvsleep-frames.h"
99
#include "soc/soc_caps.h"
1010
#include "sdkconfig.h"
11+
#include "riscv/csr_clic.h"
1112

1213
.section .data1,"aw"
1314
.global rv_core_critical_regs_frame
@@ -91,6 +92,8 @@ rv_core_critical_regs_save:
9192
sw t3, RV_SLP_CTX_MIP(t0)
9293
csrr t1, mepc
9394
sw t1, RV_SLP_CTX_MEPC(t0)
95+
csrr t2, MINTTHRESH_CSR
96+
sw t2, RV_SLP_CTX_MINTTHRESH(t0)
9497

9598
/*
9699
!!! Let idf knows it's going to sleep !!!
@@ -162,6 +165,8 @@ rv_core_critical_regs_restore:
162165
ori t1, t1, 0x3
163166
sw t1, RV_SLP_CTX_PMUFUNC(t0)
164167

168+
lw t2, RV_SLP_CTX_MINTTHRESH(t0)
169+
csrw MINTTHRESH_CSR, t2
165170
lw t2, RV_SLP_CTX_MEPC(t0)
166171
csrw mepc, t2
167172
lw t3, RV_SLP_CTX_MIP(t0)

components/esp_hw_support/lowpower/port/esp32h2/sleep_cpu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,14 @@ static IRAM_ATTR esp_err_t do_cpu_retention(sleep_cpu_entry_cb_t goto_sleep,
295295
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_END, (void *)0);
296296
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
297297
/* Minus 2 * sizeof(long) is for bypass `pmufunc` and `frame_crc` field */
298-
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
298+
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
299299
#endif
300300
REG_WRITE(RTC_SLEEP_WAKE_STUB_ADDR_REG, (uint32_t)rv_core_critical_regs_restore);
301301
return (*goto_sleep)(wakeup_opt, reject_opt, lslp_mem_inf_fpu, dslp);
302302
}
303303
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
304304
else {
305-
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
305+
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
306306
}
307307
#endif
308308

components/esp_hw_support/lowpower/port/esp32h21/sleep_cpu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,14 +294,14 @@ static IRAM_ATTR esp_err_t do_cpu_retention(sleep_cpu_entry_cb_t goto_sleep,
294294
esp_sleep_execute_event_callbacks(SLEEP_EVENT_SW_CPU_TO_MEM_END, (void *)0);
295295
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
296296
/* Minus 2 * sizeof(long) is for bypass `pmufunc` and `frame_crc` field */
297-
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
297+
update_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
298298
#endif
299299
REG_WRITE(RTC_SLEEP_WAKE_STUB_ADDR_REG, (uint32_t)rv_core_critical_regs_restore);
300300
return (*goto_sleep)(wakeup_opt, reject_opt, lslp_mem_inf_fpu, dslp);
301301
}
302302
#if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME
303303
else {
304-
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_FRMSZ - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
304+
validate_retention_frame_crc((uint32_t*)frame, RV_SLEEP_CTX_SZ1 - 2 * sizeof(long), (uint32_t *)(&frame->frame_crc));
305305
}
306306
#endif
307307

components/esp_hw_support/lowpower/port/esp32h4/rvsleep-frames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ STRUCT_BEGIN
8383
STRUCT_FIELD (long, 4, RV_SLP_CTX_MTVAL, mtval) /* Machine Trap Value */
8484
STRUCT_FIELD (long, 4, RV_SLP_CTX_MIE, mie) /* Machine intr enable */
8585
STRUCT_FIELD (long, 4, RV_SLP_CTX_MIP, mip) /* Machine intr pending */
86+
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTTHRESH, mintthresh) /* Machine intr threshold */
8687

8788
STRUCT_FIELD (long, 4, RV_SLP_CTX_PMUFUNC, pmufunc) /* A field is used to identify whether it is going
8889
* to sleep or has just been awakened. We use the
@@ -197,7 +198,6 @@ STRUCT_BEGIN
197198

198199
STRUCT_FIELD (long, 4, RV_SLP_CTX_MCYCLE, mcycle)
199200
STRUCT_FIELD (long, 4, RV_SLP_CTX_MTVT, mtvt)
200-
STRUCT_FIELD (long, 4, RV_SLP_CTX_MINTTHRESH, mintthresh)
201201
STRUCT_FIELD (long, 4, RV_SLP_CTX_MXSTATUS, mxstatus)
202202
STRUCT_FIELD (long, 4, RV_SLP_CTX_MHCR, mhcr)
203203
STRUCT_FIELD (long, 4, RV_SLP_CTX_MHINT, mhint)

0 commit comments

Comments
 (0)