mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-24 02:05:01 +00:00
Add a new crossystem value "battery_cutoff_request" to indicate that
next reboot should cut-off battery and shutdown during firmware stage.
This request is primarily for factories to ship devices in an safe
state. Previously we have done same thing by running "ectool battery-cutoff"
but that creates a problem which "ectool" (and the one to request for
cut-off) must live in developer mode while the device must be shipped
in normal mode. The mode transition was solved by setting
"disable_dev_request=1", but that flag is may get lost on x86 systems
(having NV storage in CMOS) when the battery is cut-off .
From the experience from Ryu, such settings (dev mode transition and
battery cut-off) should be done together inside firmware execution so we
can create a new flag, battery_cutoff_request, to finalize device
properly.
BRANCH=none
BUG=chromium:601705
TEST=emerge-chell depthcharge vboot_reference chromeos-bootimage
crossystem battery_cutoff_request=1
# Unplug AC adapter
reboot
# See device rebooted and then shutdown immediately.
# Press power button and system won't boot.
# Attach AC adapter and now system boots.
CQ-DEPEND=CL:337596,CL:338193
Change-Id: I73ccae15b337cd65786106646546c67c155b8fa6
Reviewed-on: https://chromium-review.googlesource.com/337602
Commit-Ready: Hung-Te Lin <hungte@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
80 lines
3.0 KiB
C
80 lines
3.0 KiB
C
/* Copyright 2015 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.
|
|
*
|
|
* Non-volatile storage bitfields
|
|
*/
|
|
|
|
#ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
|
|
#define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
|
|
|
|
/*
|
|
* Constants for NV storage. We use this rather than structs and bitfields so
|
|
* the data format is consistent across platforms and compilers. Total NV
|
|
* storage size is VB2_NVDATA_SIZE = 16 bytes.
|
|
*
|
|
* These constants must match the equivalent constants in
|
|
* lib/vboot_nvstorage.c. (We currently don't share a common header file
|
|
* because we're tring to keep the two libs independent, and we hope to
|
|
* deprecate that one.)
|
|
*/
|
|
|
|
enum vb2_nv_offset {
|
|
VB2_NV_OFFS_HEADER = 0,
|
|
VB2_NV_OFFS_BOOT = 1,
|
|
VB2_NV_OFFS_RECOVERY = 2,
|
|
VB2_NV_OFFS_LOCALIZATION = 3,
|
|
VB2_NV_OFFS_DEV = 4,
|
|
VB2_NV_OFFS_TPM = 5,
|
|
VB2_NV_OFFS_RECOVERY_SUBCODE = 6,
|
|
VB2_NV_OFFS_BOOT2 = 7,
|
|
VB2_NV_OFFS_MISC = 8,
|
|
/* Offsets 9-10 are currently unused */
|
|
VB2_NV_OFFS_KERNEL = 11, /* 11-14; field is 32 bits */
|
|
/* CRC must be last field */
|
|
VB2_NV_OFFS_CRC = 15
|
|
};
|
|
|
|
/* Fields in VB2_NV_OFFS_HEADER (unused = 0x07) */
|
|
#define VB2_NV_HEADER_WIPEOUT 0x08
|
|
#define VB2_NV_HEADER_KERNEL_SETTINGS_RESET 0x10
|
|
#define VB2_NV_HEADER_FW_SETTINGS_RESET 0x20
|
|
#define VB2_NV_HEADER_SIGNATURE 0x40
|
|
#define VB2_NV_HEADER_MASK 0xc0
|
|
|
|
/* Fields in VB2_NV_OFFS_BOOT */
|
|
#define VB2_NV_BOOT_TRY_COUNT_MASK 0x0f
|
|
#define VB2_NV_BOOT_BACKUP_NVRAM 0x10
|
|
#define VB2_NV_BOOT_OPROM_NEEDED 0x20
|
|
#define VB2_NV_BOOT_DISABLE_DEV 0x40
|
|
#define VB2_NV_BOOT_DEBUG_RESET 0x80
|
|
|
|
/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */
|
|
#define VB2_NV_BOOT2_RESULT_MASK 0x03
|
|
#define VB2_NV_BOOT2_TRIED 0x04
|
|
#define VB2_NV_BOOT2_TRY_NEXT 0x08
|
|
#define VB2_NV_BOOT2_PREV_RESULT_MASK 0x30
|
|
#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4 /* Number of bits to shift result */
|
|
#define VB2_NV_BOOT2_PREV_TRIED 0x40
|
|
|
|
/* Fields in VB2_NV_OFFS_DEV (unused = 0xc0) */
|
|
#define VB2_NV_DEV_FLAG_USB 0x01
|
|
#define VB2_NV_DEV_FLAG_SIGNED_ONLY 0x02
|
|
#define VB2_NV_DEV_FLAG_LEGACY 0x04
|
|
#define VB2_NV_DEV_FLAG_FASTBOOT_FULL_CAP 0x08
|
|
#define VB2_NV_DEV_FLAG_DEFAULT_BOOT 0x30
|
|
#define VB2_NV_DEV_DEFAULT_BOOT_SHIFT 4 /* Number of bits to shift */
|
|
|
|
/* Fields in VB2_NV_OFFS_TPM (unused = 0xf8) */
|
|
#define VB2_NV_TPM_CLEAR_OWNER_REQUEST 0x01
|
|
#define VB2_NV_TPM_CLEAR_OWNER_DONE 0x02
|
|
#define VB2_NV_TPM_REBOOTED 0x04
|
|
|
|
/* Fields in VB2_NV_OFFS_MISC (unused = 0xf0) */
|
|
#define VB2_NV_MISC_UNLOCK_FASTBOOT 0x01
|
|
#define VB2_NV_MISC_BOOT_ON_AC_DETECT 0x02
|
|
#define VB2_NV_MISC_TRY_RO_SYNC 0x04
|
|
#define VB2_NV_MISC_BATTERY_CUTOFF 0x08
|
|
|
|
#endif /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */
|