summaryrefslogtreecommitdiff
path: root/chip/npcx/system.c
diff options
context:
space:
mode:
authorDivya Jyothi <divya.jyothi@intel.com>2015-05-14 10:11:13 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-06-14 22:18:34 +0000
commitb99f00b7f974faec2329f21100f72e0a332be1f2 (patch)
treec7602436bf5724e9dc841edb12caca752339c017 /chip/npcx/system.c
parent5ea69a7b3b06d8877fc0d420a6892b1db42cd290 (diff)
downloadchrome-ec-b99f00b7f974faec2329f21100f72e0a332be1f2.tar.gz
mec1322: Added support for sysjump.stabilize-7173.B
changes added to support flashrom are: sysjump support to be able to copy the RO/RW image and jump to it without causing AP to reboot while its alreday ON. LPC init should be reinitialized on sysjump corrected gpio_set_flags_by_mask to make sure we update the register only for GPIO_LOW condition and not all else conditions. BUG=chrome-os-partner:38103 TEST=commands : flashrom -p ec -w ec.bin flashrom -p ec -r ec.bin BRANCH=none Change-Id: I23892f0378d756052030e73034c3acdd41477e34 Signed-off-by: Divya Jyothi <divya.jyothi@intel.com> Signed-off-by: Shamile Khan <shamile.khan@intel.com> Reviewed-on: https://chromium-review.googlesource.com/272000 Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'chip/npcx/system.c')
-rw-r--r--chip/npcx/system.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/chip/npcx/system.c b/chip/npcx/system.c
index a103292e0e..e1ae1c134a 100644
--- a/chip/npcx/system.c
+++ b/chip/npcx/system.c
@@ -19,11 +19,6 @@
#include "hwtimer_chip.h"
#include "system_chip.h"
-#ifdef CONFIG_CODERAM_ARCH
-/* base address for jumping */
-uint32_t base_addr;
-#endif
-
/* Flags for BBRM_DATA_INDEX_WAKE */
#define HIBERNATE_WAKE_MTC (1 << 0) /* MTC alarm */
#define HIBERNATE_WAKE_PIN (1 << 1) /* Wake pin */
@@ -829,16 +824,25 @@ void system_lpc_host_register_init(void){
system_sib_write_reg(SIO_OFFSET, 0x30, 0x01);
}
#ifdef CONFIG_CODERAM_ARCH
-uint32_t system_get_lfw_address(uint32_t flash_addr)
+uint32_t system_get_lfw_address(void)
{
/* Little FW located on top of flash - 4K */
uint32_t jump_addr = (CONFIG_FLASH_BASE + CONFIG_SPI_FLASH_SIZE
- CONFIG_LFW_OFFSET + 1);
- /* restore base address for jumping*/
- base_addr = flash_addr;
+
return jump_addr;
}
+void system_set_image_copy(enum system_image_copy_t copy)
+{
+ /* Jump to RO region -- set flag */
+ if (copy == SYSTEM_IMAGE_RO)
+ SET_BIT(NPCX_FWCTRL, NPCX_FWCTRL_RO_REGION);
+ else /* Jump to RW region -- clear flag */
+ CLEAR_BIT(NPCX_FWCTRL, NPCX_FWCTRL_RO_REGION);
+
+}
+
enum system_image_copy_t system_get_shrspi_image_copy(void)
{
/* RO region FW */
@@ -847,17 +851,4 @@ enum system_image_copy_t system_get_shrspi_image_copy(void)
else/* RW region FW */
return SYSTEM_IMAGE_RW;
}
-
-/**
- * Set flag for jumping across a sysjump.
- */
-static void system_sysjump(void)
-{
- /* Jump to RO region -- set flag */
- if (base_addr == CONFIG_FLASH_BASE + CONFIG_RO_MEM_OFF)
- SET_BIT(NPCX_FWCTRL, NPCX_FWCTRL_RO_REGION);
- else /* Jump to RW region -- clear flag */
- CLEAR_BIT(NPCX_FWCTRL, NPCX_FWCTRL_RO_REGION);
-}
-DECLARE_HOOK(HOOK_SYSJUMP, system_sysjump, HOOK_PRIO_DEFAULT);
#endif