mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-24 02:05:01 +00:00
Support doing battery cut-off in firmware stage.
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>
This commit is contained in:
@@ -1082,6 +1082,7 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams,
|
||||
VbError_t retval = VBERROR_SUCCESS;
|
||||
LoadKernelParams p;
|
||||
uint32_t tpm_status = 0;
|
||||
uint32_t battery_cutoff = 0;
|
||||
|
||||
/* Start timer */
|
||||
shared->timer_vb_select_and_load_kernel_enter = VbExGetTimer();
|
||||
@@ -1138,6 +1139,17 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams,
|
||||
if (retval != VBERROR_SUCCESS)
|
||||
goto VbSelectAndLoadKernel_exit;
|
||||
|
||||
/* Check if we need to cut-off battery. This must be done after EC
|
||||
* firmware updating and before kernel started. */
|
||||
VbNvGet(&vnc, VBNV_BATTERY_CUTOFF_REQUEST, &battery_cutoff);
|
||||
if (battery_cutoff) {
|
||||
VBDEBUG(("Request to cut-off battery\n"));
|
||||
VbNvSet(&vnc, VBNV_BATTERY_CUTOFF_REQUEST, 0);
|
||||
VbExEcBatteryCutOff();
|
||||
retval = VBERROR_SHUTDOWN_REQUESTED;
|
||||
goto VbSelectAndLoadKernel_exit;
|
||||
}
|
||||
|
||||
/* Read kernel version from the TPM. Ignore errors in recovery mode. */
|
||||
tpm_status = RollbackKernelRead(&shared->kernel_version_tpm);
|
||||
if (0 != tpm_status) {
|
||||
|
||||
Reference in New Issue
Block a user