diff options
author | Divya Jyothi <divya.jyothi@intel.com> | 2015-05-14 10:11:13 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-06-14 22:18:34 +0000 |
commit | b99f00b7f974faec2329f21100f72e0a332be1f2 (patch) | |
tree | c7602436bf5724e9dc841edb12caca752339c017 /chip/npcx/system.c | |
parent | 5ea69a7b3b06d8877fc0d420a6892b1db42cd290 (diff) | |
download | chrome-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.c | 33 |
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 |