summaryrefslogtreecommitdiff
path: root/zephyr/shim/chip/mchp/system_download_from_flash.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/chip/mchp/system_download_from_flash.c')
-rw-r--r--zephyr/shim/chip/mchp/system_download_from_flash.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/zephyr/shim/chip/mchp/system_download_from_flash.c b/zephyr/shim/chip/mchp/system_download_from_flash.c
index 665db2cccd..99026fe822 100644
--- a/zephyr/shim/chip/mchp/system_download_from_flash.c
+++ b/zephyr/shim/chip/mchp/system_download_from_flash.c
@@ -10,6 +10,10 @@
#include "system_chip.h"
/* Modules Map */
+#define WDT_NODE DT_INST(0, microchip_xec_watchdog)
+#define STRUCT_WDT_REG_BASE_ADDR \
+ ((struct wdt_regs *)(DT_REG_ADDR(WDT_NODE)))
+
#define PCR_NODE DT_INST(0, microchip_xec_pcr)
#define STRUCT_PCR_REG_BASE_ADDR \
((struct pcr_regs *)DT_REG_ADDR_BY_IDX(PCR_NODE, 0))
@@ -26,15 +30,15 @@
(MCHP_QMSPI_STS_DONE | MCHP_QMSPI_STS_DMA_DONE)
#define QSPI_STATUS_ERR \
- (MCHP_QMSPI_STS_TXB_ERR | MCHP_QMSPI_STS_RXB_ERR | \
+ (MCHP_QMSPI_STS_TXB_ERR | MCHP_QMSPI_STS_RXB_ERR | \
MCHP_QMSPI_STS_PROG_ERR | MCHP_QMSPI_STS_LDMA_RX_ERR)
-
noreturn void __keep __attribute__ ((section(".code_in_sram2")))
__start_qspi(uint32_t resetVectAddr)
{
struct pcr_regs *pcr = STRUCT_PCR_REG_BASE_ADDR;
struct qmspi_regs *qspi = STRUCT_QSPI_REG_BASE_ADDR;
+ struct wdt_regs *wdt = STRUCT_WDT_REG_BASE_ADDR;
uint32_t qsts = 0;
uint32_t exeAddr = 0;
@@ -47,6 +51,9 @@ __start_qspi(uint32_t resetVectAddr)
break;
}
+ /* Stop the watchdog */
+ wdt->CTRL &= ~MCHP_WDT_CTRL_EN;
+
qspi->MODE &= ~(MCHP_QMSPI_M_ACTIVATE);
if (qsts & QSPI_STATUS_ERR) {
pcr->SYS_RST |= MCHP_PCR_SYS_RESET_NOW;
@@ -67,8 +74,7 @@ __start_qspi(uint32_t resetVectAddr)
;
}
-/* PK SCM */
-uintptr_t __lfw_sram_start = 0x127800;
+uintptr_t __lfw_sram_start = CONFIG_CROS_EC_RAM_BASE + CONFIG_CROS_EC_RAM_SIZE;
typedef void (*START_QSPI_IN_SRAM_FP)(uint32_t);
@@ -85,9 +91,9 @@ void system_download_from_flash(uint32_t srcAddr, uint32_t dstAddr,
/* Check valid address for jumpiing */
__ASSERT_NO_MSG(exeAddr != 0x0);
-
+ /* Configure QMSPI controller */
qspi->MODE = MCHP_QMSPI_M_SRST;
- fdiv = 4;
+ fdiv = 2;
if (pcr->TURBO_CLK & MCHP_PCR_TURBO_CLK_96M)
fdiv *= 2;