mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-30 18:41:11 +00:00
For some platforms like poppy/eve where a PMIC reset is required on reboot/panic to ensure a complete power-cycle of the AP, there is a drop on VCC power rail thus resulting in a loss of panic data. For such cases, provide API to backup panic data in BBRAM before performing a PMIC reset. Additionally, check for panic data in system_pre_init and restore if available from BBRAM. BUG=b:62076222 BRANCH=None TEST=make -j buildall 1. > crash divzero > panic === PROCESS EXCEPTION: 06 ====== xPSR: ffffffff === r0 : r1 : r2 : r3 : r4 :00000001 r5 :00000000 r6 :00000000 r7 :00000000 r8 :00000000 r9 :00000000 r10:00000000 r11:00000000 r12: sp :00000000 lr : pc : Divide by 0 mmfs = 2000000, shcsr = 0, hfsr = 0, dfsr = 0 2. > crash assert > panic === PROCESS EXCEPTION: 00 ====== xPSR: ffffffff === r0 : r1 : r2 : r3 : r4 :dead6663 r5 :000000a4 r6 :00000000 r7 :00000000 r8 :00000000 r9 :00000000 r10:00000000 r11:00000000 r12: sp :00000000 lr : pc : mmfs = 0, shcsr = 0, hfsr = 0, dfsr = 0 3. > crash watchdog > panic === PROCESS EXCEPTION: 3c ====== xPSR: ffffffff === r0 : r1 : r2 : r3 : r4 :dead6664 r5 :0000000a r6 :00000000 r7 :00000000 r8 :00000000 r9 :00000000 r10:00000000 r11:00000000 r12: sp :00000000 lr : pc : mmfs = 0, shcsr = 0, hfsr = 0, dfsr = 0 4. > crash unaligned > panic === PROCESS EXCEPTION: 06 ====== xPSR: ffffffff === r0 : r1 : r2 : r3 : r4 :200c0d9e r5 :00000000 r6 :00000000 r7 :00000000 r8 :00000000 r9 :00000000 r10:00000000 r11:00000000 r12: sp :00000000 lr : pc : Unaligned mmfs = 1000000, shcsr = 0, hfsr = 0, dfsr = 0 Change-Id: I95cdd55e260487903e089653a47d3995d177daed Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/530136 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
74 lines
2.5 KiB
C
74 lines
2.5 KiB
C
/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
/* NPCX-specific SIB module for Chrome EC */
|
|
|
|
#ifndef __CROS_EC_SYSTEM_CHIP_H
|
|
#define __CROS_EC_SYSTEM_CHIP_H
|
|
|
|
/* Flags for BBRM_DATA_INDEX_WAKE */
|
|
#define HIBERNATE_WAKE_MTC (1 << 0) /* MTC alarm */
|
|
#define HIBERNATE_WAKE_PIN (1 << 1) /* Wake pin */
|
|
|
|
/* Indices for battery-backed ram (BBRAM) data position */
|
|
enum bbram_data_index {
|
|
BBRM_DATA_INDEX_SCRATCHPAD = 0, /* General-purpose scratchpad */
|
|
BBRM_DATA_INDEX_SAVED_RESET_FLAGS = 4, /* Saved reset flags */
|
|
BBRM_DATA_INDEX_WAKE = 8, /* Wake reasons for hibernate */
|
|
BBRM_DATA_INDEX_PD0 = 12, /* USB-PD saved port0 state */
|
|
BBRM_DATA_INDEX_PD1 = 13, /* USB-PD saved port1 state */
|
|
BBRM_DATA_INDEX_VBNVCNTXT = 16, /* VbNvContext for ARM arch */
|
|
BBRM_DATA_INDEX_RAMLOG = 32, /* RAM log for Booter */
|
|
BBRM_DATA_INDEX_PANIC_FLAGS = 35, /* Flag to indicate validity of
|
|
* panic data starting at index
|
|
* 36.
|
|
*/
|
|
BBRM_DATA_INDEX_PANIC_BKUP = 36, /* Panic data (index 35-63)*/
|
|
};
|
|
|
|
/* Issue a watchdog reset*/
|
|
void system_watchdog_reset(void);
|
|
|
|
/*
|
|
* Configure the specific memory addresses in the the MPU
|
|
* (Memory Protection Unit) for Nuvoton different chip series.
|
|
*/
|
|
void system_mpu_config(void);
|
|
|
|
/* Hibernate function for different Nuvoton chip series. */
|
|
void __hibernate_npcx_series(void);
|
|
|
|
/* Check and clear BBRAM status on power-on reset */
|
|
void system_check_bbram_on_reset(void);
|
|
|
|
/* The utilities and variables depend on npcx chip family */
|
|
#if defined(CHIP_FAMILY_NPCX5)
|
|
/* Bypass for GMDA issue of ROM api utilities only on npcx5 series */
|
|
void system_download_from_flash(uint32_t srcAddr, uint32_t dstAddr,
|
|
uint32_t size, uint32_t exeAddr);
|
|
|
|
/* Begin address for hibernate utility; defined in linker script */
|
|
extern unsigned int __flash_lpfw_start;
|
|
|
|
/* End address for hibernate utility; defined in linker script */
|
|
extern unsigned int __flash_lpfw_end;
|
|
|
|
/* Begin address for little FW; defined in linker script */
|
|
extern unsigned int __flash_lplfw_start;
|
|
|
|
/* End address for little FW; defined in linker script */
|
|
extern unsigned int __flash_lplfw_end;
|
|
|
|
#elif defined(CHIP_FAMILY_NPCX7)
|
|
/* Configure PSL mode setting for the wake-up pins. */
|
|
int system_config_psl_mode(enum gpio_signal signal);
|
|
|
|
/* End address for hibernate utility; defined in linker script */
|
|
extern unsigned int __after_init_end;
|
|
|
|
#endif
|
|
|
|
#endif /* __CROS_EC_SYSTEM_CHIP_H */
|