summaryrefslogtreecommitdiff
path: root/chip/mec1322/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/mec1322/system.c')
-rw-r--r--chip/mec1322/system.c42
1 files changed, 37 insertions, 5 deletions
diff --git a/chip/mec1322/system.c b/chip/mec1322/system.c
index 2460dc51b2..b779bac26c 100644
--- a/chip/mec1322/system.c
+++ b/chip/mec1322/system.c
@@ -14,6 +14,7 @@
#include "registers.h"
#include "shared_mem.h"
#include "system.h"
+#include "hooks.h"
#include "task.h"
#include "timer.h"
#include "util.h"
@@ -60,6 +61,27 @@ static void check_reset_cause(void)
system_set_reset_flags(flags);
}
+/* TODO(crbug.com/40789): Rename this function system_is_reboot_warm */
+int gpio_is_reboot_warm(void)
+{
+ uint32_t reset_flags;
+ /*
+ * Check reset cause here,
+ * gpio_pre_init is executed faster than system_pre_init
+ */
+ check_reset_cause();
+ reset_flags = system_get_reset_flags();
+
+ if ((reset_flags & RESET_FLAG_RESET_PIN) ||
+ (reset_flags & RESET_FLAG_POWER_ON) ||
+ (reset_flags & RESET_FLAG_WATCHDOG) ||
+ (reset_flags & RESET_FLAG_HARD) ||
+ (reset_flags & RESET_FLAG_SOFT))
+ return 0;
+ else
+ return 1;
+}
+
void system_pre_init(void)
{
/* Enable direct NVIC */
@@ -71,6 +93,10 @@ void system_pre_init(void)
/* Deassert nSIO_RESET */
MEC1322_PCR_PWR_RST_CTL &= ~(1 << 0);
+ if (MEC1322_VBAT_RAM(HIBDATA_INDEX_SAVED_RESET_FLAGS) &
+ RESET_FLAG_POWER_ON)
+ MEC1322_VBAT_RAM(MEC1322_IMAGETYPE_IDX) = 0;
+
check_reset_cause();
}
@@ -370,14 +396,20 @@ void htimer_interrupt(void)
}
DECLARE_IRQ(MEC1322_IRQ_HTIMER, htimer_interrupt, 1);
-/* TODO(crosbug.com/p/37510): Implement bootloader */
enum system_image_copy_t system_get_shrspi_image_copy(void)
{
- return SYSTEM_IMAGE_RW;
+ return MEC1322_VBAT_RAM(MEC1322_IMAGETYPE_IDX);
+}
+
+uint32_t system_get_lfw_address(void)
+{
+ uint32_t * const lfw_vector = (uint32_t * const) CONFIG_FLASH_BASE;
+
+ return *(lfw_vector + 1);
}
-/* TODO(crosbug.com/p/37510): Implement bootloader */
-uint32_t system_get_lfw_address(uint32_t flash_addr)
+void system_set_image_copy(enum system_image_copy_t copy)
{
- return CONFIG_RO_MEM_OFF;
+ MEC1322_VBAT_RAM(MEC1322_IMAGETYPE_IDX) = (copy == SYSTEM_IMAGE_RW) ?
+ SYSTEM_IMAGE_RW : SYSTEM_IMAGE_RO;
}