You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/10/10 17:31:26 UTC
(nuttx) 28/28: board_reset: flush cache before reset
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch releases/12.7
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 0b98e9e680d45a0e9292dc084a236fed46e58dbf
Author: wangmingrong1 <wa...@xiaomi.com>
AuthorDate: Tue Jul 30 22:09:47 2024 +0800
board_reset: flush cache before reset
Signed-off-by: wangmingrong1 <wa...@xiaomi.com>
---
boards/boardctl.c | 3 +++
sched/misc/assert.c | 3 +++
2 files changed, 6 insertions(+)
diff --git a/boards/boardctl.c b/boards/boardctl.c
index 388e1e00a7..9e652560d6 100644
--- a/boards/boardctl.c
+++ b/boards/boardctl.c
@@ -32,6 +32,7 @@
#include <nuttx/arch.h>
#include <nuttx/board.h>
+#include <nuttx/cache.h>
#include <nuttx/lib/modlib.h>
#include <nuttx/binfmt/symtab.h>
#include <nuttx/drivers/ramdisk.h>
@@ -394,6 +395,7 @@ int boardctl(unsigned int cmd, uintptr_t arg)
case BOARDIOC_POWEROFF:
{
reboot_notifier_call_chain(SYS_POWER_OFF, (FAR void *)arg);
+ up_flush_dcache_all();
ret = board_power_off((int)arg);
}
break;
@@ -410,6 +412,7 @@ int boardctl(unsigned int cmd, uintptr_t arg)
case BOARDIOC_RESET:
{
reboot_notifier_call_chain(SYS_RESTART, (FAR void *)arg);
+ up_flush_dcache_all();
ret = board_reset((int)arg);
}
break;
diff --git a/sched/misc/assert.c b/sched/misc/assert.c
index 7e6fd98ed3..53b16d297e 100644
--- a/sched/misc/assert.c
+++ b/sched/misc/assert.c
@@ -28,6 +28,7 @@
#include <nuttx/arch.h>
#include <nuttx/board.h>
+#include <nuttx/cache.h>
#include <nuttx/coredump.h>
#include <nuttx/compiler.h>
#include <nuttx/irq.h>
@@ -569,6 +570,7 @@ static noreturn_function int pause_cpu_handler(FAR void *arg)
{
memcpy(g_last_regs[this_cpu()], up_current_regs(), sizeof(g_last_regs[0]));
g_cpu_paused[this_cpu()] = true;
+ up_flush_dcache_all();
while (1);
}
@@ -754,6 +756,7 @@ static void dump_fatal_info(FAR struct tcb_s *rtcb,
static void reset_board(void)
{
#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ up_flush_dcache_all();
board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
#else
for (; ; )