Support doing battery cut-off in firmware stage.
authorHung-Te Lin <hungte@chromium.org>
Thu, 7 Apr 2016 04:21:03 +0000 (12:21 +0800)
committerchrome-bot <chrome-bot@chromium.org>
Tue, 12 Apr 2016 12:49:26 +0000 (05:49 -0700)
commitaee6bd69fefac653cfc4a5679eb387d7c3280d14
treef2756467870078563b99904eebf32e6d93211b1f
parenteb0c8cc39bb268a7dc88ed616a564f4d46f77a2c
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>
firmware/2lib/2nvstorage.c
firmware/2lib/include/2nvstorage.h
firmware/2lib/include/2nvstorage_fields.h
firmware/include/vboot_api.h
firmware/include/vboot_nvstorage.h
firmware/lib/vboot_api_kernel.c
firmware/lib/vboot_nvstorage.c
firmware/stub/vboot_api_stub.c
host/lib/crossystem.c
utility/crossystem.c